有人說C語言過時了,要學就學Python,怎麼反駁他?

林色芬


我想說的是不用刻意去反駁他。因為:

  • 每個人在不同的語言階段認知是不一樣的;

  • 之所以有這樣的觀點,與一個人所處的環境是正相關的。可能他所處的工作崗位,僅用python就可以風生水起;
  • 還有人會說python過時了,要學就學golang。觀點各異,都要反駁,豈不要糟心死。

python是門強大的優秀語言

言歸正傳,不得不說python是一個全棧語言,也是一個膠水語言。我們只要認真學好他,在目前這個時代,混口飯吃還是不成問題的。可以應用的領域非常多:web開發、爬蟲、科學計算、人工智能、金融分析、遊戲開發等等。雖然世人都說python運行慢,但你不可否認它開發效率高,出品快。你也不能否認現在硬件的發展水平簡直太快了,確實彌補了python的這個短板。

C語言是不可替代的,至少目前

當然,會說c語言過時的人,其實就是平時用不到c語言的人。他們不知道c語言的應用領域,不知道C語言的強大,也不瞭解C語言的高效。更不知道Segment fault的揪心。

需要明確,現在工程往往都不是一種語言就可以解決的:哪怕web開發採用flask等web框架,相信大部分也是api接口,前端採用vue等框架;哪怕是科學計算、人工智能採用python強大的現成庫,核心的算法還是採用c/c++的lib庫。所以,不是沒有用,而是沒用到,沒需求。

天道好輪迴,萬一上輩子是父子呢

可知我們用的python是咋來的呢?也是用c語言寫的。所以你怎麼能說老子過時了呢,哈哈


墟里虛實


C語言效率高,適用面廣,是經典的程序設計語言,不會過時的。

優點: 簡潔緊湊、靈活方便

C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像彙編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。

運算符豐富

C語言的運算符包含的範圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

數據類型豐富

C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種複雜的數據結構的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

C是結構式語言

結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控制程序流向,從而使程序完全結構化。

語法限制不太嚴格,程序設計自由度大

雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。

允許直接訪問物理地址,對硬件進行操作

由於C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像彙編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟件。

生成目標代碼質量高,程序執行效率高

一般只比彙編程序生成的目標代碼效率低10%~20%。

適用範圍大,可移植性好

C語言有一個突出的優點就是適合於多種操作系統,如MS-DOS、UNIX、Microsoft Windows 以及Linux;也適用於多種機型。C語言效率高,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟件,三維,二維圖形和動畫,它也是數值計算的高級語言。

綜上,C不會過時的。


俺村的影城


如果有人說“C語言過時了,要學就學Python,怎麼反駁他?”我的答案是不需要反駁他,為什麼?因為他不懂編程。

本人從2012年工作,做過Erlang,做過Java,做過iOS,當然也學過C語言,也學過Python,對於這個問題我談一下自己的觀點。

首先過時不過時的評判標準是什麼?

我認為過時的評判標準是這個語言已經很少再使用了,市場份額越來越少,最後少到可憐。我們看圖說話,下圖是2020年3月份TIOBE 編程語言排名,TIOBE是編程語言統計非常著名的一家機構。第一名:Java、第二名:C、第三名:Python。


第一名:Java 第二名:C

Java和C一直在第一名第二名之間變動,Java一般用於開發企業服務,C語言一般用於開發硬件相關的,C語言更接近與電腦語言,運行速度不說是最快的至少比百分之九十九的語言都快吧。


Python為啥能排名第三

Python為啥排名第三是由於最近幾年的人工智能,網絡爬蟲等,隨著人工智能越來越火Python的名氣越來越大。Python有著很多封裝好的工具,能夠做一些比較有趣的功能,實現同一個功能,由於Python封裝的更多所以寫的代碼越少,也經常有人說Java要用100行代碼搞定的功能Python只需要10行就能搞定,拿著這個標籤來標榜Python。

Python真的好嗎?

Python的名氣來源於人工智能、更少的代碼能實現功能。我覺得語言好不好和實現一個功能的代碼量有多少沒多大關係,Python寫一個功能用10行,C寫一個功能用100行,照樣用C語言寫而不用Python語言寫。人工智能需要更高的數學知識,從工作的角度上看Java職位有很多職位,而Python的職位也只有一小部分公司會招聘。有很多人抱怨說參加了一個Python培訓機構,培訓完找不到工作。Python的火也有點培訓結構炒的了,當年iOS非常火好多培訓機構投進去瘋狂量產iOS,到現在iOS程序員很難找工作,PHP火了,iOS不行了培訓結構就開始轉向PHP了,PHP不火了Python火了,現在培訓結構就大肆宣傳Python培訓,以至於培訓出來找不到工作,沒有更好的職位


Python的應用場景

Python用於人工智能、用於網絡爬蟲,我覺得這是它的應用場景。


技術角度對比

