P.S: 这篇东西源自对贾捷阳同学昨天的留言的思考,无针对任何人之意,请理性阅读。再者,我说的也不一定是对的,欢迎批评。很少写那么严肃的文章,见谅见谅。
什
么叫”有前途“呢,是可以赚很多钱,又或者是可以对IT界做出很大贡献?这里姑且现实一点,将它定义为”有钱途“,甚至更具体一点,定义为”能找到一份好
工作“,并且承认学好一种程序设计语言是找到一份好工作的必要条件,也不能就此认定”学C#或JSP有前途“,因为你学的这种语言必须是一种好的语言,而
判定一种语言是好是坏,要从三方面考虑:语言特性是否强大、 library 支持是否丰富、是否足够流行。
从语言特性这个角度看,你很难将 C# 和 JAVA 称为强大的语言,因为它们的冗余度太高,表达能力差,用它们写程序很容易就制造出数千行代码的怪物,不信你不妨试试写这个程序:输入2个数及一个操作符。根据输入的情况得出相应的结果。等到 C# 和 JAVA 程序员也能给出像
(define (Foo op x y)
(op x y))
一样优雅的答案时,你才能称他们为强大的语言(需要 first-class function,现在 Python 和 Ruby 以及许多新生代的动态语言都支持)。
从 library 支持这
个角度看,C# 和 JAVA 都有很丰富的 library,但由于它们都运行在一个语言无关的虚拟机之上(.NET CLR 和
JVM),所以这跟语言本身没有太大关系——在 .NET 平台上我可以用 IronPython,在 JVM 平台上我可以用 JRuby,
Clojure (LISP 的 JVM 实现),Jython, Groovy, Scala, Rhino (Javascript 的 JVM
实现)——完全没有必要理睬 C# 或 JAVA。
从流行度这个角度看,C# 和 JAVA
依赖的是商业流行度,不是社区流行度,这与现今的大部分流行歌手类似,即它们的流行是因商业需要。把自己的技术生涯寄托在两家公司的商业利益上,显然不是
明智之举,因为商业产品是需要不断地更新换代的,当这些被捧红的语言(歌手)不再能为商人们带来利润时,今日的宠儿就会成为明日的弃儿。昔日的
FoxPro, Visual Basic, Delphi
就是前车之鉴。另一方面,依赖社区流行度发展起来的语言就没有这种忧虑。它们通常因个人需要而被创造出来,之后得到社区的支持而不断完善成熟,若将
C#, JAVA 之流称为大教堂式的产品,那么 Python, Ruby, Perl 和 PHP 这类语言就是集市型的产物。
注意:以上观点仅仅是从语言本身的
好坏出发,并没有考虑应用环境。在实际开发过程中,不同语言之间往往不存在好坏之分,只有适用与不适用的区别。要性能,首选当然是
C/C++;要快速原型,就应当考虑 Python 和 Ruby 这类动态语言;要大规模并行运算,Erlang
会是最靠谱的选择;要做文本处理,也许学学 Perl 也不错(虽然它很丑)。
再次注意:仅仅学好程序设计语言是远远不够的。程
序设计语言是用来控制计算机和模拟现实问题的——要控制好计算机,对计算机本身的了解是必不可少的,必须学习操作系统、编译原理、网络、数据
库、数据结构与算法、编程范式等等一系列的原理和技术;要准确地模拟现实问题,则要具备一定的数学功底和 problem solving
的技能——这些东西是与特定的程序设计语言无关的(而且大部分都是大学计算机专业的必修课程)。除此之外,对于日常开发所涉及的工具
(正则表达式,命令行工具……),也要能够熟练地使用,否则当你面对”从一堆文件中找出所有特定格式的电话号码“这样的问题时,就会不由自主地写出2500行的C++程序来解决它。
最后给出一点点建议。如果你刚刚开始学习程序设计,请仔细阅读以下这几篇文章: