关于c:C-语言为什么不会过时

1次阅读

共计 10464 个字符,预计需要花费 27 分钟才能阅读完成。

本文整顿自网络 作者: 赵岩 /Serdar 等

01、为什么 C 语言不会过期

评估任何一门编程语言,都是招人骂的。永远是这样。就像是春寒料峭的节令,街上穿棉袄和穿单衣的擦肩而过,单方肯定是同时在心里呈现了两个字:“傻逼!”这个在心理学上有个业余的名字:叫做“二逼”景象!

那我为啥还要做这个挨骂的事呢?作为《C 语言点滴》《drop of knowledge of C++》书籍的作者,《C 语言新思维,第二版》的译者(赵岩老师),我感觉我有责任零碎的介绍一下这本语言,他的特点,还有他的将来。这个问题对很多刚刚踏入程序猿这个行业的老手至关重要。因为他们有深深的担心,万一 C 语言就像 Fortran 那样过期了怎么办?

先上一个表,这个就是驰名的 TIOBE 语言排行榜。目前它是一个最权威的一个语言风行度的排行榜。

就在 5 月,时隔 5 年,C 语言再次当先 Java,荣登 TIOBE 编程语言排行榜第一!

排名前十的别离是:

C,Java,Python,C++,C#,Visual Basic.NET,JavaScript,PHP,SQL 和 R。

有没有发现亮点?没错,第一易主了,C 语言反超了 Java。要晓得,C 语言上次第一还是在 5 年前,是什么起因让其“卷土重来”了呢?

时隔五年,C 语言重回榜首。

据 TIOBE CEO Paul Jansen 的猜想,“这听起来可能很不堪设想,然而某些编程语言的确能够从这种状况中受害。”
嵌入式语言(C 和 C++ 等)越来越风行,因为它们被用于医疗设施软件中。

对所有的编程语言,他们的最初的目标其实就是两种:进步硬件的运行效率和进步程序员的开发效率

遗憾的是,这两点是不可能并存的!你只能选一样。在进步硬件的运行效率这一方面,C 语言没有竞争者!举个简略的例子,实现一个列表,C 语言用数组 int a[3],通过编译当前变成了(基地址+偏移量)的形式。对于计算机来说,没有运算比加法更快,没有任何一种办法比(基地址+偏移量)的存取方法更快。

C 语言曾经把硬件的运行效率压缩到了极致。这种设计思维带来的问题就是易用性和安全性的缺失。例如,你不能在数组中混合保留不同的类型,否则编译器没有方法计算正确的偏移量。同时 C 语言对于谬误的偏移量也充耳不闻,这就是 C 语言中臭名远扬的越界问题。

C 语言自夸的“置信程序员”都是丑陋的说辞,它的惟一目标就是快,要么飞速的运行,要么飞速的解体。C 语言只关怀程序飞的高不高,不关怀程序猿飞的累不累。就是这样!

当初来看看那些非 C 的语言,他们的短处都在于进步程序员的开发效率上。或者反对动静的列表,或者反对平安的列表。然而退出任何的中间层,退出任何的平安测验,它不可能比(基地址+偏移量+无测验)的形式更快。这个世界上不存在“开发容易,运行快”的语言,开发容易毕竟来源于对底层的一层一层又一层的包装。

当初答复两个最广泛的问题:硬件这么便宜了,有必要让软件更快吗?有这种疑难的人大部分都是网吧的固定客户,他们了解的计算机只在电脑城,他们了解的计算只是游戏和播放硬盘中的小电影。不要玩个游戏开个挂就乐得不行不行的,别忘了还有全实景仿真,还有 3D 渲染,还有主动驾驶。

人在开车的时候,每秒要收集 60 个不同的物体,而后依据这 60 个物体的不同组合和反映来做 20 个最重要的决定。而后从这 20 多个决定当选一个执行。所以就算用上最快的硬件,主动驾驶当初还不敢说能像人那样开车。就算是主动驾驶胜利了,下一步还要主动航行呢?因为咱们老早就预言了:你咋不入地呢!

