【轉】不要自稱程式設計師,老鳥的 9 個職涯建言

資料來源:不要自稱程式設計師,老鳥的 9 個職涯建言




原文標題: Don’t Call Yourself A Programmer, And Other Career Advice (原文連結

如果有一門課,我能將它加到任何工程相關的學程,它將不會涉及編譯器、閘道或時間複雜度。 這門課的名稱可能是 不可不知的產業真實面 ;我們從來不教這門課,結果造成許多苦難。 若你將成為年輕的工程師,這篇文章就是你的「讀我檔案(README)」文件。 這邊文章告訴你那些學校沒有教的事,讓你知道「真實世界」實際如何運作,目的是讓你能夠快樂工作。 從缺乏自信及商務知識的工程師開始,我大概花了十年的歲月,經歷很多次的痛苦,才能明白這些。 我並不覺得這篇文章會是終極指南,但希望能告訴你那些大學職涯中心沒有講的事。


  • 九成的程式設計工作來自企業內部軟體(90% of programming jobs are in creating Line of Business software)


從經濟學的觀點:任何東西(包括你)的價格,都是以它的供給和需求計算出來。 我們先來談需求面。 大部分的軟體,都不是公開販售、透過網際網路發行,或是從線上應用程式商店(App Store)下載。 多數的軟體來自企業內部需求、解決營運問題,例如追踪費用、最佳化運送成本、協助會計部門、設計新組件、計算保單價格、識別詐欺訂單等。 各式各樣的商業公司,開發內部軟件,解決它們自己的問題。市場上對程序員的大部分需求來源於此,只有極少數程序員直接編寫面向外部顧客的軟件。 內部軟件的開發,通常非常乏味,令人厭倦。因為它們的技術複雜性低、技術決策非常保守、預算很少、缺乏長遠考慮。但是,世界上大部分編程工作都是這種。

軟體經常用於解決商業問題,不管它是多麼無趣或沒技術可言。 以公司內部的出差費用單為例,對於有 2,000 名員工的企業,紙上作業在電子化之後,可能節省每年 5,000 工時,以每小時 50 美元的成本計算,就可以省下每年 $250,000 的開支。 出差表單可能只是全世界最簡單的 CURD 程式,但如果它能夠為公司節省成本或增加收入,它就很重要。


  • 公司僱用你是為了創造商業價值,不是讓你恣意寫程式(Engineers are hired to create business value, not to program things)


商業公司最關心的(或者說唯一在乎的)事情,就是增加收入、降低成本。因此,它們實際上需要的不是程序員,而是能夠幫助它們增加收入、降低成本的人。 開發優美的軟件,解決技術難題,編寫沒有bug的代碼,這些都不是商業公司的目的。它們僱傭你,是為了讓你幫牠們完成某個可以增加收入、降低成本的項目,而不是因為你是geek。 你個人對於公司的唯一價值,就在於你能多大程度上為它們增加收入、降低成本。


  • 不要自稱為程式設計師(Don't call yourself a programmer)


很多公司的主管不懂電腦,他們覺得,「程式設計師」就是一票成本很高的勞工,做一些複雜很難瞭解的事情。 如果你的職稱是「程式設計師」,當公司需要縮減成本的時候,某些主管會想要先解僱你。 有一家公司叫 Salesforce,口號是「沒有軟件」,意思就是如果經理們購買了他們的服務,就不再需要別的軟件管理銷售業務了,也就是說,不再需要自己僱傭程序員了。 正確的做法是,你應該把自己描述成與增加收入、降低成本有關係的人,比如"xx產品的開發者"或"改進者"。有一個Google Adsense程序員的自我介紹,是這樣寫的:"Google公司97%的收入,與我的代碼有關。"


  • 別受限於你選擇的軟體技術(You are not defined by your chosen software stack)


年輕工程師透過 Twitter 向我詢問職涯問題時,許多人問的是關於該學什麼程式語言或平台(例如 Java 或 .NET?),其實這無關緊要。

Java 的程式設計師,是否比 .NET 的程式設計師賺更多錢?爭論的人總是說 Java 或 .NET 程式設計師已經有一大票; 若你認真就輸了,因為 (1) 你不該把自己定義為程式設計師(理由請看上一節), (2) 執著這種無意義的辯論,對於從事程式設計工作毫無建樹。 現實生活中,不管學哪一種程式語言,通常只要幾個星期就能上手,再過個一年半載,當你成為老鳥,就沒人在乎你用什麼語言了。 最近我在 2010 年 3 月,用癡肥醜陋的 Java EE 開發網站後端系統,請相信我,根本沒人在乎我用什麼技術開發。 如果用 Python 的公司想找技術高手幫公司賺一大筆錢,即使我從不寫任何一行 Python 程式碼,也同樣能夠勝任。

天才型的工程師很稀少,在就業市場根本供不應求。 在 Matasano 公司每個人都會用 Ruby,但儘管你不是天才,只要你是優秀的工程師,他們還是願意錄用你。 (優秀的工程師的履歷,就是一連串幫公司增加收入和降低成本的事蹟。) Fog Creek 公司幾乎都用微軟平台,但儘管我無法拼寫「ASP.NET」這專有名詞,他們還是錄用我。

有些公司的人資部門招聘制度很差勁,如果你的履歷缺少一些關鍵字(如 Java 或 .NET),他們甚至不會找你去面試。 你應該不會想去這些有病的公司,但如果你真的想去,你還是可以花幾個晚上或週末時間, 把那些「熱門就業關鍵字」補寫到履歷中,也可以修改一下手邊的專案,讓你的經歷和那些詞彙扯上邊。 如果你想在一家用 .NET 的公司學 Ruby,那就用 Ruby 完成那種一次性的專案, 接著你就成為專業 Ruby 程式設計師,因為你用 Ruby 寫程式,而公司也為此付給你薪水。 (好笑嗎?我在用 Java 的公司這樣做,以 Ruby 寫個小專案,幫公司賺了 $30,000 美元,我的老闆很高興,而且可以預料的,他根本從來沒問過我用什麼技術開發。)


  • 同事和主管不會一直是你的朋友(Co-workers and bosses are not usually your friends)


你花了很多時間和同事在一起,你和其中幾位可能變成很要好的朋友,通常在這三年,你為維持親切的關係,邀請他們共進晚餐,而他們也同樣邀請你。 你認識的每個人,都會覺得你是個不錯的人,這對你的人際關係很有幫助;但是,可別妄想每個人都是你的朋友。

舉例來說,你在求職面試時,正在和一位看起來和藹可親的 28 歲主管談話,他看起來有點像幾年後的你。 但你畢竟不是他的朋友,面試官只是試著想幫公司用最便宜的價格把你招募進來。 也許討論魔獸爭霸讓你覺得彼此之間存在某種情誼, 但事實上面試官真正要做的事情,雖然合乎常理,卻是你真正的朋友不可能做的, 像是希望你對薪資的要求能降低個幾千塊; 或是要你多為公司付出一些時間,而減少跟真正的朋友在一起的時間。 你會有其他待人親切、好相處的同事們,開始建議你做一些你不是很想做的事情,例如「我需要從你剛完成的這個專案多拿到一些績效」,甚至「我們必須一起完成這件事情,雖然對你沒什麼好處,但是對我的目標達成很重要」。 當這些事情發生時,可別太訝異!


  • 別過度評價競爭者的平均技能(You radically overestimate the average skill of the competition because of the crowd you hang around with)


許多人已經成功晉升資深工程師,卻無法正確實作 FizzBuzz 。想想看:你或許已經可以去那些你自認不夠資格應徵的公司工作,他們雖然聘用比較厲害的麻瓜,但依然是麻瓜。


  • 看徵才廣告求職成功是一場意外(“Read ad. Send in resume. Go to job interview. Receive offer.” is the exception, not the typical case, for getting employment)


很多工作從來不公開招募,多數值得被聘用的人也不公開求職(參考約耳談軟體的 文章)。 職缺的資訊可以很快用電子郵件傳遞,當某家公司的決策者知道他需要找誰,只要透過他的朋友或生意夥伴,他們其中會有人認識這位要找的人,可能是家人、大學室友、會議中結識或過去的同事等。 約出來見面晤談,達成工作協議後,再交給人資部門正式聘用即可。

對於大多數你想要得到的工作,「新創公司的第一位員工」實際上很難讓你的履歷可以被人資部門接受,只有兩個人的新創公司,對於人資部門來說並不算正式的工作經歷。 (你不會想成為新創公司的第一位員工,但你可以當最後一位共同創辦人。) 想要成為 Googler 的一份子嗎?只要你像其他 Googler 一樣工作,他們會有正式的程序,可以助你一臂之力。 (他們也有許多非正式的管道,給有機會成為 Googler 的你,例如:將你正在工作的公司買下來。當你被幾億美元的資金圍繞,就會有很多有趣的選項來解決問題。)

有許多理由可以說明為何求才都是私下進行,其中一點是公開求才會收到數以百計的大量履歷轟炸(特別是目前的景氣狀況下),包括許多根本不適合這項職缺的人。 另外一點是,如果你對要找的人沒有更進一步的認識,很可能找來一位平庸的資深工程師(non-FizzBuzzer)。

譯註:你可以創業,或是和別人一起創業,當個共同創辦人,實際創業的經驗會讓你學習到非常多;但是請避免在一家只有兩人的新創公司當員工,因為員工和創辦人是不同的心態,當一家公司還沒有任何規模,而你就只想當一位員工,那對你的履歷沒有加分效果,甚至你要避免在履歷上面出現這種工作經驗。
譯註:如果你想在優秀的軟體公司工作,儘管現在的公司差強人意,但最好的方法是,當下就開始學習用優秀軟體公司的方法工作,當你成為優秀的軟體開發者,你將有機會進入優秀的公司,或是你的公司被優秀的軟體公司買下,總之你有機會變成一份子。


  • 如何提高求職時的談判能力?(How do I become better at negotiation?)


(1)記住你不是在求職,不是在展示編程技巧,而是在推銷某種商業需求(增加收入或降低成本)的解決方案。 (2)面試時,要有自信,要平等的對話。你要的是一個互利的錄用合同,不要每次對方提出要求,你都說Yes。 (3)雇主可能會問"你的上一份工資是多少",他們其實在說"給我一個理由,壓低你的報酬"。你要想好如何適當地回答這個問題。 (4)要還價。這裡不僅僅指錢,還指其它你關心的方面。如果你無法要求更高的薪水,那就試著要求更多的假期。 (5)在對方決定錄用你以後,才開始討論薪水。因為那時,他們已經在你身上,投入了大量的時間和金錢,產生了一定的成本,此時他們可能覺得一些小問題已經不值得再糾纏了,比如每年的工資增加幾千元。


  • 創業公司是否適合應屆畢業生?(Are startups great for your career as a fresh graduate?)


如果你一畢業就加入創業公司,最可能的結果是,接下來幾年你都工作得非常辛苦,然後公司悲慘地失敗了,你失業了,不得不又去另一家創業公司工作。 如果你真的想去創業公司,應該首先找一家大公司幹上兩年,攢一點錢,積累一些經驗,然後精心挑選後再去創業公司。 在創業公司工作,一般情況下,你遇到的都是創業者。他們大多​​數人沒有能力在兩年後僱傭你;而在大公司工作,你遇到的都是其他大公司的人,他們中很多人將來有能力僱用你或者幫你介紹工作。


  • 是否推薦在新創公司工作?(So would you recommend working at a startup? )


選擇創業公司,就是選擇一條職業道路,而不是選擇一種生活方式。可惜很多人把這兩者顛倒了,他們推薦創業公司,實際上是在推荐一種你感興趣的生活方式。 如果你確實喜歡這種生活方式,老實說,你在大公司裡也可以得到它們。在許許多多大公司裡,你都有機會鑽研最新的技術,而且還能5點半準時回家照顧孩子。


  • 溝通技能是最重要的職業技能(Your most important professional skill is communication)


前面說過,工程師被雇傭,不是因為會編程,而是因為能夠創造商業價值。所以,你讓人們相信你能創造價值,這是幫助你找到工作的最重要的能力。這種能力與你真的能創造多少價值,實際上聯繫不是很緊密。 我認識的一些最優秀的程序員,往往拙於表達。因此,別人不是不想與他們一起工作,就是低估了他們的價值。相反地​​,如果你看上去很會編程,並且很善於表達,別人就會真的這樣看待你。

Share this post!

Bookmark and Share

1 意見:

匿名 提到...

輕鬆一下
http://yifang.ftp.cc