一本開源的程序員快速成長秘笈 – 中國新聞網 (新聞發布) (註冊)

Home » 02組織・コーポレートガバナンス » 一本開源的程序員快速成長秘笈 – 中國新聞網 (新聞發布) (註冊)
02組織・コーポレートガバナンス, CxO コメントはまだありません



作者|康德勝

編輯|小智

「 閱讀原文 」,獲得簡訊提醒,不錯過下次 InfoQ 大咖說直播!

回復: 秘笈,獲取視頻下載。

寫在前面

前幾天和 PPMoney 萬惠集團董事長寶叔以及幾個合作夥伴一起吃飯,席間寶叔戲言引用一個段子來描述個人成長:讀萬卷書不如行萬里路,行萬里路不如閱人無數,閱人無數不如名師指路,名師指路不如自己去悟。靜下心來想想,這總結還真挺有道理,回頭看看自己走過的路,從懵懂少年第一次厚著臉皮向數學老師討借 Basic 語言編程指南開啟 programming 生涯到現在混跡於金融和技術跨界領域,歷經了那麼多時光歲月艱難坎坷喜悅快樂,讀書也好,行路也好,名師也好,領悟也好,都是自己成長道路上不可或缺的重要元素。

如果我有機會把這條路重新再走一遍,有沒有一些靈丹秘方可以借鑒讓自己發展速度更快些呢?以前有一本叫「杜拉拉升職記」的小說指引了很多初出茅廬的小白領一步步走向職業的高峰,對於技術屌絲兒們,咱們是不是也有個快速成長的葵花寶典可以借鑒呢?今天讓我們來聊聊這樣的一個秘笈,它來自於我自己多年以來的感悟以及對身邊成功技術大牛們的觀察,希望能夠給年輕程序員們帶來一些幫助。

程序員成長框架

這個秘笈最核心的精髓在這個成長框架里:養成良好的職業習慣不斷提升自己的基本能力。

首先是養成好的職業習慣。大家也許看過那本《成功人士的 7 個習慣》,對於程序員來講,下面這幾種習慣可能更加有針對性:

  • 第一是對新鮮事物和技術的好奇心。技術世界的最大特點就是變化,強烈的好奇心會驅動一個程序員不斷學習研究最新最先進的技術和架構從而讓自己處於領先地位,這種好奇心也可以幫助我們成為一個優雅的懶人,通過探尋最有效的解決方案來減少無聊的重複;

  • 第二是要有一個積極勇敢的心敢於接受挑戰。別人不敢做的事兒你敢去做並把它做成了,一方面你獲得了非常寶貴的第一手經驗另一方面只有你才能完成挑戰必將給他人帶來極為深刻的好印象;

  • 第三是要能夠持久堅持不輕易放棄。很多事情看上去不容易,但是如果你咬牙堅持不懈把問題最終給解決了,你的功力會上升到一個嶄新的層次;

  • 最後一個習慣我覺得最重要,那就是把工作變成一種快樂。如果你覺得做技術很痛苦,最好還是儘早離開這個領域,只有你工作和玩兒一樣的,你不僅僅是獲取了快樂,你的技術能力也會永不疲倦地提升再提升,我總覺得搞技術和玩電腦遊戲一樣,都是不斷地練功找寶貝(寫代碼)和打怪獸(找 bug)嘛。

有了良好的職業習慣,你還需要不斷提升自己的基本能力,對程序員(技術崗)來說:

  • 第一種能力是 技術能力,這個是和職業最直接相關的能力,是我們做設計、寫代碼、解決技術問題的能力,是我們之所以被稱為工程師而不是銷售或者客服的硬能力(hard skills);

  • 第二種能力是 和人相處的能力,也叫做軟能力(soft skills),是讓我們如何更好地和他人協同工作;

  • 第三種能力是 業務領域(business domain)能力,計算機程序是用來解決問題的,如果你了解並能夠提出業務需求,你的綜合實力會更強大;

  • 第四種能力是 管理能力,能讓更多的人有條不紊地齊心協力做好一件大事兒,能把一個人的能力放大無數倍;

  • 最後一種是 學習能力,是前面四種能力的爺爺,這個強了其他能力的提升會更容易。篇幅有限,這裡沒辦法把每種能力描述得很透徹,但你必須充分理解這些能力的含義,因為一個程序員不同職業生涯階段都是這些基本能力不同程度和級別的組合結果。

