在xiyoulinux论坛上 http://groups.google.com/group/xiyouLinux,说起语言,deramhead说起Ruby语言,Wang Cong认为在I/O方面,Ruby比不上Perl和Python,于是关于语言话题的讨论就展开了:
Deramhead:
语言,不是仅仅靠性能说话的。
程序设计语言,是架在实际问题和计算机之间的一座桥梁。回顾一下,计算机程序设计语言的发展,从汇编到C、到C++、到Java,再到最近开始流行的动态程序设计语言,不难发现语言的发展实际上是越来越接近问题领域。因为现在机器越来越强,所以,人的时间往往比机器的时间更为宝贵,所以,人们在高性能和高开发效率之间做一个折衷。大家最为熟悉的例子可能就是从C/C++到Java的发展吧!Java用GC替代了C/C++手工内存管理,这就会极大的提高软件开发的效率,因为大家不必再把大多数时间关注在内存问题上了,而内存问题往往是需要花费很多时间去解决的。
事实上,谈到性能问题,并不是说越高级的程序设计语言就一定会慢很多,就像最初用汇编的人质疑C,用C/C++的人质疑Java一样,最开始可能会慢一些,随着大家对这个语言/平台的关注,这个语言/平台就会不断的得到改善。所以,现在通常的说法是,一般C编译器生成的代码比一个普通程序员用汇编写出来的代码性能要好。
Ruby之所以受到广泛的关注,一方面是因为人们确实需要一种更为高效的开发工具(这个过程仍在继续之中,目前没有压倒性的胜利者),另一方面,Rails这个Web开发框架向人们展示了如何利用Ruby高效的开发软件。如果你有机会尝试Java开发,再去体验一下Rails,二者在开发效率上的差异,让程序员的生活会轻松很多。
软件开发中,有一点很重要的,就是强调程序本身的表达能力。在真正的软件开发中,除了要完成功能外,还要考虑与其他人的协作,所以,仅仅完成功能是不够的,还要考虑代码的可读性。Ruby语言本身具备很强的表达能力,这也是很多人选择它的一个重要原因。用Ruby写出来的代码往往会很简洁。这有助于让后来者(或是后期维护者)更好的上手。现在另外的一个发展趋势是DSL(Domain
Specific Language)。我们之前的程序设计语言,更关注于通用的开发,DSL的含义是让代码为更多人理解,也就是说,让一些非开发者更容易理解,这就需要DSL本身具备更强的领域含义。在这点上,Rails向我们展现Ruby在这方面具备了能力。这是Ruby被很多人看好的另外一个原因。
Ruby的性能,从某种角度上来说,确实不够好,但另一方面,也取决于你开发的目标。对于一般的脚本而言,Ruby的性能足够应付大多数日常的脚本开发。对于一些真正的高性能运算,很多时候,还是要回到C/C++的老路上去。不过,正如我前面阿提到,一旦一个语言/平台得到关注,它就会有很好的发展。Ruby也在进步之中,Ruby1.9已经发布了,里面采用了一个新开发的虚拟机,程序运行性能得到了大幅度的提升。有人尝试过,甚至好于Python。
对于正在念书的学生而言,目标不同于实际开发项目。所以,从学习的角度来说,我更推荐学好一些基础性的东西,比如,C语言。有了一个不错的基础之后,再去学这些所谓的新东西要快很多。我很喜欢一句话,勿在浮沙筑高台。
关于C语言,我(Chen)和Dreamhead的交替看法:
Chen:
关于语言,我一直在困惑,C为什么经久不衰。
我们上学时主要学的是Pascal语言,数据结构,编译,操作系统的作业都是用Pascal写。那时,西电的老师要求,编程序前,首先是画流程图,与语 言无关,也就是思路在先,比如学数据结构,我们每个人至少做5个大作业,老师改作业,主要看流程图,至于语句的对错,那是机器的事了。因为那时用的机器 是刚刚出世的8086,机时紧张,因此,编程时不可能坐在机子前,一般上机前,把思路理顺,程序写好,甚至要确保尽量没有编译错误,一旦有了编译错误, 也没有时间在机子前修改,打印出来回来修改。这样的过程,现在看起来老土落后,但正是这样的过程,让我们养成了面对一个问题,不急于编程,思路在先。
作为教学,Pascal比较适合。曾经的很多算法都是用类PAscal描述的,但为什么Pascal没落而C高温持续呢?当然,C的后继者C++使得C 有了继承人,但我觉得,能直接操作硬件,使得汇编语言退居三线,在不得已时才粉墨登场一下,这使得单片机应用,工业控制,航空航天领域都留下了C的重墨,经年积攒,程序越来愈多,而作为开发者,谁愿意轻易抛弃已有的东西呢?
Dreamhead:遗留系统只是一个方面的原因。还有许多新开发的项目依然会采用C语言。原因有很多,比如,会C语言的人很多,招聘这个方面的人才很容易。技术方面,很多项目真正需要高性能,C还是一个不错的选择。对于很多嵌入式方面的东西,C语言也是当之无愧的选择。因为C几乎是最容易移植的,C语言本身对现今计算机模型最好的概括。
Chen:其实,不管怎么说,语言是工具,它将服务于所做的事情。因此,现阶段,对大家来说,不在于学多少种语言,精通一种就足以,语言背后的核心还是算法和解决 问题的思路,那是语言无关的。当目前各种语言和工具扑面而来时,大家更应当静下心来,不被诱惑。
Dreamhead:最近半年左右的时间,在项目中接触了很多不同的程序设计语言,C#、PHP、Action Scritp、Ruby等等。虽然语言有所差异,但最终都会走到同一条路上来。对于我们公司的人来说,我们都是一样的采用敏捷软件开发的方法,比如,都是采用测试驱动开发的软件编写方法。对于在工程上,可以接触到的程序设计语言,思路上基本上是类似的。思路上稍微有一些不同的可能是像Lisp之类的函数式程序设计语言。
Chen:另外,关于Linux的使用,其实可以贯穿于所学的很多课程,比如,数据结构,编译原理,操作系统等课程的上机,完全可以在Linux环境下进行,这 时,你不会感到为学Linux而学。
还是那句话,这个世界很纷繁,但到你手上的就那些,姑且抓住它吧。
Dreamhead:对于我自己而言,真正使用Linux,也是最近一年左右的事。Ubuntu,是一个非常好用的桌面操作系统,使用起来很方便,而且随着新版本的不断发布,配置也越来越简单。对于软件开发而言,Linux(准确的说是Unix)是一个非常好的选择,因为它提供了许多有助于开发的工具。
事实上,Unix源于程序员,所以,它对程序员的支持是非常好的。如果希望学习编程,Unix能够让人体会到软件开发中真正精髓的一些东西。