一位“老程序员”的反思:CPythonJava不可兼得,专心学好一门编程语言就行!python应用程序

摘要:大多数程序员在其职业生涯中,接触到的编程语言不止一种,但主要掌握并运用的多数只有一门。那么在数量繁多、适用领域各不相同的编程语言中,哪一门更适合你来学习呢?“老程序员”EleanorBerger总结了这些年来他对各种编程语言的看法及其发展历程,接下来就让我们一睹他心目中的最佳编程语言是什么。

作者|EleanorBerger

译者|弯月

出品|CSDN(ID:CSDNnews)

最近,著名游戏程序员、idSoftware创始人之一JohnCarmack在采访中表示,程序员应该专心学好一门编程语言。这倒让我感到有点惊讶。虽然我个人非常赞同这条建议,但在如今的程序员圈子里,这种观点是有争议的。

我猜,我就是大家所说的“老程序员”了。我的岁数不小了,一生都在从事编程工作,而且从步入社会之后就一直在从事这项专业工作。有时,我觉得自己是一名编程语言爱好者,亲眼目睹了许多编程语言的发展。回顾过去,这是一段激动人心的历史,我们会不由自主地得出一个(错误的)结论:多掌握几种编程语言总没坏处。编程语言的历史发展非常精彩,但如今的发展形势相对比较平和。

在本文中我想回顾一下曾经的历史,总结经验教训,并看一看究竟哪种编程语言才是最好的标准化语言。

史前阶段(50年代~80年代)

随着计算硬件和计算机科学作为一门学科逐渐兴起,计算机编程(除了处理器本身的指令之外)也开始缓慢地发展。在最初的几十年里,编程语言主要是学术界的研究对象,还俘获了一小部分研究人员。程序员的选择很有限,主要取决于领域。

业务编程使用COBOL,科学编程使用Fortran,还有一些其他语言通常用于特定领域、研究或硬件。

专业化(80年代~90年代)

随着计算机硬件数量的增加以及用途的日益多样化,编程语言的数量也开始增长,编程语言的选择变成了一个流行的话题。人们开始对编程语言进行分门别类。我们可以通过程序员的种类以及他们渴望达到的专业水平,判断他们会选择哪种语言。个人计算机编程爱好者使用越来越流行的BASIC。这是一种很荒诞、很原始的编程语言,却被广泛使用并成为了一代程序员(包括我自己)的引路人。Pascal引入了结构化编程,并产生了巨大的影响(Pascal与Turbo-Pascal和Delphi建立了一个蓬勃发展的社区,但最终消失了)。

起源于UNIX的C成为了系统编程语言。C++成为了C的后继者,并借鉴了Smalltalk的面向对象编程,成为了专业应用程序和服务开发人员的语言。最终VisualBasic(与BASIC毫无关系)普及了“可视化编程”,满足了应用程序开发的需求(随着Windows的出现而迅速增长),并成为大众的首选。但人们普遍认为,VB程序员是领域专家兼职编程工作,而C和C++才是“专业”的编程人员。

这个阶段,人们仍然没有很好地理解编程语言的设计,导致许多流行的编程语言很多方面的设计都不太理想。C语言简单而强大,但很难熟练掌握,有可能出错的地方太多。C++的意图虽好,但最终的设计不佳,而且使用感不好。VisualBasic既有趣又简单,但有点儿戏,在当时的技术条件下,优雅与效率都不达标。Smalltalk和LISP都是有趣而优雅的语言,但由于捆绑到了专门的硬件和昂贵的工具,导致最后失势。

成熟(90年代~2000年)

这一时期出现了许多其他的编程语言,其中最有名的是Java。这门语言本身并没有特别之处,但它提供的JVM是一个通用的运行时环境,实现了“编写一次,到处运行”,也就是说该语言十分通用,不受特定硬件、操作系统、或目标环境的限制。严格来讲,早期的JVM并没有什么值得炫耀的,但它开创了语言运行时及部署选项日益成熟的时代。

