爲什麼這麼多人學不會C語言?

小松語錄


我本人是一名創業者,同時也是一名編程愛好者,在初創公司有著豐富的工作經驗,歡迎關注我,和我一起分享職場,科技,互聯網創業等方面的知識。

對於你的問題,我的答案是:C語言學起來不難,花點精力學習要入門也容易,但是要真正的用明白就會特別的困難。

筆者接觸和使用C語言編程已經有6,7年的時間了。你可能會問,學了6,7年應該很厲害了吧?如果說到精通或者厲害我真的不敢說,雖然經驗豐富,那也只是達到熟練使用的程度而已,現在在編程的過程中還是會時不時的踩到雷,掉進坑。

為什麼這麼多人學不會C語言,或者是隻懂點皮毛。小編把這些年遇到的一些人和事情與你分享一下便知一二。

學不好C語言大概有這幾類:

一、愛面子,特別喜歡吹牛皮的人

之前公司有一個做市場運營的同事,以前是做技術的後來轉做運營崗。每當公司有做技術的新同事入職的時候,都會問一下新同事技術水平如何,如果遇到畢業生,他就開始吹牛了,吹牛的大概意思就是:之前他幹過幾年編程,然後說編程很簡單,C語言更簡單,如果給他學,兩三天就搞定之類的話。剛入職的新同事當然是一臉懵逼。當你實際和這種人聊的時候,你問他做過什麼項目,一些技術的內幕,他是基本答不上來的。

二、不喜歡專研,沒有耐心,只是為了應付考試和工作的人

有很多畢業生,你問他C語言難嗎,學得怎麼樣?很多人會說:以前學校老師講C語言,我學得很好。老師講的都能聽懂,考試很好。可是當你告訴他們C語言要學會使用很困難的時候,大部分人都是疑惑的。項目中真正遇到問題,他們大部分人選擇的都是逃避問題,沒有去深究出現問題的原因。

C語言從誕生到現在已經很長的時間了,中間經過不斷的優化,最後確定了自己的標準。可是它本身還是存在很多的缺陷的。特別是數組、指針、內存管理這些,在實際運用的時候很容易出現問題。要非常謹慎。

要想少遇到這些問題,最好的辦法就是多多實踐,多寫代碼,經常使用調試工具進行調試。在最初做項目的時候,我曾經為了一個數組越界的BUG無休無眠的調試,直到最後找到了問題為止。

後來我轉做嵌入式底層驅動的開發,開始大量接觸指針。最開始的時候,指針有很多莫名其妙的問題,一不小心指針使用錯誤,指向不該指向的地方,整個系統就會崩潰,那個時候真的不知道痛苦了多少個日月,市場有想放棄的念頭,最後還是堅持了下來。

另外,還有涉及到變量的使用,內存管理,在調用內存塊後還要記得釋放空間,如果忘記就會導致內存空間不足,直至系統崩潰。

以上談的這些只是冰山一角。我不是技術專家,不過我要告訴你的是:聽明白、看明白不代表你懂了,你懂了不代表你會用了,你會用了也不代表你能夠用明白。最關鍵還是要多多去實踐。

不管你要深入任何一門語言,其實都不是那麼簡單的事情,最後以王國維的《人生三境界》與大家共勉。

古今之成大事業、大學問者,必經過三種之境界:“昨夜西風凋敝樹。獨上高樓,望盡天涯路。”此第一境也。“衣帶漸寬終不悔,為伊消得人憔悴。”此第二境也。“眾裡尋他千百度,驀然回首,那人卻在燈火闌珊處。”此第三境也。

喜歡我的回答請關注我,希望我的回答對你有所幫助。請記得在下方留言,我們一起探討。我可以給你更多的參考意見。


社會關注聚焦


應該準確來講,是為什麼這麼多人學不會編程,C語言本身來講有一定的難度,但畢竟不是最難的語言,所以學不好的主要還是自身的問題。作為用了十幾年C語言的程序員在這嘗試分析下為何這麼多人學不好C語言?

C語言本身存在一定難度