所以说:计算速度永远是不够的!因为新的利用会越来越简单,越来也实时。对了!我还忘了一个更重要的限度:计算的能耗!NASA 飞行器上的 CPU 最多就是 32 位的,说进去你可能不信,国内空间站上没有一个 CPU 是 64 位的,我猜一个最次要的起因是航天员不爱看硬盘小电影吧。

另外一个风行的疑难是:我能够创造一种同样快的语言,然而没有 C 语言那么多的坑。想法是能够的,而且还真巧有这个语言,真巧它的名字叫 D 语言,真巧没有太多的人用!这是因为一个根本的事实。当初有太多,太多太多的 C 代码,他们大部分都在失常工作,就像 Linux, Window, MacOS,Unix,Vxworks。你没有看错,这些操作系统的内核都是 C,我尽管不确定 C 在 Window 中所占的比例,然而我置信微软的人不会傻到用 C# 去全副改写一个操作系统的内核。你想让这些人去用你的全新的语言,这就不是“有点”很傻,很天真了!

而且有些代码,咱们基本就不能改!NASA 一个简略的 5 个 CPU 飞控软件编写结束后,要进行一种“全笼罩”测试。如果 CPU A 坏了会产生什么?如果 CPU A,B 坏了呢?如果 CPU A,C 坏了呢。。。。?如果你违心,你能够做个简略的数学组合。测试结束后,别说重写,就算加个正文都不行。因为主管 payload 的大妈会十分庄重的质问你,为什么你上报的货色数量减少了,然而品质没有减少?你须要和她具体的解释:硬件和软件是不同的,硬件是那种摸起来硬硬的货色,然而软件不是那种摸起来软软的货色。看着大妈鄙夷的眼神,这个时候你会十分悔恨本人手欠退出的哪一行正文。你还别不当真,这个是 NASA 的实在故事。

那为什么 C 语言还降落这么多呢?很简略,有些工作自身就不是 C 语言的。我上学的时候还用 C 语言编过窗口界面呢?而后很快微软的人就推出了 MFC,就是一大堆宏把底层的 C windowAPI 包装了起来。

再起初这个技术也过期了。因为微软的人意识到,带有窗口的应用程序说到底不是 C 语言的本职工作,再这么一层一层包下去就有露馅的危险,于是他们创造了一个全新的语言 C# 来负责这个工作。

Java 也是这样,突出网络,易用,平安,跨平台。无论是 Java,c# 还是 python, 他们都无意避开进步硬件的运行效率这个问题,因为这个问题上没方法和 C 竞争,也无奈撼动 Linux,Unix,GNU tool 这些已有 C 代码的地位。剩下的就只是进步程序员的开发效率上大作文章。这对 C 语言是坏事,把本人不善长的货色去掉,让本人跑的更快!

随同着嵌入和实时零碎的衰亡,AI,机器人,主动驾驶等。这些都是 C 语言的外围利用,而且在这种利用下面,C 语言没有竞争者。所以我感觉 C 语言会稳固在本人外围的利用中,并开始逐渐回升。

最初说点闲话,C++ 不会淘汰 C 语言。有了对象后你会发现再俭朴的对象也消耗资源,而且有了对象当前,总是情不自禁的去想继承这个事,一但继承实现了,你会发现继承带来的麻烦远超过你的设想。Java 的发明人 James 被问到如果能够从新设计 Java 语言的话,第一个要做什么事?他说:“去掉对象”!作为一个已婚,有两个孩子的程序猿,我感同身受。如果大家感兴趣,我能够再写一个博客,聊聊 C ++ 和 C 的实在区别所在。

如果你看到这里,还什么都没记住。那就只记住一点:没人能预测将来。

如果再有人对你说 C 语言曾经过期了,最好本人思考一下,能求真最好,如果不能,至多要做到存疑。

02、为什么 C 仍占据统治位置?

于一种计算机行业的技术来说尤其如此。自 1972 年诞生以来,C 语言始终放弃龙腾虎跃的状态,时至今日它依然是咱们用来搭建软件世界的根底建筑材料之一。

