初學程式設計的朋友,總覺得寫程式是件單純的事情:知道如何使用一種語言,熟悉一個開發環境,了解系統的程式設計接口(API)就已經能夠成為一個合格的程式員 了。在我剛剛接觸程式設計學習的時候,我也是這麼認為的。這種認識不是沒有根據的。在我有這樣的認識的時候,我已經會用basic寫一些小程式,甚至照葫蘆畫 瓢寫了一些遊戲動畫界面了。在上個世紀末所謂的計算機的“遊俠”時代,這個看法是有其合理性的;但是今天回過頭來看,這些最初的認識實在是膚淺的。今天軟 件開發已經成為一個成熟的行業,是以如果想在這個行業中生存,核心競争力是必須的。學會一種語言,熟悉一個開發環境,掌握API的程式員永遠隻能位于這個 大廈的最下層,僅僅比程程式設計愛好者強一些。如果想擺脫這個局面,就得知道哪裡才是這個行業的核心。
軟體行業,就其功能而言就是一個工具行當,和會開車的司機,會開機器的勞工沒有什麼差別。是以僅僅作為工具的操作者, 一個程式員是不值錢的,因為他隻是一個更為進階的工具。一個有身價的程式員他之是以值錢,是在于他的創造力。程式員的創造力并不在于會畫個界面,會用開發 環境什麼;而在于他對計算機這個行當的根本的掌握。 計算機是應用數學和電子工程上派生出來的一個果子。是以程式員的核心競争力在對數學和硬體知識的掌握。是以這個世界上隻有兩種程式員永遠不會待業,那就是 算法高手和硬體高手。 但是對于軟體專業出身的程式員來說, 算法是最核心的競争力。我和很多程式員相處過,交流過。他們中的大多數都有對失業的擔心,即便是已經在大公司從業了很多年的程式員: 軟體技術發展日新月異,沒人能永遠跟住技術發展的腳步,總有會被淘汰的時候。 但是那些着眼于算法的程式員大多沒有這種憂慮,年齡的增長隻能讓他們更加有經驗,變得更吃香。我認識的一個做圖像處理的朋友,寫出來的程式一點可讀性都沒 有,而且很不規範,動不動就crash了。但是老闆無論換誰,都不會換他,因為他的算法性能高,能實作别人不能實作的圖像檢測能力。而那些幫他改程式,寫 注釋的“職業”程式員, 盡管寫出來的程式正規工整,但是工資漲不了多少,而且還得擔心哪天就開路了。 相比之下, 可見一斑。
是以,學習程式設計的朋友們,不要去太過追求和寫代碼相關的能力,抱着本MFC手冊當寶典了,而是應該耐心下來關注最基礎的資料結構和算法,把他們搞透玩熟。 這是基礎中的基礎,核心中的核心;沒有這些,以後的會很難得到提高。而且這些基礎可能在以後的十幾二十年裡面,你都不會再會有時間和精力去重新紮紮實實學 一遍了。
此外,我還想補充一點。是不是這麼說軟體工程就沒必要去學了? 軟體工程是計算機科學中比較偏向工程方面的一個比較新的分支,對于開發而言也是至關重要。是以這個肯定是要學,而且要學好,此外在工程上,程式架構,類庫 的掌握,都是必須的知識。 但是掌握這些知識隻能讓人成為一個合格或者出色的工匠, 但是永遠成為不了一個有創造力的大師。這個社會上,工匠成千上萬,多你一個不多,缺你一個不少;但是大師卻是寥寥無幾。在計算機行業,更是如此。
本文轉自nathanxu 51CTO部落格,原文連結:http://blog.51cto.com/nathanxu/110075,如需轉載請自行聯系原作者