在各种技术论坛上,甚至有些知名的的网站引用的文章中,常常有对各种开发语言的比较,也常常伴有论战,而且“激烈”,“残酷”。今天,我结合自己几年来的开发经验和对部分开发语言的使用及了解来说说自己的观点。
观点其实就一句话“存在即合理”,每种开发语言都有自己的特点,利弊,适用领域。我个人接触最多的是c++语言,也做过纯c语言,java,js语言的企业级开发,也有过python语言的学习。
C
C是unix的母语,很显然,也是各种类unix系统的母语(linux,mac os...),windows内核的绝大部分代码也是由C开发的,他几乎垄断了计算机工业中所有的系统编程 。C的生态环境中主要是要求速度快并且有实时需求的程序,或者与OS内核有紧密联系的程序(比如驱动程序)。说到C的缺点,毫无疑问是内存管理。其他也有一些我认为的缺点,开发效率偏低,库相比其他语言较少,代码的组织管理复杂。
再看看C能带给我们的:几本经典书籍都是用C语言来当事例代码的,如《深入理解计算机系统》,《APUE》《UNP1》.....,出名的开源代码有linux内核,我读过snort和tcpdump的源码,感觉质量也是上上层的,可以从中汲取很多东西。
有关C的学习,一本《The C Programming Language》(C编程语言)[Kernighan-Ritchie]足矣。
C++
感觉他是争议最多的编程语言,作为C的超集,据说本来他是打算解决C噩梦般的资源管理的,结果没解决,但是可以用RAII及智能指针一类的方法加强资源管理。其次,C++强大的功能也让人广为诟病,不是说嘛,千万别在简历上说“精通”C++,否则会被人耻笑。有这么一段著名的评论这样描述C++“狗被钉上软肢而变成的章鱼”,连 Linux之父炮也轰C++“糟糕程序员的垃圾语言”。但是我认为C++最好的地方也是他的强大,OO思想,泛型编程,强大的库支持(STL,boost),知名界面库(QT,WTL,MFC...)。C++的生态环境中主要是GUI,多媒体工具包和游戏。
对于学习C++的书籍和方法,结合自己的经验来说吧,我看过C++之父的《The C++ Programming Language》(c++编程语言)[Stroustrup],进阶看的是《effective c++》《more effective c++》《efficient c++》“boost库的文档和事例“;开源主要是看chrome的开源代码。其中还接触过一个开源程序infrarecorder,其中有WTL的使用和一个ckcore库的使用,感觉都挺不错。
对于c++我认为在中国还有一个优势,相比C职位而言,c++的职位会更多。
Java
热门和普及的程度一直很高,感觉一是源于他接近拥有”一次编写,到处运行“的目标,二是大家都觉得java相比其他主流语言学习曲线平滑,容易上手。java的最大优势还是在于自动的内存管理,而这恰恰是C和C++的梦魇。其实我对java最大的感触是他让我更好的,更深刻的理解了某些设计模式,拜赐于他的完全OO。java的生态环境现在主要是作为web开发的后台,android的大热也带动了java的兴起。谈到java web开发,我觉得了解struts,spring,hibernate是很有必要的。很多人经常拿C#和java类比,我想C#开发效率再高,不具有跨平台性也注定成为他的死肋(虽然有第三方框架可以让其实现跨平台,何必多此一举呢,用java多好)。
java在中国的就业方面也颇有优势,同样java方向的人才也多,最近刚和我一个专门搞java的朋友聊过,他一直在面试java人员,可是到现在还是两手空空,他就一句话”大多都是低端人才“。
js
js给我最大的感觉就是它的强大,web开发(jquery),高性能网络服务器(node.js),游戏...,我个人就觉得js的未来会很光明。