C語言相比現在比較流行的java,php,python等語言在入門的方面顯得稍微難點,特別是裡面的C語言,很多人放棄就是在學到C語言之後就可以慢慢放棄了,覺得這個東西太難了,理解起來太抽象,而且使用起來變化莫測。指針是學習C語言的一個檻,跨過去了也就一馬平川了。有多少人是倒在指針上。

當然除了指針C語言裡面的一些函數指針,指針函數,回調,遞歸都是善茬,總體來講和一些高級語言還是存在一定的難度。

意志力不夠,一直沒等到開竅

學習編程的前兩年是最難熬的,挺過去了後面的其實都好說,有些人就是進入技術崗位了,還是迷迷糊糊的,不知道到底做的是什麼,會有一天發現自己突然明白過來很多的事情,以前有些不明白的事情,突然覺得啥都明白了,看似是一件很神奇的事情,本質上來講都是日積月累構造成的。

很多人覺得自己學了這麼長時間還是很多不明白,就會對自己產生懷疑覺得根本不適合學編程,寫不了代碼,冰凍三尺非一日之寒,何況是寫代碼做程序,對於基本功的要求更甚。有時候傻傻的堅持不一定是壞事。

C語言沒有別的語言好就業

這涉及一個很現實的問題,學習了編程語言就得找工作,如果學了不好找工作,肯定學習起來的動力就不足,畢竟C語言的工作崗位絕對數量並不少,但是相比java,php,python等語言還是沒法比,而且對入門者的要求相對更高點,薪資上也不一定有多大的優勢,所以對於初學者沒有多大的吸引力。目前這也是當前的市場實際情況。

C語言是不是就不值得學習了?這種說法也是不對的,現在php,python底層語言的實現都是C語言,重要性不言而喻。不要聽信C語言已經過時之類的鬼話,出頭露面的事情少,踏踏實實做著底層的事情。有志於在軟件行業長期立足發展的話,還是值得好好學習一番。

有編程方面的疑惑可以關注大學上編程指南一起玩編程,覺得有道理就點個贊。


大學生編程指南


工作量大吧,

不過想想有不大的編程語言嗎?

歸根到底還是,它難以深度學習理解!


因為他們把學習C語言和學習低級編程混為一談。

學習如何真正利用C語言是非常困難。要做到這一點,你必須很好地瞭解現代CPU的工作原理。

例如你要知道一些程序集,知道內存是如何佈置的以及堆棧和堆棧是如何工作的,您應該瞭解內存分配是如何工作的以及如何手動管理您擁有的內存。

而且最重要的是,你也必須知道一堆C語言或者根本不公開的東西,或者是間接暴露的東西(常規性BUG)。您必須瞭解緩存層次結構以及如何讀取內存。

你必須瞭解操作系統是如何工作的。您必須瞭解像SIMD這樣的特殊指令集。

所以理解這大部分知識實際上就是正確學習C語言了。

C語言只是一個工具,你也可以使用其他語言的大部分知識,或者直接編寫程序集,或者通過生成LLVM字節碼,或者通過設計用於低層計算的DSL來實現...

所以如果用C語言編程,那麼你就必須瞭解底層的編程過程,否則用C語言是沒有意義的。

擁有更簡單的基礎,才能構建更復雜的事物!


黑喵


沒有練手機會

學不會C語言的主要原因還是C語言的練手機會太少了。

做web或者是桌面應用的練手機會遠遠高於C語言的。

以前桌面應用主要是採用C++進行開發的,現在不要說是否還是C++為主進行桌面程序開發,就連桌面程序都已經進入被淘汰的趨勢,連手機上的應用都是使用Java或者swift等語言進行開發,以後也許我們只能在嵌入開發中才能看到C語言的身影了。

一門語言連練手的機會都沒有,沒有練習的機會就等於沒有精通的可能。

請不要被各種語言排行榜中C語言的高居不下給欺騙了,這是依靠搜索活躍度排名的,因此沒有現實意義。

不過從另一個角度也可以看到這種諷刺,C語言無可取代,工作機會卻那麼少。




一門越來越邊緣化的語言

我說C語言越來越邊緣化,不是說C語言的地位不重要,現在很多的操作系統、數據庫等軟件都是使用C++語言進行開發的,可以說C語言或者C++語言支撐起了當今計算機界,但是令人諷刺的是這個支柱是由少數人構築的。



