每一年都有無數年輕程序員,加入軟件行業。程序員
他們在學校裏學過編程,可是對這個行業的現實一無所知。面試
Patrick McKenzie是美國一家小軟件公司的老闆,他寫了一篇長文,介紹這個行業的一些實際狀況。我看了之後很感慨,有些地方很受啓發。我選擇了一部分,翻譯以下。編程
==================================ide
1、90%的編程工做來自內部軟件優化
(90% of programming jobs are in creating Line of Business software)spa
計算機專業的學生,可能有一種印象,以爲大部分程序員,都在編寫公開出售的軟件或者通用軟件。翻譯
這種見解是不對的。大部分程序員,實際上編寫的是不公開的企業內部軟件,好比追蹤費用的軟件、優化裝運成本的軟件、幫助記帳的軟件、設計新部件的軟件、計算保單價格的軟件、識別惡意訂單的軟件等等。設計
各類各樣的商業公司,開發內部軟件,解決它們本身的問題。市場上對程序員的大部分需求來源於此,只有極少數程序員直接編寫面向外部顧客的軟件。開發
內部軟件的開發,一般很是乏味,使人厭倦。由於它們的技術複雜性低、技術決策很是保守、預算不多、缺少長遠考慮。可是,世界上大部分編程工做都是這種。get
2、別人僱你的目的,是讓你創造利潤,不是讓你編程
(Engineers are hired to create business value, not to program things)
商業公司最關心的(或者說惟一在意的)事情,就是增長收入、下降成本。所以,它們實際上須要的不是程序員,而是可以幫助它們增長收入、下降成本的人。
開發優美的軟件,解決技術難題,編寫沒有bug的代碼,這些都不是商業公司的目的。它們僱傭你,是爲了讓你幫它們完成某個能夠增長收入、下降成本的項目,而不是由於你是geek。
你我的對於公司的惟一價值,就在於你能多大程度上爲它們增長收入、下降成本。
3、不要自稱爲程序員
(Don't call yourself a programmer)
不少公司的經理不懂計算機,在他們心目中,"程序員"就是一羣高成本的勞動力,只會在一臺複雜的機器上幹一些難懂的事情。
若是你自稱爲"程序員",當公司須要壓縮成本的時候,某些經理首先就會想到解僱你。有一家公司叫Salesforce,口號是"沒有軟件",意思就是若是經理們購買了他們的服務,就再也不須要別的軟件管理銷售業務了,也就是說,再也不須要本身僱傭程序員了。
正確的作法是,你應該把本身描述成與增長收入、下降成本有關係的人,好比"xx產品的開發者"或"改進者"。有一個Google Adsense程序員的自我介紹,是這樣寫的:"Google公司97%的收入,與個人代碼有關。"
4、不要限定本身
(You are not defined by your chosen software stack)
年輕學生常常會問,應該選擇哪一種語言或平臺?學會Java,是否是比學會.NET容易找工做?
過度強調某一種語言或平臺,都是沒必要要的。若是你把本身限定爲Java程序員或.NET程序員,你就已經輸了,由於首先你不該該自稱爲程序員(理由見上一點),其次這種限定使得你自動被排除在世界上大多數編程工做以外。
現實生活中,學會一種新語言,只須要幾個星期,而後再過半年到一年,你就會變成老手。那時,根本沒人在意你之前用什麼語言。
天才程序員是不多的,但是須要天才程序員的工做機會卻不少不少,大多數場合都是需求遠遠大於供給。這意味着,即便你不是天才程序員,只要你是一個優秀工程師,那些招聘公司也會馬上錄用你,由於它們知道招聘到天才程序員的機會微乎其微。(重複一遍,所謂"優秀工程師",就是你的履歷上有一連串增長收入、下降成本的記錄。)
某些公司的人事部門,會根據某個關鍵詞(好比Java或.NET)過濾簡歷。雖然這樣的公司根本不值得去,可是若是你真的想過這一關,也很容易:投入幾個晚上和週末,在你當前的項目中設法用到這個關鍵詞,而後再把它寫進簡歷就好了。
5、如何提升求職時的談判能力?
(How do I become better at negotiation?)
(1)記住你不是在求職,不是在展現編程技巧,而是在推銷某種商業需求(增長收入或下降成本)的解決方案。
(2)面試時,要有自信,要平等的對話。你要的是一個互利的錄用合同,不要每次對方提出要求,你都說Yes。
(3)僱主可能會問"你的上一份工資是多少",他們其實在說"給我一個理由,壓低你的報酬"。你要想好如何適當地回答這個問題。
(4)要還價。這裏不只僅指錢,還指其它你關心的方面。若是你沒法要求更高的薪水,那就試着要求更多的假期。
(5)在對方決定錄用你之後,纔開始討論薪水。由於那時,他們已經在你身上,投入了大量的時間和金錢,產生了必定的成本,此時他們可能以爲一些小問題已經不值得再糾纏了,好比每一年的工資增長几千元。
6、創業公司是否適合應屆畢業生?
(Are startups great for your career as a fresh graduate?)
若是你一畢業就加入創業公司,最可能的結果是,接下來幾年你都工做得很是辛苦,而後公司悲慘地失敗了,你失業了,不得不又去另外一家創業公司工做。
若是你真的想去創業公司,應該首先找一家大公司幹上兩年,攢一點錢,積累一些經驗,而後精心挑選後再去創業公司。
在創業公司工做,通常狀況下,你遇到的都是創業者。他們大多數人沒有能力在兩年後僱傭你;而在大公司工做,你遇到的都是其餘大公司的人,他們中不少人未來有能力僱用你或者幫你介紹工做。
7、在創業公司工做是否值得推薦?
(So would you recommend working at a startup? )
選擇創業公司,就是選擇一條職業道路,而不是選擇一種生活方式。惋惜不少人把這二者顛倒了,他們推薦創業公司,其實是在推薦一種你感興趣的生活方式。
若是你確實喜歡這種生活方式,老實說,你在大公司裏也能夠獲得它們。在許許多多大公司裏,你都有機會鑽研最新的技術,並且還能5點半準時回家照顧孩子。
8、溝通技能是最重要的職業技能
(Your most important professional skill is communication)
前面說過,工程師被僱傭,不是由於會編程,而是由於可以創造商業價值。因此,你讓人們相信你能創造價值,這是幫助你找到工做的最重要的能力。這種能力與你真的能創造多少價值,實際上聯繫不是很緊密。
我認識的一些最優秀的程序員,每每拙於表達。所以,別人不是不想與他們一塊兒工做,就是低估了他們的價值。相反地,若是你看上去很會編程,而且很善於表達,別人就會真的這樣看待你。