C说话为何不会过时?你须要控制若干种说话?

残暴电子俱乐部· 2020-05-20
本文来自 昔日头条 ,作者 残暴电子俱乐部

01为甚么C说话不会过时

评价任何一门编程说话,都是招人骂的。永久是如许。就像是春寒料峭的季候, 街上穿棉袄和穿单衣的擦肩而过,两边必定是同时在心里出现了两个字:“傻逼!”这个在心思学上有个专业的名字:叫做“二逼”景象!

那我为啥还要做这个挨骂的事呢?作为《C说话点滴》《drop of knowledge of C++》书本的作者,《C说话新思想,第二版》的译者。我认为我有义务体系的简介一下这本说话,他的特点,还有他的将来。这个成绩对很多方才踏入法式榜样猿这个行业的老手相当重要。由于他们有深深的担心,万一C说话就像Fortran,perl说话那样过时了怎样办?

先上一个表,这个就是有名的TIOBE说话排行榜。今朝它是一个最威望的一个说话风行度的排行榜,从这个排行榜上看,你会取得一个最直不雅的结论。Java和C都在降低,而降低的部分被第三名今后的说话所瓜分。

而就在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说话没有竞争者!举个简单的例子,完成一个列表,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说话会稳定在本身核心的应用中,并开端渐渐上升。(码农翻身注:赵师长教员预感对了,果真上升了。)

然则Java说话我小我不乐不雅。小型和灵活性上,Python更胜一筹。一行python代码后,你根本不知道本身照样不是duck类型?平台范畴,每个平台都推出本身专属的说话。Windows会持续支撑C#,苹果偏爱Swift, Android推出Kotlin,Google用go。Java传播鼓吹本身可以自在到每家做客,然则不管是到谁家,都邑发明客堂外面坐着一个亲儿子,这个时辰本身这个干儿子多若干少有点难堪。所以我猜想,最后Java会稳定在对跨平台有严格请求的,大年夜型非及时应用上。

最后说点闲话,C++不会镌汰C说话。有了对象后你会发明再俭朴的对象也消费资本,并且有了对象今后,总是不由自立的去想持续这个事,一但持续完成了,你会发明持续带来的费事远逾越你的想象。Java的创造人James被问到假设可以重新设计Java说话的话,第一个要做甚么事?他说:“去掉落对象”!作为一个已婚,有两个孩子的法式榜样猿,我感同身受。假设大年夜家感兴趣,我可以再写一个博客,聊聊C++和C的真实差别地点。

假设你看到这里,还甚么都没记住。那就只记住一点:没人能猜想将来。

  • 全球只须要五台电脑 -IBM开创人

  • 640K内存足够了 -微软开创人

  • 没须要在家里用电脑-DEC开创人

假设再有人对你说C说话曾经过时了,最好本身思虑一下,能求真最好,假设不克不及,至少要做到存疑。

网友关于C说话如许评价

  1. 航空、兵工范畴不是大年夜众所能接触的;

  2. 如今很多工业范畴也很多应用64位处理器吧(人工智能技巧的成熟和普及)3、花费范畴就更不消说了;

  3. 作为浅显法式榜样猿,重要照样工业范畴或许花费应用范畴,c说话合适底层开辟,c++的对象其实也没有多么耗资本,c++对象模型这本书有详细简介,固然有些过时,然则设计理念根本照样延续着。c、c++会持续有一席之地。然则这个范围是否是会持续减少到一个顶点也不好说。镌汰,我小我看法应当不会。

  4. 范围减少了,小众了,能够工资报答也不会大年夜幅变更。

  5. 会不会有更合适底层开辟、比c更有优势的说话出现。这个敢说,然则前段时间应用了一下rust说话,照样让我眼前一亮。并且大年夜厂也在存眷这门说话,毕竟是后来设计的,会总结先人的经历,能够会更佳优良。越往下层应用,开辟平台和说话越是封装很好、应用很便利、更佳接近人类的思想方法(之前的开辟说话很像是控制计算机的详细指令,渐渐的在生长)

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依然是老大年夜。

03C说话为何值得去学

1. 嵌入式范畴,C说话依然是首选说话,嵌入式并没有由于其他下层说话的生长而衰败,如今嵌入式依然还在其本身的范畴展示强大年夜的生命力。手机,电视机,机顶盒,空气污染器等等电子产品都是其范畴范畴,从长远看短时间内弗成能被消掉。并且智能机械人的崛起,C说话的应用频率又开端加大年夜了。

2. 操作体系内核代码照样C说话为主打,就说话的灵活性和履行的效力来看C说话照样最合适的说话,并且在体系层次的代码,C说话照样首选说话。并且如今很多风行说话的底层绝大年夜部分的C说话构建完成。从这个层面讲C说话是永久不会过时的,顶多算是应用范围变窄,但其感化依然强大年夜。

