在各种技术论坛上,甚至有些知名的的网站引用的文章中,常常有对各种开发语言的比较,也常常伴有论战,而且“激烈”,“残酷”。今天,我结合自己几年来的开发经验和对部分开发语言的使用及了解来说说自己的观点。
观点其实就一句话“存在即合理”,每种开发语言都有自己的特点,利弊,适用领域。我个人接触最多的是c++语言,也做过纯c语言,java,js语言的企业级开发,也有过python语言的学习。
C是unix的母语,很显然,也是各种类unix系统的母语(linux,mac os...),windows内核的绝大部分代码也是由C开发的,他几乎垄断了计算机工业中所有的系统编程 。C的生态环境中主要是要求速度快并且有实时需求的程序,或者与OS内核有紧密联系的程序(比如驱动程序)。说到C的缺点,毫无疑问是内存管理。其他也有一些我认为的缺点,开发效率偏低,库相比其他语言较少,代码的组织管理复杂。
再看看C能带给我们的:几本经典书籍都是用C语言来当事例代码的,如 , .....,出名的开源代码有linux内核,我读过snort和tcpdump的源码,感觉质量也是上上层的,可以从中汲取很多东西。
有关C的学习,一本 (C编程语言)[Kernighan-Ritchie]足矣。
感觉他是争议最多的编程语言,作为C的超集,据说本来他是打算解决C噩梦般的资源管理的,结果没解决,但是可以用RAII及智能指针一类的方法加强资源管理。其次,C++强大的功能也让人广为诟病,不是说嘛,千万别在简历上说“精通”C++,否则会被人耻笑。有这么一段著名的评论这样描述C++“狗被钉上软肢而变成的章鱼”,连 Linux之父炮也轰C++“糟糕程序员的垃圾语言”。但是我认为C++最好的地方也是他的强大,OO思想,泛型编程,强大的库支持(STL,boost),知名界面库(QT,WTL,MFC...)。C++的生态环境中主要是GUI,多媒体工具包和游戏。
对于学习C++的书籍和方法,结合自己的经验来说吧,我看过C++之父的 (c++编程语言)[Stroustrup],进阶看的是 “ “;开源主要是看 。其中还接触过一个开源程序 ,其中有WTL的使用和一个ckcore库的使用,感觉都挺不错。
对于c++我认为在中国还有一个优势,相比C职位而言,c++的职位会更多。
热门和普及的程度一直很高,感觉一是源于他接近拥有”一次编写,到处运行“的目标,二是大家都觉得java相比其他主流语言学习曲线平滑,容易上手。java的最大优势还是在于自动的内存管理,而这恰恰是C和C++的梦魇。其实我对java最大的感触是他让我更好的,更深刻的理解了某些设计模式,拜赐于他的完全OO。java的生态环境现在主要是作为web开发的后台,android的大热也带动了java的兴起。谈到java web开发,我觉得了解struts,spring,hibernate是很有必要的。很多人经常拿C#和java类比,我想C#开发效率再高,不具有跨平台性也注定成为他的死肋(虽然有第三方框架可以让其实现跨平台,何必多此一举呢,用java多好)。
java在中国的就业方面也颇有优势,同样java方向的人才也多,最近刚和我一个专门搞java的朋友聊过,他一直在面试java人员,可是到现在还是两手空空,他就一句话”大多都是低端人才“。
js给我最大的感觉就是它的强大,web开发(jquery),高性能网络服务器( ),游戏...,我个人就觉得js的未来会很光明。
不说别的,知名的”豆瓣“就是用python开发的。据说也是google的三大语言之一。python的生态环境主要是构建协议机器人和网络管理工具,也非常适合web CGI任务,也适合做工具软件。现在我偶尔会用python做简单的测试工具,感觉目前国内对python的重视程度不够,很少有用他来做企业级开发的。
以上讲了几种我较熟悉的开发语言,每种语言都有利弊,也有自己适用的领域,他们虽然在使用者,使用项目多少上能排出个座位名次,但是我觉得他们存在的意义同样伟大。
正在看 这本书,目前这是市面上唯一一本如此细致详尽的介绍一个语言的设计哲学,演化过程的书籍。在开篇Bjarne Stroustrup就说自己会避免去说哪门语言好,哪门语言不好,因为这样有失公允,也着实没必要。各个语言只有在特定的条件下才有合适不合适之说。
所以我的第一个建议:看看你今后的职业发展方向如何,如果你是做嵌入式,选择C;如果你是搞ios,选择object-c;如果你是搞后台服务器,选择C/C++。
还有 这本书也对语言选择有自己的看法,要选择沉淀下来的语言。因为有些语言只是昙花一现。所以我的第二个建议:如果入手的话还是选一个沉淀下来的语言比较好,因为这会让你知道程序设计语言的历史。
第三个建议:至于主流语言比较,推荐你从 这本书中“第14章——语言”来找答案。
最后一个建议:学东西千万不要人云亦云,要学会自己去思考。
本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/911129如需转载请自行联系原作者