開發與研發(下)
研發
相對于開發來說,我個人更喜歡研發一點。研發和開發的一個不同之處就是研發有更多的研究成分在里面,也就是說研發的時候會有更多光明正大的學習時間,這對于那些對技術本身有追求的工程師來說是很有吸引力的。有一些人做工程師是為了可以創造出好的產品,然后掙大錢或者改變世界;也有一些人做工程師是因為對技術本身有興趣,想要好好研究。可以憑借技術名利雙收變身成功人士固然很有吸引力,但不關心世事鉆研一些自己喜歡的東西也自有它的樂趣在。
如果說開發產品是輸出,那么學習思考就是輸入,只有輸出沒有輸入整個人就會廢掉,完全淪為一顆螺絲釘。在很多公司尤其是那種經常加班趕項目的公司,你每天都會處于很忙碌的狀態,腦子里想的都是趕緊把指定的任務完成上線。因為時間緊,所以你在開發過程中遇到什么問題都是只求解決,沒有心思和時間去搞明白為什么會出現那種問題,在這樣的工作狀態下完全沒有辦法積累工作經驗,看上去好像工作了五年,其實是工作了一年,然后重復了四年。
做研發一般不會直接為產品貢獻代碼,更多做的是一些基礎架構或者實驗性的產品,所以它有幾個很明顯的好處。首先,很少開會。其次,沒有產品經理。第三,一般都會把質量放在第一位,時間不會特別緊。這是三個非常巨大的優勢,這意味著你絕大部分時間都可以安心學習、思考、設計、編程,幸福指數會飆升。如果你是做基礎架構,那么代碼質量就會有硬性要求,你不得不寫得健壯、易用、松耦合并且易于調試,要花心思和時間細細打磨,對個人的能力提高、習慣養成和經驗積累都非常有幫助;如果你是做實驗性的產品,那么你就有大量的機會和時間去調研最新的技術,而且最棒的是你可以在產品當中使用它們這對于開發線上產品的工程師來說是不太可能的,因為不成熟的新技術存在太多未知的風險。
此外,做研發對工程師的素質要求很高,需要很好的技術基礎、學習能力和研究能力我把它看作是一個優點。從個人角度來說,我寧愿一家公司招聘非常嚴格需要竭盡全力才可以進去,因為嚴格的招聘可以保證團隊所有成員的質量,不用擔心進去之后會和臭棋簍子下棋。既然選擇去做研發,那么基本可以說明你是一個對技術有追求的人,也肯定希望周圍是一群和你一樣的人,而不是連基礎知識都不夠熟悉的家伙。只有這樣一群互相看得起的人在一塊研究、學習、思考、切磋才會其樂無窮,才能夠產生更多創意,做出好玩的東西。
當然,做研發也有不好的地方。只有大公司才有研發部門,這些公司一般都已經上市或者員工已經很多,你不太可能有機會一夜暴富。當你埋頭做了幾年研發之后,某一天去參加同學會,發現大學時候那個數據結構不及格總是求你讓他拷貝編程作業的張三衣著光鮮四處敬酒。他所在的公司剛剛上市,因為進去得早,現在他變成了百萬富翁而且榮升高層。于是你忽然開始懷疑自己當初的選擇,連學習和編程的樂趣都變得很不真實。所以,如果你渴望建功立業,那么就不要選擇做研發,或者做幾年研發之后就出來闖蕩。成功需要的條件很多,而編程只是你的優勢之一,只有這一個優勢你需要太多的運氣才可以得到你想要的。
不過,我們也可以換個角度看。亂世放不下一張安靜的書桌,現在到處都無比浮躁,有個地方可以讓你安安心心做一些自己喜歡的事情已經非常難得,多少人拼命掙錢就是為了可以和你一樣做自己喜歡的事情。盡管那么多人在叫嚷搞原子彈的不如賣茶葉蛋的,但總有一些人愿意去追求人類最高財富知識和藝術家般的技藝。
本來做研發成就感會少一點,作為一個 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 之父,所以這本書里面對程序員的批評還是很中肯的。另外,書中設計體貼的軟件的核心思想非常棒,值得程序員好好閱讀和思考。