大約在18個月前,有人給我發了封郵件詢問我關於如何開啟軟體開發大門的建議。他是一個在校學生,想從事軟體開發的工作,但又怕做出了錯誤的選擇。
我想我給他的回覆應該也適用於任何正打算從事軟體開發工作的人,所以稍作修改放到這兒來與大家分享。
(郵件內容:)
以下是基於我的經歷所得的幾點主要建議:
1. 立於軟體開發的大門前
在我確定可以勝任一個開發者的工作之前(我可是經歷了一番掙扎),我不得不花費兩年時間從事非軟體開發的工作,這也更加確定了我要做一個軟體開發者的決心。
一旦你拿到一份軟體開發的工作,這都是不錯的開始。頭兩次的際遇可能會差強人意,但若不是有了這些經歷,你也不會知道哪些問題是一個公司所摒棄的。
當然這並不是說只要有份工作你就應該接受,後面我會再說下這個問題。
2. 關於擬定長期目標
你是否一直有不知道選擇何種開發方向的困惑?沒事,習慣就好。就在此刻,正有一大批Ruby開發者因為JavaScript的強勢襲來而倍感緊張。既然任何事情都不是既定的,那麼設定一個長期目標的想法簡直傻透了。
想想真是瘋狂。十一年前我還只是一個為人們做午飯的廚子,後來我做了一個決定:我要成為一名平面設計師。接著我就買了一臺Mac,把Photoshop和illustrator使用的爐火純青。後來,我有了一個攝像機,我又開始學習使用Final Cut Pro軟體,打算做一名視訊剪輯師。再後來,我考取了MCSE(微軟認證系統工程師),我又決定做一名系統管理員。然後我就開始寫網站指令碼,並且從事市場工作5-6年。終於我決定學學程式設計。沒有人可以為自己的人生設定一個模式,告訴自己下一步可以做什麼。
顯然,沒人知道五年後自己會在做些什麼。你所要的只是一個平臺,一個不變的原則,有了這些,你就能變成你想成為的那種人,做那些你覺得快樂的事。
可能在你這個年紀,你更想要多些豐富的經驗,這樣你就可以通過分析這些經驗而學到那些激勵你的東西。我不知道那些問出“你覺得5年後你會做些什麼”的人想表達什麼,這種問題顯然是無法回答的。
我現在唯一確定的事情就是,五年後我不會再為別人工作。我善於幫助別人發現自己的閃光點,我喜歡創造事物,我喜歡科技。利用好這些特點有助於建立屬於我自己的平臺。在未來的某天,這些都有可能以意想不到的方式幫助到你。
3. 明白學歷在職場生涯中的角色
這個話題由我來談有點沒說服力,但我仍然想和大家分享一下我的想法。我曾從社群大學中途輟學,這簡直為我一生中想做的所有事都關上了門。當然,這也因人而異。
我現在為一個當初只想招一個研究生學歷的CEO工作。如果你想成為一個核心開發者,一個碩士文憑是第一道門檻。但是也有特例,例如我,一個大學輟學的人,正在為我的碩士同僚們貢獻著力量。當然我也曾經歷過這些場景,比如有些人會說:“你的履歷很適合我們公司,但很遺憾我們還需要一個學士文憑…”,而那些剛剛畢業的學生卻也經常聽到與之相反的說辭。
如果要我告訴你為什麼氣泡排序的效率很低或者怎麼實現一個二叉樹查詢演算法的話,我完全可以去問問那些花了錢上了學得到這些知識的人。
當今社會的教育問題越來越明顯,我很難過地表示,學歷現在只是一紙憑據而已。學校再也不能作為開拓新事物的源頭(至少不會長久下去),而這更可能出現在你的工作環境當中。
我認為最好的狀態是:如果你在學校時擁有書本智慧(book-smart),而出了校園能把它們變成街頭智慧(street-smart )。那麼這個世界上還有什麼能夠阻擋你前進的腳步呢?
4.如何選擇合適自己的文化氛圍
那麼現在問題來了:怎麼成為你想成為的自己呢?每個人多多少少都要去遷就那些不一樣的文化,我之前就職的公司在這方面更為嚴重,簡直就像穿了件文化緊身衣。
其實開發者是一群幸運的人,他們深諳自己喜歡哪種工作氛圍。很快你就會發現自己會對很多場合說“不”了,我建議你根據以下這些斟酌一個公司文化氛圍是否適合自己:
- 你在這工作時感覺舒適麼?
- 這裡有值得你主動去做以及珍惜的東西嗎?
- 或者說你在這裡需要偽裝你自己嗎?
5.尋找良師益友
誠然,我能通過在一些聚會中的提問獲得很多好的建議,但這與你第一次工作經歷帶給你的收穫相比,一定會黯然失色。你要做的不是去告訴大家你需要一個導師,而是與那些聰明優秀的人一起工作,學習他們的方法和經驗。
比起參加任何一種開發人員培訓課,他人的奉獻精神和耐心所帶給你的好處無與倫比。
而真正把這些融合到一起的人是你自己,當然前提是你知道如何去做。
6.學會展示
當我剛開始學習程式設計時,我覺得我應該達到無所不知的程度,這樣我就能給大家展現一些很牛叉的東西,現在看來這就是一個自尊心作祟的愚蠢想法。
記得有一次聚會,有個開發新手在向人們展示他的第一個作品,我幾乎都要笑出聲了,我只能說他太傻太天真,他做的東西架構簡單,創意也不夠吸引人。而當每個人都給他高度讚揚的時候,我才意識到我真該為自己的想法感到羞愧,對於一個新手,能把作品展示出來實在勇氣可嘉。
如果你還沒有學會所有的技能,或許你應該改變下自己的想法,俗話說得好,貪多嚼不爛。從基礎做起會更好。不要過早擔心設計模式,不要一開始就在想這個東西是不是完美的,不要一開始就擔心程式碼是否足夠優雅等等。
你是否正在對你的示例應用進行二次重構?第一個能夠執行嗎?秀一下吧。是不是執行的不是完全正確?那也秀一秀。介面太難看?沒關係,秀出來。還沒有經過測試?儘管秀出來。如果說它沒有另你覺得難堪的地方,只能說明你秀得有點晚。
隨著你技術的提升,完善一個產品的能力以及做出點可以讓很多人用的東西的能力也會隨著提升。在我看來,掌握這種能力遠比學習如何使用CSS或者TDD要重要。
7. 學習不僅僅是為了找工作
我極少給別人提很籠統的建議。但這裡不得不提一個:上大學時應該嘗試去學學那些你很感興趣的東西。
隨著時間的逝去,文憑的用處也逐漸消失。很多我喜歡的開發者之前是設計師或者作家,他們更喜歡從一種哲學的角度去寫程式碼,而不選擇針對特定問題的特定演算法。
如果你很擅長書面交流,作為一個開發者這是極好的,因為它們工作的方式如此之像。但是更重要的是,良好的溝通技巧實際對你幫助更多,而大部分的程式設計師更喜歡單獨倒騰自己的程式碼。
大學的社交地位已然成為了明日黃花,取而代之的是聚會,小組,推特等等。如果計算機學科仍然如此打動你,儘管沉迷於它吧,但是如果你喜歡的是社會學,哲學,會計學或者其他學科,你應該追隨自己的內心,而不是被你飄渺的職業目標牽著鼻子走。
最後,給出一條如何靈活利用學位獲得工作的小貼士:
HR專員負責釋出職位。他們通常總是把諸如學位,經驗,技術要求這些掛在嘴邊,而實際上這些有時候根本就不足以說明一個人的能力。
如果你仍然在用這種傳統的應聘渠道:瀏覽人才網=>進入面試流程,你獲得工作的機會將會非常小。雖然可能大部分人的第一份工作都是這樣找到的。而從那開始,它會就像滾雪球一樣,直到招聘你的人覺得只有你剛好非常適合某個崗位的工作,通常這種機率比較小。所以呢,對於那種你只會待一兩年的公司,你壓根不用煞費苦心的為了取悅HR而精心打扮自己簡歷上的學歷。
8.關於跳槽
在我看來,一個稍有天分的開發者能在6-12個月內精通自己所選的開發語言或框架。不要被那些有5-10年經驗的老手嚇到:很多人只是贏在5-10倍的經驗上。
為了防患於未然,你現在就應該有計劃的跳槽(大約每18個月左右跳一次),至少是在從事第一份工作期間。慢慢你就會發現自己的經驗更加多元化,自己的薪資也節節高。(但是不要過分沉迷於工資的多少,研究表明,薪資在超過75K以後反而會降低幸福感。)
綜上所述:不要過分在意薪資,選擇優秀,樂於助人的同事一起工作,規劃好適合自己的技術棧。
謙虛誠實小貼士一則:
事實上,對別人來說,求職信中看到“誠實”、“謙虛”等字眼是屬於消極字眼的(你還不如毫不含糊的告訴別人你是一個需要指導的處於中級水平的人)。而消極是抑鬱的前兆。很多抑鬱症的發作都可以追溯到很久之前的某個悲觀時刻,只是可能偽裝成了“誠實”而已。去買一本《Learned Optimism》吧!這本書也許不會幫你解決所有的問題,但是會開啟你的心智,改變你的思維模式。
這種自我否定式的悲觀主義也正是我的一個軟肋。如果你想成為10年後的我,努力營造出自信的感覺吧,你要知道,你永遠比你自己瞭解的要牛逼很多!
下面這條建議不僅給你,也給我自己:與其為自己所不知道的事情道歉,還不如努力一點去知曉這件事。
我建議你把這點深記於心,並在求職信中換上另一種說法。你是個聰明的傢伙,真慶幸你還沒發現自己的無限潛力,因為當你成為一個偉大的程式設計師的時候我可要沾沾光了,呵呵。
其實還有很多我能告訴你的,但是一時也想不起來這麼多。認識你很高興,同時也祝願你前程似錦。
—–郵件完結—–
對於他來說,這些選擇可能會影響他一生。工作的選擇,求職的失敗,是否繼續深造等等,這些當時看起來事關重大的時刻,隨著時間的流逝,態度的轉變,一個人終究會泰然看待。
這個當時我知之甚少的人現在成了我最好的朋友之一,我想我當時所給的建議多少是有點用處的。