Python最大的熱點也是人人皆知重大缺點是允許速度,很慢,相對於C語言慢的是好多倍。我最討厭的是Python的語法縮進,還有那縮寫命名的風格,還有那啥都看不出來的方法簽名。對於Python的網絡爬蟲確實是好用,我個人也不覺得使用Python做Web開發也不是很好,感覺Web框架像Django、Flask用的都不太習慣,還是用服務器端寫api用大前端技術寫前端,前後分離的模式好。


編程語言過時不過時是看編程語言市場佔有率而不是看最近一時的名氣,名氣也有可能是炒作出來的。


Java實用技術


個人認為,這實際上反映了編程語言(教學)史上兩大學派--C和Lisp學派經久不息的爭論.

C學派和Lisp學派分別代表了自底向上(from bottom to up)和自頂向下(from top to bottom)兩種教學方式."自底向上"派觀點認為,應當從計算機底層的知識開始教起,然後一步一步提高程序的抽象層次直至達到應用程序水平,所以在學習二進制之前,應該先具有邏輯電路的相關知識;在編寫任何嚴肅的程序以前,必須先掌握內存架構和內存分配相關知識,是一個從具體到抽象的過程.而另外一派的觀點則截然相反:應當先教授抽象的程序,這些程序是用什麼語言寫的不重要,甚至這些程序只不過是偽代碼,只能"在心靈中執行",程序的思想不依賴於我們有沒有計算機,然後在實現的過程中再教授具體的東西(譬如,如果我們要實現一個排序算法,應該採用什麼數據結構,這些數據結構用C語言的結構體如何實現,內存如何管理等等),是一個從抽象到具體的過程(所以Lisp非常適合這一目的,因為Lisp本來可看做一種符號語言,在紙上也能執行演算).

這兩種爭端在別的學科中也有,比如在數學中有布爾巴基學派(對應著"自底向上").兩種方法各有優越性,最後也是殊途同歸:C學派最後也會教授程序抽象和結構化程序設計,而Lisp學派也會涉及到計算機底層的細節(譬如內存分配,大概會從垃圾回收器來入手,而不是從C學派所用策略).只不過就目前的趨勢來看,"自頂向下"一派似乎更有優勢一些.

其實也沒什麼奇怪的,考慮到計算機的普及,越來越多非專業人士也有編程的需要,這些並不關心任何計算機實現的細節,他們僅僅希望將手頭的任務完成,他們需要一門編程語言來實現他們頭腦中的想法,編程語言抽象層次越高越好,因為這樣就越接近他們的想法,實現的難度也就下降.例如抽象數據結構(Abstract DataStructure),一個人只需要知道這個數據結構上的接口(例如Python的List可以append,extend等等),就可以使用這個結構,而無須擔心這個List到底在堆上還是在棧上,實現的時候是單鏈表還是鏈表加上數組等等.

注意,這並不是說(像這個回答下一些人表達的觀點),採用"自頂向下"方法的人,就比採用"自底向上"方法的人,要"低級"一些.只不過這些人不必做某事,不代表他們不能做某事.

一個使用Python的人,一樣可以學習內存分配的相關知識(或者Java在這裡更加合適),只不過,他並不像在C語言中那樣要頻繁使用到這個內存分配的知識,因為垃圾回收使得手動內存分配這件事情變得沒有必要.這也不是說內存分配知識在動態語言中毫無必要,只不過在動態語言中,內存分配的相關知識的運用,並不在於進行手動分配這一點上,而在於如何與編譯器的內存優化(局部變量放在棧上,逃逸變量檢測)和垃圾回收器協作.同樣的,Python沒有顯式的指針,不代表在Python不能學習指針這個概念,在動態語言中,引用是和指針對應的概念(引用是隱式的指針,動態語言的變量和靜態語言的變量不是一回事).

換句話說,如果上述底層實現的知識對於一個人而言是必要的(不管這個人是出於好奇還是什麼緣故),那麼從理論上說,他可以從Python出發來獲得這些知識,只不過實際上有一些因素限制了這一點,那就是絕大多數的較為底層的應用和教材都是用C語言寫的(也還有一些是用Java或者偽代碼之類的寫的),由於C的設計比別的語言更加simple(不像例如Rust之類的基於LLVM的語言,優化就有好幾層,編譯以後代碼都嚴重變形了),可以更好在課堂上教授(例如彙編代碼更加好閱讀等等,類型系統更加簡單).

所以這又產生了一個新的問題:任何試圖瞭解更多的人(尤其是操作系統和網絡編程的這些知識)都不可能繞過C語言(不管是考慮到歷史還是教育因素等等).但這並不能證明C語言沒有過時(當然也不能證明C語言就過時了).

如果"過時"的含義是從編程語言設計的角度說的,不是從編程語言流行程度的角度說的.從某種意義上看,C語言和Python語言都"過時"了(當然Python還是比C年輕),因為他們都差不多是上個世紀80,90年代的產物了,至多隻能反應當時的編程語言的設計水平,也就是面向對象風靡的時刻,而像近幾年出現的Typescript等編程語言才能算是比較"先進",從這個角度說,沒有吸收最新編程語言研究成果的C語言確實就已經"過時"了.不過這種"過時"並不說C語言就不好,只不過是說對於這種編程語言,大家都已經研究透徹了,所以大家在著手設計更加複雜,更加抽象的編程語言.簡單的語言包含在更加複雜的語言之中,這並不代表簡單的語言過時.舉例而言,正則表達式比圖靈完備的語言簡單,但是日常編程的時候程序員仍然大量使用正則表達式,但這也並不代經常使用的正則表達式就要比更少使用的更加強大LL(1)優越一些。