所以,我們說一個程序員的職業生涯,其核心就是把上面這些習慣越練越熟最後成為本能反應,同時把上面的各種能力不斷從菜鳥升級到大師的過程。

了解了基本的成長框架,我們看看程序員在不同的成長階段該如何利用這個工具自我發展。

程序員初長成

大部分的程序員是在讀大學或者第一份工作開始技術生涯的,我們可以從技術初長成、從業行業與領域的選擇、選擇什麼類型的公司來展開討論。

技術初長成

這個階段的核心是如何能儘早地開始職業化(professional)編程。所謂的職業化,也就是按照一個合格的職業程序員的標準來寫代碼,這包括良好的編程風格、採用流行的編程框架、專業的調試方法、規範的文檔撰寫以及堅持不懈不解決問題絕不休息的習慣等等。你不能僅僅是把老師安排的作業完成了,把領導安排的業務邏輯給實現了,你要能夠做到寫出的代碼和大家公認的好的程序員基本接近。

選擇一門編程語言是第一步。別老跟我說 PHP 是世界上最好的語言(哈哈哈),至少我可以告訴你,PHP 可能是當前職場里不很值錢的語言。。。如果你想把技術做得更深點,我建議你把一門面向對象的語言(如 Java)學透徹,因為你不光是要用這個語言來解決實際問題,你還要通過不斷研習大師們的開源代碼來提高自己的編程能力,資源越多的語言你可以參考的東西越多,同時,如果你能把這樣的語言理解透了,那麼其他任何一門語言你都可以很快掌握。比如說我自己吧,從 C++ 學起,弄明白了後學什麼(包括 Java)都比較容易,前後在實際工作中起碼用過 8-10 種以上的編程語言。

學會了基本的編程,接下來要學會如何儘早地往職業化發展。如果你還在學校里,碰巧不幸你的計算機老師或者是沒做過職業程序員或者是心不在焉精力沒放在教學上,你應該儘早通過去校外公司兼職提早做職業程序員做的事情,只要你做的東西不是兒戲,你就會感覺到職業壓力,你就會更早地走上職業的道路。好多科班出身的人看不起編程培訓學校(哈哈哈),其實這些學校也是蠻有價值的。我一個學計算機的親戚大學三年都在玩遊戲,大四的時候有點慌了,趕緊去學了四個月的培訓學校,提早感受「職業化」熏陶,最後輕鬆找到滿意的工作。

我對咱們大學教育一直是小失望的,大學生們很多寶貴的時間都浪費了,如果能夠更早地教授他們職業化編程能力,他們畢業的時候會具有更高的價值。如果你是在第一份工作里開始接觸編程,那麼你可以多和公司里的編程高手學習,看看人家在解決同樣問題的時候是怎麼寫程序的,仔細想想為什麼人家的思路比你自己的更優秀,不斷模仿不斷思考不斷提高。

在這個入門階段,如果你能有一個嚴師或者對你要求苛刻自己又特別想做出成績的上司,那是你的大幸,他對你要求越高越挑剔你的成長速度越快。有這樣的人每天在後面鞭策,你勇於接受挑戰絕不輕言放棄的好習慣會快速建立,你的技術能力也會迅速得到提升。我當年很幸運地碰到了至少兩位這樣的老闆,他們給我的信任和壓力為我早期的成長帶來巨大動力。後來我做管理的時候,我把這套激勵體系充分施展開來,我的團隊成長非常快。你要相信自己無窮的潛力,儘可能去找一個嚴格苛刻給你充分壓力和信任的老闆開始自己的職業生涯,這個算是名師指路那個個人發展武器吧。