迅速发展(2000年~2010年)

另一方面,程序员的数量也出现了爆炸式增长。随着软件的需求快速增长,以及工具和知识的普及,全世界数百万人都变成了程序员。这些程序员也是人类,他们渴望强烈的群体认同。就像普通人对体育运动团体有着强烈而非理性的看法一样,程序员也开始在编程语言的选择问题上站队。许多程序员迫不得已选择某种新兴、独特、特殊的编程语言。例如,有人声称函数式编程才是王道、Ruby比Python好、Scala将彻底改变数据科学、不选Clojure是你的损失……至此,编程语言从线性发展进入了混乱的达尔文优胜劣汰时期。

超标准化(2010年至今)

原以为,这个时期的人们会意识到某些编程语言过于疯狂,无法持续发展。然而,实际情况并非如此,相反,情况出现了意想不到的转变。在“云”计算时代,许多应用程序和服务的部署跨互联网上的大量分布式节点,使用哪种编程语言似乎已无关紧要。程序员都在开发互相交流的独立组件,又有什么必要纠结编程语言呢?组件之间并不需要知道彼此是用哪种语言编写的。如果程序员喜欢用X语言编写组件,那么就用这种语言好了。谁在乎呀。

在不同机器上运行的组件也是如此,随着Docker的发布,容器得到了普及,无论是在一台机器上运行的应用程序,还是通过编排软件在机器集群上协作运行的软件,都可以使用相同的范例轻松管理。

如今人们仍在开发新的编程语言,其中不乏前途无量且备受期待的语言。有些是特定领域的(移动应用程序使用的Swift、Kotlin和Dart,以太坊智能合约使用的Solidity),而有些则比较通用,但每种语言都得益于这几十年来积累的经验教训(面向云编程的Go,面向系统编程的Rust,以及JavaScript的超集TypeScript,等等)。

与此同时,编程世界达到了一个新的成熟度,我们不再追逐每一种新趋势,采用每一种新语言。我们都成长了。

专心学好一门编程语言

如何选择编程语言

时至2022年,我们在选择编程语言时,需要考虑以下几点。

首先,最关键的考虑因素是语言的适用范围。如果是特定的领域,必须使用一些特定于领域的语言,则最具普遍适用性的语言是首选。值得庆幸的是,自从Java提出“编写一次,到处运行”以来,运行时和部署便不再是问题,成本和许可也不再是制约因素。时至今日,所有编程语言、运行时以及各种工具基本都可以免费获取。如果某种语言不适合某个特殊的场合,只能说它的流行度不够,没有普及到所有人;要么是因为一些基本因素,导致该语言确实不适合该任务。

最后,我们选择的编程语言应该优于大多数其他语言。即使在2022年,仍有一些糟糕的编程语言,难以学习和使用,很容易让程序员陷入困境。

鉴于上面的陈述,我认为实际上我们并没有太多选择。下面,就让我们来看看这些最佳编程语言。

最佳编程语言

JavaScript/TypeScript

编程语言界的JavaScript就像人类交流时使用的英语一样。它是最流行、最通用的编程语言,适用于许多不同的场景(浏览器/前端、系统/后端、作为扩展语言嵌入到许多环境中)。JavaScript的运行时(V8/Node/Deno)非常高效,拥有许多出色的工具和庞大的社区。

TypeScript是JavaScript的超集,引入了强类型和标准工具,正在迅速发展成为JS编程的默认选择。

Rust

Rust拥有C/C++的所有功能,更易于使用,而且也没有太多陷阱。Rust的社区和生态系统非常强大且在不断发展,工具也很好用。如果你需要的功能Rust都提供了,那它绝对是不二之选。以前只能使用C或C++的场合,如今也可以选择Rust。此外,Rust还在建立自己的WebAssembly通用语言(WebAssembly可以说是终极版的“编写一次,到处运行”的运行时)。

强有力的竞争对手

Python

