作者 | 駱俊武
來源 | 武哥漫談IT(ID:BestITer)
每個人都有成長的渴望,也都會遇到成長的瓶頸,
一個讀者問我:如何才能訓練成為一個編程高手?
先簡單說下這個讀者的背景:作業 3 年多,目前在大廠做后臺開發,身邊有不少編程高手,是他想要追趕的目標,
最近半年時間,他花了一些精力在研究原始碼和底層原理上,但總覺得這些知識和實際作業銜接不好,提升很慢,學習動力也越來越差,希望我能給點建議,
我和他語音聊了半個小時,講了一些我個人以及身邊同事的案例,交流下來后,雙方都有所啟發,所以再次整理下,分享給大家,
何謂 “編程高手” ?
我覺得能分成這樣 3 類:
第 1 類:天賦和成就都很高的人中龍鳳,比如能一個人寫出 WPS 的求伯君、一個人開發出電子郵件 Foxmail 的張小龍,對開源領域影響很大的章亦春等人,
第 2 類:有不錯的口碑同時廣為人知的技術大牛,他們一般在知名公司的重要崗位任職過,對技術純真熱愛,同時熱衷分享,比如耗子哥、阮一峰、尤雨溪等人,
第 3 類:作業中被我們視為崇拜物件、未來有希望企及的高 P 或者架構師,
前面兩類不在我的圈層射程內(除了跟耗子哥在亞馬遜有過一面之緣以外),因此本文主要聊下第 3 類人,這個也是絕大部分讀者最關心的、同時可以設定為超越物件的群體,
這樣就有了一個新問題:既然想成為第 3 類人,那如何給第 3 類人下一個相對準確且具象的定義呢?(如果目標都是模糊的,就難言超越了)
這其實是一個很有意思的問題,每個人的答案可能都不一樣,因為編程水平的高與低本身就是一個相對的概念,
我先說一下我的看法,
剛畢業那會,我眼中的編程高手是我的同事 - 超哥,他是亞馬遜的架構師,團隊里面技術級別最高的人(后來他做到了亞馬遜中國首架的位置,現在也算圈內比較知名的大牛了),
超哥是那種能搞定一個復雜專案(跨多個系統),從架構設計、到編碼、到自動化測驗、再到運維工具、甚至寫檔案都非常全面的人,顯然是我這個剛畢業的菜鳥極其崇拜的大佬,
再后來,我作業了四五年,走向了技術管理路線,因為帶團隊的原因,我又多了一個新視角來審視編程厲害的人,
對比所謂的 PPT 架構師、以及講到技術原理就滿嘴跑火車而編碼能力卻稀松平常的人,我傾向給「編程高手」下一個更務實的定義:那就是實際作業中,能做到高效率、高質量、且穩定輸出的人,看似容易,實則很難,我對這個定義的詳細解讀如下:
高效率:編程效率能做到團隊中的 Top,對于復雜需求或者復雜問題能夠快速理解,具備將復雜作業拆解成一系列簡單子問題并搞定這些問題的人,他們能從實際場景出發,有造輪子的能力,也有不造輪子的覺悟,
高質量:編程質量能做到團隊中的 Top,設計方案的合理性、編碼的嚴謹性、測驗方法、監控運維方案等,都能思考全面的人,
穩定輸出:給高效率和高質量增加的限定,我覺得只有量變引起質變,真正形成了自己的方法論,能持續搞定一類問題,而不是單個問題的人才算是高手,
也許你會說要同時做到這 3 點太難了,但是實際作業中,一定有人能做到某個點或者某幾點,那么以他們作為這一點的標桿即可,
因為所謂的「編程高手」不過是我們設定的一個目標而已,你清楚這個目標是什么就足夠了,不一定非得安在同一個人身上,
如何理解 “底層知識” 的價值?
要成為一個編程高手,底層知識是必不可少的,這是一句正確的廢話,就不展開解釋了,
讀者真正的問題在于:如何將底層知識和實際作業銜接起來,做到相輔相成?
先看一個具體的例子,對于簡歷中寫自己做過性能優化的候選人,我面試時比較喜歡問:你是如何定位性能瓶頸并完成調優的?如果再次碰到此類問題,你的詳細思路是什么?
很顯然,這是一個系統性的工程問題,能同時對技術深度和寬度進行考察,
不僅僅是應用層的代碼,還包括所使用的框架、中間件、虛擬機、網路甚至作業系統等等,有性能指標等基礎性的知識,有監控和壓測工具的運用,還有成體系的排查思路和優化方法等等,
如果是編程低手,他們的答案通常有這幾類:
性能指標都不清楚,遇到問題也不知道該用什么工具,這一類人應用層都不達標,初步定位到一個疑似瓶頸點后,就著手優化,最終解決的只是一個淺層次的性能瓶頸問題,根本原因并未觸達到,能定位到根本原因,但是對于解決方案的合理性缺少深入思考,不追求極致,最終只是用了曲線的方案再次隱藏了性能問題,
通過這個例子,我其實想說明兩點:
不具備底層知識,你的視野根本就觸達不到底層的東西,思維以及能力永遠只能停留在應用層面,能解決的問題有限,
讀原始碼、學習各種原理,所有這些都只是學習和鞏固知識的程序,真正體現編程水平的是實際解決問題的能力,因此如何將知識變成有效的經驗?這個才是關鍵,做不到要么是實踐不夠,要么是壓根沒研究明白,
然后,我們再回到問題身上:究竟如何才能做到底層知識和實際作業的銜接呢?如果銜接不好,那問題出在哪個環節?
大家可以先思考下:過往作業中那些對你編程能力幫助很大的經歷,你認為你能獲得提升最關鍵的因素是什么?是底層知識的儲備嗎?
細想一下一定不是,而是發現問題的能力,(注意:我說的是最關鍵的因素,并不是否認底層知識的儲備不重要)
大家可以去觀察一個作業中很常見的現象:同一個問題你能看到哪一層?而編程高手又能看到哪一層?誰能更快地貼近問題的本質?誰又能衍生出一系列的問題?這其實就是「發現問題」的能力體現,
只有當你意識到它是一個值得深挖的問題時,才會有一層一層的思考,一層一層的分析,
那應該如何提高這方面的能力呢?其實就是思考力的提升程序,除了觀察和刻意練習,我想不出更好的建議,多看高手是怎么做的?遇到問題時自己多問幾個為什么?多反思自己的思路是否正確?榷訓月累水平自然會提高,
當你具備了發現問題的能力,就相當于給知識和經驗之間架起了一座橋梁,真正做到相輔相成以及互相驅動,
成為 “編程高手” 的幾點建議
編程作為一門實踐性的學科,多動手解決問題是最基本的要求了,解決問題越多、越難,能力提升越快,
而在這個程序中,如果有知識輸入(底層知識的儲備),還有思考的加成(發現問題的能力),編程水平的提升會更加迅速,
我帶過的團隊里面,還有一類人總說自己技術進步很慢,作業沒有挑戰,但是當團隊遇到一個技術難題時,他根本沒有意愿去做深入了解,嘴上說熱愛技術、渴望成長,但是卻看不到行動,這種人是永遠成為不了編程高手的,
真正的熱愛來源于行動上的投入,不是找借口,不是追求舒服,這是很重要的一個區別,
編程高手是如何練成的?這樣看來,它其實是一個體力、腦力、心力的修仙之路,
C/C++應用于Windows作業系統,驅動、補丁,影像處理、音視頻處理,工業控制軟體、嵌入式(手機、智能機)等領域,C++ 已經成為了最受開發人員歡迎的語言之一,鞏固了全球的系統和服務,
◆如果你想提升你的編程能力,以便更好從事編程類作業的話!這里有一個交流群推薦給你【點我進入群聊】
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
如圖為學習電子書籍及零基礎學習教程


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256620.html
標籤:其他
上一篇:恢復Linux誤刪檔案
