有时有程序员发 email 问我他应该学习什么语言,什么是最好的编程语言等等。 你至少应该精通一门编程语言,可以相当好的去编写代码,然后再去学习掌握另外一门,逐渐的成长。 以我自己为例,我精通 C#,擅长 PHP,并且已经开始使用 Ruby on Rails 大概有一两个月了。 为什么呢?精通一门语言可以使你进步,在进步中写更好的代码,找到完成任务更好的方法等。 进步也是我作为一个程序员年一年的工作,却仍没有觉得枯燥的原因。                                                  ——justjavac

提问:

houxinyou:我想问下,是只有学习掌握了另一门,才能成长,还是学习另一门语言,扩大了自己的视野,达到成长的目的?

回答:

justjavac:每个程序员都不只是使用一种语言。他们学习的语言也更多。我工作中使用java C这些『工业级』语言开发,很多代码和sql都是用python来生成的。

我也学过lisp语言,只是被他的思想所折服,但是没有用这门语言开发过项目。

现在的语言无非就是 『C语言的风格,然后慢慢增加lisp的思想』! 

现在你是否知道我们为什么要学习多种编程语言呢?

          enter image description here

              你可知巴别塔的寓意?

第一、

  Peter Norvig曾谈到他在编程上成功的秘诀之一:至少要学会六门编程语言。一种面向对象语言, 如Java或C++; 一种函数式语言, 如Lisp或ML; 一种支持语法抽象的语言, 如Lisp; 一种声明式语言, 如Prolog; 一种支持协同式编程的语言, 如Icon或Scheme; 还有一种支持并行的语言, 如Sisal。”

  Eric Raymond也表达过相似的观点:Python、C、Perl和Lisp除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益匪浅。

  编程语言会影响你思考问题方式,因为每种语言所包含的一系列特性——静态类型和动态类型、早期绑定与延迟绑定——都会鼓励你采用某种特定的解决方案。Raymond甚至认为,即使你并不真的使用Lisp,单是学习它就会让你成为更好的程序员——假如你只使用命令式语言,但只要头脑中思考着函数式方案,写出的代码也许就会不同。John Carmack在“用C++进行函数式编程”中就谈到过他的体会。

  维特根斯坦曾说“语言的界限就是我与世界的界限”,当你新学会一门编程语言,才有可能领略由这门语言搭建起来的软件世界的精妙。松本行弘曾经谈到,他在设计Ruby时,Emacs带给他极大的灵感,假如他不曾深入研究Emacs Lisp,我们看到的Ruby不会是今天的样子。

  所以,掌握和了解更多的编程语言,对每个程序员来说都是必要的。

第二、

  随着对计算机程序的需求越来越复杂,计算机语言也在发展演化。每隔20年左右,老的编程范型就会变得不足以应对一些组织和表达思想的新要求。新的范型必定会涌现出来,但这并不是一个简单的过程。每个新的编程范型都会引入一批编程语言,而不仅仅只是一种语言。最初的语言往往具有惊人的生命力,但也很不实用。比如面向对象编程语言Smalltalk或者函数式编程语言Lisp。接下来,其他范型的语言会加入一些新特性,允许开发人员在采用新概念的同时也可以安全地使用原先的老范型。例如Ada语言,它能够在过程式语言中使用一些面向对象的核心思想,比如封装。某些时候,一些混合语言恰恰是搭建在新老范型之间的一座实用的桥梁,比如C++。紧接着,你将看到一些可用于商业应用的编程语言,比如Java或C#。最后,你才会看到新范型的一些成熟且完整的实现。

第三、

  了解多门语言蕴涵的思维方式,在编码中互相借鉴,再挑出一两门对自己口味的语言深入学习,这些已经成为在软件行业中安身立命之本。从这个意义上说,每个程序员都应该学习不止一门语言。

给大家推荐图书

  图灵今年5月份出版的一本《七周七语言》,这本书在豆瓣有140人评价,平均分为8.4,在各大网店的书评多的有几百条,少的也有几十条,借用互动网购买者的评价:“它的价值不在于让你学会7种编程语言,而是让你知道编程语言的世界绝不仅仅是单一的C家族,而是有那么多完全不同的风景等你去发现。在欣赏这些风景的时候,你的思维、视野会被大大地拓展。”这本书中介绍了Ruby、Io、Prolog、Scala、Erlang、Clojure、Haskell这七种新近的语言。用新的语言来提高一下自身的实力,了解一下业界先进的技术,相信你会从书中的某些观点中得到启发。

当当网评价:

enter image description here

京东网评价:

enter image description here

互动网书评:

enter image description here   读完这本书,如果你对编程语言这个话题本身感兴趣,还可以阅读探讨编程语言特性的进阶书,比如《程序设计语言:实践之路》。此外,一些语言中极有用但更高阶的技巧,在这本书中并没有探讨。假如你想见识Clojure中宏的威力,可以阅读Paul Graham的《On Lisp》,网络上还可以找到将这本书示例用Clojure改写的版本。

  《程序员修炼之道》的作者David Thomas鼓励程序员每年学习一门新语言,所以在读完这本书之后,请不要停下你继续学习其他编程语言的脚步。

本文由justjavac发表在ITeye的文章和《七周七语言》的书评及网店评论构成。