我使用Python已经超过20年了,可惜时至2022年,Python依然算不上真正的通用编程语言。原因之一是,Python仍然非常低效,很多注重性能的场合都无法采用Python。还有一个原因是,它未能进入主流的面向用户环境,比如网络浏览器或手机。尽管如此,Python仍不失为一种出色的编程语言,而且在数据工程/数据科学/机器学习中占据了重要位置,所以如果你从事这些领域的工作,那么Python绝对是一门值得了解和热爱的语言。就目前的情况来看,Python很可能会作为数据科学的通用语言继续发展下去,但可能无法突破这个领域。

Go

C#/Java

C#及其生态系统非常出色,你可以用它实现很多功能。Java的各个方面都比不上C#,所以我不理解为什么有人会喜欢它,但Java确实很流行。C#的应用很广泛,不仅是一种系统和“商业”语言,现在更是延伸到了移动应用程序和浏览器。强大的运行时,伟大的生态系统。但是,除非你需要C#的一些量身定制的运行时和工具的功能,否则在短期内C#很难与JavaScript和Rust竞争。

C/C++

荣誉奖

Swift/Kotlin/Dart

这几种语言在特定领域占有一席之地。如果需要移动UI编程,则这些是不错的选择。但JavaScript的适用性更普遍,而且也同样适用于移动开发,因此我们更应该选择JavaScript。

LISP(Racket/Clojure)

LISP很特别,即使日常工作没有这种需求,也应该学习一下。Racket是最先进的、非常复杂的语言(实际上它是一种语言构建工具包)。据传,Clojure的功能很强大,因为它的目标是JVM,可以使用Java库。但我不清楚这个卖点有多大作用。

Haskell/F#/Scala

函数式语言很重要。在某些情况下,它们是更优的选择。Haskell是函数式编程的代表。F#具有更好的普遍适用性,因为它的运行平台是CLR,并且可以使用.NET库。Scala不是纯粹的函数式,但非常通用,并且在JVM上运行。

Julia/R/MATLAB

Julia非常适合数学领域。R和MATLAB都有各自擅长的特定场合。不过,在Python主导的数据工程领域,这些编程语言恐怕很难幸存下来。

PowerShell

如果你从事shell编程,那么PowerShell是迄今为止最好的选择。它适用于所有操作系统,所以我们没有理由使用任何其他shell。PowerShell也算是一种通用编程语言,但实际上在非系统管理之外,没有人使用它。

迟暮之年

PHP/红宝石/PERL

这些语言也曾有过辉煌的岁月,主要是作为网络“后端”语言。无论你如何看待这些语言,如今都不应该再在它们身上白花力气。它们都在走向灭亡。

VisualBasic/VBA

VB改变了世界,但如今却被淘汰出局了,无论是作为通用语言还是作为对其他程序的扩展。在遥远的过去可以用VB实现的功能,如今都可以用其他现代语言更出色地实现。

总结

我喜欢编程语言,而且永远对新语言充满了好奇。但是,就目前而言,TypeScript是我心目中的C位,而在需要强大的功能和低级访问权限的情况下,Rust居第二。我相信,2022年几乎所有程序员都与我有类似的看法。

