導語:上次zhuoqun發表《開發與研發》(上)後在技術社群引發了關注。今天他在自己的部落格發表了本文的下篇。在他看來,“對於那些真正對技術有興趣的人,要麼去做一個同時具備軟體設計能力的開發人員,也就是富有創造力的 Hacker;要麼去做一個自得其樂的研發工程師。雖然環境惡劣,但是任何東西都擋不住真正的熱愛。在這個幾乎人人都把金錢作為衡量標準的社會裡,你真是得到了上天的眷顧,不僅能夠以自己喜歡的事情謀生,而且收入還過得去。” 以下是全文:
研發
相對於開發來說,我個人更喜歡研發一點。研發和開發的一個不同之處就是研發有更多的“研究”成分在裡面,也就是說研發的時候會有更多“光明正大 ”的學習時間,這對於那些對技術本身有追求的工程師來說是很有吸引力的。有一些人做工程師是為了可以創造出好的產品,然後掙大錢或者改變世界;也有一些人 做工程師是因為對技術本身有興趣,想要好好研究。可以憑藉技術名利雙收變身成功人士固然很有吸引力,但不關心世事鑽研一些自己喜歡的東西也自有它的樂趣在。
如果說開發產品是“輸出”,那麼學習思考就是“輸入”,只有輸出沒有輸入整個人就會廢掉,完全淪為一顆螺絲釘。在很多公司尤其是那種經常加班趕 專案的公司,你每天都會處於很忙碌的狀態,腦子裡想的都是趕緊把指定的任務完成上線。因為時間緊,所以你在開發過程中遇到什麼問題都是隻求解決,沒有心思 和時間去搞明白為什麼會出現那種問題,在這樣的工作狀態下完全沒有辦法積累工作經驗,看上去好像工作了五年,其實是工作了一年,然後重複了四年。
做研發一般不會直接為產品貢獻程式碼,更多做的是一些基礎架構或者實驗性的產品,所以它有幾個很明顯的好處。首先,很少開會。其次,沒有產品經 理。第三,一般都會把質量放在第一位,時間不會特別緊。這是三個非常巨大的優勢,這意味著你絕大部分時間都可以安心學習、思考、設計、程式設計,幸福指數會飆 升。如果你是做基礎架構,那麼程式碼質量就會有硬性要求,你不得不寫得健壯、易用、鬆耦合並且易於除錯,要花心思和時間細細打磨,對個人的能力提高、習慣養 成和經驗積累都非常有幫助;如果你是做實驗性的產品,那麼你就有大量的機會和時間去調研最新的技術,而且最棒的是你可以在產品當中使用它們——這對於開發 線上產品的工程師來說是不太可能的,因為不成熟的新技術存在太多未知的風險。
此外,做研發對工程師的素質要求很高,需要很好的技術基礎、學習能力和研究能力——我把它看作是一個優點。從個人角度來說,我寧願一家公司招聘 非常嚴格需要竭盡全力才可以進去,因為嚴格的招聘可以保證團隊所有成員的質量,不用擔心進去之後會“和臭棋簍子下棋”。既然選擇去做研發,那麼基本可以說 明你是一個對技術有追求的人,也肯定希望周圍是一群和你一樣的人,而不是連基礎知識都不夠熟悉的傢伙。只有這樣一群“互相看得起”的人在一塊研究、學習、 思考、切磋才會其樂無窮,才能夠產生更多創意,做出好玩的東西。
當然,做研發也有不好的地方。只有大公司才有研發部門,這些公司一般都已經上市或者員工已經很多,你不太可能有機會一夜暴富。當你埋頭做了幾年 研發之後,某一天去參加同學會,發現大學時候那個資料結構不及格總是求你讓他拷貝程式設計作業的張三衣著光鮮四處敬酒。他所在的公司剛剛上市,因為進去得早, 現在他變成了百萬富翁而且榮升高層。於是你忽然開始懷疑自己當初的選擇,連學習和程式設計的樂趣都變得很不真實。所以,如果你渴望建功立業,那麼就不要選擇做 研發,或者做幾年研發之後就出來闖蕩。成功需要的條件很多,而程式設計只是你的優勢之一,只有這一個優勢你需要太多的運氣才可以得到你想要的。
不過,我們也可以換個角度看。“亂世放不下一張安靜的書桌”,現在到處都無比浮躁,有個地方可以讓你安安心心做一些自己喜歡的事情已經非常難 得,多少人拼命掙錢就是為了可以和你一樣做自己喜歡的事情。儘管那麼多人在叫嚷“搞導/彈的不如賣茶葉蛋的”,但總有一些人願意去追求人類最高財富——知識和藝術家般的技藝。
本來做研發成就感會少一點,作為一個 Twitter 的開發工程師看到那麼多人在用 Twitter 肯定會特別開心,相比之下某個在 Google 做基礎研究的工程師的成就感可能沒那麼強烈。不過在國內環境比較神奇,開發工程師非但成就感不多,反而會不少捱罵,還經常會有負罪感,相信做過郵件推廣和 廣告彈窗的工程師都深有體會。這樣一來,研發工程師的“清苦”反而變成了一個優點,可以遠離很多“不得不做”的違背良心的事情。
相信很多工程師在入行之前是喜歡技術的,但是工作之後發現完全不是自己當初想象的那個樣子,然後就變得失望麻木,不再對技術有熱情。其實你可以 把熱情延續下去,只不過要去做研發,而不是做開發。大部分由於興趣而不是生計學習程式設計的人,內心真正渴望的都是去做研發,只不過沒有人告訴他們開發和研發 的巨大差別。現在不少大公司都有自己的研發部門,有一些還成立了自己的研究院,想要一直做技術的同學不妨嘗試一下。
如何選擇
很多人在大學裡之所以會選擇計算機為自己的專業,並不是因為自己對計算機和程式設計有興趣,而是因為計算機是“熱門專業”,在畢業之後也渾渾噩噩地 找了一份工作進入了這個行業,做著自己並不喜歡的事情;還有一些人則是畢業之後找不到工作,然後看到一些培訓機構的廣告就去報名學習程式設計,希望廣告上描繪 的“月薪過萬”不只是一場夢。於是就有了越來越多的“程式碼民工”,在形形色色的大小公司做著又髒又累的工作,只為了“混口飯吃”。
我並不想批評這些人,畢竟在這個大環境下有著太多無奈,逼得我們無從選擇。對於這樣一些只想找一份好工作的人,是被騙到這個行業中來的。仔細回 憶一下,這些年來我們看到的業界新聞,瞭解到的網際網路公司文化,大部分都是有關諸如 Google, Facebook 等國外公司的;我們平時學習和使用的技術,幾乎都是國外發明的。這讓我們深信網際網路就是那樣美好,那些激動人心的東西觸手可及,但請你關上電腦出門好好看 一下週圍:這是在中國。網際網路沒有國界,但網際網路公司有。Google 和 Facebook 這樣的公司看上去離我們很近,我們每天也使用它們的產品,但國內的網際網路公司可能要幾百年之後才會有那樣的氣質和文化。所以如果你不幸誤入了這個行業,還 是及早打算改行或者轉型做管理比較好,這樣就不需要再學習自己並不喜歡的“枯燥”技術了。
對於那些“真的”對技術有興趣的人,要麼去做一個同時具備軟體設計能力的開發人員,也就是富有創造力的 Hacker;要麼去做一個自得其樂的研發工程師。雖然環境惡劣,但是任何東西都擋不住真正的熱愛。在這個幾乎人人都把金錢作為衡量標準的社會裡,你真是得到了上天的眷顧,不僅能夠以自己喜歡的事情謀生,而且收入還過得去。
Hacker 是 適合創業的,因為他擁有創造一個產品的全部能力。電影《社交網路》讓很多以寫程式碼為生的人產生了幻覺,Facebook 創始人傳奇般的經歷好像在向全世界宣佈:世界是程式設計師的。很多人只是激動地看到祖克伯的技術能力,但是卻忽視了他的軟體設計能力和對產品細節的重視程 度,好像只要埋頭程式設計就可以做出 Facebook。除了優秀的技術能力之外,祖克伯的思考能力和創造力同樣出類拔萃,可以感受得到他眼裡的世界是不一樣的。我們的工程師又有多少人對生 活中的事物有獨特而深刻的理解呢?獨立思考也應該是 Hacker 的必備技能。
很多工程師都覺得自己會程式設計,只是缺少一個“好的 idea”;很多非技術人員則覺得自己有一個“好的 idea”,但是缺少程式設計能力來實現。要做一個產品,好的 idea 和實現它的能力缺一不可。然而,我們可以看到最後成功的往往是那些非技術人員,因為他們可以清楚地看到程式設計是一件可以學習的事情;而工程師們則往往天真地 認為好的 idea 靠的是“靈機一動”,不會有意識地培養自己的觀察能力和想象力。很多好的 idea 都是來自於平日對生活的敏銳觀察和思考,然後這些點在某個時候忽然連成了一條線,把它簡單地歸結為“天才”是懶惰的做法。
“成為一個 Hacker”和“做研發”,很難說二者哪一個更困難。Hacker 在技術上可以不是一流,但他運用技術創造產品的綜合能力肯定是一流的;而研發更注重技術上的造詣和理解程度,關注的是深度而不是廣度。如果想要做研發,那 麼就要好好把基礎知識研究透徹,比如資料結構、演算法和網路協議等,不然很容易就會遇到瓶頸。我遇到過的每一位研發工程師都是技術上的大牛,在很多技術問題 上都有非常深刻的見解;他們會從本質上分析問題,而不只是糾結於語言細節。
如果你想要通過自己的作品改變世界,那麼就好好提高一下程式設計之外的能力,做一個好的 Hacker;如果只想埋頭技術,就應該選擇去做研發。不過,無論是想要做一個 Hacker 還是一個研發工程師,都需要長年累月地不斷學習和思考。聽上去好像非常辛苦,不過每一個熱愛技術的人應該都會把學習和思考當作一種樂趣,而不是一種苦役。 如果你無法享受學習和思考的樂趣,那麼還是不要在技術這條路上走下去了,你會活得特別累,並且毫無幸福可言。
在這個充斥著“程式碼民工”並且缺乏“技術文化”的國度,我們只是關心怎麼樣可以活得更舒服,似乎忘記了程式設計本身所具有的迷人色彩。Joel Spolsky 說 過,許許多多的人選擇程式設計,首要的原因就是,他們寧願將自己的時間花在一個公平有序的地方,一個嚴格的能者上庸者下的地方,一個只要你是對的,就能贏得任 何爭論的地方。此外,我覺得選擇程式設計還可以獲得最大限度的自由和獨立。因為找工作的時候只需要憑藉自己的程式設計能力,所以不需要見人說人話見鬼說鬼話,不需 要去結交權貴達人,不需要去為了所謂人脈去混圈子,也不需要看到郵件列表裡有領導的郵件就去“頂”。平日裡寫寫程式碼,其它時間喝酒吃肉,只交性情相投的朋 友,武俠小說裡的暢快適意也不過如此。這種獨立和自由是極為寶貴的,你可知道有多少人在醉酒之後哭喊“安能摧眉折腰事權貴,使我不得開心顏”?
所以說,程式設計這件事情關乎公平,關乎自由,關乎美。而作為一個擁有程式設計能力的人,你可以親手創造美。只有藝術家才可以創造美。希望有越來越多的人可以真正領會到程式設計的魅力所在,喜歡上這種藝術。正如 Raymond 所說,軟體設計和實現應該是一門充滿快樂的藝術,一種高水平的遊戲。你需要用心。你需要去遊戲。你需要樂於探索。
黑客事業之未來, 全依賴我們今日之創造。
最後推薦一些文章和書,這些文章和書大部分都與技術細節無關,它們討論的是基於程式設計的令人心醉的文化,也適合非技術人員閱讀。
1.《如何成為一名黑客》 。所有學習程式設計的都應該多看幾遍這篇文章,至少把 Hacker 和 Cracker 的區別弄清楚。
2. 《大教堂和市集》。這是一篇關於 Linux 的經典文章。這裡需要宣告一下,我對那些 Windows 程式設計師沒有偏見,只是我覺得作為一個以程式設計為職業的人,如果不參觀一下 Linux/Unix 的深邃世界,未免太過狹隘。
3. 《 UNIX程式設計藝術》。 這本書雖然名字叫做“程式設計藝術”,但裡面並不講授如何程式設計,而是全面展示了迷人的 Unix 哲學和文化。看完之後你會發現,那些看上去不修邊幅、整日對著電腦螢幕編寫程式碼的邋遢程式設計師,對於美竟然會有那麼高的追求。“美在電腦科學中的地位,要 比在其他任何技術中的地位都重要,因為軟體太複雜了。美是抵禦複雜的終極武器。” 這本書的作者 Raymond 同樣是《如何成為一名黑客》和 《大教堂和市集》的作者。
4. 《黑客與畫家》。這篇文章是 Paul Graham 寫 的,文中詳細描述了黑客與畫家的相似之處。這裡所說的“黑客”和《如何成為一名黑客》中所說的“黑客”略有不同,但你可以看到他們很多共同點。本文也已經被收錄到 《Hackers and Painters》一書,該書的中文版《黑客和畫家——Paul Graham文集》由阮一峰翻譯,應該很快就會面世,我十分期待。
5. 《創造者的品味》。作者同樣是 Paul Graham,文章觀點獨到,見解深刻,每讀一次都有新的收穫。
6. 《軟體隨想錄:程式設計師部落酋長Joel談軟體》。這本書是 Joel Spolsky 的精華文章結集,作者寫文章寫得非常有趣,擅長講故事,前幾天我翻譯的那篇《程式設計師阿士頓的故事》就是他的手筆。本書由阮一峰翻譯,翻譯質量非常高,有興趣的可以先去試讀幾篇。
7. 《About Face3互動設計精髓》。本書是互動設計領域的經典著作,作者之一 Alan Cooper 原來也是知名程式設計師,被稱為 “Visual Basic 之父”,所以這本書裡面對程式設計師的批評還是很中肯的。另外,書中“設計體貼的軟體”的核心思想非常棒,值得程式設計師好好閱讀和思考。
原作者:zhuoqun