牛B程式設計師那還不快來,與小司機我一起探討C語言

牛B程式設計師那還不快來,與小司機我一起探討C語言

扯買房實在不擅長,咱門還是來聊程式吧。

A,B,C,D,E,F,G大鵬說,我《都選C》,我是不知道大鵬是不是也寫過程式碼,他居然清楚C的重要性。對我來說,C語言應該可以算得上是世界上最偉大的程式語言。全中國口氣最大的程式設計師,業界稱之為“垠神”,曾經發過文章吐槽過業界各種主流的程式語言(對Java,的Python稍微寬容一些),他說Go語言設計有錯誤,Ruby是垃圾,JavaScript是垃圾中的垃圾。但我看他對C語言卻沒發表過什麼負面言論。

C語言

之前參加Go大會,演講的人許多都在說受不了C語言了,它動不動就爆記憶體,為了提高系統穩定性與可維護性他們把原有的邏輯用Go語言重寫了一遍,這應該是一個正確的策略,並不是C語言不適合大專案,而是要掌控好這門程式語言實在太困難,一個公司很難保證招聘的所有員工都牛逼到考慮到如此之多的記憶體管理情況,難免引入一些有記憶體洩露隱患的程式碼,與其在這裡面死磕還不如換一種更好掌控的語言,這或許更符合公司的發展需要。

C語言沒有垃圾回收,需要自己去管理記憶體釋放記憶體,而這點對於現代程式設計師來說確實有點難以接受。除此之外語法過度嚴謹,定義方法之前都需要預先宣告,指標操作難以理解這種種麻煩事也導致了C語言的市場份額(應該這樣說)漸漸被其他語言所佔去。不過我覺得以上種種麻煩事也是C語言的魅力之處吧。它能讓我們可以更加直觀地與計算機系統打交道,讓我們可以更加清晰地瞭解到一個程式執行的時候發生了什麼事情,我們哪些方面需要系統的介面支援,我們能夠清楚自己需要分配多少記憶體空間等等等等。

1。 我們往往忽略了它的存在

對於許多計算機系的同學來說C語言可能就是噩夢,以至於他們遇到Java的時候就如同找到一根救命的稻草。經濟快速發展的今天C語言似乎漸漸失去了昔日的榮光,在語言排行榜上的第一名的位置已經讓給了Java,遊戲領域C++已經佔有了一席之地,Web領域,Ruby,Go,Python,JavaScript這些語言各自佔著不同比例的“市場份額”。那問題來了,C語言是否還有市場?。

讓我們透過現象來看看更本質一點的東西,目前承載著我們生活的大部分技術其實都跟C語言脫不了關係。比如,Python,Ruby這些流行程式語言的解析器,目前使用最廣泛的服務端作業系統——Linux的核心,以及我們目前用得最多的版本管理系統Git,他們都是大神們用C語言編寫而成,只是我們平時看不到C的存在罷了。或許它已經被編譯成二進位制程式碼,可以直接在命令列直接執行,或許有些人給你提供了友好的使用者介面,讓你們看不到在背後默默支撐他們的人。或許有人用它實現了其他更加高階的程式語言(如Ruby,Python,Lua),讓你沉迷於這些語言的語法糖的時候忘記了它的解析器是由誰來實現。

如此看來就有點像是前端開發跟後端開發的關係那樣,個人覺得後端工程師往往需要承擔比前端更加大的工作壓力,他們編寫的程式碼支撐著我們系統最關鍵的部分,但是人們往往只能關注到他們能夠直接觸碰的東西(可供使用者使用的UI介面),卻忘記了為了支撐他們所見的這個頁面背後默默執行著的服務端程式碼。C語言實現了許多主流語言的解析器,而我們基於這些程式語言實現了很多了不起的網站,App,而它自己(C語言)卻漸漸淡出了人們的視線在背後默默執行著。

牛B程式設計師那還不快來,與小司機我一起探討C語言

2。 你可以學會它

C語言難,是真的難,他是很多大學教計算機課程的“守門”語言,為何說是守門語言?大學老師美其名曰:“用它來嚇跑那些對在計算機領域混水摸魚的人(說得好像他自己不是在摸魚似的)。”這確實有點用,說實在這也嚇走了一些人,我自己也被它嚇跑過。

C語言是難,但個人覺得並沒有老師說得那麼玄乎,如果真如老師所說理解不了指標的人就不適合幹這行的話,那我早就該轉行了,事實是每個人的智力水平不一樣,有些人只是接收得慢而已,憑什麼要因為這些老師的幾句話就打退堂鼓?

