-
1 # Cameronsino
-
2 # 合肥隔壁科技
什麼是系統程式設計能力?
首先,我們知道,計算機科學有兩類根本問題:
①理論:演算法,資料結構,複雜度,機器學習,模式識別等。理論問題注重的是深度,它是對在給定的計算能力約束下如何更快更好解決問題的追問。
②系統:作業系統,網路系統,分散式系統,儲存系統,遊戲引擎等。系統注重的是廣度,它是對一個現實需求如何在眾多技術中設計出最多又快又好又省的技術組合的追問。
根據以上問題,主要是屬於系統程式設計能力這塊的問題,這類能力由於沒有簡單高效的考察方法,所以很多系統的苗子都因為缺少激勵和正確引導而隱沒。比爾蓋茨曾遺憾的表示,現在許多學習程式設計的人常把程式設計看作解各種腦筋急轉彎的問題。而其實做系統,不是讓你“重複發明輪子”,而是“重新制造輪子”才行。可以這麼說,系統的程式設計能力正體現在“重新制造”的能力上。
我們不妨問自己一些問題,當一個已有的部件不完全符合你的需求的時候,你能改進它嗎?如果你用的部件中有bug,你能把它修好嗎?在網上繁多的類似功能的部件中,誰好誰壞?為什麼?差別在哪?一個開原始碼庫,你能把它從一個語言翻譯到另一個語言嗎?從一個平臺移植到另一個平臺嗎?能準確估計自己翻譯和移植的過程需要多少時間嗎?能準確估計翻譯和移植之後效能是會提升還是會下降嗎?
總的來說,系統程式設計能力體現在把沒用的程式碼變成有用的,把現有的程式碼變得更好,體現在能根據一個做好的輪子畫出輪子的設計藍圖,並且解釋出設計藍圖中的關鍵所在,對於哪些是次要的,哪些是不容觸碰的,哪些是可以改進的都要了然於胸。如果你一點不懂理論,還是應該學點的。對於系統性能的設計上,不懂是絕對不行的。
怎麼提高系統程式設計能力呢?
①多造輪子
我們都知道,畫雞蛋和會畫雞蛋只是一字之差,但是差之毫釐可能就已失之千里,會畫雞蛋的人就是從多畫雞蛋開始的,本質上是馴服你的手指,感受陰影線條和筆觸。所以,自己多寫點程式碼也是一個道理。當你把部件一個個都換成自己手寫,寫出個編譯器、渲染器、作業系統、web伺服器或者是web瀏覽器,然後再和現有的部件比一比優劣,注意,從效能到易用性,一定要仔細對比,發現自己的優點和不足,然後認真改進。
達芬奇雞蛋素描
②多拆輪子
雖然人們常說,多研究別人的程式碼怎麼寫,但是實踐起來卻沒有那麼容易。原因是許多輪子的設計思想和技術都無可厚非,但是設計和製造過程卻雜亂無章,亂成一團,所以多研究別人程式碼的前提是輪子相對簡單,如果輪子相當複雜,那就只好量力而行,淺嘗輒止了。題外再提一點,其實輪子不好拆是一個非常嚴重的問題。重複發明輪子固然是時間的浪費,但當輪子複雜而又不好拆的時候,尤其是原來造輪子的人已經不在場的時候,重新發明和建造輪子往往會成為無奈之下最好的選擇。
小結
回覆列表
自學程式設計大約需要兩三個月,每天抽出兩三個星期把基礎全部學習一遍,其他都是建立在基礎之上的東西,學起來就會很快。
以下是關於零基礎學習程式設計的建議:
1.準備一個相對好的執行速度快的電腦,然後安裝一個作業系統(建議Windows作業系統)。不要讓一臺速度緩慢的電腦浪費你的時間。
2.選擇一個正確的打字指法。此外,還要熟悉一些Windows快捷鍵和文字編輯器。
3.學習計算機科學,第一步就是學習一門程式語言。下面就是這種語言的利弊:
a.C語言
【優點】:你可以學習到許多底層的知識,給你夯實基礎。
【缺點】:C語言不支援面向物件程式設計,你很難使用它直接找到一份工作
b.C++
【優點】:很多用法和C一樣,但是卻支援面向物件程式設計
【缺點】:有太多的知識點要學習,相對比較複雜的語言,有多個版本要選擇
c.Java/C#/Python/JavaScript
【優點】:簡單的語法,隱藏了低層次的知識點,可讀性強,學好它容易找工作
【缺點】:你將丟失很多底層的知識點
推薦自學程式設計的教科書:
《C程式設計語言第二版·新版》