一轉(zhuǎn)眼工作已有8年挠羔,前兩天公司一位初入職場的同事希望我給一些建議與經(jīng)驗。我覺得這個話題很有價值埋嵌,這里以個人的想法與經(jīng)歷寫成此文破加,希望給年輕的開發(fā)者們一些啟發(fā)。
我工作過的公司有4家雹嗦,NVIDIA, Google, Slide和Glow范舀。其中兩家是知名的大公司合是,Slide我是D輪過后加入的,那時約150人锭环。Glow則是從它第一天創(chuàng)立聪全,一直走到現(xiàn)在。個人的工作也從Developer辅辩,Tech Lead难礼,Engineering Manager到CTO。這些經(jīng)歷使我對程序員的個人發(fā)展之路有比較全面的看法玫锋。
如果你問一個年輕的前端開發(fā)人員蛾茉,你在今后的3年內(nèi)如何提升自己的能力?他可能會說“我現(xiàn)在對Web前端比較熟悉景醇,但我想深入了解AngularJS臀稚,另外React現(xiàn)在發(fā)展的很快我也想看一下。之后三痰,我會花時間去學習iOS和Android開發(fā)〈芄埽”看上去不錯散劫,但缺乏系統(tǒng)性的目標∧环或者說获搏,他制定了學什么,但對為什么要學這些并沒有仔細的思考失乾。
在技術(shù)領(lǐng)域常熙,有太多的東西會迅速的過時,如何利用有限時間碱茁,最大化你的長期收益裸卫?這里我可以給出幾條建議
打造你的工具箱
工欲善其事,必先利其器纽竣。每個開發(fā)者都應(yīng)該有一把自己的瑞士軍刀墓贿,在將來漫長的職業(yè)生涯中,這些工具可以為你省下寶貴的時間蜓氨,并幫助你更好的組織個人知識庫聋袋。舉兩個例子
一套高效的開發(fā)環(huán)境
一個信息采集器和一本筆記本
高效的開發(fā)環(huán)境
我們可以從編緝器談起,這里有IDE vs Text Editor穴吹,有Vim vs Emacs幽勒,有Sublime vs Atom,那該如何選擇呢港令?在做選擇之前啥容,我們先想想自己的目標棘钞。我們希望這是一個長期的投資,這款編緝器能被長期使用干毅,在這個過程不斷的打磨宜猜,使其能完全適合自己的習慣,最大化編緝效率硝逢。如果程序員是俠客姨拥,編緝器則是他手中的劍。
雖然我是Vim的重度用戶渠鸽,但我覺得當年選擇Vim時有欠考慮叫乌。如果讓我重選一次,我的第一選擇會是Emacs徽缚,第二選擇會是Atom憨奸。Emacs已存在30年,社區(qū)仍然活躍凿试,其可擴展性在編緝器中無人能出其右排宰。Emacs的腳本語言elisp又是lisp的一種dialect,我覺得對lisp的學習可以提升程序員對編程核心思想的理解那婉。另一個加分點是Emacs由于其本身的高門檻及l(fā)isp特質(zhì)板甘,吸引了大批高質(zhì)素的程序員,其社區(qū)可謂藏龍臥虎详炬,更誕生了像Org-mode這樣神級的插件盐类。反觀Vim,Vim的精髓在于Mode editing呛谜,這是值得學習的在跳,可以極大提高文本編緝的效率。但當你熟悉了這一理念后隐岛,我覺得可以轉(zhuǎn)投其他編緝器猫妙,因為Vim的架構(gòu)與Vimscript限制了其擴展性。Emacs通過Evil插件非常完整的支持了Mode editing礼仗,其他主流的編輯器也有類似插件吐咳,所以你一旦掌握了這個理念,在別的編輯器中也可以發(fā)揮作用元践【录梗可能有人會說沒有一個Vim emulator能做到Vim 100%的功能,但重點不在于某條指令是否被移植单旁,而是mode editing思想的精髓能否被移植沪羔,我覺得答案是肯定的。
再看Atom vs Sublime,Atom的可擴展性非常好蔫饰,它的大部分核心功能也是以插件的方式實現(xiàn)琅豆,這點與Emacs有異曲同工之妙。并且其開源的特性篓吁,使我相信它有比Sublime更持久的生命力茫因。
關(guān)于IDE,我的看法是杖剪,我不排斥IDE冻押,但每個IDE都是為了某個特定的任務(wù)或是編程語言服務(wù)的。做為一個有追求的程序員盛嘿,可以用IDE洛巢,但依然需要精通一個強大的通用編緝器。
類似編緝器次兆,高效的開發(fā)環(huán)境還包括Shell稿茉,Launcher,窗口管理器芥炭,文檔閱讀器等等漓库。其中有一部分只需要你化很少的時間就可以完成配置,它們的投資回報率是非常高蚤认。
信息采集器和筆記本
前者是用來收集別人產(chǎn)生的信息米苹,后者則是收集自己產(chǎn)生的信息。前者一個簡單的例子就是瀏覽器的Bookmark砰琢。你需要能隨時將一組有用的信息歸檔,并在未來的某個時刻快速找到它良瞧。后者最直觀的例子則是Mac OS或是iOS自帶的筆記本陪汽,這里的目的是能隨時隨地記錄你自己的想法。從本質(zhì)上講褥蚯,就是你需要有一套好用的工具來做你的知識庫管理(Knowledge management)挚冤,也可以說是你知識和思想的外部備份。我個人現(xiàn)在是用Evernote同時來做信息采集與筆記的赞庶。如果有一個好的流程训挡,你也完全可以用兩個工具來分別把這兩件事做好。但我建議你花足夠多的時間來思考如何組織你的個人知識庫歧强。
以上只是兩個典型的例子澜薄,你需要做的是發(fā)現(xiàn)那些你要長期從事的任務(wù)(往往不隨技術(shù)而改變,也不隨公司而改變)摊册,將完成這些任務(wù)所需的工具調(diào)整至最優(yōu)肤京。再舉一個例子,我會留意身邊的程序員所用的鍵盤茅特。只有少部分的程序員會買高端的靜電容鍵盤忘分,比如HHKB棋枕。而在我看來,這明顯是一筆很劃得來的投資妒峦,程序員在工作的大部分時間里都需要和鍵盤打交道重斑,一個舒適的打字體驗是非常有收益的,更何況這類高品質(zhì)的鍵盤都非常的耐用肯骇。
開闊你的視野窥浪,構(gòu)建你的技術(shù)體系
首先你要給自己設(shè)定一個目標,就如同一個公司會設(shè)定它的Vision累盗。
目標要夠大寒矿,這樣你才能看到更多的風景。
目標應(yīng)該設(shè)定在解決哪一類問題若债,而不是精通哪一類技術(shù)符相。技術(shù)只是手段,不是目的蠢琳。
例如啊终,“我要成為iOS developer中的達人”這個目標,就遠不如“我要成為前端應(yīng)用開發(fā)的專家”來得有意義傲须。前者學到深處你可能會去鉆研iOS framework里各種奇技淫巧蓝牲,而后者你會開始關(guān)注視覺與交互設(shè)計,研究各平臺間的差異與共同趨勢泰讽。顯然例衍,后者更有助于你的個人發(fā)展。
不過即便有了明確的目標已卸,選擇哪一類技術(shù)學習佛玄,如何學習,在信息過載的今天依然是一個難題累澡。常有的觀點是應(yīng)該學習最新的技術(shù)梦抢,因為老的已經(jīng)過時,而反對的觀點則是新技術(shù)還不成熟愧哟。我個人的觀點是奥吩,當初入一個領(lǐng)域時,選擇主流技術(shù)框架蕊梧;當你有一定經(jīng)驗后霞赫,選擇技術(shù)時更應(yīng)該關(guān)注背后的推動者,我相信優(yōu)秀的人和團隊總能打造優(yōu)秀的產(chǎn)品望几,無論是商業(yè)公司還是開源社區(qū)绩脆。不必太在意技術(shù)的新舊,因為可能很快都會成為過去時。你真正要學習的是技術(shù)背后的思想靴迫。有不少語言與開源項目會寫它的Coding philosophy惕味,這是很有意思的,你可以從它們的源代碼中去驗證這些編程理念玉锌。以Python為例名挥,如果你執(zhí)行import this
就會看到它的理念,再如Python中一個著名的開源庫Celery主守,在它的文檔有專門一節(jié)講述它的[編程理念](http://celery.readthedocs.org/en/latest/internals/guide.html#philosophy)禀倔。它們對你的影響會比這些技術(shù)本身來得更深遠,這是我給初學者們的一個忠告参淫。同理救湖,我非常推薦讀一些優(yōu)秀開源庫或是語言的源代碼,例如Python的標準庫絕大部分都是用Python實現(xiàn)的涎才,而且可讀性非常好鞋既。如果學習一門技術(shù)僅僅停留在用的層面上,你就還沒有完全吸取其中的精華耍铜,而且學習的收益會隨著技術(shù)的過時而消失邑闺。
我的另一個學習原則是,在選擇學習一門新技術(shù)時棕兼,最大化它與你現(xiàn)有知識庫的差異性陡舅。讀起來可能有拗口,例如你會Django伴挚,接下去你應(yīng)該去學習Ruby on Rails還是NodeJS? 依據(jù)這個原則靶衍,你應(yīng)該學NodeJS,因為它的異步IO模型在理念上與Django的同步模型差異很大茎芋,而RoR則與Django更多相似之處摊灭。但更好的選擇是不要去學另一個Web framework,去學習ZeroMQ或是Redis败徊,這兩者對于Web development也非常有幫助,這樣就做到了最大化差異掏缎。從構(gòu)建一個程序員的技術(shù)理念角度皱蹦,我會推薦每一個程序至少去了解Lisp或是一門Functional programming language,不管你是否會在可見的未來用到眷蜈,它們能讓你從一個不同的角度看待編程沪哺。
最后我建議每個程序員都應(yīng)該經(jīng)營一款自己的產(chǎn)品,它可以是一款app酌儒,一個網(wǎng)站或是一個開源軟件辜妓。除非你是一個創(chuàng)業(yè)公司的早期員工,不然你可能沒有機會將所有學到的技術(shù)或是理念都付之實踐,有很多人想成為全棧工程師籍滴,最快的捷徑就是打造一款自己的產(chǎn)品酪夷。任何一個設(shè)計師都會精心打造自己的Portfolio,但大部分程序員卻不會孽惰。當評估一個程序員的Coding能力時晚岭,我會去看他的Github上是否有出彩的項目,可惜國內(nèi)絕大部分程序員的Github空空如也勋功,或者只有一些非常簡單的程序坦报。我建議大家好好經(jīng)營自己Github上項目,這不但可以提高你的聲譽狂鞋,對你將來的求職也非常有幫助片择。當你報怨求職面試時又被問到各種無厘頭的程序題時,有沒有想過面試官也很無奈骚揍,因為他沒有任何其他方法得知你的Coding能力究竟如何字管。如果每一個程序員都有自己的作品,我想程序員的面試會簡單許多疏咐。
重視溝通能力的培養(yǎng)
當被問到“你覺得Junior Developer和Senior Developer最大的差別是什么”時纤掸,我最自然的反應(yīng)是溝通與文檔。溝通包括程序員團隊內(nèi)部的溝通浑塞,與其他團隊的溝通借跪,與Manager的溝通等等。我不認為自己有能力把這些問題非常概括地說清楚酌壕,不過我可以給一條建議掏愁,那就是先學會和你的Manager溝通,讓他來教你其余的部分卵牍。許多公司都會設(shè)置Manager與組員的1:1果港,一個有效率的1:1應(yīng)該大部分時間有組員來主導。這需要你在1:1之前花足夠多的時間來考慮要問的問題糊昙,并且最好提前1天發(fā)給Manager辛掠,讓他有機會思考答案。許多人對此不太重視释牺,或者只問非常具體的問題而不是一些開放性問題萝衩,這樣你很難在你的Manager身上學到東西。如果你漸漸懂得如何利用1:1的時間没咙,它很會成為你在工作中單位時間投資回報率最高的活動猩谊。
累積你的人脈
每個人都明白人脈的重要性,但實際做起來卻不容易祭刚。參加一些線下的會議或是活動牌捷,可能是最直接的擴展人脈的方式之一墙牌。可惜大部分人似乎只是去聽了一場技術(shù)講座就回家了暗甥。當然喜滨,這和不少活動的時間安排也有關(guān)系,講座時間排得太滿淋袖,茶歇時間短鸿市,加上有時嘉賓遲到或是沒控制好時間,干脆就把茶歇取消了即碗。而實際上焰情,結(jié)識一兩個同道中人遠比聽技術(shù)講座有價值。下次去參加這類會議剥懒,不妨給你自己設(shè)個目標内舟,比如至少加兩個同行的微信。之后維系你的人脈可能需要花更多的時間初橘,下了班或是周末找你的朋友們喝個咖啡吧验游!
另外我覺得每個人都需要一個職場導師,他可以是你第一份工作的導師或是Manager保檐,也可以是你認識的其他前輩耕蝉。你們需要維系一個非常長期的關(guān)系,不止于一家公司夜只,最好貫穿你的整個職業(yè)生涯垒在。每當你遇到疑惑時,都可以詢求他的建議扔亥,我覺得這將是你最寶貴的一筆人脈財富场躯。
尋找發(fā)揮你才華的平臺
最后也是最重要的一步,找到適合你的公司旅挤。做為求職者評估一家公司可以看三個方面
公司的發(fā)展前景(大公司的話踢关,看所在部門的發(fā)展前景)
你將要加入的團隊
薪資福利
所以在面試一家公司的時候,你要意識到面試是雙向的粘茄,公司在面試你的同時签舞,你也在面試這家公司。面試前你應(yīng)該對這家公司做足功課柒瓣,準備好一些有質(zhì)量的問題瘪菌,比如指出產(chǎn)品中的問題,詢問開發(fā)流程或是如何做績效評估嘹朗。到時你也可以檢驗一下你的面試官是否合格。
每次選擇公司對以上三個方面都應(yīng)兼顧诵肛,但在職業(yè)生涯的不同階段屹培,側(cè)重點不同默穴。比如,在剛剛工作時褪秀,加入一個優(yōu)秀的團隊最為重要蓄诽,他們可以教會你很多東西,提升你的能力媒吗。工作5年之后仑氛,你需要一個平臺施展你的才華,體現(xiàn)個人價值闸英,公司發(fā)展前景的重要性迅速提升锯岖。當你做出一番成績,證明了自己的價值之后甫何,逐漸進入收獲期,就有了與公司要價的資格。另一方面然想,團隊實力對公司的前景也有很大的影響哟沫。
對一個剛畢業(yè),初入職場的同學巍耗,一個近幾年被問了無數(shù)次的問題“我的第一份工作是去創(chuàng)業(yè)公司還是大公司秋麸?”我的回答仍舊是“加入一個優(yōu)秀的團隊最為重要”。一些知名的大公司炬太,團隊的素質(zhì)是有一定保證灸蟆,但創(chuàng)業(yè)公司則不然,團隊素質(zhì)參差不齊娄琉,所以如我前面所說你需要面試這個團隊次乓,做出自己的判斷。不過除了團隊因素之外孽水,我想提一下畢業(yè)生去創(chuàng)業(yè)公司的幾個好處票腰。首先,在剛畢業(yè)的一段時間內(nèi)女气,經(jīng)濟壓力小杏慰,是最自由最能承受風險的時期,而這段時間往往不長炼鞠,所以應(yīng)把握好這個去創(chuàng)業(yè)公司的黃金時段缘滥。其次,所有的學生進入大公司后谒主,都會擔任初級職位朝扼,某種程度上來講是學校學習的延續(xù),規(guī)范有條理霎肯,但缺乏獨立性和創(chuàng)新性擎颖,而這正是中國大部分學生所欠缺的榛斯。這方面的能力在一家創(chuàng)業(yè)公司可以得到快速鍛煉,而在大公司可能要等升到中級職位后才有這方面的機會搂捧。個人觀點驮俗,僅供參考。
小結(jié)
我覺得步入職場的前3年對今后的發(fā)展尤其重要允跑,希望此文能對年輕的程序員們有所幫助王凑。歡迎評論!
轉(zhuǎn)自 http://tech.glowing.com/cn/advices-to-junior-developers/