摘要:上班太忙沒時間自己學習很多人認為自己沒有成為技術大牛并不是自己不聰明,也不是自己不努力,而是中國的這個環境下,技術人員加班都太多了,導致自己沒有額外的時間進行學習。
寫在前面
不管是開發、測試、運維,每個技術人員心里多多少少都有一個成為技術大牛的夢,畢竟“夢想總是要有的,萬一實現了呢”!正是對技術夢的追求,促使我們不斷地努力和提升自己。
然而“夢想是美好的,現實卻是殘酷的”,很多同學在實際工作后就會發現,夢想是成為大牛,但做的事情看起來跟大牛都不沾邊,例如,程序員說“天天寫業務代碼還加班,如何才能成為技術大牛”,測試說“每天都有執行不完的測試用例”,運維說“扛機器接網線敲shell命令,這不是我想要的運維人生”。
我也是一位程序員,所以我希望通過以下基于程序開發的一些例子,幫助大家解決這些困惑。大道理是相通的,測試、運維都可以借鑒。
拜大牛為師
有人認為想成為技術大牛最簡單直接、快速有效的方式是“拜團隊技術大牛為師”,讓他們平時給你開小灶,給你分配一些有難度的任務。
我個人是反對這種方法的,主要的原因有幾個:
大牛很忙,不太可能多帶帶給你開小灶,更不可能每天都給你開1個小時的小灶;而且一個團隊里面,如果大牛平時經常給你開小灶,難免會引起其他團隊成員的疑惑,我個人認為如果團隊里的大牛如果真正有心的話,多給團隊培訓是最好的。然而做過培訓的都知道,準備一場培訓是很耗費時間的,課件和材料至少2個小時(還不能是碎片時間),講解1個小時,大牛們一個月做一次培訓已經是很高頻了。
因為第一個原因,所以一般要找大牛,都是帶著問題去請教或者探討。因為回答或者探討問題無需太多的時間,更多的是靠經驗和積累,這種情況下大牛們都是很樂意的,畢竟影響力是大牛的一個重要指標嘛。然而也要特別注意:如果經常問那些書本或者google能夠很容易查到的知識,大牛們也會很不耐煩的,畢竟時間寶貴。經常有網友問我諸如“jvm的-Xmn參數如何配置”這類問題,我都是直接回答“請直接去google”,因為這樣的問題實在是太多了,如果自己不去系統學習,每個都要問是非常浪費自己和別人的時間的。
大牛不多,不太可能每個團隊都有技術大牛,只能說團隊里面會有比你水平高的人,即使他每天給你開小灶,最終你也只能提升到他的水平;而如果是跨團隊的技術大牛,由于工作安排和分配的原因,直接請教和輔導的機會是比較少的,單憑參加幾次大牛的培訓,是不太可能就成為技術大牛的。
綜合上述的幾個原因,我認為對于大部分人來說,要想成為技術大牛,首先還是要明白“主要靠自己”這個道理,不要期望有個像武功師傅一樣的大牛手把手一步一步地教你。適當的時候可以通過請教大牛或者和大牛探討來提升自己,但大部分時間還是自己系統性、有針對性的提升。
業務代碼一樣很牛逼
有人認為寫業務代碼一樣可以很牛逼,理由是業務代碼一樣可以有各種技巧,例如可以使用封裝和抽象使得業務代碼更具可擴展性,可以通過和產品多交流以便更好的理解和實現業務,日志記錄好了問題定位效率可以提升10倍等等。
業務代碼一樣有技術含量,這點是肯定的,業務代碼中的技術是每個程序員的基礎,但只是掌握了這些技巧,并不能成為技術大牛,就像游戲中升級打怪一樣,開始打小怪,經驗值很高,越到后面經驗值越少,打小怪已經不能提升經驗值了,這個時候就需要打一些更高級的怪,刷一些有挑戰的副本了,沒看到哪個游戲只要一直打小怪就能升到頂級的。成為技術大牛的路也是類似的,你要不斷的提升自己的水平,然后面臨更大的挑戰,通過應對這些挑戰從而使自己水平更上一級,然后如此往復,最終達到技術大牛甚至業界大牛的境界,寫業務代碼只是這個打怪升級路上的一個挑戰而已,而且我認為是比較初級的一個挑戰。
所以我認為:業務代碼都寫不好的程序員肯定無法成為技術大牛,但只把業務代碼寫好的程序員也還不能成為技術大牛。
上班太忙沒時間自己學習
很多人認為自己沒有成為技術大牛并不是自己不聰明,也不是自己不努力,而是中國的這個環境下,技術人員加班都太多了,導致自己沒有額外的時間進行學習。
這個理由有一定的客觀性,畢竟和歐美相比,我們的加班確實要多一些,但這個因素只是一個需要克服的問題,并不是不可逾越的鴻溝,畢竟我們身邊還是有那么多的大牛也是在中國這個環境成長起來的。
我認為有幾個誤區導致了這種看法的形成:
1)上班做的都是重復工作,要想提升必須自己額外去學習
形成這個誤區的主要原因還是在于認為“寫業務代碼是沒有技術含量的”,而我現在上班就是寫業務代碼,所以我在工作中不能提升。
2)學習需要大段的連續時間
很多人以為要學習就要像學校上課一樣,給你一整天時間來上課才算學習,而我們平時加班又比較多,周末累的只想睡懶覺,或者只想去看看電影打打游戲來放松,所以就沒有時間學習了。
實際上的做法正好相反:首先我們應該在工作中學習和提升,因為學以致用或者有實例參考,學習的效果是最好的;其次工作后學習不需要大段時間,而是要擠出時間,利用時間碎片來學習。
正確的做法Do more
做的更多,做的比你主管安排給你的任務更多。
我在HW的時候,負責一個版本的開發,這個版本的工作量大約是2000行左右,但是我除了做完這個功能,還將關聯的功能全部掌握清楚了,代碼(大約10000行)也全部看了一遍,做完這個版本后,我對這個版本相關的整套業務全部很熟悉了。經過一兩次會議后,大家發現我對這塊掌握最熟了,接下來就有趣了:產品討論需求找我、測試有問題也找我、老大對外支撐也找我;后來,不是我負責的功能他們也找我,即使我當時不知道,我也會看代碼或者找文檔幫他們回答。最后我就成了我這個系統的“專家”了。雖然這個時候我還是做業務的,還是寫業務代碼,但是我已經對整個業務都很熟悉了。
以上只是一個簡單的例子,其實就是想說:要想有機會,首先你得從人群中冒出來,要想冒出來,你就必須做到與眾不同,要做到與眾不同,你就要做得更多!
怎么做得更多呢?可以從以下幾個方面著手:
1)熟悉更多業務,不管是不是你負責的;熟悉更多代碼,不管是不是你寫的
這樣做有很多好處,舉幾個簡單的例子:
需求分析的時候更加準確,能夠在需求階段就識別風險、影響、難點
問題處理的時候更加快速,因為相關的業務和代碼都熟悉,能夠快速的判斷問題可能的原因并進行排查處理
方案設計的時候考慮更加周全,由于有對全局業務的理解,能夠設計出更好的方案
2)熟悉端到端
比如說你負責web后臺開發,但實際上用戶發起一個http請求,要經過很多中間步驟才到你的服務器(例如瀏覽器緩存、DNS、nginx等),服務器一般又會經過很多處理才到你寫的那部分代碼(路由、權限等)這整個流程中的很多系統或者步驟,絕大部分人是不可能去參與寫代碼的,但掌握了這些知識對你的綜合水平有很大作用,例如方案設計、線上故障處理這些更加有含金量的技術工作都需要綜合技術水平。
“系統性”、“全局性”、“綜合性”這些字眼看起來比較虛,但其實都是技術大牛的必備的素質,要達到這樣的境界,必須去熟悉更多系統、業務、代碼。
3)自學
一般在比較成熟的團隊,由于框架或者組件已經進行了大量的封裝,寫業務代碼所用到的技術確實也比較少,但我們要明白“唯一不變的只有變化”,框架有可能要改進,組件可能要替換,或者你換了一家公司,新公司既沒有組件也沒有框架,要你從頭開始來做。這些都是機會,也是挑戰,而機會和挑戰只會分配給有準備的人,所以這種情況下我們更加需要自學更多東西,因為真正等到要用的時候再來學已經沒有時間了。
以java為例,大部分業務代碼就是if-else加個數據庫操作,但我們完全可以自己學些更多java的知識,例如垃圾回收,調優,網絡編程等,這些可能暫時沒用,但真要用的時候,不是google一下就可以了,這個時候誰已經掌握了相關知識和技能,機會就是誰的。
以垃圾回收為例,我自己平時就抽時間學習了這些知識,學了1年都沒用上,但后來用上了幾次,每次都解決了卡死的大問題,而有的同學,寫了幾年的java代碼,對于stop-the-world是什么概念都不知道,更不用說去優化了。
Do better
要知道這個世界上沒有完美的東西,你負責的系統和業務,總有不合理和可以改進的地方,這些“不合理”和“可改進”的地方,都是更高級別的怪物,打完后能夠增加更多的經驗值。識別出這些地方,并且給出解決方案,然后向主管提出,一次不行兩次,多提幾次,只要有一次落地了,這就是你的機會。
例如:
重復代碼太多,是否可以引入設計模式?
系統性能一般,可否進行優化?
目前是單機,如果做成雙機是否更好?
版本開發質量不高,是否引入高效的單元測試和集成測試方案?
目前的系統太龐大,是否可以通過重構和解耦改為3個系統?
阿里中間件有一些系統感覺我們也可以用,是否可以引入 ?
只要你去想,其實總能發現可以改進的地方的;如果你覺得系統哪里都沒有改進的地方,那就說明你的水平還不夠,可以多學習相關技術,多看看業界其它優秀公司怎么做。
我2013年調配到九游,剛開始接手了一個簡單的后臺系統,每天就是配合前臺做數據增刪改查,看起來完全沒意思,是吧?如果只做這些確實沒意思,但我們接手后做了很多事情:
解耦,將一個后臺拆分為2個后臺,提升可擴展性和穩定性;
雙機,將單機改為雙機系統,提高可靠性;
優化,將原來一個耗時5小時的接口優化為耗時5分鐘
還有其它很多優化,后來我們這個組承擔了更多的系統,后來這個小組5個人,負責了6個系統。
Do exercise
在做職業等級溝通的時候,發現有很多同學確實也在嘗試Do more、Do better,但在執行的過程中,幾乎每個人都遇到同一個問題:光看不用效果很差,怎么辦?
例如:
學習了jvm的垃圾回收,但是線上比較少出現FGC導致的卡頓問題,就算出現了,恢復業務也是第一位的,不太可能線上出現問題然后讓每個同學都去練一下手,那怎么去實踐這些jvm的知識和技能呢?
我也看了,也了解了Reactor的原理,但是我不可能參與Netty開發,怎么去讓自己真正掌握Reactor異步模式呢?
看了《高性能MySQL》,但是線上的數據庫都是DBA管理的,測試環境的數據庫感覺又是隨便配置的,我怎么去驗證這些技術呢?
框架封裝了DAL層,數據庫的訪問我們都不需要操心,我們怎么去了解分庫分表實現?
諸如此類問題還有很多,我這里分享一下個人的經驗,其實就是3個詞:learning、trying、teaching!
1)Learning
這個是第一階段,看書、google、看視頻、看別人的博客都可以,但要注意一點是“系統化”,特別是一些基礎性的東西,例如JVM原理、Java編程、網絡編程,HTTP協議等等,這些基礎技術不能只通過google或者博客學習,我的做法一般是先完整的看完一本書全面的了解,然后再通過google、視頻、博客去有針對性的查找一些有疑問的地方,或者一些技巧。
2)Trying
這個步驟就是解答前面提到的很多同學的疑惑的關鍵點,形象來說就是“自己動手豐衣足食”,也就是自己去嘗試搭建一些模擬環境,自己寫一些測試程序。例如:
垃圾回收:可以自己寫一個簡單的測試程序,分配內存不釋放,然后調整各種jvm啟動參數,再運行的過程中使用jstack、jstat等命令查看jvm的堆內存分布和垃圾回收情況。這樣的程序寫起來很簡單,簡單一點的就幾行,復雜一點的也就幾十行。
原理:自己真正去嘗試寫一個Reactor模式的Demo,不要以為這個很難,最簡單的Reactor模式代碼量(包括注釋)不超過200行(可以參考Doug
Lee的PPT)。自己寫完后,再去看看netty怎么做,一對比理解就更加深刻了。
MySQL:既然有線上的配置可以參考,那可以直接讓DBA將線上配置發給我們(注意去掉敏感信息),直接學習;然后自己搭建一個MySQL環境,用線上的配置啟動;要知道很多同學用了很多年MySQL,但是連個簡單的MySQL環境都搭不起來。
框架封裝了DAL層:可以自己用JDBC嘗試去寫一個分庫分表的簡單實現,然后與框架的實現進行對比,看看差異在哪里。
用瀏覽器的工具查看HTTP緩存實現,看看不同種類的網站,不同類型的資源,具體是如何控制緩存的;也可以自己用Python寫一個簡單的HTTP服務器,模擬返回各種HTTP
Headers來觀察瀏覽器的反應。
還有很多方法,這里就不一一列舉,簡單來說,就是要將學到的東西真正試試,才能理解更加深刻,印第安人有一句諺語:I hear and I forget. I see and I remember. I do and I understand ,而且“試試”其實可以比較簡單,很多時候我們都可以自己動手做。
當然,如果能夠在實際工作中使用,效果會更好,畢竟實際的線上環境和業務復雜度不是我們寫個模擬程序就能夠模擬的,但這樣的機會可遇不可求,大部分情況我們還真的只能靠自己模擬,然后等到真正業務要用的時候,能夠信手拈來
3)Teaching
一般來說,經過Learning和Trying,能掌握70%左右,但要真正掌握,我覺得一定要做到能夠跟別人講清楚。因為在講的時候,我們既需要將一個知識點系統化,也需要考慮各種細節,這會促使我們進一步思考和學習。同時,講出來后看或者聽的人可以有不同的理解,或者有新的補充,這相當于繼續完善了整個知識技能體系。
這樣的例子很多,包括我自己寫博客的時候經常遇到,本來我覺得自己已經掌握很全面了,但一寫就發現很多點沒考慮到;組內培訓的時候也經常看到,有的同學寫了PPT,但是講的時候,大家一問,或者一討論,就會發現很多點還沒有講清楚,或者有的點其實是理解錯了。寫PPT、講PPT、討論PPT,這個流程全部走一遍,基本上對一個知識點掌握就比較全面了。
后記成為技術大牛夢想雖然很美好,但是要付出很多,不管是Do more還是Do better還是Do exercise,都需要花費時間和精力,這個過程中可能很苦逼,也可能很枯燥,這里我想特別強調一下:前面我講的都是一些方法論的東西,但真正起決定作用的,其實還是我們對技術的熱情和興趣!
本文作者:李運華
詳情請閱讀原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8795.html
摘要:而程序員和醫生律師的不同點在于持續學習上。兩個小問題是需要收費,一年大概刀圖書都是英文的。的視頻基本都有英文字幕,配合作者的,英語不好的同學學習也沒有問題。英文好的有技術功底的同學多發表一些觀點,其他的同學都 摘要: 行業發展得太快,你必須學習,純靠經驗積累行不通,技術淘汰的速度遠大于你經驗積累的速度。 非雞湯:不要和程序員談自己的編程歷史,很多的經驗在今天已經不適用了。只要2-3年...
摘要:適當引導面試官。如果有機會來實習,如何最有效的快速成長淘寶技術部前端內部有針對新同學的前端夜校,有專門的老師授課。 阿里巴巴2019前端實習生招聘還剩最后兩周,面向2019年11月1日至2020年10月31日之間畢業的同學,在這里分享下阿里前端面試考核的關鍵點: Q:在面試過程中,前端面試官如何考核面試者?A:會看同學為什么選擇前端行業?是因為算法太難?Java、C++太難?還是因為熱...
摘要:阿里巴巴的共享服務理念以及企業級互聯網架構建設的思路,給這些企業帶來了不少新的思路,這也是我最終決定寫這本書的最主要原因。盡在雙阿里巴巴技術演進與超越是迄今唯一由阿里巴巴集團官方出品全面闡述雙八年以來在技術和商業上演進和創新歷程的書籍。 showImg(https://segmentfault.com/img/remote/1460000015386860); 1、大型網站技術架構:核...
摘要:一團隊組織網站說明騰訊團隊騰訊前端團隊,代表作品,致力于前端技術的研究騰訊社交用戶體驗設計,簡稱,騰訊設計團隊網站騰訊用戶研究與體驗設計部百度前端研發部出品淘寶前端團隊用技術為體驗提供無限可能凹凸實驗室京東用戶體驗設計部出品奇舞團奇虎旗下前 一、團隊組織 網站 說明 騰訊 AlloyTeam 團隊 騰訊Web前端團隊,代表作品WebQQ,致力于前端技術的研究 ISUX 騰...
摘要:一團隊組織網站說明騰訊團隊騰訊前端團隊,代表作品,致力于前端技術的研究騰訊社交用戶體驗設計,簡稱,騰訊設計團隊網站騰訊用戶研究與體驗設計部百度前端研發部出品淘寶前端團隊用技術為體驗提供無限可能凹凸實驗室京東用戶體驗設計部出品奇舞團奇虎旗下前 一、團隊組織 網站 說明 騰訊 AlloyTeam 團隊 騰訊Web前端團隊,代表作品WebQQ,致力于前端技術的研究 ISUX 騰...
閱讀 2662·2021-11-25 09:43
閱讀 2471·2021-09-22 15:29
閱讀 983·2021-09-22 15:17
閱讀 3627·2021-09-03 10:36
閱讀 2222·2019-08-30 13:54
閱讀 1739·2019-08-30 11:23
閱讀 1162·2019-08-29 16:58
閱讀 1290·2019-08-29 16:14