编程语言浅谈

写在前面

本来不想起起这么大名字的,因为语言层面的东西我现在去谈,去说,还是有些为时过早,毕竟在这个行业的浸泡还不够深,但是昨晚在跟以前同事交流该去学什么语言的时候,突然冒出来这个想法,为什么不趁机记录下自己现在对于编程语言的一些理解和一些看法,在以后有深入研究后,再回过头来看看。于是就有了这篇博文,自己获取信息有限。难免会有差错之言,就拿出来贻笑大方吧!

如果你在一门语言上沉淀了三五年后,大多会在脑子冒出一个想法,我是不是应该去学一门新的语言了,观察周围的程序员们,大多有产生这个念头,一方面是对于原来语言熟悉后的心理厌倦,另一方面也是基于IT行业日新月异的变化,周围的媒体,环境都会给你强烈传达的信息就是:你再不学习就更不上时代了。同时出现的各种语言以各自的卖点不停的向你忽悠,快来加入我们的社区吧,如此的你自然就站在了一个十字路口上,我该如何选择?主流的的C,JAVA,C++,PHP,Ruby,Python,小众的Scala,Erlang,Lisp;动态的,静态的;面向对象的,面向过程的等等,数不胜数!
那么如何取选择一门在主语言之外的语言就很关键了,以下就记录下自己语言学习的历程,和在期间所做出选择的缘由!

一 VB && Delphi

1.1初体验
最早接触编程是在大一的下半学期,因为拿到毕业证需要通过省的计算机二级考试,当时我们学校选择的是VB,好早的语言了,我估计现在的人都不会知道这门语言了,当时只是当做一门课业去学习,仅仅是为了拿到学位证而已,并不是很放在心上,谁知在五年后,自己会靠着编程来谋生,走上现在这条路!
VB是微软起家的语言,靠着VB这门语言,微软一步步从一个婴儿走向了现在的巨人,到现在VB在编程市场上还占据着大量的市场,但是在国内主流市场上,已经很难见了,特别是在互联网行业,有也是存在一些较特殊的行业,自己的第一家单位是自动化行业,那会还存在部分人使用VB来做工业仪器的通信,信号的采集等工作。
后来在大二的时候不知道那根筋抽了,去选修了Delphi,但是上课时候基本没怎么听懂,只是感觉这是很神奇的语言,后来知道Protel99也是用Delphi写的,就更觉得这是一门很牛逼的语言,可惜结果是自己还是搞不懂它,虽然我很努力,但就是学不会,感觉自己好失败加好笨,现在回想当时主要是自己内心对于语言的恐惧阻碍了自己去学习了解它,以后在学习C的时候存在同样问题,具体之后再表!

1.2缘起
就这样自己接触了这两门非常相似的语言,相似是因为那会的软件架构模式基本是上C/S结构,即一个运行在客户桌面的客户端软件,另一个是部署在企业内部的服务端(主要是数据库)。另一方面,既然是需要构建在客户桌面应用,那么对于开发者来说,必须有一个方便,简洁的构建界面UI的方式,而VB,DELPHI都采用的是拖拽式来构建UI,事件点击触发模式构建业务,非常的简单,而且那会互联网还未兴起,所以这种编程语言和架构模式对于企业级应用来说非常的合适。

1.3架构
架构层面来说,那会已经有了分层的思想,分层大体上分为两个方面:一是逻辑层面的分层,例如现在我们谈的最多的三层(四层)模型,另一方面是物理上的分层。对于采用VB,Delphi这种语言来说,物理上的分层就显而易见了:物理部署上分为客户端和服务端。
我们还是来看看逻辑上的分层,由于VB之类的语言特决定了,我们现在逻辑上三层模型都构建在物理上的客户端,而服务端只有一个数据库,若是对于领域层的逻辑非要运行在服务端的话,那么就只有存储过程了,这个也是为什么那时的招聘要求上一定会写上熟练使用存储过程,现在已经基本很少见了(题外话,翻翻以前的招聘要求,也可以管中窥豹的了解当时的软件趋势 ^_^)!
所以客户端基本承载了页面,逻辑,数据库访问等所有的工作,服务器只有一个数据库,而对于数据库的访问是通过控件封装好的,并不需要开发人员去过多的操心,这样简单的构建方式自然会推动VB,Delphi等语言的火热。

