有人在 Slashdot 上问了一个问题:什么认证最好?( Best Certifications To Get?)提问者说他想在 IT 领域有所提升,所以想要考取一些有价值的认证,以便简历可以更好看一些。 Slashdot 上的人给出了很多回答,其中有一个回答很精彩,而且还被投递到了 Hacker News ,回答的原文在这里,我简单翻译如下(翻译仓促,建议直接阅读原文):

  我曾经是一名程序员,后来去做了日本的一名英语教师。日本是一个很有意思的地方,这里的学 生知道懂得很多英语,但是却不能在麦当劳顺利点一杯饮料。在编程领域也有一些这样的人,我们把他们叫做“语言律师”(language lawyers)。这种人可以回答有关编程语言的任何问题,但是却没有真实的编程能力;他们可以很容易通过面试,但是当他们真正编程的时候却非常令人失 望。这些程序员和我的学生非常像:他们有5000词汇量,知道书上写的所有语法规则,但就是不会说英语。

我现在的观点是编程就像写作。有关编程的很多概念并不困难,它之所以困难是因为我们不善于“写作”。大部分的程序员并不能做到“流利”,也没有写得 “流利”的意愿。他们不阅读别人的代码,不认识也不会使用“成语”,思维模式不是编程语言的思维模式(They don’t think in the programming language)。很多代码之所以烂是因为它的“流利”程度就好像3岁小孩写的小说。这也是为什么我们的程序呈现出不必要的复杂。

我们教授编程的方法是错误的,那种方式和日本的英语老师教授英语的方式如出一辙。我们只是传授有关编程的一切概念,然后期望学生可以从那些东西当中自发地学会如何编程。

在语言学习方面有一个假说:所有的语言只有在被理解的情况下才会真正被吸收。也就是说,如果你可以根据你已经知道的或者上下文理解你听到或读到的词 句,那么你就会吸收它。解释不能帮助你吸收语言。我相信这对编程而言也是正确的。我们应该让学生寖浸在好的代码中,让他们不通过解释来真正吸收编程的能 力。

我个人很认同这个回答中表达的观点。如果文中所说是真的,那么中国的英语教育和日本的英语教育实在没有什么差别,教的都是“哑巴英语”。我们学习英语 的时候都是偏重于“单词意思”、“语法”等东西,结果学习完之后还是中文思维,听到英文第一反应是先把它翻译成中文,然后再去理解它的意思。因为有了 “翻译”这个环节,听和说几乎都会慢半拍,怎么可能流利呢?编程也是一样,你的脑子里记的都是一些所谓的“代码规范”、“最佳实践”⋯⋯ 写代码的时候总是先想到这些,而且每每以“符合规范”为荣。我并不是说规范不好,但是如果你不能把这些规范“忘掉”,写出来的代码虽然没有什么毛病,但肯 定不会让人觉得很妙。一个写作的人如果在写作的时候总是念念不忘语法规则,也肯定写不出好看的文章。

语言是用来使用的,编程语言也是一样。不少人喜欢在那里死记硬背一些语言特性然后去和别人谈论,有时候还美其名曰“注重细节”,这对提高编程能力完全 没有用处。说来惭愧,我一直都是一个 language lawyer,编程书籍和文档都看了不少,但真正做出来的东西就实在太少了。有时候想要看别人的代码然后模仿,但是看懂别人的代码之后就觉得自己已经了 解,然后就失去了动手的兴趣。做东西也是一样,当我做到80%的时候就会发现剩下的自己都知道怎么做,于是很容易就半途而废。

“知道怎么做”和“真正去做并且完成”完全是两回事,知道所有的单词也未必可以写出一个优美的句子。希望以后在英语和编程学习方面都可以摆脱中国语言教育留下的坏习惯。