但有时一种技术可能长期存在,只是因为人们还没有来得及创造新的货色来取代它而已。在过来的几十年里,呈现了许多其余语言——其中一些明确地被设计用于挑战 C 的主导地位,有些语言试图凭借本人的人气缓缓瓦解 C 语言的统治位置。

为 C 须要被替换掉的观点辩论是简略的。编程语言钻研和软件开发实际都暗示了如何比 C 更好地去做事。但历经数十年的钻研和开发,C 语言的位置却仍旧巩固。很少有其余语言可能在性能、裸机兼容性或通用性等方面击败它。不过,2018 年 C 是如何与那些明星编程语言竞争的呢,其中细节仍值得一看。

C vs. C ++

当然了,C 最常被拿来与 C ++ 进行比拟,正如其名称自身所暗示的那样,C++ 作为对 C 语言的扩大而被创立进去。C ++ 和 C 之间的差别能够概括为 C ++ 更加宽泛(褒)或更加宽泛(贬),具体取决于这个问题你是问的 C 还是 C ++ 程序员。(笑)

尽管 C ++ 的语法等方面依然是类 C 的,但它提供了许多在原生的 C 中本不可用的十分实用的性能:命名空间(namespace),模板(template),异样(exception),主动内存治理(automatic memory management)等等。须要顶级性能的我的项目,例如波及数据库,机器学习零碎的我的项目通常是用 C ++ 编写的,以便我的项目能尽可能地榨取以及利用到每一点性能。

此外,与 C 相比,C ++ 在继续地更加踊跃地扩大。行将推出的 C ++ 20 会带来更多功能供开发者享受,包含模块,协同程序,同步库,以及概念,这些使模板更易于应用。C standard 的最新版本只进行了大量更新,并侧重于放弃向后兼容性。

事实上,C ++ 中的所有附加性能同样也可能成为累赘。而且是很大的累赘。您应用的 C ++ 专属性能越多,引入的复杂度就越高,对后果的修改就越艰难。将本人局限于仅一个 C ++ 子集的开发人员能够防止许多开发中重大的坑和额外负担。然而有些团队想要从根儿上防备 C ++ 的适度复杂性。保持应用 C 能迫使开发人员将本人局限于一个子集。例如,Linux 内核开发团队就间接避开了 C ++。

选 C 而不选 C ++ 对您——以及任何将会保护你代码的开发人员——来说都是可行的,通过采纳强制简洁主义来防止与 C ++ 的复杂性纠缠。当然,C ++ 领有丰盛的高级性能,这是有它本人的情理的。但如果极简主义更适宜以后和将来的我的项目——以及负责我的项目的团队——那么还是选 C 更理智一些。

C vs. Java

几十年了,Java 依然是企业软件开发的主力军之一——并且也是宽泛而言的开发的主力军之一。许多最重要的企业软件我的项目都是用 Java 编写的——包含绝大多数 Apache Software Foundation 我的项目——而 Java 依然是开发企业级需要我的项目的可行语言。

Java 的语法从 C 和 C ++ 中借鉴了很多货色。然而,与 C 不同的是,Java 默认状况下不会编译为本机代码。相同,Java 运行时环境,JVM,JIT(实时)编译 Java 代码以在指标环境中运行。在适当的状况下,JIT 编译后的 Java 代码能够靠近甚至超过 C 的性能。

Java 背地的“一次编写,随处运行”的理念也容许 Java 程序在指标架构上进行绝对较少的调整即可运行。相比之下,尽管 C 已被移植到许多架构中,但任何给定的 C 程序仍可能须要从新量身定做能力在,打个比方,Windows 与 Linux,两种不同的 os 之间失常运行。

这种可移植性和弱小性能的联合,以及宏大的软件库和框架组成的生态,使 Java 成为构建企业应用程序的首选语言。

Java 输给 C 的中央是一个 Java 从未打算竞争的畛域:凑近底层构造运行,或间接与硬件打交道。C 代码被编译成机器代码,由过程间接执行。Java 被编译成字节码,这是一种随后会被 JVM 解释器转换为机器代码的中间代码。此外,只管 Java 的主动内存治理在大多数状况下都是个长处,但 C 更适宜于必须充分利用无限内存资源的状况。

