不只是学语言,更要领悟其文化
上大学时,我必须学一门外语。那时我觉得自己英文已经很不错了,所以就选择了睡过三年的法语课。几年后我去突尼斯度假,那里的官方语言是阿拉伯语,由于曾经是法国殖民地,所以法语在这里用得也很广泛,英语则只在观光地带使用。由于我语言不通,只好仅限于在游泳池旁边读《芬尼根守灵夜》, James Joyce在语言形式上的杰作。Joyce对40多种语言的有趣的融合,让人惊叹同时也使人疲惫。意识到将外语单词和短语交织在一起是怎么给作者提供一种新的表达自我的方式,这是我在编程生涯中一直牢记于心的。
Andy Hunt和Dave Thomas在他们开创性的作品《 程序员修炼之道:从小工到专家》中,鼓励每年学一门新语言。我一直尝试遵循他们的建议,多年后我已经有了很多种语言编程的经验。我在多种语言的冒险中体会到的最重要的经验就是,学习一门新语言,不只是要学的语法,要领悟其文化。你可用任何语言写Fortran,但要真的学一门语言,你就要领会它。不要为你的C#代码中的带有大量静态的helper方法的冗长Main找借口,而要研究为什么要用class。当你在理解函数式语言的lambda表达式时有问题,不要逃避,而是强迫自己使用。
一旦你领悟了一门新语言之道,你就会惊讶地发现自己开始用全新的方式使用已会的语言了。我通过Ruby,学会了怎么在C#中有效地使用委托;通过发掘.NET泛型的全部潜能,找到了让Java泛型更加有用的方法;LINQ让我在学Scalable时轻而易举。
你在不同的语言中切换时,也会更好地理解设计模式。C程序员发现C#和Java商品化了迭代器模式。Ruby和其它动态语言中你可能仍需一个visitor,但实现起来可能不像GOF那本书中的例子。
有人可能会与《芬尼根守灵夜》无法阅读,而另外的人可能在为它文体之美而鼓掌赞赏。为了让那本书不至于吓退读者,是有单一的语言的版本的,意想不到的是,这些中的首选是法语版的。代码在很多方面也相似。如果你写这种代码,里面混合了一点Python,一些Java,少许Erlang,项目就混乱不堪了。如果你坚持探索新语言以扩展视野、获取新的灵感来用不同的方法解决问题,会发现用你可信的旧语言写的代码变得比每种新语言写的都更加漂亮了。
原文:Don't Just Learn the Language, Understand its Culture by Anders Norås