Patrick McKenzie 在2011年寫了《不要自稱程式設計師》這篇文章,我寫的這篇算是一個(相當晚的)回應。我覺得他說的有些還是有道理,假設一個人在職業發展初期能按著他說的做的話,沒準還真能有點幫助。但假如是二十歲的我的話,我真懷疑自己能用他說的那些提高自己。
所以下面我主要說說我不能同意的那部分,我建議大家往下看之前先看看 Patrick 的文章,這樣就不會錯過什麼。(譯註:《不要自稱程式設計師》這篇譯文是摘選翻譯,並非全文翻譯。)
實際上也不能說是不同意他的觀點,更加準確的是:“我們的閱歷不同”而已。我們站在不同的職業發展軌跡上,所得到的經驗當然不同:Patrick McKenzie 是“bingo card creator”的老闆(一個小企業),同時是一個成功的諮詢師;而我則是一個“億”級別公司的架構師。我們的共性是都和”純寫程式“有些偏離了,只是我們偏離的方向不同。
你想為什麼樣的公司工作?
Patrick McKenzie 說90%的工作都和實現一個內部差旅報告表一樣無聊,根本沒有機會寫那些能給使用者使用的程式。並且你還得接受這個現實。可是真是90%麼?Spolsky說可能是80%,不過那也夠恐怖的了,Patrick 還解釋了為什麼做一個內部程式設計師(in-house programmers)糟透了:
- 沒有商業理由去改善那種“勉強夠用”的內部軟體。“請忘了引以為豪的工藝,否則你就要會製造讓人尷尬的垃圾。”
- 在公司裡面,工作的內容和公司盈利更緊密,程式設計師也就更容易獲得尊重。除了少數一些純技術公司,程式設計師是不可能最終提升為公司的CEO。無論對VIACOM(一個跨國傳媒集團)來說網路通暢有多重要,真正到了分工位的時候,內部程式設計師還是得三個人擠一起桌子坐。
McKensize 和Spolsky 都同意上面的說法,同時Spolsky認為:程式設計師應應該到一家軟體公司工作,那裡的文化會使一個程式設計師茁壯成長。而McKenzie則意見與他相左,他認為程式設計師應該“走出去”。
所以目前的問題變成了程式設計師個人的喜好問題:你想到軟體公司做白領,還是自己接活。但是別急,80-90%的人都不能得到一份軟體公司的工作。這不是你想不想進去工作的問題,而是能不能的問題。
然而這裡我就不同意了,即使只有10-20%的程式設計師能在軟體公司找到工作(如果資料是正確的),即使這部分程式設計師是最棒的那部分McKenzie又說:
“你們經常以一些自己身邊的人為根據來預測可能的競爭對手的實力,而這經常讓你高估了它們。有很多獲得了高階工程師職位的人都不能寫好一段fizibuzz的程式碼”。
所以如果大部分的競爭者實力都不濟的情況下,你很可能進入到那前10-20%的行列,就像我畢業時候的大部分畢業生一樣。所以我寧願相信為一個公司工作還是以專案為單位的軟體開發是一種個人喜好的選擇。那麼下面我們就說說McKenzie給在軟體公司工作的人的建議。
如何進行自我定位
McKenzie的一個建議是:
“不要將自己定位成一個程式設計師。這裡的程式設計師和那些身價很高,寫著各種看不懂的詞句的詩人有差不多的意思。相反,應該將自己定位成能夠為僱主增加收入或者減少投入的工程師。”
不錯,有時候內部程式設計師會花很多的時間寫出一堆令人看不懂的東西,至少在那些非技術的 MBA 眼裡是這樣的。
然而對我來說,我很喜歡那種能寫出讓人看不懂的東西,但是對別人的工作時有意義的程式設計師。
McKenzie認為軟體公司招聘程式設計師和一般的公司招聘沒有什麼不同。一個例子是:在Google,一個寫後臺記賬程式的程式設計師——據說Google 97% 的賬目都使用該程式——現在已經成為一名風險投資人了。也就是說他是通過和“盈利中心”靠的比較近發家致富的,而不是一般意義上的什麼技術。
我相信這個例子的主人公是來自NSNA空氣動力實驗室的Ron Garret博士。你能相信Google僱用他是因為他在該實驗室的時候增加了營收或者減少了開支麼?(順便說一下,據說Ron Garret並不喜歡那份寫記賬程式的工作,他買了一些Google的股票期權之後就辭職了。)
那麼那個記賬程式裡有沒有什麼特別的技術?Ron Garret說:
”我最終去寫了信用卡消費和賬戶管理系統,這一點也不簡單,幸運的是,我在來Google之前學會電腦保安以及密碼學。所以對於這個工作,我恰巧十分在行。在我設計的系統中,即使一個惡意使用者得到了root許可權,他也不能造成太大的危害。假設他們還在使用我寫的系統的話,我可以非常自負的說,我在那裡存得信用卡資訊是不可能丟的。“
在我聽來,他的技術知識和程式設計能力才使他成功的寫出這樣一個”不會被偷“的系統,而這裡所謂的”不會被偷“的系統似乎既沒有減少了Google的投入,增加Google的產出。
所以如果我要投一份晶片工程師的求職簡歷,我會強調自己在轉換固定函式交換器和可程式設計處理器中的技術角色,而不是我之前的什麼管理崗位。(我認為之後的管理崗位是由於之前的努力的技術工作而來,管理了什麼是虛的,真正幹得活才是實打實的)。
跳槽
“同事和老闆不是朋友,你會花很多時間和同事相處,你也許會和他們中的一些成為好朋友。但是一般情況下,離職之後你會很快忘了他們。
你的老闆會做一些你的朋友永遠不會做的事情:例如跟你談降工資,或者加班。你的同事還會殷勤的介紹各種你討厭的東西。“
確實有一些關於同事並不是朋友的潛規則。但我覺得這個說法和他的根據有點迴圈論證的意味。同事之所以不能成為朋友,是因為你會離職。但是你為什麼會離職呢。
所以我不同意這個潛規則。我在一家公司工作超過12年,很多一部分原因是我跟我的同事非常要好。雖然最終我跳槽了,但那是當工資漲幅遠遠大於10%的時候我才會考慮的事情。如果經常因為小的晉升或者工資漲幅而跳槽,那麼你不可能熟悉你的同事以及你所要做的工作。你可能對如何找工作非常有見地,也對市場上需要什麼樣的人非常敏感,但你並不會特別熟悉你的僱主,你會很快和僱主達成一致,進入工作狀態。但是正好比一個消耗品一樣,你也會很快消耗完自己的價值,很快離開。
相反如果你能在一個職位上堅持下去(只要那個職位的環境還算有趣,並且能時不時的提升),你和周圍人的關係也就能更加緊密,同時你也能更有遠見,從而學到平時不可能學到的東西。
以我為例:我大部分的知識都是來自ASIC的黑客同事們那。他們之所以願意和我一起工作,是因為長期工作而來的默契。要知道達到融洽無間的工作關係相當難得,需要相當長時間的磨合。
順便說一句,如果你能夠在一個地方工作夠長的時間,在僱主眼中你的價值就會自然而然的升高:即使不用跳槽你也能獲得相應的提升(職位上或者是薪資上)。你的薪資會高於那些具有同樣經驗的新員工,這時已經沒有必要更換工作了。這種方式和通過更換大量工作而最終成為諮詢師的方法具有異曲同工之妙。
不管哪種方式,你都能成功。我這裡沒有關於哪種工作方式更有效的統計資料。但是我認為一段時間內固定在一個地方工作更加有趣一些。如果不是這樣我不可能收穫到現在這麼多的摯友。
這世上之事失敗的居多,成功的為少。你不能指望一個職業發展計劃就能讓你獲得夢想的職位或者一大筆錢。你需要付出很多努力,除此之外還要付出還有很多你所不知道的東西。你能確定的只是你的計劃給你生活方式帶來的改變。而你選擇的生活方式又決定了你能認識什麼樣的人,擁有什麼型別的關係-這比是否能夠達成最終的目標更具有可預期性。
McKenzie關於老闆的觀點我十分贊同。確實有一些老闆非常的“周扒皮”還假模假式的和你做朋友。這個時候你就應該正當的捍衛自己的權利了。
如何衡量股權
McKenzie說不要太看重股權,但沒有過多闡述。這裡我想說說股票期權,比實際的股權還差勁的東西,也是我曾經唯一獲得的東西。
和上面提到的一樣,我的觀點是一切都要從長遠出發。在12年中,我的東家價值翻了十倍。可是它目前仍然是一個私有公司-我的期權毫無用處。
從長遠看,股票期權更好,或者更糟。
說它更糟,是因為通常在你離職的時候你根本買不起那些股票,或者無法承擔投資股票的風險。當一個公司在存活下來,開始進入穩定期,你可能開始厭煩自己負責的工作,想套現離開。這個時候的股票期權會成為束縛。尤其在進行晉升談判的時候,你手裡的期權會成為公司的籌碼–他們知道你無法辭職。
也就是說股票期權成為了一種債務。
相反,如果一個公司進入成熟的階段,僱員們又會低估他們的股票–已經這麼貴了,還可能再漲麼?尤其是已經翻了三四倍之後,這種想法更加自然。但你要知道你獲得的不是百分之幾的數字,而是實實在在的美元。一個每股100美元的股票漲了20%到了120每股,意味著你一股賺了20美元,而一個每股5美元的股票即使漲了100%到了15塊一股,你也只是每股賺了10美元。所以一個成熟的漲勢的公司股票要比那些年輕公司的便宜股票更具有投資價值–你更可能因此而一夜暴富。
結果是人們總是在公司初期的時候高估,而在隨後的時間低估。注意如果你沒有打算在一個公司工作超過三年的話,股票期權會成為你的“債務”,因為它會讓你更難辭職。
在創業公司工作
McKenzie列出一個許多不到再創業型公司工作的理由。例如工作的滿意程度,在大型公司裡面你能接觸到更多有意思的事情。但是我要說至少有一點,是大公司和創業公司比不了的。大型公司一般沒有什麼職位上的空缺,事實上它可能根本不會注意到職位的空缺也不會去解決。通俗點講就是大公司一個蘿蔔一個坑,你進來工作就是到一個坑裡面去,公司不會挖新的坑了。相反創業公司幾乎無時不在處於缺人手的狀態,因此,你可以根據需要自己挖坑,還可以同時佔多個坑。也就是說你可以承擔更多的責任。在有些公司,你要和多個人同時競爭才能把事情做成。相反在一個創業公司,你只管做你想做的事情,因為大家自己忙還忙不過來,根本沒有時間和你競爭同一件事。
隨著公司變得越來越大,能夠做你想做的事情變得越來越難。創業公司裡面,程式設計師都是遊牧民族,哪有草就去那裡。等到了大公司裡面遊牧進化成固定城邦,程式設計師也有了身份證,你想看看其他部門的程式碼都是需要審批的。
我這裡不是建議要到創業公司裡面去。相反如果你是一個年齡比較大的程式設計師,喜歡比較成熟的流程,那麼在一個家大公司裡面工作可能更適合你。
職業選擇對人生幸福感的影響
“每當一天結束之後,你今天是否幸福並不完全取決於你的職業。”
一方面我完全同意這句話。不管工作內容如何,這只是一個工作而已。並且我注意到如果我過分強調工作的重要性之時,我的生產力反而降低了。合理的方式是:回到家就別像白天那麼拼命了。
另一方面,我們確實花了一些時間在工作上。這兒的問題是:工作和生活應該如何區分(平衡)呢?這裡我不同意在區分開工作和生活的過程中將同事和一般的朋友分開的做法。一旦離開公司就和同事斷掉聯絡完全沒有必要。
總結
當我介紹我自己的時候,我常自稱為程式設計師(即使我之前的工作主要負責晶片架構還是管理),因為我靠寫程式賺錢,而不是單純的因為在說到”程式設計師“這個詞的時候感到強烈的自豪。我認為程式設計師是一個很好的職業,並且對我這樣的人來說很合適。
相反的,如果你只是將寫程式作為職業起點,從而可以最終轉成其他型別的職業(例如管理者),那麼你真的不能稱作程式設計師。這種方法對我來說不可理解:你還不如去讀一個MBA呢。當然這個路線對有些人也許是適合的,因為有些MBA需要一些業界工作經歷之後才會錄取你。
所以關鍵在於選擇一個適合自己的路線,並且一直堅持下來,最終你會成功。對於像我所在的公司來說,如果想要獲得一個寫程式的職位,但卻不認同自己是程式設計師的話,恐怕不會給面試官什麼好印象。
最後強調一下McKenzie文章裡我十分認同的觀點:溝通能力很重要。我推薦你去讀一讀。