說了那麼多,就想指出一件事情:如果我們抽象的看待編程語言,那麼C語言是完全包含在Python之中的,因此理論上,任何使用C的教材可以改成用Python來寫(但是這種改寫實際上至多發生在程序員的心靈之中,不會有人真的幹這種事情),因此Python程序員無須因為Python比C更好寫而感到自不如人或者低人一等.從編程語言設計的角度上(和上手難易度)說,C語言確實比不上現在出現的新語言,但是從實際的使用上看,C語言還是比較比較主流的選擇.

其實這種糾結並不只是你有,還有800多萬的小夥伴在陪你一起糾結。


讓我來說,答案很簡單:選你感興趣的!我們都知道,興趣是好老師,所以培養興趣很重要。而如果你不確定自己對哪個語言更感興趣,那麼可以參考下面的方案:

如果你想做技術,走技術路線,那毫無疑問先學C語言百利而無一害。

如果還不確定以後的路想怎麼走,那無所謂先學Python還是C,隨緣吧。

如果確定了不想走技術路線,那麼請先從Python開始。

其實,從兩種語言入門,各有各的好處。

從C語言開始入門的話,它的語法結構比較嚴謹,把C語言學透徹了,再學其他的語言就簡單多了,可謂是一通全通。C語言是一種面向過程的語言,而Python是一種面向對象的解釋型計算機程序設計語言。先了解什麼是面向過程,然後去了解什麼是面向對象,這樣學習更有效率。

從Python入門,也有它的道理。Python入門程序比較簡單,在前期也比C語言容易學一些。學習C語言就比較枯燥,很難迅速見到成效,可能會摧毀你的學習積極性。先學習Python,雖然可能對底層實現方面瞭解比較模糊,但是這方面也可以等學完Python再補上。

當然,這個問題沒有標準答案。最終,還是要靠你自己實踐,才能知道什麼最適合自己。


鐵桿軍迷


別反駁了,確實從事底層太難了,但並不是過時了,是大佬用的語言了。


趴在桌上的瞌睡蟲


1.最核心的一點,Python的多線程是有線程鎖的,它的多線程其實只是單線程的輪詢,Python要想並行計算,要通過系統fork出子進程才才行,但這是重量級操作,系統開銷較線程較大。

2.Python為解釋型語言,運送速度慢,較C語言速度相去甚遠。

3.Pyhon因性能和解釋型語言的基礎限制,無法直接運行與硬件平臺上,需要一定的軟件環境基礎,C語言通過BIOS和彙編引導入內存可以直接運行於硬件只上,因此C語言可廣泛應用於操作系統開發以及硬件控制系統的開發,這是Pyhton做夢都不行的。


計算理論


c語言能做到的事情python做不到,現在很多人總強調彙編如何如何,說這樣話的一般不是已經退休的老工程師就是沒寫過彙編的,彙編的編寫本質與c沒有區別,我說的是編程思路,但是c語言可以容易實現複雜數據結構,同時通過系統調用而不是自己記憶系統調用號,大大提高了效率,時至今天用匯編寫程序的人可以說很罕見了!


大樹NB


----專注解答大學生就業問題,歡迎提問!----

看做什麼?

如果做嵌入式彙編和C當然是最優選擇。

python怎麼用。只不過目前上層應用比較多,所以就業機會比較多,或者薪資待遇比較高,但不代表C和彙編這種基礎語言就沒有用處,就薪資低。

只是代表不同層面的需求罷了。

不能站在不同需求層面去比對。


我的瀋陽


簡單的反駁,就告訴他沒有的C哪來的python,現在主流的python還是CPython,底層是由C語言支持的。

為什麼C語言不會過時

對於所有編程語言追求的無非兩種,提高硬件到的運行效率和提高程序員的開發效率,魚與熊掌不可兼得,在提高運行效率這一方面是無可比擬的,他只關心程序是否運行的快不快,才不關心你程序員用的爽不爽,而其他編程語言都是在提高程序員的開發效率上下功夫。而且現在的操作系統內核都是C寫的,他就像是互聯網的基石,怎麼會過時.


python為什麼會這麼流行

因為python簡單易上手,而且有豐富的庫支持,用於廣,可用於爬蟲、服務端、人工智能、數據分析、運維等,尤其在人工智能上的應用,把它推向了高峰。

總結

C偏底層,所以學起來難度會很大,而python更高級,簡單容易上手,對於編程新手來說建議去學python,而且對於目前環境,需求也不少。



測試軒


python號稱21世紀的VB,python簡潔易學,相當於我們站在了巨人的肩膀上。而C語言是基礎,是編程思想最好的體現。


分享到:


相關文章: