作者从可怜的汇编语言开始学习、应用计算机编程,几十年来涉足过商业软件、工业软件及大型互联网系统的开发,本文试图从多个层面、多角度对C,C++,C#,Java,Go(Golang),Python等主流编程语言进行简单的对比,便于初学者、项目甲方理性选择合适的开发语言。
注:编程语言没有几代的说法,只有应用场景的不同。Matlab(其中的m语言可以算“类”编程语言)、SQL 不能算常规意义上的编程语言。
很多年以前大声疾呼大家学习C/C++,而不是Visual Basic,效果不好,大家更愿意相信不会编程的大学老师、培训教师与流行书籍的建议,但事实是,学习VB者最先被淘汰。现在大声疾呼大家学习C#,不知应者几何?
1 困难的选择
人的选择与行为决定于目标。
选择语言如同选择 武术门派 或 趁手武器,须考虑近期目标与长期目标:
(1)完成学业 或 本职工作
一旦入了门派,BOSS(帮主 或 甲方)说用啥就学啥,你没有自主权。
(2)增加未来 就业 或 跳槽 的选择面
最好什么语言都懂点。入丐帮最好!
其实表面上看,每种语言都差不多,成为一个万金油比较好!
(3)因喜欢而编程(华山论剑?)
建议选择从C#入门,C/C++、java 、python等均可迅速掌握。
因而,本文是写给立志于成为一个程序员的读者。
2 靠谱的建议
人的一生,你的周边充斥着各式各样的、多数不靠谱及少靠谱的编程建议。
从那些途径获得编程语言的建议,比较靠谱呢?
(1)学校老师(本帮帮主)
不太靠谱。
老师们(作者曾经也是大学老师,说话有一些发言权)的编程主要是为了完成论文、出书、做课题和评职称,大多没有能力与经验参与商业化软件的开发,正如“前门的把式——中看不中用”。他们是好老师,但都大多不是合格的程序员。
(2)培训机构(马路卖艺者)
特不靠谱。
培训机构(出版社)基本上是哪个热门就培训哪个,宣传哪个,出版哪个,集中精力以培训、辅导、出版、视频等方式尽快攫取商业利益为目的。至于这个语言是不是好,,以能不能赚钱为唯一选择标准。
(3)技术部门前辈(前辈)
这个凑合。最好是20年以上从业经验的,不一定要找大厂的。大厂程序员的综合能力一般都比较差,懂架构的不善于编程,懂编程的无架构思维。
来自于中、小型技术团队的Leader最有发言权。
(4)最好的老师是问题,是练功
所谓练功就是你想解决什么实际问题?实现什么功能?
然后没完没了地去实现、去完善、去升级与改版。
写这句话的时候,想起《少林寺》中李连杰提水桶的画面。
当然不是为了本职工作 或作业。只要放弃害人的游戏、无聊的电视、无脑的短视频,不长的时间,你就是编程高手。语言其实不重要了。
3 选择的因素
3.1 论选择
人的一生 = 无数次错误的选择90% + 很多不明不白的迫不得已的选择9.5% + 极少正确的选择0.5%
理性的选择 = 方程组(各种选择因素)
感性的选择 = 抓阄(或翻硬币)
无论是理性的 或是 感性的 ,实际上都无法确认是否一定正确,更别提是不是最好的。然而,火车毕竟到站了,都得下车,下车再说吧。
最失败人的首先输在不敢选择;次之也是可悲的,是没有权力去选择;稍好的是选择了错误的选择;再稍好的是做了选择也未知结果;没有更好的了。
比好只是酒桌文化,比烂才是殊途同归的真实生活。
3.2 选择的因素
以下的文字是对于试图将编程作为生活技能而言的,理性的选择。
3.2.1 适用性(系统、性能与场景)
语言的适用性主要考虑编程能力要覆盖哪些:(1)操作系统,Windows All或指定版本?Linux什么版本?Unix?Andriod?iOS?(2)高性能需求场景或没有性能需求的场景;(3)应用模式:PC桌面应用?浏览器应用?手机或平板桌面?(4)高交互式应用,比如游戏,或低交互性应用如web服务器监控程序。
如果将语言比作武器,C/C++是佩刀——练武之人常备武器,python是飞镖——玩着热闹却杀不了人,Java/C#是剑——侠客必备的实用而飘逸之器,go是大刀——看似强大干不了很多细活,而且刀柄握在google手里。
3.2.2 生态(组件与开源)
语言生态是指可以获取的语言规范、指南、公开资料、组件与支持、技术社区的成熟度、开源代码质量与数量等等。简单地说,生态就是能够获得资料或代码的质量与数量。
生态与历史密切相关,C/C++的生态是最好的,代码与资料可信度很高;pyhton的生态也不错但大多限于AI领域,而且代码质量一般,无法工业应用;java生态很好,不过大多局限于互联网应用;C#的生态最好,其组件大多由工业化或商业化软件开发商提供,开源代码质量最高,世界上绝大多数商业化与工业化的软件及顶尖游戏都选择C#作为开发语言。
3.2.3 开发环境
编程的最终结果是可以被用户使用的产品,其核心需求无非三条:(1)好用;(2)好看;(3)稳定。
因而大家都追求好的开发环境,期望将时间更多花在算法等核心代码上。
选择具备良好开发环境的语言是明知的选择。
Visual Studio & Visual Studio Code 无疑已经是绝尘之马。
3.2.3 团队开发
团队开发的核心问题是代码可重用、低成本维护。
3.3 选择方程组
选择方程组从更细节的方面给出一写对比,供大家参考。
以下表格为作者经验与一面之词而已。
3.3.1 按软件的系统层级
3.3.2 按操作系统
3.3.3 按用户角色
3.3.4 团队开发适应性
3.3.5 按语言生态
3.3.6 按开发环境
理性选择未必是最佳选择,因为世界上没有最佳选择,选就是了。