一,前言
對我來說,C語言應該可以算得上是世界上最偉大的編程語言。全中國口氣最大的程序員,業界稱之為“垠神”,曾經發過文章吐槽過業界各種主流的編程語言(對Java,的Python稍微寬容一些),他說Go語言設計有錯誤,Ruby是垃圾,JavaScript是垃圾中的垃圾。但我看他對C語言卻沒發表過什么負面言論。
C語言
之前參加Go大會,演講的人許多都在說受不了C語言了,它動不動就爆內存,為了提高系統穩定性與可維護性他們把原有的邏輯用Go語言重寫了一遍,這應該是一個正確的策略,并不是C語言不適合大項目,而是要掌控好這門編程語言實在太困難,一個公司很難保證招聘的所有員工都牛逼到考慮到如此之多的內存管理情況,難免引入一些有內存泄露隱患的代碼,與其在這里面死磕還不如換一種更好掌控的語言,這或許更符合公司的發展需要。
C語言沒有垃圾回收,需要自己去管理內存釋放內存,而這點對于現代程序員來說確實有點難以接受。除此之外語法過度嚴謹,定義方法之前都需要預先聲明,指針操作難以理解這種種麻煩事也導致了C語言的市場份額(應該這樣說)漸漸被其他語言所占去。不過我覺得以上種種麻煩事也是C語言的魅力之處吧。它能讓我們可以更加直觀地與計算機系統打交道,讓我們可以更加清晰地了解到一個程序運行的時候發生了什么事情,我們哪些方面需要系統的接口支持,我們能夠清楚自己需要分配多少內存空間等等等等。
二、我們往往忽略了它的存在
對于許多計算機系的同學來說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語言)卻漸漸淡出了人們的視線在背后默默運行著。
三、你可以學會它
C語言難,是真的難,他是很多大學教計算機課程的“守門”語言,為何說是守門語言?大學老師美其名曰:“用它來嚇跑那些對在計算機領域混水摸魚的人(說得好像他自己不是在摸魚似的)。”這確實有點用,說實在這也嚇走了一些人,我自己也被它嚇跑過。
C語言是難,但個人覺得并沒有老師說得那么玄乎,如果真如老師所說理解不了指針的人就不適合干這行的話,那我早就該轉行了,事實是每個人的智力水平不一樣,有些人只是接收得慢而已,憑什么要因為這些老師的幾句話就打退堂鼓?
它沒有垃圾回收還有異常處理,我們需要自己去分配內存,它甚至連對象都沒有。以至于很多人都黑那些學C語言的人找不到對象(好吧,這點我承認,所以我現在更多在寫Ruby)。C語言看起來更像是手動擋的汽車,雖然比起自動擋的汽車有點難以把控,但熟練之后的那種操作感還有成就感是無與倫比的。這也導致了我在大三別人都在苦學Java的時候選擇了C跟Linux,只是就業機會堪憂只能暫時放下了,最后為了不隨Java的大流投入了動態語言的懷抱。如今看來甚好,學習了動態語言之后更加明白了C的重要性,以及Java的非絕對必要性,哪怕現在我用C語言就只能寫出"Hello World"也沒關系,只要用心,愿意花時間研究,C語言并沒有想象中那么難,你一定可以掌控它。
小編推薦一個學C語言/C++的學習裙【 815393895】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
四、這東西有什么用?
學C語言可以找到什么樣的工作?又是一個尷尬的問題,我要是知道答案當初我可能就不會跑去學Python了。我大學時候碰過壁,我以為如果我學會了C語言在外面一定可以找到好工作。后來我發現我錯了,好不容易去了一家聲稱招C語言的公司實習,去了之后他們讓我學C#,工作兩個星期后跟他們老總接觸之后發現,原來他們是分不清C跟C#的區別。
以前據說嵌入式領域會用到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并借此了解更多底層的東西,可以讓你在這條路上走得更遠,也更開心。
五、尾聲
小編推薦一個學C語言/C++的學習裙【 815393895】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
以上是本人對C語言的一些看法,或許有些片面(還望指正)。越來越多的語言妄想取代它的地位。但個人覺得無論這些語言再先進他們也無法完全取代C語言在許多程序員心目中的地位,特別是優秀的程序員。而C語言最終會走上Cobol那樣消亡的道路呢,還是會走上不朽之路呢?我們拭目以待,但我個人覺得會是后者。
如果您覺得不錯,請別忘了轉發、分享、點贊讓更多的人去學習, 您的舉手之勞,就是對小編最好的支持,非常感謝!