我本科是通信工程專業,也是在大一上學期,僅有的幾門課中就有一門C語言開發與設計,巧了也是譚浩強的教材。后來無論我本科實習,還是研究生畢業的實習,正式工作都是使用C語言開發,那么針對這個問題,我來談談我的想法:
1:譚浩強的C語言教材與大一C語言課之殤
現在的譚浩強C語言教程已經第5版了,我們當時還是還是第2版綠色封面的,看現在的第5版的目錄內容,基本是一樣的。可以說譚浩強的C語言教材,從內容編排上來說絕對沒有問題,尤其在指針那些章節講的很全面細致。前面講程序順序,分支,循環等基本最簡單的程序邏輯,也很詳細。所以各個大學幾十年來一直選用譚浩強的C語言教材為大學C語言教材沒有任何問題。但是現實中很多大學生學習C語言都認為難,以我班當時同學舉例,很多高考成績很好的學霸,大一一上來就被C語言當頭棒喝,當時C語言這科平均就是60分左右,很多同學就因為大一這個C語言直接放棄以后走技術路線了。放棄以后做技術了,可能覺得剛入門的C語言這種編程思維都無法入門,覺得之后漫長的技術研發編程的工作無法勝任了,當時我C語言考了90分,直接因為這個成績拿了大一的一等獎學金,之后也是憑著這個成就感,不斷在C語言上深化下去:做單片機C語言開發,嵌入式Linux C語言開發,直到走向工作崗位,用C語言開發微波通信設備的控制程序。
那很多同學大一學C語言覺得學不懂?
其實這是我們基礎教育中編程教育的缺失造成的,你讓這些學霸們做各種難的數學題沒有問題,但是運用計算機編程的思維解決個初中的問題,可能都不知如何開始構建思路。這就是兩種不同思維的沖突,計算機就是依靠基本的順序,條件分支,循環這三大結構結合一定的數據結構,算法去解決各種各樣的問題。這種編程思維需要從頭開始建立和刻意練習的。但是現實問題很多大學C語言就是一個學期的課,二期一般都是大一一開始就上,大一上學期還有軍訓,漫長的寒假,本來學時時間就短,勢必老師們要壓縮課程時間,譚浩強這本書挑一些主要章節簡單過一下,然后到后面指針那難度高峰,草草略過,導致很多同學都不知所云了,當然成績就一般了,剛上大一還沒有適應要自主學習,要自律,還處于新鮮期,怎么可能沒事就動手刻意練習C語言開發,還是感覺和高中一樣看書做題,但是學編程能靠做練習題嗎?
所以結論:不是譚浩強C語言教材的問題,是C語言作為大學編程的入門課程,而且學好C語言必須要深入計算機內存結構和原理,學好指針操作。這不是簡簡單單一個學期的事,應該和高等數學一樣,要學習兩個學期,老師把課程進度放慢下來,講細,多做實驗課,自己還有課后做編程可以練習,才能練好這門課的基礎。大學應該把C語言提高到和高等數學同等重要的認識上來,做出改變,才能讓這門課不成為很多大學生勸退以后從事技術工作的夢魘。

