作者:葉劍燁
原文地址:http://tech.glowing.com/cn/advices-to-junior-developers/
一轉(zhuǎn)眼工作已有8年,前兩天公司一位初入職場的同事希望我給一些建議與經(jīng)驗(yàn)钉嘹。我覺得這個(gè)話題很有價(jià)值剂娄,這里以個(gè)人的想法與經(jīng)歷寫成此文蠢涝,希望給年輕的開發(fā)者們一些啟發(fā)。
我工作過的公司有4家阅懦,NVIDIA, Google, Slide和Glow和二。其中兩家是知名的大公司,Slide我是D輪過后加入的耳胎,那時(shí)約150人惯吕。Glow則是從它第一天創(chuàng)立,一直走到現(xiàn)在怕午。個(gè)人的工作也從Developer废登,Tech Lead,Engineering Manager到CTO郁惜。這些經(jīng)歷使我對程序員的個(gè)人發(fā)展之路有比較全面的看法堡距。
如果你問一個(gè)年輕的前端開發(fā)人員,你在今后的3年內(nèi)如何提升自己的能力?他可能會說“我現(xiàn)在對Web前端比較熟悉羽戒,但我想深入了解AngularJS缤沦,另外React現(xiàn)在發(fā)展的很快我也想看一下。之后易稠,我會花時(shí)間去學(xué)習(xí)iOS和Android開發(fā)疚俱。”看上去不錯(cuò)缩多,但缺乏系統(tǒng)性的目標(biāo)⊙或者說衬吆,他制定了學(xué)什么,但對為什么要學(xué)這些并沒有仔細(xì)的思考绳泉。
在技術(shù)領(lǐng)域逊抡,有太多的東西會迅速的過時(shí),如何利用有限時(shí)間零酪,最大化你的長期收益冒嫡?這里我可以給出幾條建議。
打造你的工具箱
工欲善其事四苇,必先利其器孝凌。每個(gè)開發(fā)者都應(yīng)該有一把自己的瑞士軍刀,在將來漫長的職業(yè)生涯中月腋,這些工具可以為你省下寶貴的時(shí)間蟀架,并幫助你更好的組織個(gè)人知識庫。舉兩個(gè)例子:
- 一套高效的開發(fā)環(huán)境
- 一個(gè)信息采集器和一本筆記本
高效的開發(fā)環(huán)境
我們可以從編緝器談起榆骚,這里有IDE vs Text Editor片拍,有Vim vs Emacs,有Sublime vs Atom妓肢,那該如何選擇呢捌省?在做選擇之前,我們先想想自己的目標(biāo)碉钠。我們希望這是一個(gè)長期的投資纲缓,這款編緝器能被長期使用,在這個(gè)過程不斷的打磨放钦,使其能完全適合自己的習(xí)慣色徘,最大化編緝效率。如果程序員是俠客操禀,編緝器則是他手中的劍褂策。
雖然我是Vim的重度用戶,但我覺得當(dāng)年選擇Vim時(shí)有欠考慮。如果讓我重選一次斤寂,我的第一選擇會是Emacs耿焊,第二選擇會是Atom。Emacs已存在30年遍搞,社區(qū)仍然活躍罗侯,其可擴(kuò)展性在編緝器中無人能出其右。Emacs的腳本語言elisp又是lisp的一種dialect溪猿,我覺得對lisp的學(xué)習(xí)可以提升程序員對編程核心思想的理解钩杰。另一個(gè)加分點(diǎn)是Emacs由于其本身的高門檻及l(fā)isp特質(zhì),吸引了大批高質(zhì)素的程序員诊县,其社區(qū)可謂藏龍臥虎讲弄,更誕生了像Org-mode這樣神級的插件。
反觀Vim依痊,Vim的精髓在于Mode editing避除,這是值得學(xué)習(xí)的,可以極大提高文本編緝的效率胸嘁。但當(dāng)你熟悉了這一理念后瓶摆,我覺得可以轉(zhuǎn)投其他編緝器,因?yàn)閂im的架構(gòu)與Vimscript限制了其擴(kuò)展性性宏。
Emacs通過Evil插件非常完整的支持了Mode editing群井,其他主流的編輯器也有類似插件,所以你一旦掌握了這個(gè)理念衔沼,在別的編輯器中也可以發(fā)揮作用蝌借。可能有人會說沒有一個(gè)Vim emulator能做到Vim 100%的功能指蚁,但重點(diǎn)不在于某條指令是否被移植菩佑,而是mode editing思想的精髓能否被移植,我覺得答案是肯定的凝化。
再看Atom vs Sublime稍坯,Atom的可擴(kuò)展性非常好,它的大部分核心功能也是以插件的方式實(shí)現(xiàn)搓劫,這點(diǎn)與Emacs有異曲同工之妙瞧哟。并且其開源的特性,使我相信它有比Sublime更持久的生命力枪向。
關(guān)于IDE勤揩,我的看法是,我不排斥IDE秘蛔,但每個(gè)IDE都是為了某個(gè)特定的任務(wù)或是編程語言服務(wù)的陨亡。做為一個(gè)有追求的程序員傍衡,可以用IDE,但依然需要精通一個(gè)強(qiáng)大的通用編緝器负蠕。
類似編緝器蛙埂,高效的開發(fā)環(huán)境還包括Shell,Launcher遮糖,窗口管理器绣的,文檔閱讀器等等。其中有一部分只需要你化很少的時(shí)間就可以完成配置欲账,它們的投資回報(bào)率是非常高屡江。
信息采集器和筆記本
前者是用來收集別人產(chǎn)生的信息,后者則是收集自己產(chǎn)生的信息赛不。前者一個(gè)簡單的例子就是瀏覽器的Bookmark盼理。你需要能隨時(shí)將一組有用的信息歸檔,并在未來的某個(gè)時(shí)刻快速找到它俄删。后者最直觀的例子則是Mac OS或是iOS自帶的筆記本,這里的目的是能隨時(shí)隨地記錄你自己的想法奏路。從本質(zhì)上講畴椰,就是你需要有一套好用的工具來做你的知識庫管理(Knowledge management),也可以說是你知識和思想的外部備份鸽粉。我個(gè)人現(xiàn)在是用Evernote同時(shí)來做信息采集與筆記的斜脂。如果有一個(gè)好的流程,你也完全可以用兩個(gè)工具來分別把這兩件事做好触机。但我建議你花足夠多的時(shí)間來思考如何組織你的個(gè)人知識庫帚戳。
以上只是兩個(gè)典型的例子,你需要做的是發(fā)現(xiàn)那些你要長期從事的任務(wù)(往往不隨技術(shù)而改變儡首,也不隨公司而改變)片任,將完成這些任務(wù)所需的工具調(diào)整至最優(yōu)。再舉一個(gè)例子蔬胯,我會留意身邊的程序員所用的鍵盤对供。只有少部分的程序員會買高端的靜電容鍵盤,比如HHKB氛濒。而在我看來产场,這明顯是一筆很劃得來的投資,程序員在工作的大部分時(shí)間里都需要和鍵盤打交道舞竿,一個(gè)舒適的打字體驗(yàn)是非常有收益的京景,更何況這類高品質(zhì)的鍵盤都非常的耐用。
開闊你的視野骗奖,構(gòu)建你的技術(shù)體系
首先你要給自己設(shè)定一個(gè)目標(biāo)确徙,就如同一個(gè)公司會設(shè)定它的Vision醒串。
目標(biāo)要夠大,這樣你才能看到更多的風(fēng)景米愿。
目標(biāo)應(yīng)該設(shè)定在解決哪一類問題厦凤,而不是精通哪一類技術(shù)。技術(shù)只是手段育苟,不是目的较鼓。
例如,“我要成為iOS developer中的達(dá)人”這個(gè)目標(biāo)违柏,就遠(yuǎn)不如“我要成為前端應(yīng)用開發(fā)的專家”來得有意義博烂。前者學(xué)到深處你可能會去鉆研iOS framework里各種奇技淫巧,而后者你會開始關(guān)注視覺與交互設(shè)計(jì)漱竖,研究各平臺間的差異與共同趨勢禽篱。顯然,后者更有助于你的個(gè)人發(fā)展馍惹。
不過即便有了明確的目標(biāo)躺率,選擇哪一類技術(shù)學(xué)習(xí),如何學(xué)習(xí)万矾,在信息過載的今天依然是一個(gè)難題悼吱。常有的觀點(diǎn)是應(yīng)該學(xué)習(xí)最新的技術(shù),因?yàn)槔系囊呀?jīng)過時(shí)良狈,而反對的觀點(diǎn)則是新技術(shù)還不成熟后添。我個(gè)人的觀點(diǎn)是,當(dāng)初入一個(gè)領(lǐng)域時(shí)薪丁,選擇主流技術(shù)框架遇西;當(dāng)你有一定經(jīng)驗(yàn)后,選擇技術(shù)時(shí)更應(yīng)該關(guān)注背后的推動者严嗜,我相信優(yōu)秀的人和團(tuán)隊(duì)總能打造優(yōu)秀的產(chǎn)品粱檀,無論是商業(yè)公司還是開源社區(qū)。不必太在意技術(shù)的新舊漫玄,因?yàn)榭赡芎芸於紩蔀檫^去時(shí)梧税。你真正要學(xué)習(xí)的是技術(shù)背后的思想。有不少語言與開源項(xiàng)目會寫它的Coding philosophy称近,這是很有意思的第队,你可以從它們的源代碼中去驗(yàn)證這些編程理念。以Python為例刨秆,如果你執(zhí)行import this
就會看到它的理念凳谦,再如Python中一個(gè)著名的開源庫Celery,在它的文檔有專門一節(jié)講述它的編程理念衡未。它們對你的影響會比這些技術(shù)本身來得更深遠(yuǎn)尸执,這是我給初學(xué)者們的一個(gè)忠告家凯。
同理,我非常推薦讀一些優(yōu)秀開源庫或是語言的源代碼如失,例如Python的標(biāo)準(zhǔn)庫絕大部分都是用Python實(shí)現(xiàn)的绊诲,而且可讀性非常好。如果學(xué)習(xí)一門技術(shù)僅僅停留在用的層面上褪贵,你就還沒有完全吸取其中的精華掂之,而且學(xué)習(xí)的收益會隨著技術(shù)的過時(shí)而消失。
我的另一個(gè)學(xué)習(xí)原則是脆丁,在選擇學(xué)習(xí)一門新技術(shù)時(shí)世舰,最大化它與你現(xiàn)有知識庫的差異性。讀起來可能有拗口槽卫,例如你會Django跟压,接下去你應(yīng)該去學(xué)習(xí)Ruby on Rails還是NodeJS? 依據(jù)這個(gè)原則,你應(yīng)該學(xué)NodeJS歼培,因?yàn)樗漠惒絀O模型在理念上與Django的同步模型差異很大震蒋,而RoR則與Django更多相似之處。但更好的選擇是不要去學(xué)另一個(gè)Web framework躲庄,去學(xué)習(xí)ZeroMQ或是Redis喷好,這兩者對于Web development也非常有幫助,這樣就做到了最大化差異读跷。從構(gòu)建一個(gè)程序員的技術(shù)理念角度,我會推薦每一個(gè)程序至少去了解Lisp或是一門Functional programming language禾唁,不管你是否會在可見的未來用到效览,它們能讓你從一個(gè)不同的角度看待編程。
最后我建議每個(gè)程序員都應(yīng)該經(jīng)營一款自己的產(chǎn)品荡短,它可以是一款app丐枉,一個(gè)網(wǎng)站或是一個(gè)開源軟件。除非你是一個(gè)創(chuàng)業(yè)公司的早期員工掘托,不然你可能沒有機(jī)會將所有學(xué)到的技術(shù)或是理念都付之實(shí)踐瘦锹,有很多人想成為全棧工程師,最快的捷徑就是打造一款自己的產(chǎn)品闪盔。任何一個(gè)設(shè)計(jì)師都會精心打造自己的Portfolio弯院,但大部分程序員卻不會。當(dāng)評估一個(gè)程序員的Coding能力時(shí)泪掀,我會去看他的Github上是否有出彩的項(xiàng)目听绳,可惜國內(nèi)絕大部分程序員的Github空空如也,或者只有一些非常簡單的程序异赫。我建議大家好好經(jīng)營自己Github上項(xiàng)目椅挣,這不但可以提高你的聲譽(yù)头岔,對你將來的求職也非常有幫助。當(dāng)你報(bào)怨求職面試時(shí)又被問到各種無厘頭的程序題時(shí)鼠证,有沒有想過面試官也很無奈峡竣,因?yàn)樗麤]有任何其他方法得知你的Coding能力究竟如何。如果每一個(gè)程序員都有自己的作品量九,我想程序員的面試會簡單許多适掰。
重視溝通能力的培養(yǎng)
當(dāng)被問到“你覺得Junior Developer和Senior Developer最大的差別是什么”時(shí),我最自然的反應(yīng)是溝通與文檔娩鹉。溝通包括程序員團(tuán)隊(duì)內(nèi)部的溝通攻谁,與其他團(tuán)隊(duì)的溝通,與Manager的溝通等等弯予。我不認(rèn)為自己有能力把這些問題非常概括地說清楚戚宦,不過我可以給一條建議,那就是先學(xué)會和你的Manager溝通锈嫩,讓他來教你其余的部分受楼。許多公司都會設(shè)置Manager與組員的1:1,一個(gè)有效率的1:1應(yīng)該大部分時(shí)間有組員來主導(dǎo)呼寸。這需要你在1:1之前花足夠多的時(shí)間來考慮要問的問題艳汽,并且最好提前1天發(fā)給Manager,讓他有機(jī)會思考答案对雪。許多人對此不太重視河狐,或者只問非常具體的問題而不是一些開放性問題,這樣你很難在你的Manager身上學(xué)到東西瑟捣。如果你漸漸懂得如何利用1:1的時(shí)間馋艺,它很會成為你在工作中單位時(shí)間投資回報(bào)率最高的活動。
累積你的人脈
每個(gè)人都明白人脈的重要性迈套,但實(shí)際做起來卻不容易捐祠。參加一些線下的會議或是活動,可能是最直接的擴(kuò)展人脈的方式之一桑李□庵可惜大部分人似乎只是去聽了一場技術(shù)講座就回家了。當(dāng)然贵白,這和不少活動的時(shí)間安排也有關(guān)系率拒,講座時(shí)間排得太滿,茶歇時(shí)間短禁荒,加上有時(shí)嘉賓遲到或是沒控制好時(shí)間俏橘,干脆就把茶歇取消了。而實(shí)際上圈浇,結(jié)識一兩個(gè)同道中人遠(yuǎn)比聽技術(shù)講座有價(jià)值寥掐。下次去參加這類會議靴寂,不妨給你自己設(shè)個(gè)目標(biāo),比如至少加兩個(gè)同行的微信召耘。之后維系你的人脈可能需要花更多的時(shí)間百炬,下了班或是周末找你的朋友們喝個(gè)咖啡吧!
另外我覺得每個(gè)人都需要一個(gè)職場導(dǎo)師污它,他可以是你第一份工作的導(dǎo)師或是Manager剖踊,也可以是你認(rèn)識的其他前輩。你們需要維系一個(gè)非常長期的關(guān)系衫贬,不止于一家公司德澈,最好貫穿你的整個(gè)職業(yè)生涯。每當(dāng)你遇到疑惑時(shí)固惯,都可以詢求他的建議梆造,我覺得這將是你最寶貴的一筆人脈財(cái)富。
尋找發(fā)揮你才華的平臺
最后也是最重要的一步葬毫,找到適合你的公司镇辉。做為求職者評估一家公司可以看三個(gè)方面:
- 公司的發(fā)展前景(大公司的話,看所在部門的發(fā)展前景)
- 你將要加入的團(tuán)隊(duì)
- 薪資福利
所以在面試一家公司的時(shí)候贴捡,你要意識到面試是雙向的忽肛,公司在面試你的同時(shí),你也在面試這家公司烂斋。面試前你應(yīng)該對這家公司做足功課屹逛,準(zhǔn)備好一些有質(zhì)量的問題,比如指出產(chǎn)品中的問題汛骂,詢問開發(fā)流程或是如何做績效評估罕模。到時(shí)你也可以檢驗(yàn)一下你的面試官是否合格。
每次選擇公司對以上三個(gè)方面都應(yīng)兼顧香缺,但在職業(yè)生涯的不同階段,側(cè)重點(diǎn)不同歇僧。比如图张,在剛剛工作時(shí),加入一個(gè)優(yōu)秀的團(tuán)隊(duì)最為重要诈悍,他們可以教會你很多東西祸轮,提升你的能力。工作5年之后侥钳,你需要一個(gè)平臺施展你的才華适袜,體現(xiàn)個(gè)人價(jià)值,公司發(fā)展前景的重要性迅速提升舷夺。當(dāng)你做出一番成績苦酱,證明了自己的價(jià)值之后售貌,逐漸進(jìn)入收獲期,就有了與公司要價(jià)的資格疫萤。另一方面颂跨,團(tuán)隊(duì)實(shí)力對公司的前景也有很大的影響。
對一個(gè)剛畢業(yè)扯饶,初入職場的同學(xué)恒削,一個(gè)近幾年被問了無數(shù)次的問題“我的第一份工作是去創(chuàng)業(yè)公司還是大公司?”我的回答仍舊是“加入一個(gè)優(yōu)秀的團(tuán)隊(duì)最為重要”尾序。一些知名的大公司钓丰,團(tuán)隊(duì)的素質(zhì)是有一定保證,但創(chuàng)業(yè)公司則不然,團(tuán)隊(duì)素質(zhì)參差不齊沃但,所以如我前面所說你需要面試這個(gè)團(tuán)隊(duì)奴拦,做出自己的判斷。不過除了團(tuán)隊(duì)因素之外则北,我想提一下畢業(yè)生去創(chuàng)業(yè)公司的幾個(gè)好處。
首先痕慢,在剛畢業(yè)的一段時(shí)間內(nèi)尚揣,經(jīng)濟(jì)壓力小,是最自由最能承受風(fēng)險(xiǎn)的時(shí)期掖举,而這段時(shí)間往往不長快骗,所以應(yīng)把握好這個(gè)去創(chuàng)業(yè)公司的黃金時(shí)段。其次塔次,所有的學(xué)生進(jìn)入大公司后方篮,都會擔(dān)任初級職位,某種程度上來講是學(xué)校學(xué)習(xí)的延續(xù)励负,規(guī)范有條理藕溅,但缺乏獨(dú)立性和創(chuàng)新性,而這正是中國大部分學(xué)生所欠缺的继榆。這方面的能力在一家創(chuàng)業(yè)公司可以得到快速鍛煉巾表,而在大公司可能要等升到中級職位后才有這方面的機(jī)會。個(gè)人觀點(diǎn)略吨,僅供參考集币。
小結(jié)
我覺得步入職場的前3年對今后的發(fā)展尤其重要,希望此文能對年輕的程序員們有所幫助翠忠。歡迎評論鞠苟!