您的位置:首頁>正文

李開複 回答如何學好程式設計

李開複

首先問你一個問題:你們在學校都學些什麼課程?

問這個問題的原因是, 我認為學校的電腦科學基礎課很重要。 如果你所在學校的課程設置合理,

那你應該先把主要精力花在這些基礎課上。 很多學生看到基礎理論就茫然, 不知道這些圖表, 符號, 甚至硬體的知識對將來的軟體發展有什麼用。 用處大得很哪。 比如, 作業系統課裡講到的多執行緒的東西在系統程式設計裡很有用。 又比如, 儘管你將來不會去涉及電腦的硬體, 電腦架構裡的知識對分析演算法的性能(快慢等等)很有用。 可以把電腦語言和開發工具比作文字, 而把電腦科學的知識比做思想。 只有思想, 不會行文, 不行;但是, 行文流暢, 思想空洞, 也不行。 大學的階段正是打好基礎, 豐富思想的年代。

成為一名好的程式師, 不是簡單地通過學幾門課程就能做到的。 我個人認為成為一名好的程式師的要素有:

1。 扎實的基礎知識;

2。 很強的解決問題的能力;

3。 熟練的程式設計調試能力;

4。 創新能力;

5。 團隊合作能力;

6。 持續的自學能力;

7。 好奇心

這些能力和品質(甚至可以說是習慣)都應該從大學階段就著手培養, 並且從身邊的小事開始培養。 比如, 很多中國的大學畢業生都缺乏程式設計和調試經驗。 學習C語言, 考試過關就算學會了。 課題專案中, 只要程式能夠編譯, 運行, 並且輸入輸出滿足要求就了事了。 但是, 寫程式的時候是否想過如何把程式寫得更加精煉, 高效, 高品質?對程式調試中出現的問題是否刨根問底知道原因, 還是不求甚解搪塞過去算數?還有, 很多中國的大學畢業生對於知識的掌握膚淺, 機械,

沒有好奇心, 不會刨根問底。 比如, 學會了C++, 有沒有看過一個object在編譯後, 在彙編代碼中是如何被初始化的?這個object的各個成員在記憶體中是如何放的?在一個成員函數被調用的時候編譯器在彙編代碼中加入了哪些額外的動作?虛函數的調用是如何實現的? 這些東西恐怕在程式設計語言或編譯原理中都沒有詳細提到。 但是, 你是否有過好奇心去知道?最後, 一些中國學生的大問題就是死記硬背, 沒有學到某種演算法技術的根本原理, 沒有應變和創新的能力。 比如, 有個問題是如何在不用額外記憶體的情況下把一棵樹的同一層節點都連起來。 很多學生都能夠回答這是一個廣度遍歷的問題。 但是, 課本上說了廣度遍歷是一定要有額外資料結構輔助的(佇列)。
所以, 不給額外記憶體怎麼行?請看, 課本上說的用佇列的方法記住了, 但是就是不知道為什麼要用佇列。 如果深刻掌握了這個佇列的作用, 那麼這個問題是很容易的。

程式設計語言其實是一個很初級的工具, 但是你又必須熟練的掌握它, 學懂一門程式設計語言就好像學會了寫字, 但是會寫字的人不見得會寫文章, 而會寫文章又不見的寫得好。 可是如果你不會寫字, 那就一定寫不出文章來。

首先, 在學習C語言之前, 應該學好電腦基礎。 裡面的很多概念對於C程式師都是非常重要的。 如果你在著手學習C之前, 或者已經開始學習C, 但是碰到了很多問題, 應該再把電腦基礎的書拿來好好看看。

如果你有足夠的耐心, 十足的毅力, 應該再學習C語言之前學學彙編, 這會讓你對許多比較細膩的概念有清醒的認識, 如果你不是那麼有耐心(恕我直言, 大部分人可能沒有)。 那麼可以在看完一遍C語言的教材後再看, 但是一定要看一遍, 相信我一定會受益匪淺。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示