c語言未來的前景(比如就業)是怎麼樣的?
和一個計算機專業學生討論了一下關於c語言的問題,聊到了c語言未來前景的話題。
我認為c語言是系統和軟體底層不可缺少的,而且因為現在java、python、ruby等不涉及到系統底層的語言的泛濫,會導致精通c語言的人才(注意,是精通c語言)更加缺乏。將來的方向是家居智能化以及各種雲的理念。而家居智能化就必然會需要嵌入式技術以及c的底層驅動。所以我認為c語言未來的作用會很大,並且就業前景也會很好。那名學生認為c語言可以作為基礎學習,但是真正的軟體工程裡面是用不到c語言的。想要來徵求一下各位專業以及非專業人士的意見。不知道大家都有什麼真知灼見。
讀書的時候我也以為有C走天下,現在我只知道不多學幾門不同的語言是最大的失誤。獨戀一門語言會限制程序員思維的廣度,錯過了前人閃亮的設計。每種語言都有自己特別適用的地方,只用一門語言有時候會讓自己很累。
針對題主說的嵌入式對C語言的需求,其實micro python和mruby都可以跑在MCU上。隨著MCU性能的增加,我認為這些更好使的高層語言的應用會更廣。
--針對評論的回復:
驅動要做的事,不過是讀寫寄存器、處理中斷、搬運數據(DMA/PIO)。高層語言可能沒有提供直觀的處理手段,但只需要用彙編語言編寫薄薄的一層代碼,然後用高層語言的介面進行封裝,跟著就能提供給高層語言使用了。
在寄存器位於內存空間的arm平台下,C語言可以直接使用指針訪問寄存器,看上去挺直觀,是一個優勢。但對於有專屬IO空間的x86平台,C語言也需要調用彙編指令去讀寫寄存器,這跟其它高層語言的處理手法是一樣的。
另,對於驅動這樣的軟體而言,重點是驅動框架(譬如mmc框架、usb框架等等)而不是跟硬體打交道的代碼(也就是通常人們口中說的驅動)。驅動框架向上提供了子系統的功能,向下限定了底層模塊需要提供的介面,是對子系統的抽象和管理。要做出一個好的驅動框架,既要了解通常IO控制器的能力,也要熟悉相關的IO協議,還要熟悉內核提供的譬如內存管理、互斥等機制,同時要提供恰到好處的抽象,其工作比跟硬體打交道的底層代碼要複雜。跟硬體打交道的底層代碼,其難點在調硬體,個人覺得挺無聊的。
這種問題不要去問某某大學專業的學生,學生對業界的了解是非常非常空中樓閣的,僅比他們的老師(不但不懂,還行騙)好一點。
從業十幾年,現在還在行業一線打拚,嘗試給年輕人分享一點經驗。整個行業以複雜程度來衡量,是一個大概金字塔的分布,底層是一些簡單的,基於個人和較直觀可理解的應用,如大家經常接觸的手機應用,網頁應用,等。中層是一些小規模團隊合作可以完成的,對性能和規模等方面要求不算太高,大多可以一次成型或者接近完成的項目;在頂端則是一些高複雜度和高要求的項目,例如大型的工業項目,高性能或者高吞吐量項目,和現在很流行的大型互聯網服務等;很多時候複雜性是和規模成正比的。在這個層次中,越接近低複雜度的項目,對語言的要求越少,更多的語言都可以勝任,更容易被分工和替代,例如可被外包的網站或者ERP等等;在這些項目中,除了少數特殊領域例如嵌入式開發等,C語言幾無立身之地,學習成本高而開發效率低,接近底層帶來的性能等可控性方面的回報得不到體現;在中層項目中,C語言的優勢也不強,例如知乎,豆瓣這樣的網站,可以用更高級語言開發的更快,更敏捷,更少「機器級細節的干擾」;
只有到了高複雜度項目中,因為對規模、性能等方面的追求,才是C/C++語言一展所長的空間,例如互聯網搜索引擎,高性能科學計算,大型網路遊戲伺服器等等。所以,如果目標是更大比例的程序工程師從業者,C語言學習可以改善對程序、計算機體系的理解,對面試、後續的學習有些幫助,而對直接的工作業績幫助不大;如果目標是高複雜度專業領域的碼農,C/C++還是要好好學一下的,可以翻翻近幾年的百度騰訊股溝畢業生招聘試卷,另外不得不說,自學到脫穎而出的程度,對一個非專業大學生而言,還是很困難的一件事,如果以python等語言上手培養編程的熱情興趣和習慣,能夠快速融入一個工程師社區和團隊,是向更專業工程師攀登之路的一個良好起點。個人意見僅供參考。這是個挺一言難盡的問題,所以我部分同意當前得票率最高的匿名用戶表達的
由於LZ不是計算機專業,從提問來看,也沒有想要進入這個行業的想法,所以我覺得針對LZ的這個問題,從我自己的從業經歷來看,可以給出如下的比較粗略的說明:這種問題不要去問某某大學專業的學生
- 如果一個計算機業的從業人員,工作主要和機器打交道,C是不錯的語言,因為C語言的思維方式和硬體運行的方式很匹配
- 如果這個計算機業從業人員,他的工作主要是和人打交道,C一般來說就會變成陷阱,因為C語言的抽象度不足以應付複雜多變的社會環境
拿我自己來舉個例子。我自己開始的工作,是負責編寫匹配公司硬體的軟體,所以採用的是C/C++,隨著公司硬體的發展,管理型的軟體逐漸被重視起來,所以後面針對管理服務端,採用Java作為主力語言,在客戶端目前還仍然保留使用C/C++
如果從計算機語言的角度來說,拋開各自不同的語法不談,不同語言的區別我覺得僅僅在於程序運行時動態執行能力。
C語言編寫的程序,如果不考慮使用一些技巧(指針),很難實現程序運行時的動態處理能力,而且即使模擬了動態性,也有照貓畫虎的無力感;而C++,Java,包括很多的腳本語言,都在強調程序運行時的動態處理能力。
從語言角度出發,C語言的優勢就是在確定運行條件下對程序運行的時間、空間的優化能力;而其他在程序運行時支持動態處理能力的語言,優勢在於在不確定的運行條件下(不是完全不確定,而是部分不確定),能夠很安全的運行。多學個三五門編程語言也就花你一兩個月打dota的時間。
別太當回事。
核心競爭力永遠不在語言上。術業有專攻,但是我自己感覺真的是被C折磨到精通這個級別,其它大部分語言都是分分鐘搞定。舉個非常不恰當的例子:一個可以細到每一顆螺絲都可以自己磨出來做自行車的老師傅,人家拿著輪子,車架子,車條組裝自行車會慢?
科班程序員都會經歷 c語言包打天下--》c語言毫無用武之地--》到處都是c語言 這樣的心路歷程,眼界問題,有空再展開。
太low,懶得提意見,總之大家要引以為戒。。
經過提醒,查了一下,華東理工是211
會說這種話一點都不奇怪。。。另外,雲計算的風刮過,智能家居風又吹過來,還是雲家居。。。
還嵌入式技術。。c底層驅動。。為什麼一定是c?為什麼不嵌入腳本去做?還不是因為你這樣的人太多了,好好學習知識不好么,學人家吹牛逼。。所以你也不冤枉,各打50大板,退堂
就不能踏實點學學好說得好像你不會其他語言,c語言就能學得很好一樣!那位同學,說得好像他不會c語言,其他語言就都掌握得很好一樣!-------------------------嵩山派中一名瘦削老者走了出來,正是『仙鶴手』陸柏,朗聲道:「左掌門神功蓋世,眾所共見,兼且雅量高致,博大能容。這位岳大小姐學得了我嵩山派劍法一些皮毛,便在他老人家面前妄自賣弄。左掌門直等她技窮,這才一擊而將之制服。足見武學之道,貴精不貴多,不論那一門那一派的武功,只須練到登峰造極之境地,皆能在武林中矯然自立……」他說到這裡,群雄都不禁點頭。這一番話,正打中了各人心坎。這些江湖漢子除了極少數高手之外,所學的均只一派武功,陸柏說武學貴精不貴多,眾人自表贊同,這些人於這個 『精』字是否能夠做到,固然難說得很,至於『多』,那是決計多不了的。---引自金庸&<&<笑傲江湖&>&>
真正的軟體工程是用不到c的。。。
這麼大的嘈點還有什麼好爭的。。。不過題主也看法不對啊,硬體畢竟大多數方案在ic公司解決,即使流行也不一定能有更多的機會術業有專攻,精通c語言的人永遠有自己的一畝三分地。
我開始第一份實習的時候我只會C語言,當時面試問了我是否了解C語言函數參數的壓棧方式和Pascal語言的區別,我答上來了,於是就招去做Java開發了。- -b
學校里不管怎麼學都跟實際工作有差距,所以打好基礎,剩下的事情可以在工作的時候再去學習。C語言作為一種基礎語言,學得好一些總是不錯的。
再者,現在不是沒有C語言的項目啊,nginx,php插件不都用c寫么。如果你在學校就能給nginx提patch,可以微博問問淘叔度,我認為99%都會要你的。精通C這是只有大神才敢說的話,甚至謙虛的大神都不敢說自己精通C
學語言有點像練武功,你要有一個語言打下基礎,而有了基礎後在學習其他的語言也就容易很多,因為很多邏輯都是相同的,只是實現手段不同。計算機最重要的不是具體實現方法,而是一個思路思維,這才是關鍵。
如果有可能的話,多學幾門語言,互相印證來看,進步會快很多。C語言就那麼多語法,要精通幾天的功夫。但是要應用到具體的機器上就難了,不同機器的規則不一樣。所以對於底層開發,學習C語言的成本可以忽略不計。
不覺得光會C語言有什麼不妥,既然是學編程,自然會對數據結構、演算法、設計模式、編程思想之類的有所了解(好吧,我承認我不懂這些),所以根本不用去考慮就業問題,因為有些公司看重的並不是你會哪種語言,而是邏輯能力,比如微軟、google,因此大可不必糾結於會哪種編程語言。我同事的老公,做了兩年Java以後轉去做C了,我老婆以前的同事,剛畢業時根本不會任何編程語言,但是對演算法掌握的很好(人家是數學專業的),去微軟面試,人家根本不看他編程語言的能力就錄用了。 編程語言這種東西,多數都是國內公司比較看重,其實會不會編程語言不那麼重要,畢竟只是個語法問題,重要的還是數據結構、演算法、設計模式、編程思想這些抽象的東西
第一、要專註,語言太多了,精通一種語言並不容易。 Python Php Perl Ruby Lua C C++ D Delphi Haskell Java Lisp C# ObjC ... 很多人就是一會兒學學這個,一會兒學學那個,最後寫什麼小玩意都要去Google一下,最後他的工作效率可能只有別人的1/10。
第二、搭配要好,至少精通一門動態語言、一門靜態語言吧,Python這種萬金油型的語言我看是必學的,C 語言和 C++其實可以一起學(根據需要可以轉換到 Java,C#,ObjC,這種轉型很容易)。第三、重視背後的東西,比如重構、演算法、設計模式等等。事實上各種語言都是有需要的,只要學到精通,都有前景。你覺得c的需求大,事實上供給更大,大多數學校的《演算法與數據結構》都是基於c的吧,教Python,ObjC 的學校倒是很少。換句話說,學什麼沒那麼重要,重要的是學到什麼程度。那個同學憑什麼那麼說?別的不說,他敢說自己學明白C語言了嗎?其他的領域用不著?前面的語言編譯器哪個不是C語言實現的?還有題主啊,咱們學生要踏實學技術,分析走向這種事情還是少摻和比較好。會被笑話的。一句話,做的太少想得太多。
工具有沒有前景是工具的事,而你的前景不光是工具的前景可以決定的。
在上一家公司遇見無數編程大牛,其中不乏有cocos-2d源碼貢獻者,android google源碼貢獻者,他們也只敢說熟悉多門語言,也沒牛到敢說精通C,如果C你能到精通級別,就不會在這提這種問題了。副給你個有趣故事鏈接如何用各種編程語言殺死一條龍http://www.360doc.cn/article/175820_340612477.html
畢業了,實用技術很重要;還沒畢業,應屆生有機會進大公司的,C這玩意一定要搞通透,大公司那幫淫喜歡面試這個!!!!
單學C是沒前途的。關鍵看你為哪個平台編程。面向嵌入式系統的C語言工程師, 隨隨便便萬八千薪水,但這要求你對嵌入式微電子非常了解。
推薦閱讀:
※C語言怎麼寫窗口化程序?
※如何理性的評價各種編程語言的優劣?
※使用 C 語言進行伺服器端編程,未來職業前景與發展前途怎樣?
※如何評價翁愷老師?
※如何用 C 語言解決兩個大數相乘問題?