战国时代---编程语言杂谈(3)
3.3托管语言
如今编程世界有两大对立的阵营Java 和 .NET,C#是.NET平台的主力编程语言,所以托管语言就是Java和C#的对决了。不过在编程语言单挑之前,我更想谈谈统一平台的意义和两大平台的比较。
平台比语言更重要。Java运行在Java虚拟机JVM之上,C#运行在公共语言运行时CLR之上。平台好比是国家,Java和C#就是各自国家的王牌主力精锐军队。战争不仅仅是军人的对决而更多的是两国综合实力的较量。Java运行平台的出现绝对是一个创举,尽管Sun公司可能一开始并没有意识到它会如此成功,当然也不可能意识到在Java成功之时自己却会被收购的命运。“Write once Run Anywhere”的理念让Java宣扬的深入人性,但是我却觉得统一平台的最大意义其实并不在于跨平台。因为绝对的跨平台本身就很难有意义,想让PC、网络和智能手机的程序都是一模一样是不现实的。毕竟自然地哲学就是允许多样性。那么统一平台的意义是什么呢?其实统一平台的意义就是在于提供了一站式的编程解决方案!在Java出现之前有着各种各样的编程方式,单单微软自己的windows平台上就有C/Win32API、C++/MFC、Delphi、Visual Basic 6.0等等,后来还冒出个COM。纷杂的编程解决方式让人眼花缭乱也无从选择。此时Java借着网络的东风适时的出现了,统一的开发平台为程序员提供了强大丰富的组件类库,配合着面向对象的Java程序设计语言大大的提高了程序的开发效率。就在Java将要一统江湖时,微软推出了.NET和C#迎战。尽管有关谁抄袭时的江湖争论直到现在还是纷扰不休,但是我觉得托管语言的发展是大势所趋,微软已经搞出的COM就有统一的意思,只是制作的太过于复杂。而且个人认为Java从MFC中就学到不少东西的么,譬如那个CObject。。。再说了,自然地哲学是偏爱多样性,当然不能过多,两个势均力敌的刚刚好。统一平台的出现也符合软件工程发展的思想,更多的开发工具和框架已经做好的,程序员做的就是组件级开发,开发效率大大提高。
现在该是Java和C#的正式交锋的时候了,Java出道时是大大简化了C++语言,摒弃了C++的很多复杂繁琐的功能,提供了垃圾回收机制,牺牲了部分性能,减轻了程序员的负担。同时Java强化了面向对象机制,几乎可以号称是纯面向对象的编程语言了。伴随着Java一起兴起的还有轰轰烈烈的开源运动,Java是开源的,这几推动了Java的进步,也推广了Java的应用。而现在Java也受到了不少的质疑,例如Java语言更新太慢,一些遗留的问题没有解决。其实我觉得Java存在这样的问题也是有原因的。首先,Java毕竟是第一个平台语言,作为一个开拓者,出现个把个问题也是在所难免的。其次,Java在企业开发大规模应用后,单纯编程语言的更新速度就放缓了,可能也是为了顾及兼容性吧,不过在此期间JVM却做了不少非改进,另外Java工具框架的开发上也有不小的进步。最后一个原因是Java平台的各种开源动态语言发展的欣欣向荣,从某种方面说也影响着Java的权威。总之Java本身是追求简单的平台编程语言,但是现在也开始慢慢的走向复杂,走向功能更加强大。
C#一出现便带有很大的争议性,Java阵营大骂C#抄袭了Java,就连微软阵营自己在面对刚刚出现的.NET时也并不是那么理直气壮。但是微软还是闷声闷气坚持着自己的.NET战略,而C#在完成对Java改进后,如将基本数值类型也纳入面向对象体系,成为编程语言中的纯爷们---纯面向对象的程序设计语言。同时也还增加了支持重载运算符操作等Java摈弃的C++特性。同时C#又往更高层次的方向发展。C#3.0加入Lambda表达式及相关特性支持函数式编程,推出LINQ高级特性,为业界赞叹。C#4.0又增加Dynamic关键字开始支持动态编程,再加上C#甚至别出心裁地在一个unsafe里支持指针操作,oh,卖疙瘩!C#成为一个几乎万能的语言了,当然这也必须.NET CLR的支持。由此可见C#又走向了和Java 不同的方向,那就是复杂功能强大。C#语言或许代表着编程语言的发展趋势,那就是走向多范式融合化,提高程序员的开发效率,而把程序运行效率等复杂问题交给平台去处理。
然后想说说Java和C#背后的故事,那就是Sun和Microsoft两个IT巨人的故事。严格的说现在Sun公司已经不复存在。Sun是开源世界的鼎力支持者,Microsoft则是传统封闭的代表。如今Sun被另外一个封闭的Oracle收购,Microsoft依然坚挺,但是已经开始慢慢变得开放。开源已经被证明不是不能赚钱,而且还有可能非常赚钱,不然IBM也不会把它的PC业务卖掉了。Sun之所以杯具,更多的就是公司自己的决策失误了。虽然说没有了Sun的Java在开源的支持下依然能够向前发展,但这也或多或少的增加了一些变数。具体未来如何发展还要我们拭目以待。
最后谈谈程序员技术路线选择。俗话说“男怕入错行,女怕嫁错郎”,可见职业生涯的选择对于一个男人来说是多么的重要。目前来说Java和.NET两台平台并没有谁有压倒性的优势,而未来鹿死谁手也是个未知数,在一段时间内两大平台的对战还将继续下去。因此致力于做应用开发的程序猿们不得不面临技术路线的选择,尽管说技术知识是相通的,但是要从一个熟悉的技术平台转换到另外一个,其成本还是比较客观的。那么选择技术路线的原则是什么呢?我觉得首先是兴趣,然后再看你要选的技术路线和你之前的有没有联系,或者说放不方便你学习新的东西,保持技术的连贯性是比较重要的。对于我来说,一开始接触了点C语言,然后看完了《C++ Primer》,接着又研究了MFC,而且也比较喜欢微软的技术领域,所以也就顺利成章的进一步学习C#和.NET。这学期有个Java课,我就是先看C#然后复习Java的。当然选择一个技术路线并不是说就一定要在一棵树上吊死,程序员员应该有开放的视野和积极学习的心态!
                    
                
                
            
        
浙公网安备 33010602011771号