【轉】如何提升你的能力?給年輕程式設計師的幾條建議
入職兩個多月了,平時要處理的任務太多,部落格都荒廢了(又為自己的懶惰找藉口了。。。)
看到一篇前輩的好文章,講的很好,轉載過來分享給大家。其實,無所謂技術高低,只要肯學習、肯思考、日精進,積累的力量是很大的,但是我們大多數人都敗給了惰性。當然,惰性也是人類的本性之一,因為惰性、懶得思考,我們的祖先能少些消耗能量,能在難以獲取食物的遠古生存下來,呃,扯遠了。。。。
認清你自己,合理規劃時間,遇見更好的自己!
--------------割---------------
【連結:葉劍燁http://tech.glowing.com/cn/advices-to-junior-developers/】
一轉眼工作已有8年,前兩天公司一位初入職場的同事希望我給一些建議與經驗。我覺得這個話題很有價值,這裡以個人的想法與經歷寫成此文,希望給年輕的開發者們一些啟發。
我工作過的公司有4家,NVIDIA, Google, Slide和Glow。其中兩家是知名的大公司,Slide我是D輪過後加入的,那時約150人。Glow則是從它第一天創立,一直走到現在。個人的工作也從Developer,Tech Lead,Engineering Manager到CTO。這些經歷使我對程式設計師的個人發展之路有比較全面的看法。
如果你問一個年輕的前端開發人員,你在今後的3年內如何提升自己的能力?他可能會說“我現在對Web前端比較熟悉,但我想深入瞭解AngularJS,另外React現在發展的很快我也想看一下。之後,我會花時間去學習iOS和Android開發。”看上去不錯,但缺乏系統性的目標。或者說,他制定了學什麼,但對為什麼要學這些並沒有仔細的思考。
在技術領域,有太多的東西會迅速的過時,如何利用有限時間,最大化你的長期收益?這裡我可以給出幾條建議
打造你的工具箱
工欲善其事,必先利其器。每個開發者都應該有一把自己的瑞士軍刀,在將來漫長的職業生涯中,這些工具可以為你省下寶貴的時間,並幫助你更好的組織個人知識庫。舉兩個例子
- 一套高效的開發環境
- 一個資訊採集器和一本筆記本
高效的開發環境
我們可以從編緝器談起,這裡有IDE vs Text Editor,有Vim vs Emacs,有Sublime vs Atom,那該如何選擇呢?在做選擇之前,我們先想想自己的目標。我們希望這是一個長期的投資,這款編緝器能被長期使用,在這個過程不斷的打磨,使其能完全適合自己的習慣,最大化編緝效率。如果程式設計師是俠客,編緝器則是他手中的劍。
雖然我是Vim的重度使用者,但我覺得當年選擇Vim時有欠考慮。如果讓我重選一次,我的第一選擇會是Emacs,第二選擇會是Atom。Emacs已存在30年,社群仍然活躍,其可擴充套件性在編緝器中無人能出其右。Emacs的指令碼語言elisp又是lisp的一種dialect,我覺得對lisp的學習可以提升程式設計師對程式設計核心思想的理解。另一個加分點是Emacs由於其本身的高門檻及lisp特質,吸引了大批高質素的程式設計師,其社群可謂藏龍臥虎,更誕生了像Org-mode這樣神級的外掛。反觀Vim,Vim的精髓在於Mode editing,這是值得學習的,可以極大提高文字編緝的效率。但當你熟悉了這一理念後,我覺得可以轉投其他編緝器,因為Vim的架構與Vimscript限制了其擴充套件性。Emacs通過Evil外掛非常完整的支援了Mode editing,其他主流的編輯器也有類似外掛,所以你一旦掌握了這個理念,在別的編輯器中也可以發揮作用。可能有人會說沒有一個Vim emulator能做到Vim 100%的功能,但重點不在於某條指令是否被移植,而是mode editing思想的精髓能否被移植,我覺得答案是肯定的。
再看Atom vs Sublime,Atom的可擴充套件性非常好,它的大部分核心功能也是以外掛的方式實現,這點與Emacs有異曲同工之妙。並且其開源的特性,使我相信它有比Sublime更持久的生命力。
關於IDE,我的看法是,我不排斥IDE,但每個IDE都是為了某個特定的任務或是程式語言服務的。做為一個有追求的程式設計師,可以用IDE,但依然需要精通一個強大的通用編緝器。
類似編緝器,高效的開發環境還包括Shell,Launcher,視窗管理器,文件閱讀器等等。其中有一部分只需要你化很少的時間就可以完成配置,它們的投資回報率是非常高。
資訊採集器和筆記本
前者是用來收集別人產生的資訊,後者則是收集自己產生的資訊。前者一個簡單的例子就是瀏覽器的Bookmark。你需要能隨時將一組有用的資訊歸檔,並在未來的某個時刻快速找到它。後者最直觀的例子則是Mac OS或是iOS自帶的筆記本,這裡的目的是能隨時隨地記錄你自己的想法。從本質上講,就是你需要有一套好用的工具來做你的知識庫管理(Knowledge management),也可以說是你知識和思想的外部備份。我個人現在是用Evernote同時來做資訊採集與筆記的。如果有一個好的流程,你也完全可以用兩個工具來分別把這兩件事做好。但我建議你花足夠多的時間來思考如何組織你的個人知識庫。
以上只是兩個典型的例子,你需要做的是發現那些你要長期從事的任務(往往不隨技術而改變,也不隨公司而改變),將完成這些任務所需的工具調整至最優。再舉一個例子,我會留意身邊的程式設計師所用的鍵盤。只有少部分的程式設計師會買高階的靜電容鍵盤,比如HHKB。而在我看來,這明顯是一筆很划得來的投資,程式設計師在工作的大部分時間裡都需要和鍵盤打交道,一個舒適的打字型驗是非常有收益的,更何況這類高品質的鍵盤都非常的耐用。
開闊你的視野,構建你的技術體系
首先你要給自己設定一個目標,就如同一個公司會設定它的Vision。
- 目標要夠大,這樣你才能看到更多的風景。
- 目標應該設定在解決哪一類問題,而不是精通哪一類技術。技術只是手段,不是目的。
例如,“我要成為iOS developer中的達人”這個目標,就遠不如“我要成為前端應用開發的專家”來得有意義。前者學到深處你可能會去鑽研iOS framework裡各種奇技淫巧,而後者你會開始關注視覺與互動設計,研究各平臺間的差異與共同趨勢。顯然,後者更有助於你的個人發展。
不過即便有了明確的目標,選擇哪一類技術學習,如何學習,在資訊過載的今天依然是一個難題。常有的觀點是應該學習最新的技術,因為老的已經過時,而反對的觀點則是新技術還不成熟。我個人的觀點是,當初入一個領域時,選擇主流技術框架;當你有一定經驗後,選擇技術時更應該關注背後的推動者,我相信優秀的人和團隊總能打造優秀的產品,無論是商業公司還是開源社群。不必太在意技術的新舊,因為可能很快都會成為過去時。你真正要學習的是技術背後的思想。有不少語言與開源專案會寫它的Coding philosophy,這是很有意思的,你可以從它們的原始碼中去驗證這些程式設計理念。以Python為例,如果你執行import
this
就會看到它的理念,再如Python中一個著名的開源庫Celery,在它的文件有專門一節講述它的程式設計理念。它們對你的影響會比這些技術本身來得更深遠,這是我給初學者們的一個忠告。同理,我非常推薦讀一些優秀開源庫或是語言的原始碼,例如Python的標準庫絕大部分都是用Python實現的,而且可讀性非常好。如果學習一門技術僅僅停留在用的層面上,你就還沒有完全吸取其中的精華,而且學習的收益會隨著技術的過時而消失。
我的另一個學習原則是,在選擇學習一門新技術時,最大化它與你現有知識庫的差異性。讀起來可能有拗口,例如你會Django,接下去你應該去學習Ruby on Rails還是NodeJS? 依據這個原則,你應該學NodeJS,因為它的非同步IO模型在理念上與Django的同步模型差異很大,而RoR則與Django更多相似之處。但更好的選擇是不要去學另一個Web framework,去學習ZeroMQ或是Redis,這兩者對於Web development也非常有幫助,這樣就做到了最大化差異。從構建一個程式設計師的技術理念角度,我會推薦每一個程式至少去了解Lisp或是一門Functional programming language,不管你是否會在可見的未來用到,它們能讓你從一個不同的角度看待程式設計。
最後我建議每個程式設計師都應該經營一款自己的產品,它可以是一款app,一個網站或是一個開源軟體。除非你是一個創業公司的早期員工,不然你可能沒有機會將所有學到的技術或是理念都付之實踐,有很多人想成為全棧工程師,最快的捷徑就是打造一款自己的產品。任何一個設計師都會精心打造自己的Portfolio,但大部分程式設計師卻不會。當評估一個程式設計師的Coding能力時,我會去看他的Github上是否有出彩的專案,可惜國內絕大部分程式設計師的Github空空如也,或者只有一些非常簡單的程式。我建議大家好好經營自己Github上專案,這不但可以提高你的聲譽,對你將來的求職也非常有幫助。當你報怨求職面試時又被問到各種無厘頭的程式題時,有沒有想過面試官也很無奈,因為他沒有任何其他方法得知你的Coding能力究竟如何。如果每一個程式設計師都有自己的作品,我想程式設計師的面試會簡單許多。
重視溝通能力的培養
當被問到“你覺得Junior Developer和Senior Developer最大的差別是什麼”時,我最自然的反應是溝通與文件。溝通包括程式設計師團隊內部的溝通,與其他團隊的溝通,與Manager的溝通等等。我不認為自己有能力把這些問題非常概括地說清楚,不過我可以給一條建議,那就是先學會和你的Manager溝通,讓他來教你其餘的部分。許多公司都會設定Manager與組員的1:1,一個有效率的1:1應該大部分時間有組員來主導。這需要你在1:1之前花足夠多的時間來考慮要問的問題,並且最好提前1天發給Manager,讓他有機會思考答案。許多人對此不太重視,或者只問非常具體的問題而不是一些開放性問題,這樣你很難在你的Manager身上學到東西。如果你漸漸懂得如何利用1:1的時間,它很會成為你在工作中單位時間投資回報率最高的活動。
累積你的人脈
每個人都明白人脈的重要性,但實際做起來卻不容易。參加一些線下的會議或是活動,可能是最直接的擴充套件人脈的方式之一。可惜大部分人似乎只是去聽了一場技術講座就回家了。當然,這和不少活動的時間安排也有關係,講座時間排得太滿,茶歇時間短,加上有時嘉賓遲到或是沒控制好時間,乾脆就把茶歇取消了。而實際上,結識一兩個同道中人遠比聽技術講座有價值。下次去參加這類會議,不妨給你自己設個目標,比如至少加兩個同行的微信。之後維繫你的人脈可能需要花更多的時間,下了班或是週末找你的朋友們喝個咖啡吧!
另外我覺得每個人都需要一個職場導師,他可以是你第一份工作的導師或是Manager,也可以是你認識的其他前輩。你們需要維繫一個非常長期的關係,不止於一家公司,最好貫穿你的整個職業生涯。每當你遇到疑惑時,都可以詢求他的建議,我覺得這將是你最寶貴的一筆人脈財富。
尋找發揮你才華的平臺
最後也是最重要的一步,找到適合你的公司。做為求職者評估一家公司可以看三個方面
- 公司的發展前景(大公司的話,看所在部門的發展前景)
- 你將要加入的團隊
- 薪資福利
所以在面試一家公司的時候,你要意識到面試是雙向的,公司在面試你的同時,你也在面試這家公司。面試前你應該對這家公司做足功課,準備好一些有質量的問題,比如指出產品中的問題,詢問開發流程或是如何做績效評估。到時你也可以檢驗一下你的面試官是否合格。
每次選擇公司對以上三個方面都應兼顧,但在職業生涯的不同階段,側重點不同。比如,在剛剛工作時,加入一個優秀的團隊最為重要,他們可以教會你很多東西,提升你的能力。工作5年之後,你需要一個平臺施展你的才華,體現個人價值,公司發展前景的重要性迅速提升。當你做出一番成績,證明了自己的價值之後,逐漸進入收穫期,就有了與公司要價的資格。另一方面,團隊實力對公司的前景也有很大的影響。
對一個剛畢業,初入職場的同學,一個近幾年被問了無數次的問題“我的第一份工作是去創業公司還是大公司?”我的回答仍舊是“加入一個優秀的團隊最為重要”。一些知名的大公司,團隊的素質是有一定保證,但創業公司則不然,團隊素質參差不齊,所以如我前面所說你需要面試這個團隊,做出自己的判斷。不過除了團隊因素之外,我想提一下畢業生去創業公司的幾個好處。首先,在剛畢業的一段時間內,經濟壓力小,是最自由最能承受風險的時期,而這段時間往往不長,所以應把握好這個去創業公司的黃金時段。其次,所有的學生進入大公司後,都會擔任初級職位,某種程度上來講是學校學習的延續,規範有條理,但缺乏獨立性和創新性,而這正是中國大部分學生所欠缺的。這方面的能力在一家創業公司可以得到快速鍛鍊,而在大公司可能要等升到中級職位後才有這方面的機會。個人觀點,僅供參考。
相關推薦
【轉】 提升tomcat服務器性能的七條經驗
ipv tde 內核 兩個 backlog 完成 退出 追加 大量數據 在線上環境中我們是采用了tomcat作為Web服務器,它的處理性能直接關系到用戶體驗,在平時的工作和學習中,歸納出以下七種調優經驗。 1. 服務器資源 服務器所能
【本人禿頂程式設計師】【轉】一個畢業6年的程式設計師工作經歷和成長感悟
←←←←←←←←←←←← 我都禿頂了,還不點關注! 【本人禿頂程式設計師】轉自今日頭條:Java高階 原文連結:https://www.toutiao.com/i6611344590853112324/ 把時鐘撥回到2007年的夏天,大學畢業。那時非常迷茫,不知道自己能做什麼,想做什
【轉】洪強寧:從程式設計師到架構師,從架構師到 CTO
在文章開頭,先介紹一位技術專家:洪強寧,愛因互動創始人 &CTO 洪強寧,11 年網際網路從業經驗,商用對話機器人創業中。前豆瓣首席架構師,前宜信大資料創新中心首席架構師,資深 Python 開發者,為中國 Python 使用者組(CPUG)的創立者之
【轉】每天工作4小時的程式設計師
每個人都熟悉這種作息規律:早上9點去上班,坐在電腦前面,編一天的程式,下午5點下班回家。如今,非常感謝蒂莫西·費里斯 (Timothy Ferriss)的《每週工作4小時》,我開始重新思考應該如何工作,如何讓自己變成更有效率的程式設計師。 最近,我把我的從週一到週五的作
【轉】如何提升你的能力?給年輕程式設計師的幾條建議
入職兩個多月了,平時要處理的任務太多,部落格都荒廢了(又為自己的懶惰找藉口了。。。) 看到一篇前輩的好文章,講的很好,轉載過來分享給大家。其實,無所謂技術高低,只要肯學習、肯思考、日精進,積累的力量是很大的,但是我們大多數人都敗給了惰性。當然,惰性也是人類的本性之一,因為
如何提升你的能力?給年輕程式設計師的幾條建議
一轉眼工作已有8年,前兩天公司一位初入職場的同事希望我給一些建議與經驗。我覺得這個話題很有價值,這裡以個人的想法與經歷寫成此文,希望給年輕的開發者們一些啟發。 我工作過的公司有4家,NVIDIA, Google, Slide和Glow。其中兩家是知名的大公司,Slide我是D輪過後
【轉】讓你不再害怕指針——C指針詳解(經典,非常詳細)
有一個 情況 value 第一個字符 接下來 意思 strcpy abcdefg 數值 前言:復雜類型說明 要了解指針,多多少少會出現一些比較復雜的類型,所以我先介紹一下如何完全理解一個復雜類型,要理解復雜類型其實很簡單,一個類型裏會出現很多運算符,他們也像普通的表
【轉】解決“你沒有權限訪問,請與網絡管理員聯系”
sign cfa 允許 bd09 blank 風險 data- 中心 大文件 解決“你沒有權限訪問,請與網絡管理員聯系” 局域網共享時提示你"沒有權限訪問,請與網絡管理員聯系請求訪問權限".局域網共享無法訪問被共享的文件夾。 方法/步驟
【轉】DedeCMS列表頁給推薦的文章新增推薦特薦圖示
我們知道織夢DedeCMS文章內容釋出的時候可以選擇“頭條”、“推薦”、“特薦”等這些文件屬性,但是我們如何在列表頁給有“推薦”或者“特薦”屬性的文章新增一個推薦的標識比如小圖示呢?下面就告訴大家要實現這個效果應該在列表頁模板裡面如何寫呼叫標籤。這個標籤主要是通過對flag欄
【轉】如何快速識別應用MOS管,幾張圖片就搞定了
alt 通過 lan dia icm dji icp jpg http 三極管是流控型器件,MOS管是壓控型器件,兩者存在相似之處。三極管機可能經常用,但MOS管你用的可能較少。對於MOS管先拋出幾個問題: 如何區分P-MOS和N-MOS; 如何區分MOS的G、D、
【轉】關於在linux下清屏的幾種技巧
內容 可能 printf html get 技術分享 用不了 小寫 int 在windows的DOS操作界面裏面,清屏的命令是cls,那麽在linux 裏面的清屏命令是什麽呢?下面筆者分享幾種在linux下用過的清屏方法。 1、clear命令、這個命令將會刷新屏幕,本質上只
【轉】VS2008採用了新的程式部署技術(manifest清單檔案)
vc2005/vc2008採用了新的程式部署技術(manifest清單檔案),manifest清單檔案實際上類似於我們常用的makefile檔案,它定義了程式執行的依賴關係(程式執行所需要的dll庫的名稱、版本等)。 程式執行,首先根據manifest清單檔案(這個檔案可以嵌入到exe或dll中,或者單獨生
【轉】在網頁中執行VB6程式
用VB6做的程式在網頁裡執行, 需要把程式做成OCX格式,下面簡單做一介紹: 首先新建一個工程, 選擇ActivX控制元件: 然後新增控制元件和程式碼: 然後F5執行 然後按下圖設定,去掉彈出訊息阻止 這樣就製作完成了。 最後把OCX編譯,把這個網頁另存到本地,將2
看到好的東西,就是不捨得不轉:【轉載】有了這個列表,程式設計師不愁沒練手的小專案了
幻燈片——做一個以幻燈片形式顯示各種圖片的程式。為了增加難度可以做些額外的效果,譬如漸進檢出、星型擦除、視窗漸隱。 思維導圖——允許使用者記錄下各種構思並且快速地進行頭腦風暴將這些構思整合到一張思維導圖中。越快越好,因此要讓使用者能迅速地寫下構思,然後將其拖到可視的導圖中去,將構思之間的關係展現出來。 匯
給年輕程式設計師的33條忠告
你的 API 是有使用者的,因此它有使用者體驗。在你做的每一個決定中,都要考慮到使用者。要站在使用者的角度思考問題,無論他們是初學者還是有經驗的開發人員。 要保持讓你使用者使用 API 的過程中儘量減少認知負荷。自動化可以自動化的東西,最小化使用者需要的操作和選擇,不要顯示不重要的選項,設計簡單一致的工作流
文摘加感悟:中年程式設計師給年輕程式設計師的忠告
開發流程 好程式碼就是能夠自解釋的程式碼。沒有註釋,程式碼就是最好的註釋。但是做到這一點,很難。 Keras 之父 Francois Chollet 說過:程式碼不僅僅是用來執行的,也是團隊交流的一種方式,是向他人描述問題解決方案的一種方式。 所以命名很重要
一個老程式設計師給年輕程式設計師的忠告
作為一個技術不是大牛事業也不是很成功的老程式設計師,可能給不了像那些成功人士的文章那麼深刻的見解或者感悟,雖然成功人士的文章多的是,可成功人士也是少數,大部分還是像我們這樣一輩子默默無聞的普通人。 我這輩子沒有成為什麼大公司的高管或者技術大牛,也沒賺到花不完的錢,頂多也就算是小康水平。但是每個人
給年輕程式設計師的建議
偶爾的,我會被人問道:如何成為一名優秀的程式設計師,更或者,如何成為一名程式設計師。每次人們問起,我都力圖給出不同的答案。因此,我的答案是各種各樣的。下面就是我認為的成為一名優秀的程式設計師需要做的一些事情。記住,想成為一名程式設計師,很多條路可走,這裡列出的只是我的方法
【轉載】那個年薪五十萬的程式設計師連優衣庫都買不起了
為了省房租,只能租個離公司遠的地方,行的費用也就增加了,日常出門主要靠地鐵通勤,日常通勤費用:5元*2次*22天=220元,偶爾加個班打個的拼個車:100元一月。全年行的開支約為:(220+100)*12=3850元,這個看起來是目前最小的一筆了,不過彆著急除了日常通勤,工作已經很累了,節假日出去走走也是需要
給年輕程式設計師的幾句話
我收到了不少新手的來信,他們都希望能成長為一名真正的程式設計師。我絕對不是第一個談論這個話題的人,所以,我不知道應該做哪方面的補充。不管怎樣,下面的是一些一直記在我心頭的、有必要讀一下的建議: 找其他開發人員合作開發。我們正處在科技歷史上第一個絕好的時代,你幾乎不用在意在