3. C说话的职位比例相对应用级说话是低了点,然则全部软件行业在生长,相对的C说话编程职位并没有增添。并且关于有志于成为架构师层次的法式榜样员来讲,C说话照样?课,构建软件框架照样须要对底层有所懂得。

退一步来讲,即使认为C说话方面的职位比例低一些,不好找任务,可以先从C说话动手,把本身的知识体系建立起来,编程说话属于对象范畴,熟悉一种对象的应用,很轻易举一反三,切换到其他说话也相对轻松些,并且给全部职业生活起了个好头,打好了基本为更上一层楼做足预备。

C说话之所以风行这么年,生命力这么旺盛和本身鲜明的高效,便利灵活挂钩。即使在下层说话应用概率变低,并没有妨碍在体系级别持续发挥感化。任何一种说话都有其存在的社会价值地点。C说话照样值得作为入门说话深刻的进修。

4.C/C++法式榜样员的支出没有遭到影响,根据100offer的后台数据浮现,如今经过100offer入职的法式榜样员年薪最高达47W,最低22.4W,C/C++法式榜样员的支出与其它编程言语的岗亭比拟处于相等状况,没有出现上风。

随着C++渐突变成某些特定公司和特定项目所需的言语后,高等C++法式榜样员的支出也会更具有竞争性。

5.在全部游戏家当和嵌入式上依然是主流。起首是游戏范畴,Milo Yip表示——法式榜样员有须要应用C++构造/库,如大年夜多半游戏引擎(如Unreal/Source)及中心件(如Havok/FMOD),虽然有些C/C++库供给其他言语的绑定,但平日原生的API性能最好、最新。

其次是器械范畴,不管是搜集安然还是杀毒软件,C/C++还是支流言语。

知乎红人vczh说:「我在上大年夜学的时分的确就只进修C/C++,后来练习的时分去了微软,成果到了那边才知道,那个组是不用C/C++的,怎样办?仰仗着C++带给我的充裕的功底,我准时结束了老板给我的"两个星期内学会C#和WCF基本知识"的作业,顺畅开端作业。」

固然,这只是vczh的小我经历,不具有广泛性,但不可否定的是C/C++仍具有不可代替性。某家创业公司CTO在遭受采访时表示:「即使有很多人唱衰C/C++,但在当代,仍有很多很多项目标目标渠道临时只供给C/C++编译器的支撑,仅从这一点而言,C/C++是不能够完全去世的。」

从应用范畴来讲,C/C++实用于高性能计算、嵌入式体系、开辟办事器软件、游戏、及时体系等,所以,短期内能完全代替C++言语其实不存在。

C/C++在体系、图形、搜集等很多范畴都是不可代替的,它的光线年代让它的去世速度得以增添。

当某一种编程言语在市场须要明显比另外一种言语更强时,强须要言语中的缺点则简单被淡化,阑珊的言语则赓续被人挑出致命硬伤。这类编程言语之间的比较其实不公平,且没成心义。

编程言语都是用来表达思维和结束须要的器械,随着年代的展开,不一样言语在不一样范畴都做出了弃取,代替虽然存在,但不是必定气候。C/C++的须要随着年代展休会不可防止地愈来愈少,但不能够完全不见,C/C++法式榜样员也具有不可代替性,在市场上还是有着竞争性。

04除C说话,须要控制多种编程说话吗?

简述

我方才断送了本身的职业生活,没错,很多人都如许对我说。

同事得知我行将分开公司的消息,大年夜多半对此表示懂得。但让他们困惑的是,我今朝就职的公司是一家Windows市廛,用C#.net编写代码,而我要入职的岗亭请求在Linux情况下停止开辟,以Java为重要的编程说话。他们认为编程说话的改变会让我损掉多年经历,很多人都赞成他们的不雅点。

编程说话很多,数以百计。有些很罕见,例如:Java、C#、PHP、Ruby、Python、和JavaScript,而有些则比较边沿化或是新兴的,例如:Awk、Go、Julia、Rust。面对如此多的选择,我们又该存眷那种说话呢?是以,我开端思虑这个成绩 - 你真的须要控制不止一种编程说话吗?

