天天写业务代码,如何成为技术大牛
? ? 程序員平時的日常編碼工作中,大多數(shù)人都只是編寫業(yè)務(wù)代碼,各種if else以及數(shù)據(jù)庫操作等。針對于不同的產(chǎn)品去實現(xiàn)功能時,也只是重復(fù)性的搬磚工作。此時會有很多人認為天天寫業(yè)務(wù)代碼,感覺沒有什么長進,也沒有實際的需求可以讓自己深入的研究技術(shù)代碼。那么這種情況下如何成為技術(shù)大牛呢?
? ? 首先說明一點,不管是多簡單的產(chǎn)品,實現(xiàn)過程中都會遇到大大小小的問題,例如崩潰、死鎖、性能低,系統(tǒng)延遲、服務(wù)器不穩(wěn)定、數(shù)據(jù)丟失等等。一個產(chǎn)品的成功,勢必要解決這些技術(shù)性的問題,那么由誰解決呢?可能有人會說基本上都是團隊中的大牛負責解決,其他人依然埋沒在自己的業(yè)務(wù)代碼中。那么團隊中的技術(shù)大牛又是如何成長起來的呢?任何人不可能剛開始就處理這種棘手問題吧,那么他們又是如何成長的呢?針對這種情況,從以下幾點說明一下在每天的業(yè)務(wù)代碼搬運過程中,如何使自己成長為技術(shù)大牛(個人意見,僅供參考):
1、問題就是機會
?? ?不管任何系統(tǒng)都會遇到各種技術(shù)問題。這些問題,都是自己成長的機遇,而真正抓住機遇的人,都會有所收獲。所以不管在日常的開放中遇到上面樣的難題,都要有直面它的勇氣,迎難而上,主動去解決。當你解決了一個難題后,就會有下一個,當你解決的多的時候,團隊中遇到難題都會自然的找到你。你也就自然成為了團隊中的技術(shù)大牛。
? ? 其實解決的問題多了,就會越來越有感覺,你也會發(fā)現(xiàn)很多問題只要認真研究,都沒有那么難,只是很多人都不愿主動去解決,不愿主動去承擔。所以,不管什么時候,做一個積極主動的人,把問題當做機會,讓自己經(jīng)歷更多成長更多。
2、靠自己,不斷努力提升自己
? ? 實際工作中,不管你從事的崗位所負責的工作多么的簡單,同樣都會遇到各種問題。當遇到這種問題時,首先要想到的是自己,即便是水平不高,能夠自己解決的就盡量自己解決。實在需要問別人的時候,也不要去問那些網(wǎng)上或者書中能查到的東西。首先別人不一定有時間,即便是有時間,也不一定能夠給你說的很明白,日常工作大多以解決問題為目的,這個問題已經(jīng)解決了,但你仍然不懂得其中的道理,所以考自己的學習和研究去解決問題,對自己的影響才是最深遠的。
? ? 另外也不要指望領(lǐng)導(dǎo)專門給你安排去解決各種技術(shù)難題,這種問題都是有大拿去解決的,要想成為大拿,還是要靠自己腳踏實地的走過來。
? ? 日常平庸的工作中,要自己主動去探索,去爭取機會,去擠時間提高自己。不要等到哪一天技術(shù)難題突然降臨到你身上,你卻說不可能。
3、Do more?? ? ??
?? ?要想有機會,首先你得從人群中冒出來,要想冒出來,你就必須做到與眾不同,要做到與眾不同,你就要做得更多!
? ??怎么做得更多呢?可以從以下幾個方面著手:
? ? 1)熟悉更多業(yè)務(wù),不管是不是你負責的;熟悉更多代碼,不管是不是你寫的
?? ??? ?這樣做有很多好處,舉幾個簡單的例子:
-
需求分析的時候更加準確,能夠在需求階段就識別風險、影響、難點
-
問題處理的時候更加快速,因為相關(guān)的業(yè)務(wù)和代碼都熟悉,能夠快速的判斷問題可能的原因并進行排查處理
-
方案設(shè)計的時候考慮更加周全,由于有對全局業(yè)務(wù)的理解,能夠設(shè)計出更好的方案
?? ?2)熟悉端到端
?? ??? ?比如說你負責web后臺開發(fā),但實際上用戶發(fā)起一個http請求,要經(jīng)過很多中間步驟才到你的服務(wù)器(例如瀏覽器緩存、DNS、nginx等),服務(wù)器一般又會經(jīng)過很多處理才到你寫的那部分代碼(路由、權(quán)限等)這整個流程中的很多系統(tǒng)或者步驟,絕大部分人是不可能去參與寫代碼的,但掌握了這些知識對你的綜合水平有很大作用,例如方案設(shè)計、線上故障處理這些更加有含金量的技術(shù)工作都需要綜合技術(shù)水平。
“系統(tǒng)性”、“全局性”、“綜合性”這些字眼看起來比較虛,但其實都是技術(shù)大牛的必備的素質(zhì),要達到這樣的境界,必須去熟悉更多系統(tǒng)、業(yè)務(wù)、代碼。
?? ?3)自學
?? ??? ?一般在比較成熟的團隊,由于框架或者組件已經(jīng)進行了大量的封裝,寫業(yè)務(wù)代碼所用到的技術(shù)確實也比較少,但我們要明白“唯一不變的只有變化”,框架有可能要改進,組件可能要替換,現(xiàn)有技術(shù)可能已經(jīng)無法滿足業(yè)務(wù)需求,或者你換了一家公司,新公司既沒有組件也沒有框架,要你從頭開始來做。這些都是機會,也是挑戰(zhàn),而機會和挑戰(zhàn)只會分配給有準備的人,所以這種情況下我們更加需要自學更多東西,因為真正等到要用的時候再來學已經(jīng)沒有時間了。
?? ??? ?以java為例,大部分業(yè)務(wù)代碼就是if-else加個數(shù)據(jù)庫操作,但我們完全可以自己學些更多java的知識,例如垃圾回收,調(diào)優(yōu),網(wǎng)絡(luò)編程等,這些可能暫時沒用,但真要用的時候,不是google一下就可以了,這個時候誰已經(jīng)掌握了相關(guān)知識和技能,機會就是誰的。
?? ??? ?以垃圾回收為例,我自己平時就抽時間學習了這些知識,學了1年都沒用上,但后來用上了幾次,每次都解決了卡死的大問題,而有的同學,寫了幾年的java代碼,對于stop-the-world是什么概念都不知道,更不用說去優(yōu)化了。
?? ??? ?特別是很多開源軟件,更加需要自己平時去自學,例如Nginx、Redis、Mongodb、ElasticSearch等,在合適的時機引入這些技術(shù),能夠帶來很大的價值。
4、Do better
?? ?要知道這個世界上沒有完美的東西,你負責的系統(tǒng)和業(yè)務(wù),總有不合理和可以改進的地方,這些“不合理”和“可改進”的地方,都是更高級別的怪物,打完后能夠增加?? ??? ?更多的經(jīng)驗值。識別出這些地方,并且給出解決方案,然后向主管提出,一次不行兩次,多提幾次,只要有一次落地了,這就是你的機會。
?? ?例如:
-
重復(fù)代碼太多,是否可以引入設(shè)計模式?
-
系統(tǒng)性能一般,可否進行優(yōu)化?
-
目前是單機,如果做成雙機是否更好?
-
版本開發(fā)質(zhì)量不高,是否引入高效的單元測試和集成測試方案?
-
目前的系統(tǒng)太龐大,是否可以通過重構(gòu)和解耦改為3個系統(tǒng)?
-
阿里中間件有一些系統(tǒng)感覺我們也可以用,是否可以引入 ?
-
。。。。。。。。。。。。。。。。。。。
?? ?只要你去想,其實總能發(fā)現(xiàn)可以改進的地方的;如果你覺得系統(tǒng)哪里都沒有改進的地方,那就說明你的水平還不夠,可以多學習相關(guān)技術(shù),多看看業(yè)界其它公司怎么做,BAT都怎么做。
5、Do exercise
?? ?在做職業(yè)等級溝通的時候,發(fā)現(xiàn)有很多同學確實也在嘗試Do more、Do better,但在執(zhí)行的過程中,幾乎每個人都遇到同一個問題:光看不用效果很差,怎么辦?
?? ?例如:
-
學習了jvm的垃圾回收,但是線上比較少出現(xiàn)FGC導(dǎo)致的卡頓問題,就算出現(xiàn)了,恢復(fù)業(yè)務(wù)也是第一位的,不太可能線上出現(xiàn)問題然后讓每個同學都去練一下手,那怎么去實踐這些jvm的知識和技能呢?
-
Netty我也看了,也了解了Reactor的原理,但是我不可能參與Netty開發(fā),怎么去讓自己真正掌握Reactor異步模式呢?
-
看了《高性能MySQL》,但是線上的數(shù)據(jù)庫都是DBA管理的,測試環(huán)境的數(shù)據(jù)庫感覺又是隨便配置的,我怎么去驗證這些技術(shù)呢?
-
框架封裝了DAL層,數(shù)據(jù)庫的訪問我們都不需要操心,我們怎么去了解分庫分表實現(xiàn)?
?? ?諸如此類問題還有很多,我這里分享一下個人的經(jīng)驗,其實就是3個詞:learning、trying、teaching!
?? ?1)Learning
?? ?這個是第一階段,看書、google、看視頻、看別人的博客都可以,但要注意一點是“系統(tǒng)化”,特別是一些基礎(chǔ)性的東西,例如JVM原理、Java編程、網(wǎng)絡(luò)編程,HTTP協(xié)議等等,這些基礎(chǔ)技術(shù)不能只通過google或者博客學習,我的做法一般是先完整的看完一本書全面的了解,然后再通過google、視頻、博客去有針對性的查找一些有疑問的地方,或者一些技巧。
? ? 2)Trying
?? ?這個步驟就是解答前面提到的很多同學的疑惑的關(guān)鍵點,形象來說就是“自己動手豐衣足食”,也就是自己去嘗試搭建一些模擬環(huán)境,自己寫一些測試程序。例如:
-
Jvm垃圾回收:可以自己寫一個簡單的測試程序,分配內(nèi)存不釋放,然后調(diào)整各種jvm啟動參數(shù),再運行的過程中使用jstack、jstat等命令查看jvm的堆內(nèi)存分布和垃圾回收情況。這樣的程序?qū)懫饋砗芎唵?#xff0c;簡單一點的就幾行,復(fù)雜一點的也就幾十行。
-
Reactor原理:自己真正去嘗試寫一個Reactor模式的Demo,不要以為這個很難,最簡單的Reactor模式代碼量(包括注釋)不超過200行(可以參考Doug Lee的PPT)。自己寫完后,再去看看netty怎么做,一對比理解就更加深刻了。
-
MySQL:既然有線上的配置可以參考,那可以直接讓DBA將線上配置發(fā)給我們(注意去掉敏感信息),直接學習;然后自己搭建一個MySQL環(huán)境,用線上的配置啟動;要知道很多同學用了很多年MySQL,但是連個簡單的MySQL環(huán)境都搭不起來。
-
框架封裝了DAL層:可以自己用JDBC嘗試去寫一個分庫分表的簡單實現(xiàn),然后與框架的實現(xiàn)進行對比,看看差異在哪里。
-
用瀏覽器的工具查看HTTP緩存實現(xiàn),看看不同種類的網(wǎng)站,不同類型的資源,具體是如何控制緩存的;也可以自己用Python寫一個簡單的HTTP服務(wù)器,模擬返回各種HTTP Headers來觀察瀏覽器的反應(yīng)。
?? ?還有很多方法,這里就不一一列舉,簡單來說,就是要將學到的東西真正試試,才能理解更加深刻,印第安人有一句諺語:I hear and I forget. I see and I remember. I do and I understand,而且“試試”其實可以比較簡單,很多時候我們都可以自己動手做。
?? ?當然,如果能夠在實際工作中使用,效果會更好,畢竟實際的線上環(huán)境和業(yè)務(wù)復(fù)雜度不是我們寫個模擬程序就能夠模擬的,但這樣的機會可遇不可求,大部分情況我們還真的只能靠自己模擬,然后等到真正業(yè)務(wù)要用的時候,能夠信手拈來。
? ? 3)Teaching
?? ?一般來說,經(jīng)過Learning和Trying,能掌握70%左右,但要真正掌握,我覺得一定要做到能夠跟別人講清楚。因為在講的時候,我們既需要將一個知識點系統(tǒng)化,也需要考慮各種細節(jié),這會促使我們進一步思考和學習。同時,講出來后看或者聽的人可以有不同的理解,或者有新的補充,這相當于繼續(xù)完善了整個知識技能體系。
?? ?這樣的例子很多,包括我自己寫博客的時候經(jīng)常遇到,本來我覺得自己已經(jīng)掌握很全面了,但一寫就發(fā)現(xiàn)很多點沒考慮到;組內(nèi)培訓的時候也經(jīng)常看到,有的同學寫了PPT,但是講的時候,大家一問,或者一討論,就會發(fā)現(xiàn)很多點還沒有講清楚,或者有的點其實是理解錯了。寫PPT、講PPT、討論PPT,這個流程全部走一遍,基本上對一個知識點掌握就比較全面了。
?? 最后
?? ?成為技術(shù)大牛夢想雖然很美好,但是要付出很多,不管是Do more還是Do better還是Do exercise,都需要花費時間和精力,這個過程中可能很苦逼,也可能很枯燥,這里我想特別強調(diào)一下:前面我講的都是一些方法論的東西,但真正起決定作用的,其實還是我們對技術(shù)的熱情和興趣!
——《部分內(nèi)容摘自網(wǎng)絡(luò)》
?
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的天天写业务代码,如何成为技术大牛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和中台说再见吧!一个15年的IT总监,从
- 下一篇: IT部门每天忙到飞起,年终总结价值却不能