它沒有垃圾回收還有異常處理,我們需要自己去分配記憶體,它甚至連物件都沒有。以至於很多人都黑那些學C語言的人找不到物件(好吧,這點我承認,所以我現在更多在寫Ruby)。C語言看起來更像是手動擋的汽車,雖然比起自動擋的汽車有點難以把控,但熟練之後的那種操作感還有成就感是無與倫比的。這也導致了我在大三別人都在苦學Java的時候選擇了C跟Linux,只是就業機會堪憂只能暫時放下了,最後為了不隨Java的大流投入了動態語言的懷抱。如今看來甚好,學習了動態語言之後更加明白了C的重要性,以及Java的非絕對必要性,哪怕現在我用C語言就只能寫出“Hello World”也沒關係,只要用心,願意花時間研究,C語言並沒有想象中那麼難,你一定可以掌控它。

3。 這東西有什麼用?

牛B程式設計師那還不快來,與小司機我一起探討C語言

學C語言可以找到什麼樣的工作?又是一個尷尬的問題,我要是知道答案當初我可能就不會跑去學Python了。我大學時候碰過壁,我以為如果我學會了C語言在外面一定可以找到好工作。後來我發現我錯了,好不容易去了一家聲稱招C語言的公司實習,去了之後他們讓我學C#,工作兩個星期後跟他們老總接觸之後發現,原來他們是分不清C跟C#的區別。

Kidding

以前據說嵌入式領域會用到C語言,不過好像這個領域也被Python,C++這些語言佔領得差不多了。C語言會不會演變成像Lisp那樣只適合用來做教學語言了?

之前聽過有些大神說過

寫Lisp你很難找到相關的工作,但是它能讓你成為一個更好的程式設計師。

現在看來這句話用在C語言上也挺合適的

寫C你很難找到相關的工作,但是它能讓你成為一個更好的程式設計師。

據我觀察,函數語言程式設計是越來越流行了,如今Java據說都支援一些Lambda相關的東西了,Clojure,Elixir這些程式語言也漸漸火起來了,Ruby,Python,JavaScript這些語言幾乎統治了Web開發的半壁江山。後起之秀Go聲稱要擊敗C語言,把C語言能做的事情都做一遍。確實如今的C語言已經沒有當年的那麼無敵了,出現了許許多多的替代品,或者衍生品。但我覺得作為一個存活了幾十年的語言,它自有它過人之處,作為一個系統級程式語言,它簡單卻難以掌控。

當然也可能並沒有如上所說的那麼玄乎,更多的是覺得學這個東西有什麼卵用,只能用來擼擼演算法題。哈哈,如果持有這種想法的同學,您還是繼續寫Java比較好一些。畢竟Java即可以用來擼演算法題也可以用來找工作。不過個人更傾向於C語言,或許我自己也是追求“手動擋”操作感的那類人吧,想想你可以在黑視窗上,開啟一個輕量級的文字編輯器,編寫相關的程式碼,可以自己精確分配記憶體空間,直接往某個記憶體裡面塞你想要的東西,當你塞的東西放不下的時候,程式會告訴你記憶體爆了,這個時候你得去思考自己塞了什麼不應該塞的東西進去。個人覺得這或許也是動態語言所不能給予的程式設計體驗吧。

學C語言確實很難找到相關的工作,除非你是資深專家,但它讓我們更直接地與作業系統打交道,讓我們對記憶體分配,執行緒排程這些概念有更清晰的理解。瞭解這些東西或者說磨練這方面的意識對於日常的工作可能沒有什麼直接的幫助,但我始終相信掌握C並藉此瞭解更多底層的東西,可以讓你在這條路上走得更遠,也更開心。

4。 尾聲

牛B程式設計師那還不快來,與小司機我一起探討C語言

Hacker

以上是本人對C語言的一些看法,或許有些片面(還望指正)。越來越多的語言妄想取代它的地位。但個人覺得無論這些語言再先進他們也無法完全取代C語言在許多程式設計師心目中的地位,特別是優秀的程式設計師。而C語言最終會走上Cobol那樣消亡的道路呢,還是會走上不朽之路呢?我們拭目以待,但我個人覺得會是後者。

在結束的時分,在這裡舉薦一下我建得c++學習群389061316 驗證 天豬,秒回的偶