程序員如何選擇技術方向

作者:池建強

網址:macshuo.com

微信:sagacity-mac



最近寫了「當程序員老去」「程序員真正的價值」兩篇文章,傳播甚廣,今天是第三篇:「程序員如何選擇技術方向」,史稱「程序員三部曲」。
那之前寫的幾篇程序員文章算什麼呢?算前傳吧。以後再寫程序員文章算什麼呢?算後記吧。

2008年秋天的一個午後,溫暖的陽光透過落地窗落在我面前這個長長的寫字桌上,桌子對面坐的是一個瘦小的程序員,他的名字叫小明,小明有些茫然,他看着我,不知道該說些什麼。

程序員都是很嚴謹的,我不得不首先發出一個 System Call:

你在客戶現場這半年做什麼工作?
寫單元測試。
還有呢?
沒了,就一直寫 JUnit。
別人也寫單元測試麼?
沒人願意寫單元測試,只有我寫。

……

你爲什麼想來研究院呢?
我想寫一些真正的程序。
什麼是真正的程序?
比如 Java,比如面向對象編程,你總要寫一些類和各種各樣的方法,而不是一直寫 Test Case。
好的,沿着這個樓梯上三樓,那裏有一羣和你一樣的程序員,他們不僅寫 Java,還寫 JavaEE 相關的各種程序,你會找到自己需要的東西。
真的麼?
真的

那時候我風華正茂,沒有現在這麼老成持重,陽光照在我的翹着二郎腿的腳面上,一切都顯得十分虛幻,在小明的眼裏,那時的我估計很像「黑客帝國」裏的墨菲斯,但是他不能確定自己是不是「The One」。小明疑惑的看了我一會,最終還是上樓了。至此,他完成了第一次技術方向的選擇。在三樓,他碰到了一羣同樣嚴謹的程序員,他不僅學會了寫真正的 Java 程序,而且掌握了部分 Web 編程和服務器端編程,包括 JavaScript、JQuery、Spring、Hibernate、JMX、Web Service 等等。小明變得快樂起來,漸漸擺脫了註定孤獨一生的陰影。

過了一段時間以後,小明已經不滿足只寫 Java 相關的程序了。有一天他看到我手裏的 iPhone 和 Mac,彷彿見到了初戀的情人,眼中重新燃起了綠油油的光芒,他知道了 iOS 開發者這回事。很快,他花掉了所有的銀子購買了 Mac 和 iPhone,開始日夜兼程,學習 iOS 開發。他在寫 Java 的間隙編寫 Objective-C 代碼,在編譯 Web App 的同時構建 IPA,在清晨的微光中調試程序,在每個夜晚與模擬器竊竊私語……他完成了第二個階段的技術方向選擇。

終於到了離別的時候,他要去尋找更大的夢想,經年以後,在南方的某個城市,他成了一個知名公司的 iOS 主程,並開發出了多個著名的 iOS 應用,比如「丁香醫生」「用藥助手」「家庭用藥」等等,難以想象,如果沒有小明,張老師怎麼去見小姨子,馮老師何以拯救互聯網,二爺怎麼鑑書,西湖何以養醋魚!

第一個故事講完了,主角小明利用兩次主動的技術方向選擇,完成了從小球到小牛的逆襲,以至於現在連女朋友都有了。

這時候就有讀者要問了,那些大牛是如何做技術選擇呢?

大牛不需要做技術方向的選擇,他們需要什麼就學什麼,學什麼就成什麼。他們就象掌握了「九陽神功」的張無忌,各種類型的技術和程序到了他們的手裏都能發揮出巨大的威力。技術,是他們生命中最重要的組成部分。

如果你們以爲我在吹牛我就給你舉個例子。我在《MacTalk·人生元編程》中寫過一個技術高手,他的名字叫做攀攀。很長一段時間我都不知道他掌握了哪些技術,因爲他的技術是我們很多人的超集,我們遇到的所有問題都可以在他那裏得到解決,他只是叼着煙翹着腿敲下幾行代碼而已。後來我才知道,他在高中的時候已經癡迷於計算機了,大學時代自學了大量的計算機相關的知識,操作系統、數據結構、算法在他大學畢業之後就已瞭然於胸。

