關於程式設計師必備能力的一點思考

溫謙發表於2012-04-27

圖靈社群是一個好地方,很多牛人在上面分享心得,俺不是高手,但是也扔塊磚頭。

本文所說的所有內容限於技術類工作,是寫給真正希望做技術的人。我個人並不認同很多人說的打算“幹幾年技術轉管理”這種說法。我覺得如果是大學畢業生,你要這麼想,其實根本就不喜歡做技術,與其繞彎子不如找更直接的發展路徑。寫程式碼本身就很辛苦,如果沒有內源性的驅動力,根本沒法堅持到你能做的很牛逼併成功轉到“管理”的位子。

其實做任何職業,都是相通的,根據我個人的一點理解,任何人要從事一個技術類職業,需要有三個方面的知識或者能力:

1:理論基礎

理論基礎非常重要,它實際上很大程度上決定了一個人最終能能飛多高。

比如要做和視覺相關的職業,無論是畫家、美工還是攝影師,必須要一些理論作基礎,比如平面構成、色彩構成等等。這個思路可以套用到各種行業。

比如要就當機械工程師,就得把力學和機械原理學明白。我認識一個汽車系畢業,已經轉行很多年的哥們,有一次在隨便聊天的時候,我說起不理解四輪驅動的汽車,前後輪之間怎麼實現不打架的,這個哥們兒順手找了一張紙,一邊畫圖,一邊講,最後畫出了若干我看起來很複雜的圖,不同方向的齒輪互相套在一起,給我從頭到尾講了一遍,讓我肅然起敬。我相信這哥們上學肯定學得很不錯,而且無論幹什麼,應該都能幹得不錯。

就好像如果你是計算機專業的,如果能清清楚楚地講清楚把CPU是如何從記憶體取指令並執行的機制比劃清楚,其實足以勝任大多軟體開發工作了。我相信在計算機專業的人裡面比例也不太多。而如果你能再進一步,把編譯器的原理說得清清楚楚,就更是高階人才了,甚至有可能當大師了。再如果你的數學又學得很好,就可以當科學家了。就我自己來說,我覺得編譯原理這門課是我智力的上限了。

這些基礎理論的認知是非常穩定的,不會快速變化,通常大學甚至中學階段基本上就定了。所以上學還是很重要的,常聽人說“重能力不重學歷”,我覺得應該是 “重學歷更重能力”。

2:工具知識和經驗

有了基礎理論,除非你專業做研究,否則必須要藉助於一些工具,才能真正做產品。軟體開發的領域非常廣泛,工具種類繁多,任何人也不可能什麼都掌握,但是掌握工具總體來說要比掌握理論容易得多。無論是掌握一門或幾門程式語言、框架或者具體的開發環境,都不是什麼難的事兒,如果對這個都覺得困難,就不適合幹這行了,至少這些比學編譯原理容易多了。

但是這裡面有一個比較嚴重的問題,就是變化太快,人們常說程式設計師吃青春飯,其實變化快的就是這些工具,幾年就一個新潮流。這確實是一個問題,如果一個人總是把時間花在學各種各樣的工具上,確實是一件很辛苦,也沒有前途的事兒。

但是這裡有兩個因素可以考慮:

  • 變化快的往往是和介面相關的東西,背後的邏輯其實很穩定。
  • 即使是介面,本質也沒變,變化的是形式。20年前用DOS自己畫介面,10年前用MFC/Delphi拖控制元件,現在用HTML/CSS描述介面,本質其實都沒變,還是那些東西——選單、按鈕、資料表格、單選框、多選框之類的。

因此,對於相對不穩定的工具知識,可能需要注意兩點:

  • 尋找其中穩定的、本質的東西,給自己選好技術路線,總體原則是跟上但不冒進,新技術總是有一些好處,才會成為被廣泛接受的新技術,所以要有選擇地跟上。對於一些主流的技術路線,其實演變並不那麼快,如果每一步都跟上,並不困難,儘量別缺課,缺了課再補課,就費勁得多。另一方面,儘量尋找大眾化的、普遍接受的技術,要相信技術是為產品服務的,不要為了技術而技術。

  • 避免迷失在這些東西里面,特別是不要跟風。千萬不要看什麼熱門就趕緊上,新技術在剛剛開始的時候,會的人少,工資自然高,但是你要知道的是,這種門檻並不高,窪地很快就會被填平。如果你總在追這些東西,根本無法積累什麼長久的東西,會累死。總有一天你的腦力、體力跟不上。

我個人覺得應該怎麼做呢?就是要充分重視第三個方面的積累——領域知識。

3:領域知識

開發任何軟體,總是要給某個特定人群使用,解決特定的某個領域問題的。因此必須要對這個領域的知識有所瞭解。而對於某個領域的知識,其實是非常穩定的。有人說,一個開發了5年財務軟體的人,可以到任何一個公司去做CFO。這句話有點道理,財務規則和制度是非常穩定的,幾十年也不會有大變化,而要開發財務軟體,就必須要對這些規則制度非常瞭解,如果你能充分了解其中的背景知識,可以穩穩當當用幾十年。避免掉所謂“變化太快”的問題。

因此,為職業生涯考慮,一定要從掌握基礎理論、掌握工具知識,到最後的掌握領域知識。領域知識是可以積累的,這是最關鍵的。新工具出來,所有人在同一條起跑線上,誰也沒有什麼特別的優勢,年輕人的年輕就是優勢。而很多人大學畢業做技術的一個理念是“幹幾年技術轉管理”,我個人覺得如果你一開始就不喜歡做技術,別給自己找罪受,繞彎子。另外即使你要去管理,從“領域知識”上入手恐怕也是最現實的途徑。因為這是和客戶最貼近的,顯然誰和客戶離的近,誰掌握最大的主動權,誰就掙得多,這是必然的。

總之,重視基礎和本質的東西,這些是安身立命的根本。不要好高騖遠,也不要枉自菲薄。既要低頭拉車,也要抬頭看路。或者換個說,既要仰望星空,也要腳踏實地,哈哈。

相關文章