因为是一个用户一个客户端模式,所以随着客户的增长,随之带来的唯一一个压力在于服务器端的数据库,所以一个高性能的数据库是一个非常关键点,这样也可以解释为什么Oracle当年的崛起和强势。

多并发:这个问题在VB这种语言架构模式上下,基本不存在。可以夸张的说,基本不存在在内存中计算的场景,大部分操作都是展示数据库数据和直接操作数据中的数据,所以所有的事务都是通过数据库帮你保证了,所以关键点还是在数据库那里!

1.4逝去
这种模式在后来的逐渐消退也恰恰是这种语言特性所决定的,随着业务的增长,必然带来的是软件的增长,而将所有业务组件,界面UI都很简单的糅合在客户端的架构模式就会带来维护性上的困难,之后web的兴起带来另一种客户端方式的需求,那如何抽象相同逻辑就成为了一个大问题。

总结:C/S架构,可视化编程(拖拽式UI构建),事件驱动,良好的数据库访问控件封装,无逻辑分层的代码糅合,依赖高性能的数据库!

二 汇编 && C && C++

大学学的是自动化专业,自然难免会接触以上语言,使用汇编和C是因为我们的就业方向之一是单片机开发,那会接触的是51单片机、8081芯片,好亲切,熟悉的字眼啊,不过由于大学老师的不负责任也好,自己的不专心学习也罢,单片机基本只是摸了摸而已,C也是学的囫囵吞枣,不知其滋味。
这两门语言更偏向底层,它们期望解决的是业务和硬件之间的通信问题,所以开放了很多操作硬件的细粒度的接口。汇编自然不用说了,基本是Cpu,内存级别的指令,而C在此基础上抽象出了一个其他的语言级别上的概念,例如内存地址,结构体等。

细粒度的API,自然就我们需要在计算机原理之上去开发我们的应用程序,需要关心内存的回收和泄露问题,及如何写出更符合cpu特性的代码等等。所以在商业软件规模越来越大的情况下,很难简单,快速的开发出可维护性好的商业应用程序,当然C语言的难以维护是由其是门面向过程的语言特性决定的。

C++的出现就成为了必然,首先它引入了面向对象的概念,以对象的方式解决冗余代码的查找和抽取,提高可读性,同时提供了更多的语言级别的特性(虚函数,操作符重载,多重继承等)以满足我们实际的业务开发,并建立的一定的标准模板库,降低我们重复开发的成本!

但是C++的学习陈本实在过于高,没有两三年的积累,很难说是一个合格的C++程序员,同时它虽然提供了很多语言级别上的特性 ,但是还没有根本摆脱对于操作系统体系高度认知的依赖,这个也是其学习陈本高的缘由之一,也正是由于其的这种特点给了后来语言机会,实现了华丽的逆袭!

总结:对于以上的几门语言,自己并不是很熟悉,所以其中难免有偏差之言,就做个简单的总结吧,汇编和C主要解决的是同硬件之间的通信问题,无法适应企业级的商业开发要求!C++兼容了大部分的C语言功能,同时提供了更多的语法糖,但是还是停留在基于操作系统的简单封装上的实现,对于大量低级别的开发者来说还是有很大的门槛!

三 JAVA

这个世界的编程语言只有两种:人被机器所奴役的编程语言,机器被人所奴役的编程语言!
在已经介绍的语言中,VB,Delphi可以归属于后者,它们提供了可视化的编程界面,简单易用,汇编、C、C++归属于前者,它们要求开发者深入理解机器原理,并在此基础上开发,并根据机器的特点,写出更符合机器原理的代码,它们是可怜的,但是它们也是高效的,越靠近心脏的地方,血液的供给就越是充分。单纯的比较运行速度,没有其他语言能比得上它们。

