关于高级语言,C语言,C++,VC和JAVA,我的一点感想

在科幻小说《三体》中,刘慈欣写道:

---- “当鱼从陆地上来,它已经不是鱼了;当人类进入太空后,他就不是地球人了

----”把海弄干的鱼在海干前上了陆地,从一片黑暗森林奔向另一片黑暗森林。

我深以为然。C语言一但在语言特征上想具有面向对象的特征,那么就不称其为C语言了。C++ 一旦封装上了微软的MFC,也就不是C++了,同样,JAVA用上了各种框架,也就不再是JAVA, Python带上了各种包,还能算Python吗?我们 在写算法呢?还是在学别人写好的的算法接口?为了追求简单,我们不断地封装,在不断增加的套子中迷失,为了追求光明,我们从一片黑暗森林奔向下一片黑暗森林!

在计算机世界,我们也是这样一路走过。从机器码到汇编语言,从汇编到高级语言,程序员的目标是追求更加简单的设计。UNXI诞生了,C语言作为系统级的最佳语言,随着UNIX的进步逐步普及,以其简单的语言特征征服了计算机界,成为使用者最广的语言,就像英语之于人类世界一样。UNIX的设计理念是简单(但不简陋),KISS原则(Keep it Simple, Stupid)大概对应着中文里所说的”大道至简“吧。

JAVA追求比C++更简单、更安全。也的确做到了,但在企业级应用的过程中,由于各种框架的加入,多数JAVA程序员已经忘记或者从没有想到JAVA不用框架也可以用得很好。从一定程度上说,框架成就了JAVA,也害了JAVA,带着框架的JAVA就象带着MFC的VC++,无纯粹可谈。

唯有C语言,还保持着那么纯洁率真的本性,一个标准库,精简的语法,最小的编译系统,等等,使C语言通行在单片机、嵌入式到单机、服务器、网络整个计算机世界中。

C语言至今是任何其他语言无法替代的,成为其他语言模仿的对象,我想,其根本原因是,根植于系统底层,无为而无不为,以简易的直接的方式向用户提供全方位的操控手段。其中的每个语句或基本函数,就象电路里的分立元件,不封装,而提供单一的功能,从而实现最广泛的复用。

在UNIX/LINUX那里,由千千万万个独立的单功能的模块组成,多一个不多,少一个不少,你可以自由裁剪,那是一个自由的世界。况且,linux是以最简洁的内核去应对最复杂的应用: linux下的内核API共300多个(开发驱动才用得到),加上 Linux所有的C的API个数是279个,共600个,如果不开发驱动,则用不到三百个C函数就能搞定。

而在Windows这里,总的Windows API 数量为接近3000个, 并且Windows API 的参数很多, 类型复杂,不可能记住!加上MFC又对Windows API封装了一次,导致程序员疲于奔命,迷失在微软的手册中,为一个GUI界面耗费大量时间,忘记了算法才是真正要做的事!不可否认,Windows想给用户一个美丽而简单的操作界面,也确实在很大程度上做到了这一点,但代价是:一、牺牲了稳定性,特别是做服务器时,GUI崩溃也将导致服务崩溃;二、MFC采用面向对象的思想后,繁复难用,导致程序开发用在用户界面上的工作量大大高于核心算法。我认为,开发算法程序,最好远离VC++, 甚至要远离C++。开发数据接口和机-机界面就好,不要去纠缠人机界面(特别是图形化操作GUI)的事。

人机界面如何处理?现代的方法是:人机界面定位在前台,信息处理定位在后台,前台的一切交给浏览器吧,后台在服务器端,做机-机交互的命令行模式最好。在服务器端让GUI见鬼去,在用户端,让GUI限制成浏览器里。通过网络提供服务的模式,实现应用与应用之间,应用与操作系统之间、应用与机器硬件之间最大限度的解耦。

应当认为,面向对象始终是一种思想,而不是一种语法,OO的核心就是为了解耦,但不会是唯一的方法。在语言内部(也就是代码内部)反复封装、继承,不是件好事,继承带来的危害远超过好处,甚至我不主张函数间多重调用。那样的程序在理解上、维护和升级上都困难。一个程序,就实现一个功能就好,但要把这个功能做到极致

我认为,理想的解耦(特别是在服务器端算法程序中),应在OS级上或网络级上,通过文本化的(如xml,json等等)格式进行数据交流,从而形成更大的功能系统。理想的状态是:去规范模块间的数据交互接口,做到每个程序模块(每个服务的提供者)都是可替代的(或都有可替代的简单方法或可能性)。

面向对象从上世纪90年代流行以来,实践了近三十年,但关于语言级上面向对象的问题,不是所有人都持赞成意见,有许多名家也提出过自己的看法,值得我们深思:(以下引自 http://harmful.cat-v.org/software/OO_programming/

“有时,优雅的实现只需要一个函数。不是一个方法。不是一个类,不是一个框架。只是一个方法。” — John Carmack(id Software 的创始人、第一人称射击游戏之父)

“我一度曾经迷恋上了面向对象编程。现在我发现自己更倾向于认为面向对象是一个阴谋,企图毁掉我们的编程乐趣。” — Eric Allman(sendmail 的创造者)

“面向对象”这个词包含很多意思。有一半是显而易见的,而另一半是错误的。“ — Paul Graham(美国互联网界如日中天的教父级人物)

“面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而其还有整个丛林。” — Joe Armstrong(Erlang 语言发明人)
  
“面向对象编程是一个极其糟糕的主意,只有硅谷里的人能干出这种事情。” — Edsger Dijkstra (图灵奖获得者)

“实现上的继承就跟过度使用 goto 语句一样,使程序拧巴和脆弱。结果就是,面向对象系统通常遭受复杂和缺乏复用的痛苦。” — John Ousterhout( Tcl and Tk 的创始人) Scripting, IEEE Computer, March 1998

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值