直到最近,我才從網路上拿到一份他幾年前的簡介,那個時候,他的履歷是這樣的:

ID :攀攀
性別:男
師門:電子科技大學 98 年計算機系

職業:網絡引擎設計者

人物背景:精通 C, C++, Java , Pascal, Basic, Fortran, Cobol, PL/M, Perl, Python, Lisp, Prolog, Smalltalk 、 bind 、 Ldap 、 PVM 、 MPI 、編程自動化、 Linux 核心代碼, JDK 源碼, GLibc 源碼, Apache 源碼、常見的網絡協議內部實現、網絡通訊……是真的精通

武學造詣:決不要把計算機強加給人們的限制認爲理所當然,人不是機器的奴隸,把了解機器的限制作爲通曉計算機的標準只能是自欺欺人

遊戲感言:IP 路由和認證的雙重功能將是未來網絡遊戲發展的障礙,今後的網絡應該是以分佈式目錄服務爲基礎的,以網絡設備爲中心,與具體無機無關。集成了廣泛的認證與授權能力的網絡(全公司上下沒有人能聽得懂他在說什麼,好在大夥兒都已經習慣了)。

都是98年畢業的,人和人的差距怎麼那麼大呢?無語淚千行!

兩個故事講完了,究竟如何做技術方向的選擇呢?答案就飄在風裏……

1、操作系統、數據結構、算法、網絡等基礎技術應該在大學時代深入學習,如果畢業了你還沒有掌握這些內容,那就隨用隨學好了。學習這些基礎理論極爲枯燥,只有實際工作中的需求才能給你最大的學習動力去掌握這些艱深的內容。

2、至少要掌握一門靜態語言,比如 C、C++、Java、C#、Objective-C 等。至少掌握一門動態語言,比如 Python、Ruby、PHP 等。

3、推薦學習一些同時具備動態語言和靜態語言的特性語言,比如 Go、Swift、Scala 等。這樣你會對面向對象編程、面向過程編程、編譯型、解釋型語言有更深入的瞭解。

4、系統的構建自己的知識體系,而不是侷限在某個點上。經常有讀者問我,我前幾年一直在寫 VBA/ActionScript/Delphi/SQL ……現在項目組突然不再採用這些語言了,怎麼辦?很多人難以預料未來技術的走向,但是你至少要構建自己的技術壁壘和平臺。學習 Java,就應該構建你自己的 JavaEE 平臺;Objective-C 對應 iOS/OS X 開發平臺;C#,對應 .Net 平臺,SQL,對應數據庫平臺。如果你在用 ActionScript,那你不應該侷限在 Flex 上,你對應的是整個前端平臺。

立足平臺,你會站得很穩。立足一個點,你可能摔的很慘,就是這樣。

5、主動選擇技術方向比被動等待好。根據自己的興趣和技術的發展主動選擇,就像小明一樣,有時候放棄也意味着得到。

6、不要過於追新,不要每出一門「顛覆性」的語言或技術都投入精力物力。追新的後果很可能是該學的沒學會,不該學的學完也忘了。我有一哥們,我們都在寫 JavaScript 的時候,他認爲 Java 新推出的 JavaFX 纔是前端的未來……然後就沒有然後了。我們都用 Java 的時候,他認爲 ERlang 是纔是編程語言的未來……然後就沒有然後了,可謂一步早,步步早,讓人扼腕嘆息。

7、也不要過於保守,比如 Go、Swift、Docker 等技術,我個人以爲是值得投入時間和精力的技術。

沒有 8 了,寫到這裏,冬夜已經黑的不像樣子。站在陽臺望出去,彷彿看着某個巨大 IDE 的黑色編碼主題,我想起了某位大牛的一句話:我不是懂得多,我只是學的快而已。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章