2:學完C語言感覺沒啥用?不知道能干嗎?
回答這個問題的答案就是:你不要著急,你目前的見識還短淺,另外我也要贊揚這個同學,有了這個焦慮說明你內心向上,至少知道要學以致用,有這個意愿,很多同學大一上完C語言課直接就懷疑人生了,懷疑自己適不適合這個專業了,甚至很多從此放棄這個專業的追求,60分萬歲了,畢業考公務員,事業單位,我們專業就是去移動,聯通等運營商工作,不敢從事技術類工作了。
下面我詳細給你介紹一下C語言在之后能干嘛用,能做哪些東西
1)C語言單片機嵌入式開發
如果你是電子信息工程,通信工程,電氣,自動化等專業,甚至有些計算機專業,大三時會學單片機原理與開發這門課,學了這門課之后,你會快速知道你學了C語言能干嘛?到時你都不會來悟空問答再問這個問題。
C語言主要運行在一個叫單片機的芯片中,通過單片機的IO口與外圍電路相連接,如圖1所示,中間黑色長方形的STC芯片就是單片機,他通過IO引腳與這個電路板上的液晶(左上),液晶下面的顯示數碼管,左邊的8x8點陣顯示器,右下4x4的按鍵鍵盤,左上的L0-L7的發光二級管,左中的RS232串口芯片,點陣顯示器下面的蜂鳴器等等外面外圍器件相連接。那么C語言就在STC單片機中控制單片機的IO口進而控制外面連接的電路和器件各自完成不同工作:液晶顯示文字,蜂鳴器發出聲音,RS232接口可以連接PC,讓單片機和PC雙向通信等等。
怎么樣好玩吧?知道C語言能干嘛了吧,可能你會說,這些電路能被單片機中的C語言控制,在現實中又有什么用?你想想:你家里洗衣機面板上是不是一塊液晶顯示時間,熱水器上是不是也有,冰箱上也有。鍵盤:你想想你在ATM機上取錢時輸入密碼,那個鍵盤輸入怎么被系統感知的?到處都是的點陣大屏幕廣告,怎么顯示出來的。。。。。。下圖1這一塊幾十元的開發板,你看看能讓你會用C語言操作現實中多少東西,你會開發了,是不是已經有很多工作和公司向你招手了?
那樓主可能會問:那好了,我現在知道C語言能干嘛了,我就去買這個STC單片機開發板,然后我開始我的編程之旅。我還是勸你冷靜一下,畢竟搞單片機不僅僅是會C語言就行了,至少基礎課:電路與電子,模擬電子技術,數字電子技術,然后一邊學習單片機原理才能一邊用C語言實踐開發,其中遇到很多接口:RS232,RS485,USB,I2C,CAN總線等等,你還得學微機原理與接口技術。你看看怎么也得大三,大四了吧。
但是一心向學的同學都會在大二,自學這些科目,然后報名自己學校的電子設計競賽培訓,一路參加競賽,一路練習編程,然后你的未來就一路起飛了。那時回過頭再看你這個問題,你自己都覺得你幼稚了,有的時候一個問題的答案:不在現在,也不在別人告訴你,在于自己探索,努力,堅持學習,刻意練習。

圖1
2:嵌入式Linux系統C開發
學習C語言開發,另一大類應用就是基于Linux系統下的C開發,這個就要首先先學習Linux系統的應用開發,當然多少先提前熟悉一下Linux系統基本使用,命令行等操作。當然做基于Linux系統的C語言開發有兩大類:嵌入式Linux系統開發,另一個是Linux服務器開發。
這個標題先講嵌入式linux系統,很多工業設備的控制板中的ARM芯片里都是內嵌的Linux系統的,那么你用C語言在這個嵌入式Linux系統中控制設備的電路板進而就可以控制外圍設備。這么說可能你不懂,舉個例子,比如:你家的路由器,機房里的交換機,現在智能電動汽車里的中控電路板中芯片里都是嵌入式Linux系統。
那么你要是學習這個開發,大一的你難度比較大,要學習操作系統原理,編譯原理,微機原理,內存原理,多進程,多線程開發知識,還有計算機網絡,文件操作等。然后再學習Linux C應用開發,就可以實現上面說的應用例子了。我本人碩士畢業后第一份工作就是做告訴公路上ETC車道那個基站天線里的控制器的開發,里面就是基于嵌入式Linux的C語言開發,你看看C語言的用途你都想不到吧,在高速上ETC車道一過,里面居然和C語言扯上了關系,騷年們,學習吧!
3:C語言服務器開發
當然C語言在Linux系統的另一大應用就是,大型服務器的開發,現在服務器的系統基本都是基于Linux的所以服務器的開發,尤其是高性能,實時服務器開發都是基于Linux 下的C語言開發,而更多的是C++ 開發,這時你可能就得熟悉netty框架了,這個主從式的IO多線程模型,然后做一些實時通信類的開發,例如大型網絡游戲的服務端開發。我想如果你對游戲感興趣,而且樓主又是軟件工程專業,前面兩個領域:嵌入式都不是你們軟件工程專業的特長方向,如果你立志于C語言開發,這個Linux服務器開發,做游戲很適合你們專業哦!
4:IOS和Android中的C語言開發
當然現在最時髦的開發還是前端的IOS和Android開發,而且本人最近幾年一直從事Android開發,也用C語言寫過一些JNI程序,雖然大家都知道Android開發都是Java開發,但是java可以通過JNI接口方式調用C語言代碼實現對Android系統底層一些功能的調用。IOS雖然用OC開發,但是也是完全兼容C語言的,也可以做一些通用庫,被OC去調用。當然在前端開發里面流行的還是Java和OC,C語言不是主流但是一般都是比較系統底層的功能使用,不是主流,但是用C開發的工資可是高哦,樓主是不是也可以考慮往這個方向使勁呢?

如果樓主只是大一,我勸你還是按照上面我提到的那些基礎課先學習之后,再抓緊學習C語言編程,你現在的迷茫,是因為你沒有走的夠遠,當你堅持學習走下去,回頭之后都是笑談了!