这个世界上,鱼和熊掌总是不可兼得的,你在走向一个门的时候,自然理另一个门远了,所以若是有人将自己的天平偏向另一个门,自然会吸引大量的人群涌入,这个逆袭者就是–JAVA。
不得不说,Java是目前为止最为成功的语言,除了自身的j2me,j2se,j2ee之外,它还延伸了android手机开发语言,groovy,scala,jython,jruby等基于jvm的语言,它不仅仅是一门语言,更是一个生态圈,在发展的同时它还吸收了python,ruby等动态语言的特性,不停的壮大和完善自己,现在已经是一个很难撼动的庞然大物。

时势造英雄或是英雄造时势,我们姑且不论,但是成功的两个不可缺失东西是:运气和实力
web的兴起给了java外部机会,同时java这种基于JVM的解释型语言,屏蔽了底层操作系统的差异大大降低了低端开发者进入的门口,并且java提供了非常严格标准化的构建语法,静态检查等语言特性一下吸引了大量的软件开发者,这个时候的开发者们终于可以将自己注意力仅仅停留在业务开发上了,不需要去关心操作系统的一些原理,大大降低了软件从业者的负担,我们可以用两只手去将脑中的想法实现,也正因为这点,JAVA的社区出现了非常多的开源产品,推动了整个产业的发展,并延伸到其他语言,例如Spring也退出了C#版本等等。

可以说JAVA是伟大的,跨时代的一门语言,在一定程度上,向人奴役机器前进了一步,但是这种前进是需要付出代价的,早期JAVA性能是非常糟糕的,虽然后期一直在优化,但是还是无法同原声的C/C++进行比较。后来也提供了NIO等同底层操作对接的API,进一步优化它自身性能,但是对于大多数开发者来说,这个都不在其考虑范围之内。

总结:总的来说,JAVA解决了之前语言的最大问题:简单、快速的团队协作开发,所以它成功了!在初级层面上,JAVA走在奴役机器的路上,但是越深入了解JAVA,你会发现它还是慢慢滑向被机器所奴役的轨道上,这个也是商业语言所必然走向的趋势。

四 Python && Ruby

伟人们说:存在的东西必然有其合理性

这两门语言的出现并存活下来是有其缘由的。
其一:目前主要的服务器系统是unix和linux,那么在此系统上最基本需要掌握的是shell脚本,可以说脱离shell脚本,你什么都干不了,它提供了操作系统层面的API,所以很合适做简单的一些监控等操作,但是对于复杂的操作,就会显的很吃力,且代码很难被维护。所以python和ruby以自己强大的语法支撑了服务器端的复杂脚本处理!
其二:也正是由于他们强大的API支持,被迅速的应用到现在主流的互联网快速开发上,互联网的变化快速和竞争的激烈需要我们尽快的做出原型并推到市场,而这两者的丰富API支持了这点要求,例如ROR就是一个很典型的例子!

完美无缺的东西总是不存在的,你提供丰富的语法特性,是因为你做了很多的封装,过多的封装带来的就是性能的损失,所以它们两兄弟经常被人诟病的就是性能,其他语言想挑战它们也是从性能入手,例如后来的兄弟Go.

两者经常被人们归为一类,但是还是存在差异的。
python的设计哲学是一个事件永远只有一个解决方案,遵循的是unix的设计哲学(让程序只做好一件事),所以在python中能够提炼出最佳实践,代码的可读性高,且易维护,没有很大的认知陈本和选择陈本!
ruby的设计哲学是一个事件可以有多个解决方案,继承的是Perl的设计哲学,所以写Ruby能够写出天马行空的代码,经常带给人惊喜,它能够激发程序员的所有潜能。
目前的市场上ptyhon的生态圈还是较Ruby好,因为Ruby传入西方世界的时间还远远不够,并没有积累起很强大的第三方库。这个也是希望亚洲的开发者能够努力,强大起这门唯一起源于亚洲的语言。

再谈谈前段时间很火的Go语言,现在和未来是手机端的,但是部分的现在是WEB端的,目前的PHP,C#,JAVA,Ruby等都还在抢这块市场,冒出来的Go也是,它所主打的牌是较ruby,python高的性能优势,较JAVA,C#等的丰富,易用API,较C++等的低接入门槛。它的期望是解决之前出现语言的种种问题,希望能够呈现的是一种完美的语言,但是它解决其他语言的种种特性,但是没有具备其他成功语言的优点,不知道未来会走向何处!

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>