也就是说,在某些方面,Java 在速度方面能够靠近于 C。JVM 的 JIT 引擎在运行时依据程序行为优化例程,容许进行许多类型的优化,而这些优化是在未提前编译的 C 中无奈实现的。尽管 Java 运行时主动执行内存治理,但一些较新的应用程序能够解决这个问题。例如,Apache Spark 局部地通过应用绕过 JVM 的自定义内存治理代码来优化内存中解决。

C vs. C#和.Net

在推出近二十年后,C#和.Net 框架依然是企业软件世界的次要组成部分。有人说 C#和.Net 是微软对 Java 的回应——一个托管代码编译器零碎和通用运行库——C 和 Java 之间的许多种比照也实用于 C 和 C#或.Net 之间。

与 Java(以及某种程度上来说 Python 也是如此)一样,.Net 提供跨各种平台的可移植性和宏大的集成软件生态系统。思考到.Net 世界中有多少面向企业的开发,这些都是不小的劣势。当您应用 C#或任何其余.Net 语言开发程序时,您能够应用为.Net 运行时编写的大量工具和库。

.NET 另一个相似 Java 的劣势是 JIT 优化。C#和.Net 程序能够依照 C 语言提前编译,但它们次要由.Net 运行时进行即时编译,并应用运行时信息进行优化。JIT 编译容许对无奈在 C 中执行的运行着的.Net 程序进行各种就地优化。

与 C 一样,C#和.Net 提供各种间接拜访内存的机制。堆,栈和非托管零碎内存都能够通过.Net API 和对象拜访。开发人员能够应用.Net 中的 unsafe 模式来实现更高的性能。

但这些都不是没有代价的。托管对象和 unsafe 对象不能被任意替换,并且它们之间的编组会升高性能。因而,要最大化.Net 应用程序的性能须要将托管和非托管对象之间的变动放弃在最低限度。

如果您无奈承当托管与非托管内存之间变动造成的性能损失,或者.Net 运行时对于指标环境(例如,内核空间)来说是一个蹩脚的抉择,或者可能基本不可用,那么 C 就是你所须要的。与 C#和.Net 不同,C 被默认能够解锁对内存的拜访权。

C vs. Go

Go 的语法很大水平上借鉴了 C——花括号作为定界符,语句以分号完结,等等。精通 C 的开发人员通常能够毫不费力地间接应用 Go,甚至算上 Go 的独有性能,如命名空间和包治理,对开发人员来说也并不艰难。

代码可读性是 Go 的领导设计指标之一:让开发人员能够轻松把握任何 Go 我的项目,并在短时间内熟练掌握代码库。C 代码库可能很难了解,因为它们很容易汇集大量专属于某个我的项目或某个团队的宏和和 #ifdef。Go 的语法及其内置的代码格局以及项目管理工具旨在防止这种结构性问题。

Go 还提供了诸如 goroutine 和 channel 之类的附加性能,用于解决并发性和组件之间的消息传递的语言级别的工具。C 须要开发者手动实现或由内部库提供,但 Go 提供了开箱即用的这些性能,使得构建须要这些性能的软件变得更加容易。

Go 与 C 最深层次的不同之处在于内存治理方面。默认状况下,Go 的对象会被主动治理并主动进行回收。对于大多数编程工作来说,这十分不便。但这也意味着任何须要确定性解决内存的程序都会更难编写。

Go 的确蕴含了用于绕过 Go 的某些类型解决安全性的 unsafe 包,例如应用 Pointer 类型读取和写入任意内存。但 unsafe 会附带一个 warning 说用它编写的程序“可能是不可移植的,并且不受 Go 1 兼容性指南的爱护。”

Go 非常适合构建命令行实用程序和网络服务等,因为这些很少用到太过粗疏的操作。然而,如果是低级设施驱动程序,内核空间操作系统组件以及其余须要严格控制内存布局和治理的工作,那么就最好用 C 来创立。

C vs. Rust