THE END
1.C++后端程序员如何在缺乏相关外包项目中寻找赚取外快的途径跨领域项目参与: 尽管有些外包项目并非直接使用C++,但很多项目中涉及到的数据结构、算法设计、系统架构等方面的知识是相通的。你可以尝试拓展技术栈,学习与C++关联度较高的其他语言(如C#、Java),以便于参与到更多类型的项目中。 在线教育平台兼职讲师: 许多在线教育平台对高级C++课程的需求旺盛,可以考虑成为兼职讲师,https://blog.csdn.net/m0_60104735/article/details/137470198
2.C++兼职招聘找远程C++C++外包信息甜薪工场C++远程兼职服务平台,为您精选了126个的C++相关的远程外包人才招聘信息,为您找远程C++提供人才资源.招聘C++可通过甜薪工场发布远程工作,平台快速匹配专业的C++自由职业者快速接单完成您的需求!https://www.txgc.com/market/cjiajia/
3.python/C++兼职群本人经营一个淘宝小店,有C++/Matlab/python代码编程、强化学习、机器学习、深度学习、nlp、仿真、复现、算法、神经网络、建模、数字图像识别等不同的代码代编程的单子! 本人由于时间有限,擅长领域有限,有些单子需要发送给志同道合的朋友!欢迎大家加入! 需要进群的请添加我的微信:WxD12159 备注:豆瓣https://www.douban.com/group/topic/292011982/
4.C/C++兼职接单外包平台招聘其他后端开发接单云工网提供C/C++兼职接单招聘平台:数千名优秀在线全职兼职开发外包接单、电商、网站、APP等;C/C++3天免费试用,先体验后雇佣!https://www.yungong.com/cpp
5.海外游戏公司C++开发招聘(可兼职/居家办公)Laravel招聘求职/必要条件:英语流利办公形式:线上远程 / 居家办公 / 可兼职薪资范围:16k-26k Team ProfileWe are an overseas team specializing in the development of mobile game applications for the Asian market. Currentlhttps://learnku.com/laravel/t/67933
6.软件测试工程师面试经验总结8篇(全文)比如说我本科时用的编程软件都是matlab,而上了研究生后,由于项目的原因,必须用c++,你就必须硬着头皮去学,因为逃避不了,必须一点一滴的去学。除了培养了自学能力之外,对自己的职业生涯也有了清晰的认识,以前本科的时候基本上不知道自己应该做什么,当然和我因为准备考研没有去过多思考也有关,进入研究生阶段后,https://www.99xueshu.com/w/filebf0fxmy7.html
7.C++二分查找算法:规划兼职工作51CTO博客C++二分查找算法:规划兼职工作 题目 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。 给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬https://blog.51cto.com/u_15724537/8767888
8.高中信息技术(PythonC++Java等)家教兼职3、亲:对于暂没找到工作的大学生,做短期家教兼职也是非常不错的选择。业务能力强的教员,12000-15000元/月的收入不难。 四、求职简历及相关证件提交: 1、请务必使用电脑到神舟家教网官网【www.vipjiajiao.com/Reg/Reguser.asp】注册会员并提交详细家教求职简历。“主要学习成就”(如高考总分与各科成绩、初高中有关https://wllm.ncss.cn/student/jobs/73Ho2PsYu6HYxsuLKqKFKx/detail.html
9.杭州大学生高中信息技术(PythonC++Java等)家教兼职杭州大学生高中信息技术(Python、C++、Java等)家教兼职招聘人数:20人 招聘单位:杭州科匠信息科技有限公司 工作类型:实习 职位类别:家教 工作地点:杭州市 薪资待遇:10000-15000 发布日期:2024-11-01 使用“大学生就业”微信小程序 【我的】【扫一扫】投简历 http://www.ahbys.com/Job.html?jid=277101&cid=44564
10.杭州大学生高中信息技术(PythonC++Java等)家教兼职“主要学习成就”(如高考总分与各科成绩、初高中有关数理化竞赛、大学期间有关奖励、教师进修等)、“家教工作经历“(在什么时间,地点带过哪个学校,哪个年级学生的哪个科目,达到什么样的效果;有关支教、学校实习或工作、教育培训机构兼课;各类社会实践、兼职等)以及业余爱好是家长非常看重的,多写细节,越详细越好。通过https://career.cup.edu.cn/job/view/id/602281
11.兼职C/C++/C#/Java/Python网络编程发信人: redsun86 (小淘气), 信区: CPP 标 题: 【兼职】C/C++/C#/Java/Python 网络编程 发https://bbs.byr.cn/article/CPP/102972
12.如何找兼职工作蔡华锋如何找兼职工作 找兼职工作的几个途径: 1.QQ群、微信群、微信圈子等 2.58同城、赶集网、百姓网等分类信息网站 3.豆瓣、百度贴吧、新浪微博、知乎、今日头条等社区网站 4.微信公众号、微信朋友圈、QQ空间 5.亲戚、同事、朋友、同学介绍 6.城市大街上张贴的招聘广告https://www.cnblogs.com/caihuafeng/p/12953169.html
13.C/C++中如何获取数组和指针的长度获取数组长度 算术表达式 函数模板参数自动推断 标准C++模板库 模板特化与自动类型推断 Visual C++编译器预定义宏 boost库 获取指针长度 windows平台 https://www.jianshu.com/p/abc8824c4f9d
14.欢迎加入有偿程序兼职群:群号:931943368技术人员自行定价,客户欢迎加入有偿程序兼职群:群号:931943368 技术人员自行定价,客户可以发布需求找工程师。有想做java,Python,Android,ios,web,c,c++等兼职工作的伙伴欢迎加入。_牛客网_牛客在手,offer不愁https://www.nowcoder.com/feed/main/detail/6d0e5a50fda34a24a95a157051458e97
15.湖北工业大学兼职教授科锐钱林松老师钱林松教授在聘任仪式后,为学院师生做了题为《技术粉如何玩王者荣耀---信息安全技术研讨交流》的精彩报告。 钱林松教授 武汉大学国家网络安全学院企业兼职教师/华中科技大学网络空间安全学院企业导师/湖北工业大学兼职教授/湖北省警官学院特聘专家/武汉科锐创始人/泉州市人工智能学会副理事长/知名编程书籍《C++反汇编与逆向https://www.51asm.com/html/zuixindongtai/keruizixun/597.html
16.CEO访谈FLEXSCHECorporation公司介绍特别网站做的是编程。 我在那里获得的知识和经验对我目前的发展非常有用。 例如,甘特图包含了游戏编程的精髓,用汇编语言编码的经验对开发追求最高速度的C++语言的FLEXSCHE非常有用。 厉害,也可以说是“吃一堑长一智”(笑)。 没错! 原点是越打磨越生辉的中二的美术课题 https://www.flexsche.cn/about_us/ceo.html
17.java大学生职业生涯规划书(精选6篇)掌握java、c#、c++之类的一门语言以及相应的开发工具。以及mysql、mssqlserver、oracle等常见数据库的使用。具有较强的沟通理解能力和协调能力,及团队协作精神;对工作积极主动、认真负责。由上进心虚心好学。 (4)目标分解 ① 大二自学单片机,java等参加各种科创比赛来④丰富自己的知识。通过计算机二级,英语四级和六级的https://mip.wenshubang.com/zhiyeguihuafanwen/2474447.html
18.广州人才兼职广州众包平台一品威客网广州站为广州企业提供外包服务,包括广州LOGO设计、包装设计、VI设计、营销策划、APP开发、小程序开发、商标注册、装修设计等几百项服务,一站式服务企业,高效解决创业难题。https://guangzhou.epwk.com/
19.VisualC++游戏编程基础中文pdf扫描版[22MB]电子书下载Visual C++游戏编程基础介绍了如何以Visual C++及DirectX来设计游戏,主要针对想学习游戏设计的初学者,通过本书深入浅出的概念与实例相结合来逐步实现自己制作游戏的梦想。书中循序渐进地从游戏画面绘制、游戏动画技巧、游戏输入消息处理、游戏人工智能、游戏物理现象设计原理及如何进入3D世界等基本的游戏设计基础开始,到实际https://www.jb51.net/books/402995.html
20.UE设计师兼职UE设计师接单接私活UE设计师外包其它岗位兼职推荐查看更多 技术创始人兼职Rust兼职小程序兼职cocos2d-x兼职Unity3D兼职DBA兼职运维兼职测试兼职移动其他兼职Go兼职全栈兼职Java兼职CTO兼职Ruby兼职C++兼职PHP兼职C兼职C#兼职Python兼职架构师兼职Node.js兼职Android兼职iOS兼职前端兼职UI设计师兼职原画师兼职产品经理兼职项目经理兼职区块链兼职人工智能兼职硬件https://www.proginn.com/cat/ue/