成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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 語言還是值得作為入門語言深刻的學習。

4.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 個理由

  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. 你可以憑借任何一種語言解決大多數軟件問題。不管有多少人告訴你,大多數語言可以用于解決任何問題。如果解決問題是你的主要目標(本應當是),掌握更多的語言并不一定有助于實現這個目標。
  9. 深入理解一件事比表面了解十件事更好。

這并非是一個非黑即白的問題。和其他問題一樣,最好的解決辦法是取中間值:總有一片灰色地帶。如果你是一個初學者,那么學習一種語言,并將其應用到前十多個項目中會比較容易。但此之后,建議你成為一個「T 形」軟件開發者。

什么是「T 形」軟件開發者?

所謂「T 形」軟件開發者在某一個特定的區域擁有很深的造詣,而且是一種語言的專家,T 字母中的垂直線代表了這一點;此外,他們會繼續廣泛學習另一種技能,T 字母中的水平線代表了這一點。

那么,這與軟件開發,特別是編程語言的學習,有什么關系呢?我的建議是精通一種編程語言,這將成為你以后的生計,并用于解決大部分問題。你應該盡你所能掌握這門語言。在此基礎上,可以學習最適合工作的第二種語言或技能。

T 形軟件開發者是一個多面手,精通于某一領域。

在成為 T 形開發者的歷程中,你將靈活地掌握多種語言,同時具備某個領域專家的優點。

應該掌握哪種編程語言?

一個常見的問題是,應當學習哪種語言。或者說,假如你是初學者,應當首先學習哪種語言。通常,我會選擇有一定歷史的語言作為主要語言。這種語言應當用于多個行業,并且有廣泛的使用群體和大量的開發工具。符合這些標準的語言包括但不限于:C、C++、Java、JavaScript、C#、Python、Go 等等。

TIOBE 軟件基于這些標準持續跟蹤軟件語言的流行性,并編入索引中。你可以點擊 TIOBE Index 查看完整的編程語言列表。索引會每月更新,前 20 名中的大多數語言都是不錯的選擇。未來 10 年,這些語言還會流行嗎?我不確定。不過至少在未來幾年內還是很可能保持流行的,我想,這對任何準備著手的項目都是夠用的。

說實話,關于是否需要掌握更多的語言,其實并沒有絕對正確或錯誤的答案,不談需求選語言都是耍流氓,最后的決定還是取決于你的需求。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2020-10-09 11:06:38

C語言桌面語法

2020-05-19 13:49:43

C語言Java語言

2012-11-13 10:27:45

PythonGo編程語言

2012-06-12 09:47:17

C語言

2010-11-03 09:22:00

C語言

2025-06-26 02:29:00

C語言void*機制

2010-01-22 15:14:37

學習C++

2014-12-26 09:56:50

編程語言

2020-01-15 08:42:16

TCP三次握手弱網絡

2013-08-23 14:22:45

SA系統管理員運維

2015-07-22 16:46:13

Windows 11理由

2022-05-24 08:31:05

C語言檢查數組

2023-11-04 16:26:18

C語言數組

2015-05-25 15:31:56

C語言學習和使用 C 語言

2021-01-27 22:31:36

HTML編程Web

2012-06-27 10:26:19

Surface

2019-10-30 09:04:02

KPIOKR框架

2021-06-06 22:22:32

c語言編程語言

2021-12-21 06:09:05

Python切片索引

2018-06-20 00:52:05

SD-WANMPLSWAN
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费观看男女羞羞视频 | 精品欧美一区二区在线观看视频 | 欧美一区二区黄 | www国产成人免费观看视频,深夜成人网 | 日韩成人一区 | 永久网站 | aⅴ色国产 欧美 | 日韩中文一区二区三区 | a级网站| 91久久久久久 | 欧美精品一区在线 | 亚洲欧美在线一区 | 羞羞视频在线观免费观看 | 亚洲欧美日韩在线一区二区 | 国产视频一区二区在线观看 | 久久久久久久91 | 欧美在线资源 | 一区二区欧美在线 | 国产一区三区在线 | 日本免费在线看 | 欧美性生活免费 | 久久久久无码国产精品一区 | 91大神在线资源观看无广告 | 国产精品免费观看视频 | 日韩一区在线播放 | 91看片| 亚洲一区欧美 | 日韩伦理一区二区 | 在线观看黄色电影 | av中文在线| 日本三级全黄三级a | 日韩高清电影 | 免费看淫片 | 精品国产乱码久久久久久影片 | 国产精品毛片av一区 | 国产精品免费一区二区三区四区 | 日韩欧美国产一区二区三区 | 亚洲精品久久久蜜桃 | 国产精品91视频 | 亚洲精品国产a久久久久久 午夜影院网站 | 亚洲精品成人在线 |