在某些方面,Rust 是对 C 和 C ++ 创立的内存治理难题的回应,也是对这两种语言的许多其余毛病的回应。Rust 编译为本机机器代码,因而就性能而言,它被认为与 C 相当。但默认状况下,内存平安才是 Rust 的次要卖点。

Rust 的语法和编译规定可帮忙开发人员防止常见的内存治理谬误。如果程序有一个不合乎 Rust 语法的内存治理问题,它就不会被编译。刚接触这种语言的老手,特地是以前用 C 语言的开发者,因为 C 语言为这类 bug 提供了短缺的容错空间,所以他们接触 Rust 的第一步是学习如何安抚编译器。但 Rust 的支持者认为,这种短期的苦楚有一个长期的回报:更平安的,不会减缓速度的代码。

Rust 还通过其工具改良了 C 语言。默认状况下,我的项目和组件治理是 Rust 提供的工具链的一部分,与 Go 雷同。有一种默认的,举荐的办法来治理包,组织我的项目文件夹,以及解决 C 须要独自解决的其余许多事件,每个我的项目和团队以不同的形式解决它们。

然而,在 Rust 中被吹捧为劣势的货色对于 C 开发者来说可能并没有太大吸引力。Rust 的编译时平安性能无奈禁用,因而即便是最小的 Rust 程序也必须合乎 Rust 的内存平安限度。默认状况下,C 可能不太平安,但在必要时它更灵便,更宽容。

另一个可能的毛病是 Rust 语言的大小。即便思考到规范库,C 的性能也绝对较少。Rust 功能集十分宏大并且还在一直增长。与 C ++ 一样,较大的 Rust 功能集意味着更弱小的性能,但也意味着更高的复杂度。C 是一种较小的语言,但更容易在头脑中进行建模,因而可能更适宜那些对 Rust 来说太小,不值得大动干戈的我的项目。

C vs. Python

当今,每当议论软件开发时,Python 仿佛总是能呈现在对话中。毕竟,Python 是“对所有我的项目的第二佳语言”,毫无疑问是最通用的语言之一,领有数千个第三方库。

Python 强调的,以及它与 C 最不同的中央,是有利于开发速度而不是执行速度。一个可能须要一个小时能力用另一种语言写进去的程序——比方 C——可能用 Python 几分钟内就能写好。另一方面,该程序在 C 中执行可能须要几秒钟,但须要一分钟能力在 Python 中运行完。(一个很好的教训法令:Python 程序通常比它们对应的 C 语言程序运行速度慢一个数量级。)然而对于古代硬件上的许多工作,Python 曾经足够快了,这是它现在广泛应用的一个重要起因。

另一个次要区别是内存治理。Python 程序齐全由 Python 运行时进行内存治理,因而开发人员不用放心调配和开释内存的细节。但同样,开发人员的轻松也是以运行时性能为代价的。编写 C 程序须要严格关注内存治理,但生成的程序通常是纯机器速度的黄金规范。

然而,在二者的血脉中,Python 和 C 共享一个深层的关系:Python 运行时参考是用 C 语言编写的。这容许 Python 程序包装用 C 和 C ++ 编写的库。第三方库的 Python 生态系统的很多重要模块,例如机器学习方面的库,其外围是 C 代码。

如果开发速度比执行速度更重要,并且如果程序的大多数高性能局部能够被隔离到独立组件中(而不是遍布整个代码),那么纯 Python 或 Python 和 C 库的混合使得会是比独自应用 C 更好的抉择。否则的话,C 依然是老大。

03、C 语言为何值得去学

  1. 嵌入式畛域,C 语言仍然是首选语言,嵌入式并没有因为其余下层语言的倒退而败落,当初嵌入式仍然还在其本身的畛域展示弱小的生命力。手机,电视机,机顶盒,空气净化器等等电子产品都是其畛域领域,从长远看短时间内不可能被隐没。而且智能机器人的崛起,C 语言的应用频率又开始加大了。
  2. 操作系统内核代码还是 C 语言为主打,就语言的灵活性以及执行的效率来看 C 语言还是最合适的语言,而且在零碎档次的代码,C 语言还是首选语言。而且当初很多风行语言的底层绝大部分的 C 语言构建实现。从这个层面讲 C 语言是永远不会过期的,顶多算是利用范畴变窄,但其作用仍然弱小。
  3. C 语言的职位比例绝对利用级语言是低了点,然而整个软件行业在倒退,相对的 C 语言编程职位并没有缩小。而且对于有志于成为架构师档次的程序员来说,C 语言还是必修课,构建软件框架还是须要对底层有所理解。

