C語(yǔ)言為何不會(huì)過(guò)時(shí)?你需要掌握多少種語(yǔ)言?
整理自網(wǎng)絡(luò),整理/排版:付斌
01
為什么C語(yǔ)言不會(huì)過(guò)時(shí)
先上一個(gè)表,這個(gè)就是著名的TIOBE語(yǔ)言排行榜。目前它是一個(gè)最權(quán)威的一個(gè)語(yǔ)言流行度的排行榜,從這個(gè)排行榜上看,你會(huì)得到一個(gè)最直觀的結(jié)論。Java和C都在下降,而下降的部分被第三名以后的語(yǔ)言所瓜分。
而就在5月,時(shí)隔5年,C語(yǔ)言再次領(lǐng)先Java,榮登TIOBE編程語(yǔ)言排行榜第一!
排名前十的分別是:
C,Java,Python,C++,C#,Visual Basic.NET,JavaScript,PHP,SQL和R。
有沒(méi)有發(fā)現(xiàn)亮點(diǎn)?沒(méi)錯(cuò), 第一易主了,C 語(yǔ)言反超了 Java 。要知道,C 語(yǔ)言上次第一還是在 5 年前,是什么原因讓其“東山再起”了呢?
時(shí)隔五年,C語(yǔ)言重回榜首。受冠狀病毒的影響。
據(jù)TIOBE CEO Paul Jansen 的猜測(cè),“這聽(tīng)起來(lái)可能很不可思議,但是某些編程語(yǔ)言確實(shí)可以從這種情況中受益。"
嵌入式語(yǔ)言(C 和 C++ 等)越來(lái)越流行,因?yàn)樗鼈儽挥糜卺t(yī)療設(shè)備軟件中。
C語(yǔ)言已經(jīng)把硬件的運(yùn)行效率壓縮到了極致。 這種設(shè)計(jì)思想帶來(lái)的問(wèn)題就是易用性和安全性的缺失。例如,你不能在數(shù)組中混合保存不同的類型,否則編譯器沒(méi)有辦法計(jì)算正確的偏移量。同時(shí)C語(yǔ)言對(duì)于錯(cuò)誤的偏移量也不聞不問(wèn),這就是C語(yǔ)言中臭名昭著的越界問(wèn)題。
C語(yǔ)言自詡的“相信程序員”都是漂亮的說(shuō)辭,它的唯一目的就是快,要么飛速的運(yùn)行,要么飛速的崩潰。C語(yǔ)言只關(guān)心程序飛的高不高,不關(guān)心程序猿飛的累不累。就是這樣!
現(xiàn)在回答兩個(gè)最普遍的問(wèn)題: 硬件這么便宜了,有必要讓軟件更快嗎? 有這種疑問(wèn)的人大部分都是網(wǎng)吧的固定客戶,他們理解的計(jì)算機(jī)只在電腦城,他們理解的計(jì)算只是游戲和播放硬盤(pán)中的小電影。不要玩?zhèn)€游戲開(kāi)個(gè)掛就樂(lè)得不行不行的,別忘了還有全實(shí)景仿真,還有3D渲染,還有自動(dòng)駕駛。
全世界只需要五臺(tái)電腦 -IBM創(chuàng)始人
如果再有人對(duì)你說(shuō)C語(yǔ)言已經(jīng)過(guò)時(shí)了,最好自己思考一下,能求真最好,如果不能,至少要做到存疑。
網(wǎng)友對(duì)于C語(yǔ)言這樣評(píng)價(jià)
1、航空、軍工領(lǐng)域不是大眾所能接觸的;
2、現(xiàn)在很多工業(yè)領(lǐng)域也很多使用64位處理器吧(人工智能技術(shù)的成熟和普及) 3、消費(fèi)領(lǐng)域就更不用說(shuō)了;
4、作為普通程序猿,主要還是工業(yè)領(lǐng)域或者消費(fèi)應(yīng)用領(lǐng)域,c語(yǔ)言適合底層開(kāi)發(fā),c++的對(duì)象其實(shí)也沒(méi)有多么耗資源,c++對(duì)象模型這本書(shū)有詳細(xì)介紹,雖然有些過(guò)時(shí),但是設(shè)計(jì)理念基本還是延續(xù)著。c、c++會(huì)繼續(xù)有一席之地。但是這個(gè)范圍是不是會(huì)繼續(xù)縮小到一個(gè)極點(diǎn)也不好說(shuō)。淘汰,我個(gè)人看法應(yīng)該不會(huì)。
5、范圍縮小了,小眾了,可能工資回報(bào)也不會(huì)大幅變化。
6、會(huì)不會(huì)有更適合底層開(kāi)發(fā)、比c更有優(yōu)勢(shì)的語(yǔ)言出現(xiàn)。這個(gè)敢說(shuō),但是前段時(shí)間使用了一下rust語(yǔ)言,還是讓我眼前一亮。而且大廠也在關(guān)注這門(mén)語(yǔ)言,畢竟是后來(lái)設(shè)計(jì)的,會(huì)總結(jié)前人的經(jīng)驗(yàn),可能會(huì)更佳優(yōu)秀。越往上層應(yīng)用,開(kāi)發(fā)平臺(tái)和語(yǔ)言越是封裝很好、使用很方便、更佳接近人類的思維方式(以前的開(kāi)發(fā)語(yǔ)言很像是控制計(jì)算機(jī)的具體指令,慢慢的在發(fā)展)
02
為什么 C 語(yǔ)言仍然占據(jù)統(tǒng)治地位?
C vs. C ++
C vs. Java
Java的語(yǔ)法從C和C ++中借鑒了很多東西。但是,與C不同的是,Java默認(rèn)情況下不會(huì)編譯為本機(jī)代碼。相反,Java運(yùn)行時(shí)環(huán)境,JVM,JIT(實(shí)時(shí))編譯Java代碼以在目標(biāo)環(huán)境中運(yùn)行。在適當(dāng)?shù)那闆r下,JIT編譯后的Java代碼可以接近甚至超過(guò)C的性能。
Java背后的“一次編寫(xiě),隨處運(yùn)行”的理念也允許Java程序在目標(biāo)架構(gòu)上進(jìn)行相對(duì)較少的調(diào)整即可運(yùn)行。相比之下,雖然C已被移植到許多架構(gòu)中,但任何給定的C程序仍可能需要重新量身定做才能在,打個(gè)比方,Windows與Linux,兩種不同的os之間正常運(yùn)行。
這種可移植性和強(qiáng)大性能的結(jié)合,以及龐大的軟件庫(kù)和框架組成的生態(tài),使Java成為構(gòu)建企業(yè)應(yīng)用程序的首選語(yǔ)言。
Java輸給C的地方是一個(gè)Java從未打算競(jìng)爭(zhēng)的領(lǐng)域:靠近底層結(jié)構(gòu)運(yùn)行,或直接與硬件打交道。C代碼被編譯成機(jī)器代碼,由進(jìn)程直接執(zhí)行。Java被編譯成字節(jié)碼,這是一種隨后會(huì)被JVM解釋器轉(zhuǎn)換為機(jī)器代碼的中間代碼。此外,盡管Java的自動(dòng)內(nèi)存管理在大多數(shù)情況下都是個(gè)優(yōu)點(diǎn),但C更適合于必須充分利用有限內(nèi)存資源的情況。
也就是說(shuō),在某些方面,Java在速度方面可以接近于C。JVM的JIT引擎在運(yùn)行時(shí)根據(jù)程序行為優(yōu)化例程,允許進(jìn)行許多類型的優(yōu)化,而這些優(yōu)化是在未提前編譯的C中無(wú)法實(shí)現(xiàn)的。雖然Java運(yùn)行時(shí)自動(dòng)執(zhí)行內(nèi)存管理,但一些較新的應(yīng)用程序可以解決這個(gè)問(wèn)題。例如,Apache Spark部分地通過(guò)使用繞過(guò)JVM的自定義內(nèi)存管理代碼來(lái)優(yōu)化內(nèi)存中處理。
C vs. C#和.Net
與Java(以及某種程度上來(lái)說(shuō)Python也是如此)一樣,.Net提供跨各種平臺(tái)的可移植性和龐大的集成軟件生態(tài)系統(tǒng)??紤]到.Net世界中有多少面向企業(yè)的開(kāi)發(fā),這些都是不小的優(yōu)勢(shì)。當(dāng)您使用C?;蛉魏纹渌?Net語(yǔ)言開(kāi)發(fā)程序時(shí),您可以使用為.Net運(yùn)行時(shí)編寫(xiě)的大量工具和庫(kù)。
.NET另一個(gè)類似Java的優(yōu)勢(shì)是JIT優(yōu)化。C#和.Net程序可以按照C語(yǔ)言提前編譯,但它們主要由.Net運(yùn)行時(shí)進(jìn)行即時(shí)編譯,并使用運(yùn)行時(shí)信息進(jìn)行優(yōu)化。JIT編譯允許對(duì)無(wú)法在C中執(zhí)行的運(yùn)行著的.Net程序進(jìn)行各種就地優(yōu)化。
與C一樣,C#和.Net提供各種直接訪問(wèn)內(nèi)存的機(jī)制。堆,棧和非托管系統(tǒng)內(nèi)存都可以通過(guò).Net API和對(duì)象訪問(wèn)。開(kāi)發(fā)人員可以使用.Net中的unsafe模式來(lái)實(shí)現(xiàn)更高的性能。
但這些都不是沒(méi)有代價(jià)的。托管對(duì)象和unsafe對(duì)象不能被任意交換,并且它們之間的編組會(huì)降低性能。因此,要最大化.Net應(yīng)用程序的性能需要將托管和非托管對(duì)象之間的變動(dòng)保持在最低限度。
如果您無(wú)法承擔(dān)托管與非托管內(nèi)存之間變動(dòng)造成的性能損失,或者.Net運(yùn)行時(shí)對(duì)于目標(biāo)環(huán)境(例如,內(nèi)核空間)來(lái)說(shuō)是一個(gè)糟糕的選擇,或者可能根本不可用,那么C就是你所需要的。與C#和.Net不同,C被默認(rèn)可以解鎖對(duì)內(nèi)存的訪問(wèn)權(quán)。
C vs. Go
代碼可讀性是Go的指導(dǎo)設(shè)計(jì)目標(biāo)之一:讓開(kāi)發(fā)人員可以輕松掌握任何Go項(xiàng)目,并在短時(shí)間內(nèi)熟練掌握代碼庫(kù)。C代碼庫(kù)可能很難理解,因?yàn)樗鼈兒苋菀拙奂罅繉儆谀硞€(gè)項(xiàng)目或某個(gè)團(tuán)隊(duì)的宏和和#ifdef。Go的語(yǔ)法及其內(nèi)置的代碼格式以及項(xiàng)目管理工具旨在避免這種結(jié)構(gòu)性問(wèn)題。
Go還提供了諸如goroutine和channel之類的附加功能,用于處理并發(fā)性和組件之間的消息傳遞的語(yǔ)言級(jí)別的工具。C需要開(kāi)發(fā)者手動(dòng)完成或由外部庫(kù)提供,但Go提供了開(kāi)箱即用的這些功能,使得構(gòu)建需要這些功能的軟件變得更加容易。
Go與C最深層次的不同之處在于內(nèi)存管理方面。默認(rèn)情況下,Go的對(duì)象會(huì)被自動(dòng)管理并自動(dòng)進(jìn)行回收。對(duì)于大多數(shù)編程工作來(lái)說(shuō),這非常方便。但這也意味著任何需要確定性處理內(nèi)存的程序都會(huì)更難編寫(xiě)。
Go確實(shí)包含了用于繞過(guò)Go的某些類型處理安全性的unsafe包,例如使用Pointer類型讀取和寫(xiě)入任意內(nèi)存。但unsafe會(huì)附帶一個(gè)warning說(shuō)用它編寫(xiě)的程序“可能是不可移植的,并且不受Go 1兼容性指南的保護(hù)?!?/span>
Go非常適合構(gòu)建命令行實(shí)用程序和網(wǎng)絡(luò)服務(wù)等,因?yàn)檫@些很少用到太過(guò)細(xì)致的操作。但是,如果是低級(jí)設(shè)備驅(qū)動(dòng)程序,內(nèi)核空間操作系統(tǒng)組件以及其他需要嚴(yán)格控制內(nèi)存布局和管理的任務(wù),那么就最好用C來(lái)創(chuàng)建。
C vs. Rust
Rust的語(yǔ)法和編譯規(guī)則可幫助開(kāi)發(fā)人員避免常見(jiàn)的內(nèi)存管理錯(cuò)誤。如果程序有一個(gè)不符合Rust語(yǔ)法的內(nèi)存管理問(wèn)題,它就不會(huì)被編譯。剛接觸這種語(yǔ)言的新手,特別是以前用C語(yǔ)言的開(kāi)發(fā)者,由于C語(yǔ)言為這類bug提供了充足的容錯(cuò)空間,所以他們接觸Rust的第一步是學(xué)習(xí)如何安撫編譯器。但Rust的支持者認(rèn)為,這種短期的痛苦有一個(gè)長(zhǎng)期的回報(bào):更安全的,不會(huì)減緩速度的代碼。
Rust還通過(guò)其工具改進(jìn)了C語(yǔ)言。默認(rèn)情況下,項(xiàng)目和組件管理是Rust提供的工具鏈的一部分,與Go相同。有一種默認(rèn)的,推薦的方法來(lái)管理包,組織項(xiàng)目文件夾,以及處理C需要單獨(dú)處理的其他許多事情,每個(gè)項(xiàng)目和團(tuán)隊(duì)以不同的方式處理它們。
然而,在Rust中被吹捧為優(yōu)勢(shì)的東西對(duì)于C開(kāi)發(fā)者來(lái)說(shuō)可能并沒(méi)有太大吸引力。Rust的編譯時(shí)安全功能無(wú)法禁用,因此即使是最小的Rust程序也必須符合Rust的內(nèi)存安全限制。默認(rèn)情況下,C可能不太安全,但在必要時(shí)它更靈活,更寬容。
C vs. Python
Python強(qiáng)調(diào)的,以及它與C最不同的地方,是有利于開(kāi)發(fā)速度而不是執(zhí)行速度。一個(gè)可能需要一個(gè)小時(shí)才能用另一種語(yǔ)言寫(xiě)出來(lái)的程序——比如C——可能用Python幾分鐘內(nèi)就能寫(xiě)好。另一方面,該程序在C中執(zhí)行可能需要幾秒鐘,但需要一分鐘才能在Python中運(yùn)行完。(一個(gè)很好的經(jīng)驗(yàn)法則:Python程序通常比它們對(duì)應(yīng)的C語(yǔ)言程序運(yùn)行速度慢一個(gè)數(shù)量級(jí)。)但是對(duì)于現(xiàn)代硬件上的許多工作,Python已經(jīng)足夠快了,這是它如今廣泛應(yīng)用的一個(gè)重要原因。
另一個(gè)主要區(qū)別是內(nèi)存管理。Python程序完全由Python運(yùn)行時(shí)進(jìn)行內(nèi)存管理,因此開(kāi)發(fā)人員不必?fù)?dān)心分配和釋放內(nèi)存的細(xì)節(jié)。但同樣,開(kāi)發(fā)人員的輕松也是以運(yùn)行時(shí)性能為代價(jià)的。編寫(xiě)C程序需要嚴(yán)格關(guān)注內(nèi)存管理,但生成的程序通常是純機(jī)器速度的黃金標(biāo)準(zhǔn)。
但是,在二者的血脈中,Python和C共享一個(gè)深層的關(guān)系:Python運(yùn)行時(shí)參考是用C語(yǔ)言編寫(xiě)的。這允許Python程序包裝用C和C ++編寫(xiě)的庫(kù)。第三方庫(kù)的Python生態(tài)系統(tǒng)的很多重要模塊,例如機(jī)器學(xué)習(xí)方面的庫(kù),其核心是C代碼。
如果開(kāi)發(fā)速度比執(zhí)行速度更重要,并且如果程序的大多數(shù)高性能部分可以被隔離到獨(dú)立組件中(而不是遍布整個(gè)代碼),那么純Python或Python和C庫(kù)的混合使得會(huì)是比單獨(dú)使用C更好的選擇。否則的話,C仍然是老大。
03
C語(yǔ)言為何值得去學(xué)
2. 操作系統(tǒng)內(nèi)核代碼還是C語(yǔ)言為主打, 就語(yǔ)言的靈活性以及執(zhí)行的效率來(lái)看C語(yǔ)言還是最合適的語(yǔ)言,而且在系統(tǒng)層次的代碼,C語(yǔ)言還是首選語(yǔ)言。而且現(xiàn)在很多流行語(yǔ)言的底層絕大部分的C語(yǔ)言構(gòu)建完成。從這個(gè)層面講C語(yǔ)言是永遠(yuǎn)不會(huì)過(guò)時(shí)的,頂多算是應(yīng)用范圍變窄,但其作用依然強(qiáng)大。
3. C語(yǔ)言的職位比例相對(duì)應(yīng)用級(jí)語(yǔ)言是低了點(diǎn),但是整個(gè)軟件行業(yè)在發(fā)展,絕對(duì)的C語(yǔ)言編程職位并沒(méi)有減少。 而且對(duì)于有志于成為架構(gòu)師層次的程序員來(lái)說(shuō),C語(yǔ)言還是必修課,構(gòu)建軟件框架還是需要對(duì)底層有所了解。
退一步來(lái)講,即使覺(jué)得C語(yǔ)言方面的職位比例低一些,不好找工作,可以先從C語(yǔ)言入手,把自己的知識(shí)體系建立起來(lái),編程語(yǔ)言屬于工具范疇,熟悉一種工具的使用,很容易觸類旁通,切換到別的語(yǔ)言也相對(duì)輕松些,而且給整個(gè)職業(yè)生涯起了個(gè)好頭,打好了基礎(chǔ)為更上一層樓做足準(zhǔn)備。
C語(yǔ)言之所以流行這么年,生命力這么旺盛和本身鮮明的高效,方便靈活掛鉤。即使在上層語(yǔ)言使用概率變低,并不妨礙在系統(tǒng)級(jí)別繼續(xù)發(fā)揮作用。任何一種語(yǔ)言都有其存在的社會(huì)價(jià)值所在。C語(yǔ)言還是值得作為入門(mén)語(yǔ)言深刻的學(xué)習(xí)。
其次是東西范疇,無(wú)論是網(wǎng)絡(luò)安全仍是殺毒軟件,C/C++仍是干流言語(yǔ)。
知乎紅人vczh說(shuō):「我在上大學(xué)的時(shí)分簡(jiǎn)直就只學(xué)習(xí)C/C++,后來(lái)實(shí)習(xí)的時(shí)分去了微軟,成果到了那里才知道,那個(gè)組是不必C/C++的,怎么辦?憑借著C++帶給我的富裕的功底,我準(zhǔn)時(shí)完結(jié)了老板給我的"兩個(gè)星期內(nèi)學(xué)會(huì)C#和WCF基礎(chǔ)知識(shí)"的作業(yè),順暢開(kāi)端作業(yè)。」
當(dāng)然,這只是vczh的個(gè)人經(jīng)歷,不具有普遍性,但不行否認(rèn)的是C/C++仍具有不行代替性。某家創(chuàng)業(yè)公司CTO在承受采訪時(shí)表示:「即使有許多人唱衰C/C++,但在今世,仍有許多許多項(xiàng)目的目標(biāo)渠道暫時(shí)只供給C/C++編譯器的支撐,僅從這一點(diǎn)而言,C/C++是不行能完全逝世的?!?br>
C/C++在體系、圖形、網(wǎng)絡(luò)等許多范疇都是不行代替的,它的光芒年月讓它的逝世速度得以減少。
當(dāng)某一種編程言語(yǔ)在市場(chǎng)需要顯著比另一種言語(yǔ)更強(qiáng)時(shí),強(qiáng)需要言語(yǔ)中的缺陷則簡(jiǎn)單被淡化,闌珊的言語(yǔ)則不斷被人挑出致命硬傷。這種編程言語(yǔ)之間的比較并不公平,且沒(méi)有意義。
04
除了C語(yǔ)言,需要掌握多種編程語(yǔ)言嗎?
簡(jiǎn)述
我剛剛斷送了自己的職業(yè)生涯,沒(méi)錯(cuò),很多人都這樣對(duì)我說(shuō)。
同事得知我即將離開(kāi)公司的消息,大多數(shù)對(duì)此表示理解。但讓他們困惑的是,我目前就職的公司是一家Windows商店,用C#.net編寫(xiě)代碼,而我要入職的崗位要求在Linux環(huán)境下進(jìn)行開(kāi)發(fā),以Java為主要的編程語(yǔ)言。他們認(rèn)為編程語(yǔ)言的改變會(huì)讓我丟失多年經(jīng)驗(yàn),許多人都贊同他們的觀點(diǎn)。
編程語(yǔ)言很多,數(shù)以百計(jì)。有些很常見(jiàn),例如:Java、C#、PHP、Ruby、Python、和JavaScript,而有些則比較邊緣化或是新興的,例如:Awk、Go、Julia、Rust。面對(duì)如此多的選擇,我們又該關(guān)注那種語(yǔ)言呢?因此,我開(kāi)始思考這個(gè)問(wèn)題 - 你真的需要掌握不止一種編程語(yǔ)言嗎?
想要掌握多種編程語(yǔ)言的9個(gè)理由
-
能用多種方式來(lái)解決同樣的問(wèn)題,掌握不同的編程語(yǔ)言意味著擁有更多的選擇。畢竟,當(dāng)你只有錘子時(shí),一切看起來(lái)都像是釘子。 -
更有競(jìng)爭(zhēng)力,擁有更多的就業(yè)機(jī)會(huì)。學(xué)習(xí)第二門(mén)編程語(yǔ)言,有時(shí)能加倍工作機(jī)會(huì)的數(shù)量。然而,這取決于你學(xué)習(xí)的語(yǔ)言種類。但無(wú)論怎么說(shuō),你將會(huì)有更多的合適機(jī)會(huì),從而增加求職能力。 -
表明你具備學(xué)習(xí)新語(yǔ)言的能力。潛在的雇主會(huì)認(rèn)為你并非是死板或者慣守成規(guī)的人。 -
學(xué)習(xí)是很有趣的。學(xué)習(xí)新的事物會(huì)讓你的頭腦保持興奮。這將有助于你在新領(lǐng)域的成長(zhǎng)和提高。 -
緊跟當(dāng)前的技術(shù)發(fā)展趨勢(shì)。了解哪個(gè)行業(yè)在獨(dú)領(lǐng)風(fēng)騷,就可以永遠(yuǎn)站在潮流的尖端,你的技能便不會(huì)過(guò)時(shí)。 -
這將提醒你為什么應(yīng)該熱愛(ài)你的“主”語(yǔ)言,或者如何將事情做得更好。有時(shí)候,只有嘗試過(guò)新語(yǔ)言,才會(huì)知道主語(yǔ)言是何等的優(yōu)秀。你會(huì)更加欣賞自己最愛(ài)的語(yǔ)言。與此同時(shí),新語(yǔ)言可能會(huì)有一些驚人的特性,讓你深覺(jué)相見(jiàn)恨晚。 -
有助于成為一個(gè)更加優(yōu)秀的程序猿。學(xué)習(xí)新的語(yǔ)言,有助于提高在所有語(yǔ)言之間通用的技能,例如:設(shè)計(jì)和架構(gòu)算法,或處理不同的數(shù)據(jù)結(jié)構(gòu)。 -
針對(duì)工作選擇最佳的工具。尺有所短寸有所長(zhǎng) - 有的語(yǔ)言更善于處理某些特定方面的事情。掌握了多種語(yǔ)言,你可以在工作中選用最佳的工具 -
表明你的學(xué)習(xí)能力強(qiáng)。沒(méi)有任何事情比掌握第二語(yǔ)言更能證明你的學(xué)習(xí)能力。
不想掌握多種編程語(yǔ)言的9個(gè)理由
-
掌握一種語(yǔ)言更容易。通常,集中精力和全心投入才能精通某一事物。如果不斷地在多種語(yǔ)言之間進(jìn)行切換,那么真正精通一門(mén)語(yǔ)言的概率就會(huì)降低。掌握一種語(yǔ)言也有助于你集中精力。 -
大多數(shù)人只需要一份工作,大部分公司只使用一種語(yǔ)言。在你被錄用后,掌握多種語(yǔ)言不一定會(huì)有所幫助。有時(shí)候,只要掌握項(xiàng)目所用的語(yǔ)言就夠了。 -
總有一些東西值得學(xué)習(xí);有時(shí)候,這意味著要更深入地學(xué)習(xí)一種語(yǔ)言。 -
大多數(shù)情況下,專家能提更高的薪資要求,因?yàn)槿藗兏敢鉃閷<抑Ц陡嗟男剿?。John Sonmez在其視頻《 I’m Not Sure I Want To Be A Specialist》中談到為什么多面手并不總是最好的。 -
即便僅掌握一種語(yǔ)言,仍然可以被認(rèn)為是一個(gè)偉大的開(kāi)發(fā)者。是否是偉大的開(kāi)發(fā)者與你掌握多少種語(yǔ)言無(wú)關(guān)。關(guān)鍵在于你創(chuàng)造的是什么。因?yàn)橹簧婕耙环N語(yǔ)言,所以你可以花更多的時(shí)間進(jìn)行創(chuàng)造。 -
你只需要學(xué)習(xí)有限的軟件開(kāi)發(fā)工具。大多數(shù)語(yǔ)言只有為數(shù)不多的一些工具。切換語(yǔ)言往往意味著要切換工具。只掌握一種語(yǔ)言,你就可以更快地掌握相關(guān)的工具。這將有助于提高工作效率。 -
更易于定位自己的市場(chǎng)。因?yàn)橹徽莆找环N語(yǔ)言,基本上你只會(huì)朝這個(gè)方向安頓下來(lái)(即使不是出于自己的選擇)。 -
你可以憑借任何一種語(yǔ)言解決大多數(shù)軟件問(wèn)題。不管有多少人告訴你,大多數(shù)語(yǔ)言可以用于解決任何問(wèn)題。如果解決問(wèn)題是你的主要目標(biāo)(本應(yīng)當(dāng)是),掌握更多的語(yǔ)言并不一定有助于實(shí)現(xiàn)這個(gè)目標(biāo)。 -
深入理解一件事比表面了解十件事更好。
這并非是一個(gè)非黑即白的問(wèn)題。和其他問(wèn)題一樣,最好的解決辦法是取中間值:總有一片灰色地帶。如果你是一個(gè)初學(xué)者,那么學(xué)習(xí)一種語(yǔ)言,并將其應(yīng)用到前十多個(gè)項(xiàng)目中會(huì)比較容易。但此之后,建議你成為一個(gè)「T形」軟件開(kāi)發(fā)者。
什么是「T形」軟件開(kāi)發(fā)者?
所謂「T形」軟件開(kāi)發(fā)者在某一個(gè)特定的區(qū)域擁有很深的造詣,而且是一種語(yǔ)言的專家,T字母中的垂直線代表了這一點(diǎn);此外,他們會(huì)繼續(xù)廣泛學(xué)習(xí)另一種技能,T字母中的水平線代表了這一點(diǎn)。
那么,這與軟件開(kāi)發(fā),特別是編程語(yǔ)言的學(xué)習(xí),有什么關(guān)系呢?我的建議是精通一種編程語(yǔ)言,這將成為你以后的生計(jì),并用于解決大部分問(wèn)題。你應(yīng)該盡你所能掌握這門(mén)語(yǔ)言。在此基礎(chǔ)上,可以學(xué)習(xí)最適合工作的第二種語(yǔ)言或技能。
在成為T(mén)形開(kāi)發(fā)者的歷程中,你將靈活地掌握多種語(yǔ)言,同時(shí)具備某個(gè)領(lǐng)域?qū)<业膬?yōu)點(diǎn)。
應(yīng)該掌握哪種編程語(yǔ)言?
一個(gè)常見(jiàn)的問(wèn)題是,應(yīng)當(dāng)學(xué)習(xí)哪種語(yǔ)言。或者說(shuō),假如你是初學(xué)者,應(yīng)當(dāng)首先學(xué)習(xí)哪種語(yǔ)言。通常,我會(huì)選擇有一定歷史的語(yǔ)言作為主要語(yǔ)言。這種語(yǔ)言應(yīng)當(dāng)用于多個(gè)行業(yè),并且有廣泛的使用群體和大量的開(kāi)發(fā)工具。符合這些標(biāo)準(zhǔn)的語(yǔ)言有:Java、C#、.NET、Ruby、Python和Swift。
TIOBE軟件基于這些標(biāo)準(zhǔn)持續(xù)跟蹤軟件語(yǔ)言的流行性,并編入索引中。你可以點(diǎn)擊TIOBE Index查看完整的編程語(yǔ)言列表。索引會(huì)每月更新,前20名中的大多數(shù)語(yǔ)言都是不錯(cuò)的選擇。未來(lái)10年,這些語(yǔ)言還會(huì)流行嗎?我不確定。不過(guò)至少在未來(lái)四年內(nèi)還是很可能保持流行的,我想,這對(duì)任何準(zhǔn)備著手的項(xiàng)目都是夠用的。
是否需要掌握多種語(yǔ)言取決于你的目標(biāo)
想開(kāi)始新的業(yè)余項(xiàng)目或業(yè)務(wù)?或許你只需要掌握一種語(yǔ)言。
想換行業(yè)或駕馭技術(shù)發(fā)展趨勢(shì)?或許你需要掌握不止一種語(yǔ)言。
想在企業(yè)環(huán)境中工作?或許你只需要掌握一種語(yǔ)言。
想工作在前沿項(xiàng)目?或許你需要掌握不止一種語(yǔ)言,因?yàn)槌绷骺偸窃谧兓?/span>
說(shuō)實(shí)話,關(guān)于是否需要掌握更多的語(yǔ)言,其實(shí)并沒(méi)有絕對(duì)正確或錯(cuò)誤的答案,最后的決定取決于你。
https://www.infoworld.com/article/3402023/why-the-c-programming-language-still-rules.html
http://zhaoyan.website/blog/index.php/2017/07/15/future/
https://dzone.com/articles/do-you-need-to-know-more-than-one-language
-END-
推薦閱讀
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!