程序員怎么看待C語言?最偉大?最落后?

一,前言

對我來說,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那樣消亡的道路呢,還是會走上不朽之路呢?我們拭目以待,但我個人覺得會是后者。

如果您覺得不錯,請別忘了轉發、分享、點贊讓更多的人去學習, 您的舉手之勞,就是對小編最好的支持,非常感謝!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531158.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何學習C語言?就是這么簡單粗暴!

C語言是面向過程的,而C++是面向對象的。 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理…

C/C++對編程的重要性!其他編程語言都是弟弟!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

C語言其實不難,只是你沒有找對方法!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

想學好C語言?先把基礎打好再說吧!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

C語言新手最常見的問題!你在這里跌倒過嗎?

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

用C語言做出你自己的七夕表白程序!

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

C語言/C++編程的起源與能力學習

C語言是面向過程的,而C++是面向對象的 C和C的區別: C是一個結構化語言,它的重點在于算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得…

Windows下設置自動關機的命令指示符

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 Windows定時操作命令:superR,輸入:??:??shutdown -s ”??“代表時間…

Win7系統轉到Win10系統的裝機方法

Windows 10的版本最好是家庭版。 1.進入PC的BIOS。進入方法與PC品牌有關,可根據對應的品牌查尋進入方法。 2.將Boot List Option 選為UEFI。有些電腦在切換UEFI后即可顯示列表,因此可跳過第三步,反之則繼續第三步的操作。 3.重啟PC&#x…

Ubuntu16.04amp;amp;Windows 10雙系統安裝教程(UEFI模式)

相信來這里的各位,都是想在Windows 10的PC上安裝Linux Ubuntu16.04,來達到雙系統并用的目的。 那么接下來,我就在默認已安裝Windows 10的基礎上介紹如何以UEFI的方式安裝Ubuntu16.04!我的PC是聯想小新潮7000—13。在裝雙系統之前…

利用軟碟通軟件制作Ubuntu16.04系統啟動盤

以下操作均在Windows系統下進行!Windows系統的啟動盤和Linux的啟動盤要分開,即需要兩個U盤來制作和存儲。(似乎無法共存于一個U盤里) (系統盤制作軟件會U盤格式化,所以U盤提前做好備份工作) 1…

Linux Ubuntu16.04界面美化

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 很多人在安裝系統之后可能對其外觀、主題或是桌面壁紙不滿意,本文給大家介紹幾種美化方法和插件! 1.可以將左側的“熱區”…

Linux16.04和Windows 10雙系統下,解決時間不一致問題

裝完雙系統,你可能會發現某一個系統的時間與現在時間不一致(中國相差八個小 時),那么如何解決這個問題呢? 1.將某一個系統的設置時間更新方式設置為“手動”,而不是“從互聯網自動獲取”。 2.進入PC的BIO…

Linux Ubuntu 16.04系統下可用的Windows應用

眾所周知,Linux系統下的生態環境不是很好,很多可以在Windows 10系統下運行的 軟件都不能在Linux下運行,那么接下來為大家推薦部分可以應用的軟件: A.Google-Chrome. 最簡單的方法是到https://www.google.cn/chrome/下載對應的Lin…

基于Vitual Box建立虛擬機,虛擬機系統為Linux Ubuntu16.04

相比于為PC機安裝雙系統,安裝虛擬機在達到相同目的的時候顯得更為方便。 那本文就詳細的為大家介紹如何在Windows 10的系統下,安裝Vitual Box,進而安裝虛擬機。 一、下載Vitual Box虛擬機制作軟件及鏡像文件 Vitual Box網址為:…

ROS安裝過程和配置過程(可能出現的問題及解決方法)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 準備學習ROS,所以在Linux Ubuntu16.04 的系統下安裝ROS (建議初學者,先在虛擬機里進行學習和實踐&#xff0c…

閑暇所學“表白對話框”

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 相信大家都在某音上看過一段表白的視頻:打開某個文件后,彈出一個個對話框,表達對心里人的情愫,請求…

C語言(CED)編寫一個程序,求兩個字符之間的加減運算。

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 復習C語言,不同的心境遇到了不同的問題: 問題: 編寫一個程序,求兩個字符之間的加減運算。連續輸…

C語言(CED)輸入一個任意長度的正整數,將該數逆序輸出。

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 題目內容: 輸入一個任意長度的正整數,將該數逆序輸出。如,輸入正數237,則逆序顯示的結果為732。如…

C語言(CED)統計行數

題目: 編寫一個程序,要求統計輸入文本的行數。Input 每行輸入任意長度的字符串(每一行的字符串的長度小于等于1000),以輸入僅由符號構成的行作為結束, 所在的行不計入行數。Output 輸出文本的行數。Sample…