退一步来讲,即便感觉 C 语言方面的职位比例低一些,不好找工作,能够先从 C 语言动手,把本人的常识体系建设起来,编程语言属于工具领域,相熟一种工具的应用,很容易举一反三,切换到别的语言也绝对轻松些,而且给整个职业生涯起了个好头,打好了根底为更上一层楼做足筹备。

C 语言之所以风行这么年,生命力这么旺盛和自身显明的高效,不便灵便挂钩。即便在下层语言应用概率变低,并不障碍在零碎级别持续发挥作用。任何一种语言都有其存在的社会价值所在。C 语言还是值得作为入门语言粗浅的学习。

  1. C/C++ 程序员的支出没有受到影响,根据 100offer 的后盾数据浮现,当初通过 100offer 入职的程序员年薪最高达 47W,最低 22.4W,C/C++ 程序员的支出与其它编程语言的岗位相比并没有出现上风。随着 C /C++ 逐渐变成某些特定公司和特定我的项目所需的语言后,高级 C /C++ 程序员的支出也会更具备竞争性。

知乎红人 vczh 说:「我在上大学的时候几乎就只学习 C /C++,起初实习的时候去了微软,成绩到了那里才晓得,那个组是不用 C /C++ 的,怎么办?凭借着 C ++ 带给我的富裕的功底,我准时完结了老板给我的 ” 两个星期内学会 C# 和 WCF 基础知识 ” 的作业,顺畅开始作业。」

当然,这只是 vczh 的个人经历,不具备普遍性,但不可否认的是 C /C++ 仍具备不可代替性。某家守业公司 CTO 在承受采访时示意:「即便有许多人唱衰 C /C++,但在今世,仍有许多许多我的项目的指标渠道临时只供应 C /C++ 编译器的撑持,仅从这一点而言,C/C++ 是不可能齐全消失的。」

从利用领域来说,C/C++ 实用于高性能计算、嵌入式体系、开发服务器软件、游戏、实时体系、网络通信等,短期内能齐全代替 C /C++ 的语言并不存在,所以仍然具备很强的竞争性。

04、除了 C,须要把握多种语言吗?

想要把握多种编程语言的 9 个理由

  • 能用多种形式来解决同样的问题,把握不同的编程语言意味着领有更多的抉择。毕竟,当你只有锤子时,所有看起来都像是钉子。
  • 更有竞争力,领有更多的就业机会。学习第二门编程语言,有时能加倍工作机会的数量。然而,这取决于你学习的语言品种。但无论怎么说,你将会有更多的适合机会,从而减少求职能力。
  • 表明你具备学习新语言的能力。潜在的雇主会认为你并非是死板或者惯守成规的人。
  • 学习是很乏味的。学习新的事物会让你的头脑放弃兴奋。这将有助于你在新畛域的成长和进步。
  • 紧跟以后的技术发展趋势。理解哪个行业在独领风骚,就能够永远站在潮流的尖端,你的技能便不会过期。
  • 这将揭示你为什么应该酷爱你的“主”语言,或者如何将事件做得更好。有时候,只有尝试过新语言,才会晓得主语言是何等的优良。你会更加观赏本人最爱的语言。与此同时,新语言可能会有一些惊人的个性,让你深觉相见恨晚。
  • 有助于成为一个更加优良的程序猿。学习新的语言,有助于进步在所有语言之间通用的技能,例如:设计和架构算法,或解决不同的数据结构。
  • 针对工作抉择最佳的工具。尺有所短寸有所长 – 有的语言更长于解决某些特定方面的事件。把握了多种语言,你能够在工作中选用最佳的工具
  • 表明你的学习能力强。没有任何事件比把握第二语言更能证实你的学习能力。