令人吃驚的是Java這麼流行,而Java這門語音竟然是使用C或者C++開發的,開發Java語言的開發者連使用Java語言的千分之一都沒有。

支撐這個社會運行的根基是由少數人創造的,而讓這個世界更加美好卻需要上千萬人採用最簡單的工具進行打造。

C語言難嗎?



難不難不在於這個語言本身,而在於這個語言本身的環境,C語言的環境是所有語言中最尷尬的,本身的改良和後續的發展遠遠比不上其他語言。

如果你看看其他語言幾年就更新一個版本就知道C語言多麼因循守舊了。

指針也許很難,但是也沒有難到不可逾越,難到不可精通,難到不可克服,既然是人類發明的語言,那麼人類就有可能會學會,一直強調語言的困難,卻不去想想工作不靠它你讓普通開發者怎麼精通?

假如可以依靠C語言養活一大批開發者,我可以保證現在什麼三大框架、微服務肯定是C語言架構的,可惜C不是這樣的語言,它養不活視它為神物的一大批普通開發者。


從頭開始自學java


一招鮮吃遍天。學好C語言基本就可以在軟件行業中領工資了。

常見的C語言教本,好多重在語法規則,脫離硬件基礎只講怎麼用,不說不清為什麼這麼用。C語言是一門面向過程的語言,JAVA、C++等是面向對象的語言,C語言對硬件的要求相對比較低,能夠很好的發揮硬件的性能,能夠做到儘可能的少佔用硬件的資源,目前常見的語言中只有彙編語言有這優勢,這就是C最大的優勢。另外,C語言不是為了專門為某個單獨的應用開發的語言,他可以實現多平臺的應用。

為什麼學習C語言比較慢,比較難?究其原因,你對內存的工作原理不懂。要學好C語言必須要明白C程序的代碼是怎麼存放在內存中的,這樣就可以明白全局量和局部量,也會明白函數調用,也有利於明白指針。

我的建議是,把C語言和單片機兩者放在一起學習會比較好。

建議:可以看看嗨翻C語言這本書,可以聽聽翁凱老師的公開課,也可以聽聽C君帶你學編程。

建議:選擇一個順手的編譯器,我喜歡用devc++。

建議:剛開始寫代碼,可以先畫流程圖,再用代碼實現。或者,讀別人的代碼,畫流程圖,再用自己理解後的思維寫代碼實現,反覆練習就可以。

建議:習慣美國人的習慣,C語言書中的指針等名詞再翻譯時,沒有很好的吻合我國的習慣,指針函數和函數指針就是典型的例子。



秦人在行動


主要是一般情況下用不上!

做web,有web開發的環境和語言

做app,有app開發的環境和語言

做winform,有開發winform的環境和語言

等等等

C在任何地方都能用上,既能寫框架,也能寫業務。但是,對於寫業務而言,C就弱雞了。比如說,用php寫個鏈接數據庫的例子,很快,很好理解。換成C來寫的話,就蛋疼許多,而且坑很多,不方便調試。

C做高性能計算開發,做底層框架開發,是它的優勢,也是它的主要應用場景,從這點上看,就註定了,使用它的人,必定不是新手菜鳥,而是底子不錯的人。


陳陳陳chenchen


c語言是偏底層的語言,每一個語句都對應著一條或者幾條彙編指令(這也是為什麼c語言的編譯器簡潔而優雅),它主要用於嵌入式,基礎軟件,驅動程序等方面的開發。大學裡的教程也偏重於計算機體系架構和數據結構等較為基礎的東西。即使學會了C語言的語法與含義,如果不理解相關的基礎知識,要用它開開發一個實際的應用還是很困難的,所以都認為c語言上手難。而Python,JAVA等高級語言則偏重於應用的開發,在不理解計算機體系架構及相關算法的情況下,通過語言本身提供的成熟模塊也能開發出有實際價值的應用,所以認為上手容易。


飛57709646


因為你知道的越多,你知道的空白越大,學知識就像在無盡的平面畫一個圓,你的圓越大,知道的越多, 那麼你接觸的未知越多,努力學下去, 不需要什麼都會的。


分享到:


相關文章: