语言进化论
相比较开发工具的世界大战, 计算机语言之间的竞争要显得安静和优雅的多。
从语言看, 80年代之前,PC没有流行, 计算机语言只是被用来工业用、商用和军用大型机以及科学计算中。成名的是Fortune, Cobol, Ada等等。直到苹果和PC的出现,计算机语言,才和普通程序员有了关系。
汇编
其
实不能算一种语言,
因为它只是机器语言的符号化。就像我的毕业设计,仅仅是把机器码加上不同的寻址方式,映射到相应的符号而已。但这是我大学里第二喜欢的语言(第一是C),
因为它太强大了,它可以简单的让你的BIOS清零,改变显示模式,或者是让你的机器再也不能工作:p 那时不可能接触商业应用,
因此最喜欢的,也就是开发游戏做这种神奇的事情, 因此汇编用的很多。所以我考高程的时候,汇编完全没有复习,我选的编程题也都是汇编的。
Basic
的前身是大名鼎鼎的Fortran,也许是Fortran太过精密了, 他的创始人G. Kemeny
和Thomas E. Kurtz
才在1964年创造了Basic。
这
是我最最早接触的语言,但是它要比C更高级,因为它是解释型的。它不会直接被编译成汇编而像c那么容易伤害系统。它是为最基础的编程者设计的,
因此叫做“Beginner's All-purpose Symbolic Instruction Code”.
那时候完全是用来教学生用的。他没有复杂的语言特性,更没有OO,非常简单,而且人机交互很好,你可以边写边运行。
我见过和用过的Basic有Apple上的Rom Basic, Dos上的qbasic、IBM Basic, 长城紫金机上的GWBasic,
Basic优秀的图形API使它很容易编写游戏程序,这是Apple和DOS搭载Basic的原因。后来的Visual Basic其实已经和那个时代的Basic没多大关系了, 只是语法比较像而已。
现在让我们怀念的Basic, 应该只是Apple上那个最初和我们见面的Basic,和使用它编写出的各种飞机导弹吧。
C/C++
是曾经最叱咤风云和最受争议的语言。
C
语言的前身是B语言, 它是Unix的开发者-Bell Labs的Dennis Ritchie和Ken
Thompson在1970为UNIX开发出的。C在1972同样由这两位科学家研发成功,1980年ANSI
C正式成为C语言的第一个标准。现在所有的C 编译器都支持ANCI C.
从1983年c with class正式改名C++开始, C++一直独领风骚, 直到java出现。90年代末期,尽管BS改进了STL, ANSI-ISO出版新的c++标准, 但是C++的劣根性导致它已经不适应现代IT对软件开发的效率和可靠性的要求。
C++的劣根性
1.
首先,C/C++直接和OS打交道的方式使他过于危险。它几乎没有任何约束的操作内存,文件系统和各种设备。程序员直接面对OS的结果是每个人都可能造成
系统的崩溃。C/C++程序员最痛苦的经历可能就是查各种引起程序崩溃的bug,可能是数组越界,可能是空指针, 可能内存copy越界,
也可能是OS的API使用不当,甚至是因为使用的OS
dependant的exception处理机制。C++的不可靠性使得它不再适用于一些非常关键的地方,比如航天航空控制程序。
2.最令C程序员烦恼的另一件事可能就是内存泄漏了。C对内存的操作完全由程序员控制。所以,C++程序有可能到处充满着因为没有释放内存造成的无底洞。
3.STL
用了及其复杂的方式来实现, 这是我非常不明白的。STL虽然提供了一些好处,
但是,每当你不得不trace进STL的代码时你会因其代码的复杂度望而却步。包括STL的interface也不太友好,
显得神秘而复杂。STL的初衷应该是给程序员带来方便,但是BS这样的超级牛人,是很难指望写出正真“简单”的东西给人用的。
4.C++号称支持
OO, 但是充其量他只是支持"OO", 而不是纯OO的。对于人类来说, 如果你不约束它,
那么你的期望是会落空的。因为这等于将OO还是不OO的选择交给了程序员,但是,交给人类太多的选择不是一件好事,况且你都知道什么是好什么是坏时你还不
强制程序员使用好的。因此我们看到的C++程序都是OO和非OO混用的,或者是C和C++混用的, 这还不如不支持OO,
应为这样的程序更加混乱。所以, 当我开始适应JAVA时, 我觉得终于长出了一口气,
"这才是正真显得简单和方便的语言“。因为我们不需要再选择使用OO的写法还是非OO的写法。人都用惰性,
只要你给他选择,他一定会选择简单的非OO,而在高兴时才废脑筋写一点OO的东西。
5. C++的标准其实来的很迟,98年的标准很多弊病,
2005年又出了TR1.
这些都已经不能影响C的前途了。各个厂商在实现C++时都添加了自己的特性和细节,这也是C++标准不够严格造成的。所以即使你完全使用标准C编写的程
序, 还是不能在多个OS上简单的编译通过,而是一定要做很多改动。
6. C++的预编译指令一样把过多的事情交给了程序员。其实大多数的这些预编译指令都是C++标准应该负责的,而应该对程序员透明。更加不应该被写在程序里。程序里面应该只有逻辑。
7. C++被诟病最多的, 可能是他的重用性了。不管是lib,dll,dom/dcom还是什么东西,用到最后,还是直接copy 代码来的简单。
那些都是垃圾。因为C++缺乏像java那种对命名空间的管理。你甚至没有办法让你们的那么多模块和别人的不重名。应用别人的模块时,充斥着重复定义或找不到符号的错。Dll Hell就是程序员的地狱。
写
这么多C/C++的缺点,
其实因为我曾经是C/C++的狂热爱好者,从进大学开始,就开始自学,我的记得大二才正式教C语言,C语言和数据结构是我两门唯一超过90分的课程。即使
在我很久不用C的时候,我还是会怀念使用它的那段日子,
和它给程序员带来的乐趣。因为它的运行速度那么高效,它有那么多奥秘可以研究。我写NCSE(new C script
engine)的潜意识里,可能也包含着要改进C语言的冲动。
其实我们最热爱的,应该是纯C,在C++出世之前,它的代码还是那么的单纯和优雅。当然,系统复杂到一定程度,完全面向过程的C才开始显现它的不足。
Java,
1990
年时, sun公司为自己的OS研发的C/C++语言,烂到了让SUN的程序员无法忍受的地步, 于是,sun的创始人首席科学家Bill
Joy打算在C++的基础上开发出更容易使用的语言。java之父James
Gosling,一开始打算修改和扩展C++,最后放弃而决定开发一个全新的语言。(这是明智的选择,我一直认为很多东西到了一定时间是必须重新写一个,
而无法再升级或者扩展的,就像windows,就像SAP那个很幼稚很假的NetWeaver和背后其实很旧很真的Abap Rx)。
这
个全新的语言开始不叫java,叫做OAK,
他被用于SUN为微波炉等智能家电开发的嵌入式操作系统。直到1995年,不可阻挡的internet大潮,让sun决定把这一语言用于浏览器,才在
sunworld大会上正式以“java”的名字发布。1996年,JDK1.0诞生。
可以说, java是因为嵌入是系统而被怀孕的,是因为internet而出生的。
java
虽然不是C++直接的子孙,
但是它的血脉里留着的完全是C++的血。它其实就是C家族的全新成员。它的出现,也完全是出于C++的诸多无法克服的缺点。比如不完全面向对象,
没有内存回收,直接面向OS等等。Java几乎解决的了所有C家族上一代的问题。但是它有自己的问题 - 太慢。
java的推行是在1996年,我在上物理大课,坐在最后一排的我们几个同学, 却在传阅一份电脑报还是什么报纸,上面整版的介绍新的即将风靡全球的语言-java。因为几乎所有的OS都已经宣称支持Java,号称这一神奇的语言将全面取代C/C++。
但是,直到21世纪初,我们还是很不喜欢java的,虽然在北美可能java已经很热。特别是java在出了j2ee以后。但是,缓慢的速度,和奇怪的UI API,让人对它完全提不起兴趣。
直到我们中国的诸如电信局,证券交易所, 基金公司,都直接要求使用J2EE的时候,我们才不得不使用java。但仍然只是在web上使用,app层仍然使用C++,只是用JNI封装成java接口供java调用。但是JSP同样也不觉得比ASP好用。
直
到进入SAP,设计完全有德国人说了算, 我们再也没机会用C了,才只好完全使用java开发。但是SAP庞大,缓慢并且不稳定的NetWeaver
AS(它的内容是j2ee实现的好几倍),让人不堪忍受。而且JAVA和C不一样的是,用VC只要有MSDN就什么都搞定了,但是java有无数的
spec要读要学,每样东西都搞很多新的很复杂的概念,JSR不停的出,而程序员最不喜欢的就是看这种东西了。为了偶尔能享受一点编程的乐趣,
我不得不业余时间再改改以前的C程序。
在被迫使用了多年java之后, 终于对它开始有点喜欢了。因为如果抛开这么多繁琐的框架和概念的话,java语言本身确实还是有一定优越性的。
他最大的优越性就是解决了C++无法解决的重用性, 你可以任意的使用别人写的模块,而几乎不用做任何担心。其次,是你不必再担心它崩溃了, 即使他崩溃了, 也不是你的错:p
至于它是OO的,这勉强也可以算作java的优越性之一。因为OO本身还是颇具争议的。
脚本语言
快
速但是低级的C退下巅峰,严谨但是缓慢而沉重的java也开始慢慢跟不上时代的发展。特别是Web2.0誉满全球之后。跟上快速变化的应用开发才是硬道
理。java和C++时代的三层甚至N层架构,
在web时代,显得那么的笨拙。开发效率和运行效率之间的平衡问题变得史无前例的重要。Web,游戏开发等等领域,外围框架都已经定好,比如游戏
server,比如http server, 更本没必要接触OS,和调用所有OS层的API,
也完全没有必要理会编译过程。所需要的只是描述好逻辑而已。
而且,更重要的是快速运转的软件生命周期,不必停机就能看到运行结果的代码。
所
以,语言已经到了必须细化到各个领域的时候,没有一种语言适合所有场景。
适合所有应用的语言必然会太泛而使用起来不够高效。因此游戏使用自己的脚本语言定义游戏内容, Web浏览器使用js实现逻辑,web
server使用php、perl,asp,jsp等各种脚本语言来实现逻辑。
从本质上说,脚本语言是当某种系统发展到一定程度,它的
内部逻辑复杂多变到不适合写死在程序里的时候, 用另一种运行在这一系统中的脚本来实现逻辑,达到满足系统灵活性要求的语言。比如运行在Web
Server上的asp,jsp,php,ruby等,比如运行在Quake中的C, 运行在其他游戏引擎中的lua和python.
所以,脚本语言其实比java等高级语言已经又高出了一个等级。
战争
80年代是AppleII和DOS统治的时代,因此Basic和汇编成为主要的应用开发语言,但是都很不友好。TP的出现让人耳目一新,真正了解了什么是“开发环境”。从而Borland的产品几乎统治了整个DOS时代。
90年代是Pascal、basic走向没落,C和汇编欣欣向荣, java还在襁褓中的时代。
90
年代末直到最近, java占据了半壁江山,从桌面应用到网站,企业应用各个领域,
java以其优越的跨平台特性和完美的OOP特性,曾赢得全世界开发人员的青睐。同时,在web和游戏浪潮的推动
下,php,perl,python,ruby等脚本语言成为崛起的新军。
但是非常可惜,java被sun的老头们毁了,我一直这么认
为,在j2ee出现的时候,在Java2出现的时候, 就开始了。我觉得他们太学者了, 就像Bjarne StrouStrup一样,
傲慢而缺乏对现实软件开发世界程序员们底层工作的体验。所以,我也认为2000之后的Bjarne Stroustrup,其实也是在拖C++的后腿,
还好有boost这些草根发展起来的类库,让c++世界总算有些进步。我写java,纯粹是因为工作原因, 因为SAP用JAVA,
因为电信和基金公司等等非常有钱的公司喜欢缓慢而复杂的J2EE,而其实SAP用java也是因为顶端市场的客户非常喜欢J2EE,为什么他们喜欢
J2EE,可能是因为它支持Unix、linux,和IBM,HP和SUN以及其他中间件厂商的竭力推广java,
为什么他们极力推广java,因为那样才可以让客户升级硬件和"服务"
:D (当然, 这是我的个人看法, java fans们不要砸我:P)
我喜欢java的地方是, 他的代码非常干净工整,非常容易做代码生成工具和其他的refactoring/revers enginerring等等。相比之下,其他语言显得比较乱,不容易被机器读,所以,就代码而言, 作为程序员我还是比较喜欢Java的。
但
是,Steve Jobs就是不愿意让iphone运行java,他在一次访问中对记者说"Java’s not worth building in
[to the phone]. Nobody uses Java anymore. It’s this big heavyweight
ball and chain."
最近,听说一个Big news, 就是SAP打算放弃java,换句话说,SAP
从2002年收购inqmire开始,所有花在java stack上的数十万人月将付诸东流。SAP VMC(java vm 集群),JCO,
J2EE application,
webdynpro,portal,XI,乃至整个NetWeaver和AP(见我以前的blog"SAP技术概述”),都可能要放弃或者重写。这个消息
太冲击了。如果是真的话,只能说,SAP也太有魄力了。另一方面,
德国人似乎确实一直不太喜欢java,他们还是喜欢自己的ABAP和C(ABAP比java更工整数倍,比较符合德国人的个性),整个SAP把工具从
ABAP转向java的所谓“NetWeaver"运动,应该就只是Shai Agassi父子在倡导, 如今Shai
人走茶凉,SAP的老头子比sun更多,他们从来就不买MS和sun的面子,所以回归ABAP也不是一个完全出乎意料的事情。
我一直没
有用过C#, 因为工作中没有用到。据说c#和java差不多, 但是我相信一定会比java好用,
因为C#不是开放的,微软没有像sun一样只管制定一个比一个复杂的RFC和spec, 而离应用越来越远, 并且放任java
社区混乱的进行各种framework的开发。 因而C#和.Net产品化程度会比较高.
2000年之后,
脚本语言得到广泛的发展。Quake有自己的C脚本, 和我在Stockstar开发的NCSE(new c script
engine)差不多。随着web的蓬勃发展,弱类型的脚本语言php,perl,python,ruby,js等等也迎来了自己的春天。他们成为web
开发者的最爱。但是,
自由的语法让代码比较难于维护,也不容易像java一样从设计直接导出代码或者从代码做refactoring或者reverse
engineering。但没有关系,
web上的主要矛盾是需求的快速变化,需要的工具非常“轻”。因此,非常需要脚本语言这种不需要编译,不需要重启服务器,learning
curve相对较平,总体比较Lightweight的语言。
而企业级开发,主要矛盾在于系统的稳定,可靠,可扩展,可定制和更高的安全性等等。产品化程度要求较高。因此需要Heavyweight 的java。事实上这一领域也已经被java占领。
桌
面应用,是一个非常令人感兴趣,
但是非常令人头疼的问题。他的主要矛盾,是UI,数据集中,和跨平台,但是目前仍然没有非常好的语言可以选择。因此,这个领域的大战正越来越近。我的看
法,是会走内嵌浏览器+local web server+internet
server的套路,因为这样UI可以使用html/css来进行快速开发,UI通过访问local web
server实现逻辑和解决数据存贮和同步问题,
逻辑可以使用任何一种脚本语言实现。整个方案是跨平台的。这是一个我一直看好的解决方案。不过微软和Abode也在这领域推出了如Adobe
Air等新的产品。
手机和嵌入式系统的应用方兴未艾,但我不看好java在这个领域的前景,C仍然是这个领域目前的选择。因为手机上性能很关键,而且java在UI方面的api一直很烂。
从
80年以前的C和ASM平分天下, 到90年代的C++独领风骚,到本世纪初C/C++,C#, JAVA三分天下的局面,在最近几年已经在有所改变。
每种类型的语言都在他们擅长的领域攻城略地,独霸一方。不停的有新来者抢走地盘。C/C++, java,
C#这三个传统豪强,虽然近年来失去不少领地,但是其霸主地位和实力还是难以撼动的。
-------------------------------------------------------------------------------------------------------------------------------------------------------
战后总结:
Basic就像一个小学生,顽皮可爱,但是不能做大事。
Pacal就像一个老师, 严谨优雅,风度翩翩。
汇编就是远古神秘的巫师,现在已经很少人懂它了。
C/C++就像一位大侠 ,功成名就,技艺高超,无所不能,但是稍嫌复杂,有些飘忽不定,比较难管理,和有些跟不上时代。
而java仿佛一个一丝不苟的工程师,可以建造高楼大厦,但是有些过于严谨,做事经常上纲上线,在一些小应用,总觉得java的做法太大动干戈了。
脚本语言是武功秘籍是代代相传的邪派豪门,武功诡异而高效,并且可以极短时间练成。
总而言之, 语言是随着应用需求的发展不断发展的。了解你的需求,选择正确的语言,是每个设计师要做的。
-----------------------------------------------------------------------------------------------------------------------------------------------------
从整个开发世界来看,分为逻辑和数据。计算机语言实现了逻辑,各种数据协议实现了数据的存储,访问和变换,比如各种网络协议,加密协议,各种文件格式和编码格式。数据实现的发展是另一条非常重要的主线,这个以后再讲。
十年(一)
十年(二)
十年(三)
相关推荐
达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论达尔文进化论
本文提出,对人类语言进化的理解需要从语言类型,形成和学习的角度对语言进行全面的理解,并就具有不同语言能力的各种人种物种的出现对人类生物进化进行全面的理解。 本文提出语言神经力学和人类生物语言的发展。 ...
生物进化论自19世纪中叶由查尔斯·达尔文提出以来,一直是生物学领域的重要理论,经历了150多年的发展和完善。尽管其基本概念和理论框架已经被广泛接受,但是生物进化的物理化学基础和分子生物学机制这两个核心问题...
吴晓波写的 《腾讯传1998-2016:中国互联网公司进化论》TXT文字版
这个问题从人类诞生之初就一直盘桓在古人的脑海中。不管是神造说还是其它一些假说,或者是宗教信徒们的信仰,都不能正确地揭示生命的起源,相对前者,达尔文的学说却真正的让人们了解到了生命的起源。本文从生命起源...
遗传算法是一种优化技术,灵感源于自然界中的生物进化过程,尤其是物种的自然选择和遗传机制。在计算机科学领域,它被广泛应用于解决复杂问题,如旅行商问题(TSP)、作业调度(Job-Shop Scheduling)等。下面我们将...
腾讯传1998-2016:中国互联网公司进化论-吴晓波著作,写的挺不错
视频网站进化论.doc
数字进化论_——中国企业数智生态解析下载
《生命游戏》是一款深受复杂科学和生物学研究领域专业人士喜爱的生命模拟游戏,它巧妙地将进化论的原理融入其中,让玩家在游戏中体验生命的演变过程,理解并探索智能的起源。这款游戏不仅娱乐性强,更是寓教于乐,...
创始人进化论20231222
2018-09-19_A股“进化论”:新生态、新均衡、新方法
本文将从语言的神话起源和哲学基础入手,追寻进化论的挑战,并探讨语言的两大基本属性,即统一性和多样性,递归性和思维性,以进一步研究语言之间的关系。及其生物学基础,即从语言和言语器官,语言和思想到语言和...
区块链技术进化论.pdf
区块链技术进化论.docx
“互联网+”时代辅导员工作进化论.pdf“互联网+”时代辅导员工作进化论.pdf“互联网+”时代辅导员工作进化论.pdf“互联网+”时代辅导员工作进化论.pdf“互联网+”时代辅导员工作进化论.pdf
中国独角兽进化论.pdf
A股进化论20系列报告(三):周期进化,制造“优先”-0725-广发证券-29页.pdf
MINI速学院进化论.mp4