入門階段絕對離不開編程以及設計方面的書籍,去找幾本經典書仔仔細細完整地讀下來,啃一本是一本,怎麼都比不看要好太多,剛開始可能會很辛苦,但是你一旦完成一本,將來看書的速度會越來越快,這也可以提升自己不輕易放棄的良好職業習慣。我們 PPMoney 研發團隊就要求每個技術人員每年必須看完一本書讀完一個開源代碼,習慣了以後,其實蠻簡單的。

行業與領域

如果你關心投入產出比,你應該選擇一個未來有前途的行業或領域,比如互聯網和人工智慧。對於在傳統金融領域做了 10 幾年最近才加入互聯網行業的我來說,互聯網 +(我這裡是互聯網 + 金融)以及人工智慧 + 有無限的發展空間以及太多的機會,選對了行業可以讓自己獲得更好的職業回報。

選擇什麼樣的公司

大公司還是小公司,民企、國企還是外企,這些我有幸都經歷過,應該說各有各的特點選擇哪一類都 ok 的。選公司除了公司實力以外最關鍵的還是這家公司適不適合你早期的成長。一個充滿激情的、忙碌的、有夢想的、每個人勇於承擔責任的公司可以培養出優秀的技術人才。很多年前我在杭州待過的一家叫超軟的小公司,經營的並不是很好以至於老早就不存在了,遠遠比不上那些國際化的大公司,但是她具備上面描述的那些好公司的特質,培養了好多現在國內頂尖公司的 CXO 級別的大牛(不是我哎。。。)。

進階階段

這個階段一般是在你職業生涯開始 3-5 年以後,具備了基本的職業素質,你在不斷鞏固自己良好職業習慣的同時要進一步提升各種基本能力並且要時刻準備抓住各種職業晉陞的機會。

技術能力方面,你要開始提升技術的深度和廣度。你要積極主動接受挑戰啃最硬的技術難題,在工作中積累對技術本質的理解;你要習慣性看各類大牛的代碼,學會判斷什麼是好的什麼是差的;你要學會用更少更精緻的代碼完成任務;你要學習很多設計模式,掌握解決各類問題的套路;你要開始深入各類架構,不斷提升自己的設計能力;你要學習多種語言,選擇最適合解決問題的工具;這是一個逐步梳理自己對技術的理解,從無序到有序到套路滿滿的過程。

這個階段,你要學會「懶惰」,不要重複做簡單無趣的工作,哪怕有也要想著法子寫出一個工具去簡化去偷懶。我以前一個團隊繼承了很多 ETL 的代碼,我們有幾十個程序員在做著枯燥無聊翻譯業務邏輯成 ETL 代碼的工作,「懶惰」驅動我寫了一個給需求分析師制定業務邏輯的工具,業務需求寫完了,程序也就完成了。為了把這樣的工具做出來,我找了一個叫 Pentaho 的開源工具,把核心代碼徹底讀透讀懂,然後我的 SmartETL 也就橫空出世。要學會站在巨人的肩膀上,多看人家的代碼,你的設計能力編程能力都會越來越強大。這麼做其實也是工作就是快樂的良好習慣自然驅成。

如果你想往技術管理方向發展,這個階段你要開始鍛煉自己的管理能力。對於技術類管理,我喜歡一種詮釋:管理是把一個人能力放大的能力,通過協調更多的人做更大的事。也就是說好的技術管理者,首先是要具備較深較廣的技術能力。管理最重要的一個基本要素是責任心。哪怕你目前還不管人,你一定要養成一個良好的習慣能夠有擔當,你要能夠拍著胸脯跟你的 leader 說:這事兒包在我身上你放心。同樣的話,你當 leader 后可以和經理說,當上經理后可以和總監說,當上總監后可以和 CTO 說,當上 CTO 后可以和 CEO 說,當上 CEO 后可以和董事長說。有了這種敢於擔當的勇氣和習慣,相信你一直會成為你的上司最器重最欣賞最努力栽培的人。

