關於學習基礎學科與培養編程能力的問答

有學姐即將去往UCSD讀CS的master,她本科是學EE的,正在提前補充知識。今天她向我請教了一些問題,我將我的回答貼在這,希望對其他人也有用。

 

問:

打擾又要請教下,你覺得編程能力的培養是需要按部就班系統學習操作系統、數據結構、算法這些之後才能進行,還是可以像本科我們學C那樣,直接看這類語言然後參照一些樣例就可以開始自行寫程序了呢。
那邊聽課還好,可是做作業有不少要實際寫程序的,所以我覺得有必要再鍛鍊一些寫程序的能力,操原算法我已經開始聽視頻課了,也看了一些書,可是這距離實際編程還有不少距離,見效慢,所以想看看有沒有可能儘量抄捷徑

 

我的回答:

我先分別說一下這幾門課吧:

操作系統:這個主要是講操作系統的實現原理。據大部分專家稱,如果想在計算機領域有很好的發展,這是必不可少的一門課。但是,就我個人的淺薄經驗看來,這門課與大部分實際編程工作沒有太大關係,因爲現在比較流行的程序設計語言都是想方設法地屏蔽掉計算機的底層實現,讓使用者感到自然、方便。所以我想專家們所說的“計算機領域”可能是指計算機科研領域以及一些計算機底層開發領域。

數據結構:個人感覺,這個對實際編程最有用。有計算機大牛說過“程序=數據結構+算法”,是個程序都離不了數據結構,而數據結構選擇的合理性會直接影響你的開發效率和程序質量。另外,數據結構方面的知識是研究算法的最重要基礎之一,故其重要性不言而喻。

算法:從“程序=數據結構+算法”可以看出算法也是計算機程序的重要組成部分。但這個公式所說的“算法”是非常廣義的——任何一小段邏輯(哪怕只是一個條件分支)都可以被稱爲“算法”。這不同於我們算法課所傳授的算法知識——算法課所授大都是動態規劃等比較複雜的算法——因爲簡單的邏輯正常人都懂。就我三年本科學習的情況看來,除了算法課的作業,其他課的作業幾乎不涉及到算法課所授的算法知識。這也是爲什麼很多在校學生對算法這門課的實用性表示懷疑的原因。而老師們面對學生的懷疑,往往回答:“等將來你們就會覺得算法是最有用的課了”。就我目前的經驗看來,如果你想搞科研,算法課的內容很重要,因爲你要經常利用一些複雜的算法或其思想去優化一些已有模型。但是如果你想搞應用,也就是IT行業中一般進行的軟件開發,算法也該有所涉獵,但不必深究,需要用到時網上一搜都有現成的可以copy。當然,在你將來找工作之前一定要把算法的基礎夯實了,因爲找工作時的面試和機試幾乎必考算法。

 

由上面的分析可以看出:

基礎學科對編程能力的培養有一定的作用(其中又以數據結構最爲重要),但是不起主導作用(起碼在初期是這樣的)。編程能力的培養主要是靠多寫代碼,這點是沒有人會否認的。想想著名的北大青鳥IT培訓,他們的一些學員原本所學專業跟計算機毫無關係(也就是沒有計算機基礎學科的知識儲備),但是幾個月培訓下來一樣能成爲編程高手。他們在培訓期間主要做什麼呢?不是聽課,而是做項目,一個接一個的軟件項目,每天不停地敲代碼。編程是技術活,技術活做的好的都是“無他,唯手熟耳”。

 

你說需要一些捷徑,我在這裏給你一些建議:

1.你可以在集中學完數據結構後就開始鍛鍊編程能力。

2.你有了C語言的基礎就成功了一半了,如果C語言生疏了的話,建議先試着動手開發一個“智力問答闖關”之類的控制檯小遊戲。這樣可以熟悉C語言,同時鍛鍊編程能力。不必爲此先專門複習一遍C語言,要善用搜索引擎,不會的現查現學,這是現代程序員最重要的能力。

3.目前最主流的程序設計語言分爲兩類:面向過程的和麪向對象的。C是面向過程程序設計語言的典型,我覺得你很有必要學一門面向對象的。而我推薦你學習Java,就是我當初給你們開發門禁系統PC端時用到的那個語言。有了C語言的基礎,你學Java應該會覺得很簡單(可能只是有些觀念需要從面向過程轉變成面向對象)。你可以先粗略過一下某本Java入門教程,大致瞭解這個語言能做什麼、大概怎麼做,不用瞭解太細。之後你可以試着用Java做一個簡化版的QQ(能支持兩個人通過網絡聊天即可)。做到哪裏不會了,就現查現學。等這個小項目做完,你也就學會Java了,同時編程能力也得到了鍛鍊。

4.學會了C語言和Java就相當於你掌握了大部分程序設計語言,今後需要用到什麼新的語言,你可以在三四天內學會它。這時你可以試着做一個小型論壇網站——先了解需要用到什麼語言和軟件工具,然後邊學邊做。這是非常好的鍛鍊編程能力的方法。

 

我這裏說的是比較普遍的情況,不太具有針對性,如果你能向學長學姐要到你們將要學習的課程清單,也許我可以幫你制定出更有針對性的方案。

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章