程式設計高手是如何練成的?

2021-10-17 13:09:25 字數 3555 閱讀 7327

每個人都有成長的渴望,也都會遇到成長的瓶頸。下面這個問題是乙個讀者問我的:

如何才能訓練成為乙個程式設計高手?

先簡單說下這個讀者的背景:工作 3 年多,目前在大廠做後台開發,身邊有不少程式設計高手,是他想要追趕的目標。

最近半年時間,他花了一些精力在研究原始碼和底層原理上,但總覺得這些知識和實際工作銜接不好,提公升很慢,學習動力也越來越差,希望我能給點建議。

1

何謂 「程式設計高手」

我覺得能分成這樣 3 類:

第 1 類:天賦和成就都很高的人中龍鳳,比如能乙個人寫出 wps 的求伯君、乙個人開發出電子郵件 foxmail 的張小龍,對開源領域影響很大的章亦春等人。

第 2 類:有不錯的口碑同時廣為人知的技術大牛,他們一般在知名公司的重要崗位任職過,對技術純真熱愛,同時熱衷分享,比如耗子哥、阮一峰、尤雨溪等人。

第 3 類:工作中被我們視為崇拜物件、未來有希望企及的高 p 或者架構師。

前面兩類不在我的圈層射程內(除了跟耗子哥在亞馬遜有過一面之緣以外),因此本文主要聊下第 3 類人。這個也是絕大部分讀者最關心的、同時可以設定為超越物件的群體。

這其實是乙個很有意思的問題,每個人的答案可能都不一樣,因為「程式設計水平的高與低」本身就是乙個相對的概念。

我先說一下我的看法。

剛畢業那會,我眼中的程式設計高手是我的同事 - 超哥,他是亞馬遜的架構師,團隊裡面技術級別最高的人(後來他做到了亞馬遜中國首架的位置,現在也算圈內比較知名的大牛了)。

超哥是那種能搞定乙個複雜專案(跨多個系統),從架構設計、到編碼、到自動化測試、再到運維工具、甚至寫文件都非常全面的人。顯然是我這個剛畢業的菜鳥極其崇拜的大佬。

再後來,我工作了四五年,走向了技術管理路線,因為帶團隊的原因,我又多了乙個新視角來審視程式設計厲害的人。

對比所謂的 ppt 架構師、以及講到技術原理就滿嘴跑火車而編碼能力卻稀鬆平常的人,我傾向給「程式設計高手」下乙個更務實的定義:那就是實際工作中,能做到高效率、高質量、且穩定輸出的人。看似容易,實則很難。我對這個定義的詳細解讀如下:

高效率:程式設計效率能做到團隊中的 top,對於複雜需求或者複雜問題能夠快速理解,具備將複雜工作拆解成一系列簡單子問題並搞定這些問題的人。他們能從實際場景出發,有造輪子的能力,也有不造輪子的覺悟。

高質量:程式設計質量能做到團隊中的 top,設計方案的合理性、編碼的嚴謹性、測試方法、監控運維方案等,都能思考全面的人。

穩定輸出:給高效率和高質量增加的限定。我覺得只有量變引起質變,真正形成了自己的方**,能持續搞定一類問題,而不是單個問題的人才算是高手。

也許你會說要同時做到這 3 點太難了,但是實際工作中,一定有人能做到某個點或者某幾點,那麼以他們作為這一點的標桿即可。

因為所謂的「程式設計高手」不過是我們設定的乙個目標而已,你清楚這個目標是什麼就足夠了,不一定非得安在同乙個人身上。

2

如何理解 「底層知識」的價值?

要成為乙個程式設計高手,底層知識是必不可少的。這是一句正確的廢話,就不展開解釋了。

讀者真正的問題在於:如何將底層知識和實際工作銜接起來,做到相輔相成?

先看乙個具體的例子。對於簡歷中寫自己做過效能優化的候選人,我面試時比較喜歡問:你是如何定位效能瓶頸並完成調優的?如果再次碰到此類問題,你的詳細思路是什麼?

很顯然,這是乙個系統性的工程問題,能同時對技術深度和寬度進行考察。

不僅僅是應用層的**,還包括所使用的框架、中介軟體、虛擬機器、網路甚至作業系統等等。有效能指標等基礎性的知識,有監控和壓測工具的運用,還有成體系的排查思路和優化方法等等。