不想把握多种编程语言的 9 个理由

  • 把握一种语言更容易。通常,集中精力和全心投入能力精通某一事物。如果一直地在多种语言之间进行切换,那么真正精通一门语言的概率就会升高。把握一种语言也有助于你集中精力。
  • 大多数人只须要一份工作,大部分公司只应用一种语言。在你被录用后,把握多种语言不肯定会有所帮忙。有时候,只有把握我的项目所用的语言就够了。
  • 总有一些货色值得学习;有时候,这意味着要更深刻地学习一种语言。
  • 大多数状况下,专家能提更高的薪资要求,因为人们更违心为专家领取更多的薪水。John Sonmez 在其视频《I’m Not Sure I Want To Be A Specialist》中谈到为什么多面手并不总是最好的。
  • 即使仅把握一种语言,依然能够被认为是一个平凡的开发者。是否是平凡的开发者与你把握多少种语言无关。关键在于你发明的是什么。因为只波及一种语言,所以你能够花更多的工夫进行发明。
  • 你只须要学习无限的软件开发工具。大多数语言只有为数不多的一些工具。切换语言往往意味着要切换工具。只把握一种语言,你就能够更快地把握相干的工具。这将有助于进步工作效率。
  • 更易于定位本人的市场。因为只把握一种语言,基本上你只会朝这个方向安顿下来(即便不是出于本人的抉择)。
  • 你能够凭借任何一种语言解决大多数软件问题。不论有多少人通知你,大多数语言能够用于解决任何问题。如果解决问题是你的次要指标(本该当是),把握更多的语言并不一定有助于实现这个指标。
  • 深刻了解一件事比表面理解十件事更好。

这并非是一个非黑即白的问题。和其余问题一样,最好的解决办法是取两头值:总有一片灰色地带。如果你是一个初学者,那么学习一种语言,并将其利用到前十多个我的项目中会比拟容易。但此之后,倡议你成为一个「T 形」软件开发者。

什么是「T 形」软件开发者?

所谓「T 形」软件开发者在某一个特定的区域领有很深的造诣,而且是一种语言的专家,T 字母中的垂直线代表了这一点;此外,他们会持续宽泛学习另一种技能,T 字母中的水平线代表了这一点。

那么,这与软件开发,特地是编程语言的学习,有什么关系呢?我的倡议是精通一种编程语言,这将成为你当前的生计,并用于解决大部分问题。你应该尽你所能把握这门语言。在此基础上,能够学习最适宜工作的第二种语言或技能。

T 形软件开发者是一个多面手,精通于某一畛域。

在成为 T 形开发者的历程中,你将灵便地把握多种语言,同时具备某个领域专家的长处。

应该把握哪种编程语言?

一个常见的问题是,该当学习哪种语言。或者说,如果你是初学者,该当首先学习哪种语言。通常,我会抉择有肯定历史的语言作为次要语言。这种语言该当用于多个行业,并且有宽泛的应用群体和大量的开发工具。合乎这些规范的语言包含但不限于:C、C++、Java、JavaScript、C#、Python、Go 等等。

TIOBE 软件基于这些规范继续跟踪软件语言的流行性,并编入索引中。你能够点击 TIOBE Index 查看残缺的编程语言列表。索引会每月更新,前 20 名中的大多数语言都是不错的抉择。将来 10 年,这些语言还会风行吗?我不确定。不过至多在将来几年内还是很可能放弃风行的,我想,这对任何筹备着手的我的项目都是够用的。

说实话,对于是否须要把握更多的语言,其实并没有相对正确或谬误的答案,不谈需要选语言都是耍流氓,最初的决定还是取决于你的需要。

【参考资料】

1、Serdar Yegulalp

https://www.infoworld.com/art…

2、赵岩

http://zhaoyan.website/blog/i…

3、佚名

https://dzone.com/articles/do…

逆锋起笔 是一个专一于程序员圈子的技术平台,你能够播种 最新技术动静 最新内测资格 BAT 等大厂的教训 精品学习材料 职业路线 副业思维 ,微信搜寻 逆锋起笔 关注!

正文完
 0