業務領域能力方面,你應該讓自己跳出技術的 comfort zone,把自己的知識面擴展到產品以及業務層面,你越了解公司的業務,你的設計越柔性越能應付系統日後的擴展,同時正因為你能夠和業務老大講同樣的業務語言,你的價值會更早地被公司管理層發現。拿我自己的例子,當年我在金融公司做風控系統,為了把系統做得更好,我讀了個金融方向的 MBA,結果很多業務需求我自己就很容易去寫,很多業務上的金融模型我也可以去做,後來的路絕對是寬太多去了。

能力的提升不能擔保你一定能在公司得到職位上的提升,你還要學會如何抓住轉瞬即逝的機會。做別人不敢做的做不好的對公司至關重要的事兒,把現有的性能提高 10 倍,在公司最困難的時候提出一個切實的解決方案並幫助公司走出難關,做出遠遠超過公司給你的回報的業績。。。只要你能夠做出遠遠超過別人預期(Expectation)的事情,你就能牢牢抓住晉陞的機會。你對新技術充滿好奇心,你勇於接受挑戰,你堅忍不拔永不放棄,這些逐步養成的良好職業習慣配合你日益強大的基本能力,再加上你時刻準備好積極尋求機會的心態,不想得到晉陞都很難啊。我以前在那家外企,當時業務想創建一個新的金融模型,沒人做的出來也沒人敢去做,我當時好開心,機會啊,不要白不要。花了一個月的時間每天 13-14 個小時的努力,最後東西做好了,自己能力提升了,大大超出業務的預期了,想不得到提升都很難是吧。

這個階段你還需要不斷擴大自己的人脈關係網路。單純一個人的成功是比較難以實現的,你要學會藉助他人的力量,學會整合資源,學會從和他人的交流中獲取靈感。你一定要多參加技術交流,比如 QCon 或者其他各種線下線上形式的活動,要能厚著臉皮和人家談上第一句話多結交朋友。你逐漸積累的關係資源會為你將來的成功提供堅實的支持。

關於跳槽

儘管我從大二開始的第一家公司到現在,前前後後經歷了 5-6 家公司,我還是想建議大家如果選好了公司輕易不要跳槽。你在一個公司至少得花上個 3-4 年來深化自己的職業能力,建立自己的人脈,深入了解一個行業。只有當你覺得目前得公司不適合你的發展了讓你不再有 passion 了你再選擇換一個公司發展。純粹從一個招聘經理的角度來說,如果一個候選人經常換工作,我們會認為這個人不夠踏實或者人品能力有問題,這樣的人很容易被 HR 直接 pass 掉。

CXO 的技能

少數人職業進一步發展會晉級到 CXO(CIO/CTO/COO/CEO)級別。那麼 CXO 需要哪些能力準備呢?在前面所說的能力之外,CXO 一定要具備戰略眼光,他們要在自己的職能領域給大家指明方向,他們要能夠發現、招聘並培養公司需要的人才,他們要學會如何搭配合理的團隊架構並通過有效的激勵制度讓公司健康成長,CXO 們還要具備良好的人格魅力,能夠很自然地把團隊凝聚在一起。 對於技術方向的 CIO/CTO,除了自己專業領域足夠強以外,CIO/CTO 必須要深刻了解業務並且用技術的力量幫助 CEO 把公司的業務發展壯大。

做一個快樂的更全面的人

一個優秀的技術人員絕對不應該是簡單無趣的技術屌絲,我個人信奉的理念是 work hard play hard and be a fun person。讓工作本身成為一種快樂的形式,工作之外也可以讓各類愛好豐富自己的生活。

今日薦文

一本開源的程序員快速成長秘笈

技術漫談:為什麼 Netflix 的企業文化會備受整個矽谷的推崇?

責任編輯:






コメントを残す