最近寫了「當(dāng)程序員老去」「程序員真正的價值」兩篇文章,傳播甚廣,今天是第三篇:「程序員如何選擇技術(shù)方向」,史稱「程序員三部曲」。 那之前寫的幾篇程序員文章算什么呢?算前傳吧。以后再寫程序員文章算什么呢?算后記吧。 2008年秋天的一個午后,溫暖的陽光透過落地窗落在我面前這個長長的寫字桌上,桌子對面坐的是一個瘦小的程序員,他的名字叫小明,小明有些茫然,他看著我,不知道該說些什么。 程序員都是很嚴謹?shù),我不得不首先發(fā)出一個 System Call: 你在客戶現(xiàn)場這半年做什么工作? 寫單元測試。 還有呢? 沒了,就一直寫 JUnit。 別人也寫單元測試么? 沒人愿意寫單元測試,只有我寫。
7c1ed21b0ef41bd5daea86b852da81cb38db3dc4.jpg (44.87 KB, 下載次數(shù): 214)
下載附件
保存到相冊
2014-12-10 22:41 上傳
…… 你為什么想來研究院呢? 我想寫一些真正的程序。 什么是真正的程序? 比如 Java,比如面向?qū)ο缶幊,你總要寫一些類和各種各樣的方法,而不是一直寫 Test Case。 好的,沿著這個樓梯上三樓,那里有一群和你一樣的程序員,他們不僅寫 Java,還寫 JavaEE 相關(guān)的各種程序,你會找到自己需要的東西。 真的么? 真的
那時候我風(fēng)華正茂,沒有現(xiàn)在這么老成持重,陽光照在我的翹著二郎腿的腳面上,一切都顯得十分虛幻,在小明的眼里,那時的我估計很像「黑客帝國」里的墨菲斯,但是他不能確定自己是不是「The One」。小明疑惑的看了我一會,最終還是上樓了。至此,他完成了第一次技術(shù)方向的選擇。在三樓,他碰到了一群同樣嚴謹?shù)某绦騿T,他不僅學(xué)會了寫真正的 Java 程序,而且掌握了部分 Web 編程和服務(wù)器端編程,包括 JavaScript、JQuery、Spring、Hibernate、JMX、Web Service 等等。小明變得快樂起來,漸漸擺脫了注定孤獨一生的陰影。 過了一段時間以后,小明已經(jīng)不滿足只寫 Java 相關(guān)的程序了。有一天他看到我手里的 iPhone 和 Mac,仿佛見到了初戀的情人,眼中重新燃起了綠油油的光芒,他知道了 iOS 開發(fā)者這回事。很快,他花掉了所有的銀子購買了 Mac 和 iPhone,開始日夜兼程,學(xué)習(xí) iOS 開發(fā)。他在寫 Java 的間隙編寫 Objective-C 代碼,在編譯 Web App 的同時構(gòu)建 IPA,在清晨的微光中調(diào)試程序,在每個夜晚與模擬器竊竊私語……他完成了第二個階段的技術(shù)方向選擇。 終于到了離別的時候,他要去尋找更大的夢想,經(jīng)年以后,在南方的某個城市,他成了一個知名公司的 iOS 主程,并開發(fā)出了多個著名的 iOS 應(yīng)用,比如「丁香醫(yī)生」「用藥助手」「家庭用藥」等等,難以想象,如果沒有小明,張老師怎么去見小姨子,馮老師何以拯救互聯(lián)網(wǎng),二爺怎么鑒書,西湖何以養(yǎng)醋魚! 第一個故事講完了,主角小明利用兩次主動的技術(shù)方向選擇,完成了從小球到小牛的逆襲,以至于現(xiàn)在連女朋友都有了。 這時候就有讀者要問了,那些大牛是如何做技術(shù)選擇呢? 大牛不需要做技術(shù)方向的選擇,他們需要什么就學(xué)什么,學(xué)什么就成什么。他們就象掌握了「九陽神功」的張無忌,各種類型的技術(shù)和程序到了他們的手里都能發(fā)揮出巨大的威力。技術(shù),是他們生命中最重要的組成部分。 如果你們以為我在吹牛我就給你舉個例子。我在《MacTalk·人生元編程》中寫過一個技術(shù)高手,他的名字叫做攀攀。很長一段時間我都不知道他掌握了哪些技術(shù),因為他的技術(shù)是我們很多人的超集,我們遇到的所有問題都可以在他那里得到解決,他只是叼著煙翹著腿敲下幾行代碼而已。后來我才知道,他在高中的時候已經(jīng)癡迷于計算機了,大學(xué)時代自學(xué)了大量的計算機相關(guān)的知識,操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、算法在他大學(xué)畢業(yè)之后就已了然于胸。 直到最近,我才從網(wǎng)路上拿到一份他幾年前的簡介,那個時候,他的履歷是這樣的: ID :攀攀 性別:男 師門:電子科技大學(xué) 98 年計算機系 職業(yè):網(wǎng)絡(luò)引擎設(shè)計者 人物背景:精通 C, C++, Java , Pascal, Basic, Fortran, Cobol, PL/M, Perl, Python, Lisp, Prolog, Smalltalk 、 bind 、 Ldap 、 PVM 、 MPI 、編程自動化、 Linux 核心代碼, JDK 源碼, GLibc 源碼, Apache 源碼、常見的網(wǎng)絡(luò)協(xié)議內(nèi)部實現(xiàn)、網(wǎng)絡(luò)通訊……是真的精通 武學(xué)造詣:決不要把計算機強加給人們的限制認為理所當(dāng)然,人不是機器的奴隸,把了解機器的限制作為通曉計算機的標(biāo)準(zhǔn)只能是自欺欺人 游戲感言:IP 路由和認證的雙重功能將是未來網(wǎng)絡(luò)游戲發(fā)展的障礙,今后的網(wǎng)絡(luò)應(yīng)該是以分布式目錄服務(wù)為基礎(chǔ)的,以網(wǎng)絡(luò)設(shè)備為中心,與具體主機無關(guān)。集成了廣泛的認證與授權(quán)能力的網(wǎng)絡(luò)(全公司上下沒有人能聽得懂他在說什么,好在大伙兒都已經(jīng)習(xí)慣了)。
都是98年畢業(yè)的,人和人的差距怎么那么大呢?無語淚千行! 兩個故事講完了,究竟如何做技術(shù)方向的選擇呢?答案就飄在風(fēng)里…… 1、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、算法、網(wǎng)絡(luò)等基礎(chǔ)技術(shù)應(yīng)該在大學(xué)時代深入學(xué)習(xí),如果畢業(yè)了你還沒有掌握這些內(nèi)容,那就隨用隨學(xué)好了。學(xué)習(xí)這些基礎(chǔ)理論極為枯燥,只有實際工作中的需求才能給你最大的學(xué)習(xí)動力去掌握這些艱深的內(nèi)容。 2、至少要掌握一門靜態(tài)語言,比如 C、C++、Java、C#、Objective-C 等。至少掌握一門動態(tài)語言,比如 Python、Ruby、PHP 等。 3、推薦學(xué)習(xí)一些同時具備動態(tài)語言和靜態(tài)語言的特性語言,比如 Go、Swift、Scala 等。這樣你會對面向?qū)ο缶幊、面向過程編程、編譯型、解釋型語言有更深入的了解。 4、系統(tǒng)的構(gòu)建自己的知識體系,而不是局限在某個點上。經(jīng)常有讀者問我,我前幾年一直在寫 VBA/ActionScript/Delphi/SQL ……現(xiàn)在項目組突然不再采用這些語言了,怎么辦?很多人難以預(yù)料未來技術(shù)的走向,但是你至少要構(gòu)建自己的技術(shù)壁壘和平臺。學(xué)習(xí) Java,就應(yīng)該構(gòu)建你自己的 JavaEE 平臺;Objective-C 對應(yīng) iOS/OS X 開發(fā)平臺;C#,對應(yīng) .Net 平臺,SQL,對應(yīng)數(shù)據(jù)庫平臺。如果你在用 ActionScript,那你不應(yīng)該局限在 Flex 上,你對應(yīng)的是整個前端平臺。 立足平臺,你會站得很穩(wěn)。立足一個點,你可能摔的很慘,就是這樣。 5、主動選擇技術(shù)方向比被動等待好。根據(jù)自己的興趣和技術(shù)的發(fā)展主動選擇,就像小明一樣,有時候放棄也意味著得到。 6、不要過于追新,不要每出一門「顛覆性」的語言或技術(shù)都投入精力物力。追新的后果很可能是該學(xué)的沒學(xué)會,不該學(xué)的學(xué)完也忘了。我有一哥們,我們都在寫 JavaScript 的時候,他認為 Java 新推出的 JavaFX 才是前端的未來……然后就沒有然后了。我們都用 Java 的時候,他認為 ERlang 是才是編程語言的未來……然后就沒有然后了,可謂一步早,步步早,讓人扼腕嘆息。 7、也不要過于保守,比如 Go、Swift、Docker 等技術(shù),我個人以為是值得投入時間和精力的技術(shù)。 沒有 8 了,寫到這里,冬夜已經(jīng)黑的不像樣子。站在陽臺望出去,仿佛看著某個巨大 IDE 的黑色編碼主題,我想起了某位大牛的一句話:我不是懂得多,我只是學(xué)的快而已。
|