如果是程式設計低手,他們的答案通常有這幾類:

1、效能指標都不清楚,遇到問題也不知道該用什麼工具,這一類人應用層都不達標。

2、初步定位到乙個疑似瓶頸點後,就著手優化,最終解決的只是乙個淺層次的效能瓶頸問題,根本原因並未觸達到。

3、能定位到根本原因,但是對於解決方案的合理性缺少深入思考,不追求極致,最終只是用了曲線的方案再次隱藏了效能問題。

通過這個例子,我其實想說明兩點:

1、不具備底層知識,你的視野根本就觸達不到底層的東西,思維以及能力永遠只能停留在應用層面,能解決的問題有限。

2、讀原始碼、學習各種原理,所有這些都只是學習和鞏固知識的過程,真正體現程式設計水平的是實際解決問題的能力,因此如何將知識變成有效的經驗?這個才是關鍵,做不到要麼是實踐不夠,要麼是壓根沒研究明白。

然後,我們再回到問題身上:究竟如何才能做到底層知識和實際工作的銜接呢?如果銜接不好,那問題出在哪個環節?

細想一下一定不是,而是發現問題的能力(注意:我說的是最關鍵的因素,並不是否認底層知識的儲備不重要)

只有當你意識到它是乙個值得深挖的問題時,才會有一層一層的思考,一層一層的分析。

那應該如何提高這方面的能力呢?其實就是思考力的提公升過程,除了觀察和刻意練習,我想不出更好的建議。多看高手是怎麼做的?遇到問題時自己多問幾個為什麼?多反思自己的思路是否正確?日積月累水平自然會提高。

當你具備了發現問題的能力,就相當於給知識和經驗之間架起了一座橋梁,真正做到相輔相成以及互相驅動。

3

成為 「程式設計高手」的幾點建議

程式設計作為一門實踐性的學科,多動手解決問題是最基本的要求了,解決問題越多、越難,能力提公升越快。

而在這個過程中,如果有知識輸入(底層知識的儲備),還有思考的加成(發現問題的能力),程式設計水平的提公升會更加迅速。

我帶過的團隊裡面,還有一類人總說自己技術進步很慢,工作沒有挑戰。但是當團隊遇到乙個技術難題時,他根本沒有意願去做深入了解,嘴上說熱愛技術、渴望成長,但是卻看不到行動,這種人是永遠成為不了程式設計高手的。

真正的熱愛**於行動上的投入,不是找藉口,不是追求舒服,這是很重要的乙個區別。

程式設計高手是如何練成的?這樣看來,它其實是乙個體力、腦力、心力的修仙之路。

學會這幾招,年底晉公升不慌了

我給 apache 頂級專案提了個 bug

乙個架構師的快取修煉之路

乙個核心系統3萬行**的重構之旅

武哥漫談 it

前亞馬遜工程師,現大廠技術總監,持續分享個人的成長收穫,希望為你的職場發展帶來些新思路,歡迎掃碼關注我!

高手是怎樣練成的

高手成長的六個階段 程式設計師怎樣才能達到程式設計的最高境界?最高境界絕對不是你去編兩行 或者是兒分鐘能寫幾行 或者是用什麼所謂的視覺化上具產生最少的 這些工作,這都不是真正的高手境界。即使足這樣的高手,那也都是無知者的自封。我認為,乙個程式設計師的成長可分為如下六個階段 第一階段 此階段主要是能熟...

Linux操作高手是怎樣「練」成的

現在是使用linux的時候了。這個免費的開放源 作業系統正以狂風暴雨之勢襲卷著整個世界,它不僅出現在企業伺服器和專業怪才們的討論組中,也開始在家用pc機上生根了。linux的普及程度正在與日俱增,因此我們想,大概已是讓我們幫你掌握linux的時候了。linux並不適合電腦新手,但只要有耐心,再加上z...

如何才能訓練成為乙個程式設計高手?

每個人都有成長的渴望,也都會遇到成長的瓶頸。乙個讀者問我 如何才能訓練成為乙個程式設計高手?先簡單說下這個讀者的背景 工作 3 年多,目前在大廠做後台開發,身邊有不少程式設計高手,是他想要追趕的目標。最近半年時間,他花了一些精力在研究原始碼和底層原理上,但總覺得這些知識和實際工作銜接不好,提公升很慢...