想要控制多种编程说话的9个来由

  1. 能用多种方法来处理异样的成绩,控制不合的编程说话意味着具有更多的选择。毕竟,当你只要锤子时,一切看起来都像是钉子。

  2. 更有竞争力,具有更多的失业机会。进修第二门编程说话,有时能加倍任务机会的数量。但是,这取决于你进修的说话种类。但不管怎样说,你将会有更多的合适机会,从而增长求职才能。

  3. 注解你具有进修新说话的才能。潜伏的雇主会认为你并不是是逝世板或许惯守陈规的人。

  4. 进修是很风趣的。进修新的事物会让你的脑筋保持高兴。这将有助于你在新范畴的生长和进步。

  5. 紧跟以后的技巧生长趋势。懂得哪个行业在独领风流,便可以永久站在潮流的尖端,你的技能便不会过时。

  6. 这将提示你为甚么应当酷爱你的“主”说话,或许若何将任务做得更好。有时辰,只要测验测验过新说话,才会知道主说话是多么的优良。你会加倍观赏本身最爱的说话。与此同时,新说话能够会有一些惊人的特点,让你深觉相见恨晚。

  7. 有助于成为一个加倍优良的法式榜样猿。进修新的说话,有助于进步在一切说话之间通用的技能,例如:设计和架构算法,或处理不合的数据构造。

  8. 针对任务选择最好的对象。尺有所短寸有所长 - 有的说话更善于处理某些特定方面的任务。控制了多种说话,你可以在任务当选用最好的对象

  9. 注解你的进修才能强。没有任何任务比控制第二说话更能证明你的进修才能。

不想控制多种编程说话的9个来由

  1. 控制一种说话更轻易。平日,集中精力和经心投入才能精通某一事物。假设赓续地在多种说话之间停止切换,那么真正精通一门说话的概率就会降低。控制一种说话也有助于你集中精力。

  2. 大年夜多半人只须要一份任务,大年夜部分公司只应用一种说话。在你被录用后,控制多种说话不用定会有所赞助。有时辰,只需控制项目所用的说话就够了。

  3. 总有一些器械值得进修;有时辰,这意味着要更深刻地进修一种说话。

  4. 大年夜多半情况下,专家能提更高的薪资请求,由于人们更情愿为专家付出更多的薪水。John Sonmez在其视频《 I’m Not Sure I Want To Be A Specialist》中谈到为甚么多面手其实不总是最好的。

  5. 即使仅控制一种说话,依然可以被认为是一个巨大年夜的开辟者。能否是巨大年夜的开辟者与你控制若干种说话有关。关键在于你创造的是甚么。由于只触及一种说话,所以你可以花更多的时间停止创造。

  6. 你只须要进修无限的软件开辟对象。大年夜多半说话只要为数不多的一些对象。切换说话常常意味着要切换对象。只控制一种说话,你便可以更快地控制相干的对象。这将有助于进步任务效力。

  7. 更容易于定位本身的市场。由于只控制一种说话,根本上你只会朝这个偏向安顿上去(即使不是出于本身的选择)。

  8. 你可以仰仗任何一种说话处理大年夜多半软件成绩。不论有若干人告诉你,大年夜多半说话可以用于处理任何成绩。假设处理成绩是你的重要目标(本应当是),控制更多的说话其实不用定有助于完成这个目标。

  1. 深刻懂得一件事比外面懂得十件事更好。

这并不是是一个非黑即白的成绩。和其他成绩一样,最好的处理办法是取中心值:总有一片灰色地带。假设你是一个初学者,那么进修一种说话,并将其应用到前十多个项目中会比较轻易。但此以后,建议你成为一个「T形」软件开辟者。

甚么是「T形」软件开辟者?

所谓「T形」软件开辟者在某一个特定的区域具有很深的成就,并且是一种说话的专家,T字母中的垂直线代表了这一点;另外,他们会持续广泛进修另外一种技能,T字母中的程度线代表了这一点。

那么,这与软件开辟,特别是编程说话的进修,有甚么关系呢?我的建议是精通一种编程说话,这将成为你今后的生计,并用于处理大年夜部分红绩。你应当尽你所能控制这门说话。在此基本上,可以进修最合适任务的第二种说话或技能。

T形软件开辟者是一个多面手,精通于某一范畴。

在成为T形开辟者的过程当中,你将灵活地控制多种说话,同时具有某个范畴专家的长处。

应当控制哪一种编程说话?

一个罕见的成绩是,应当进修哪一种说话。或许说,假设你是初学者,应当起首进修哪一种说话。平日,我会选择有必定汗青的说话作为重要说话。这类说话应当用于多个行业,并且有广泛的应用群体和大年夜量的开辟对象。符合这些标准的说话有:Java、C#、.NET、Ruby、Python和Swift。

TIOBE软件基于这些标准持续跟踪软件说话的风行性,并编入索引中。你可以点击TIOBE Index检查完全的编程说话列表。索引会每个月更新,前20名中的大年夜多半说话都是不错的选择。将来10年,这些说话还会风行吗?我不肯定。不过至少在将来四年内照样很能够保持风行的,我想,这对任何预备着手的项目都是够用的。

能否须要控制多种说话取决于你的目标

想开端新的专业项目或营业?或许你只须要控制一种说话。

想换行业或驾驭技巧生长趋势?或许你须要控制不止一种说话。

想在企业情况中任务?或许你只须要控制一种说话。

想任务在前沿项目?或许你须要控制不止一种说话,由于潮流总是在变更。

说实话,关于能否须要控制更多的说话,其实并没有相对精确或缺点的答案,最后的决定取决于你。