天天寫業務代碼的程序員,怎麼成爲技術大牛,開始寫技術代碼?

作者:李運華
鏈接:https://www.zhihu.com/question/39430220/answer/81648584
來源:知乎
著作權歸作者所有,轉載請聯繫作者獲得授權。

粗略的掃了一下前面的答案,有幾個典型的答案我覺得有必要反駁一下:
1)拜大牛爲師 – 你想得美
看起來很美好,實際上想拜大牛爲師的多了去了,大牛憑什麼看中你呀;而且一個公司或者部門的大牛本來就不多,你正好和大牛在一個組的機率是很小的;如果都不在同一個組,你根本都沒有機會接觸大牛,更別說深入請教和學習了;
如果是組內的小牛,一般都是骨幹核心,本來工作也很忙,你天天問一些在他看來比較低級的問題,別人也煩呀。像我這種樂於助人好爲人師的,可遇不可求 :)
2016.09.26補充:不是說不要向比你厲害的人學習和請教,而是說不要問書本或者google能夠查到的東西;
2)業務代碼一樣很牛逼 – 很傻
這樣的答主我估計沒有怎麼真正參與業務開發吧? 實際上在公司裏面,業務代碼真的沒太多技術含量,就是實現產品功能即可,而且翻來覆去就那麼一些,寫多了真的會很煩躁的。
3)業務代碼寫多了能力就上去了 – 很天真
這也是誤人子弟的,寫一萬行hello world,水平不可能提升的;redis也就3萬行代碼規模,幾個人能寫出redis ?你寫10萬行業務代碼都寫不出redis的。
4)上班太忙沒時間自己學習 – 你想多了
嗯,這是中國國情,難道你還指望每天上班給2小時給你自我提升 ?

我講講我是怎麼混出來的。
最重要的是明確一個道理:靠自己!在你水平不高的時候,不要想着人脈、關係這些,不要被那些亂七八糟的勵志書忽悠了。否則你會發現熱臉貼冷屁股,要不就是浪費錢請人吃了飯而已。
要靠自己去學習提升,沒有時間就擠出時間,將打遊戲、睡懶覺、看電影的時間擠出來;
要靠自己去爭取機會,不要等着機會砸到你頭上。你說自己天天完成業務代碼就OK了,從來不分享、從來不提優化建議、別人討論nginx你連nginx是啥都不知道、有任務能推就推。。。。。。然後等着哪天主管突然給你安排一個有技術含量的事情?這是不可能的。
要考自己主動去探索,不管是熟悉更多業務,還是熟悉更多代碼,還是瞭解整體架構,都需要自己主動去做。不要指望誰告訴你這裏是重點,那裏是難點,還有關鍵點在哪裏。

總結一句話:只有你自己牛逼了,機會纔會到你頭上!

前面講了大道理,接下來講我的實際方法,不多,就兩條。
【Do more】
做的更多,做的比你主管安排給你的任務更多。

我在華爲的時候,負責一個版本的開發,這個版本的工作量大約是2000行左右,但是我除了做完這個功能,還將關聯的功能全部掌握清楚了,代碼(大約10000行)也全部看了一遍,做完這個版本後,我對這個版本相關的整套業務全部很熟悉了。經過一兩次會議後,大家發現我對這塊掌握最熟了,接下來就有趣了:產品討論需求找我、測試有問題也找我、老大對外支撐也找我;後來,不是我負責的功能他們也找我,即使我當時不知道,我也會看代碼或者找文檔幫他們回答。。。。。。最後我就成了我這個系統的“專家”了。雖然這個時候我還是做業務的,還是寫業務代碼,但是我已經對整個業務都很熟悉了。

以上只是一個簡單的例子,其實就是想說:要想有機會,首先你得從人羣中冒出來,要想冒出來,你就必須做到與衆不同,要做到與衆不同,你就要做得更多!

怎麼做得更多呢?可以從以下幾個方面着手:
1)熟悉更多業務,不管是不是你負責的
2)熟悉更多代碼,不管是不是你寫的
3)熟悉端到端
比如說你負責web後臺開發,但實際上用戶發起一個http請求,要經過很多中間步驟纔到你的服務器(例如瀏覽器緩存、DNS、nginx等),服務器一般又會有很多處理纔到你寫的那部分代碼(路由、權限等)這整個流程中的很多系統絕大部分人是不可能去參與寫代碼的,但掌握了這些知識對你的綜合水平有很大作用,例如方案設計、線上故障處理這些更加有含金量的技術工作都需要綜合技術水平。
4)自學
寫業務代碼所用到的技術比較少,我們可以自己學習更多,說不定哪天就用上了。
以java爲例,大部分業務代碼就是if-else加個數據庫操作,但我們完全可以自己學些更多java的知識,例如垃圾回收,調優,網絡編程等,這些可能暫時沒用,但真要用的時候,不是google一下就可以了,這個時候誰已經掌握了相關知識和技能,機會就是誰的。
以垃圾回收爲例,我自己平時就抽時間學習了這些知識,學了1年都沒用上,但後來用上了幾次,每次都解決了卡死的大問題。

【Do better】
要知道這個世界上沒有完美的東西,你負責的系統和業務,總有不合理和可以改進的地方,識別出來,並且給出解決方案,然後向主管提出,一次不行兩次,多提幾次,只要有一次機會,你就有機會了。
例如:
重複代碼太多,是否可以引入設計模式?
系統性能一般,可否進行優化?
目前是單機,如果做成雙機是否更好?
版本開發質量不高,是否引入高效的單元測試和集成測試方案?
。。。。。。。。。。。。。。。。。。。
只要你去想,其實總能發現可以改進的地方的;如果你覺得系統哪裏都沒有改進的地方,那就說明你的水平還不夠,可以多學習相關技術,多看看業界其它公司怎麼做,BAT都怎麼做。

我2013年調配到九遊,剛開始接手了一個簡單的後臺系統,每天就是配合前臺做數據增刪改查,看起來完全沒意思,是吧?如果只做這些確實沒意思,但我們接手後做了很多事情:
解耦,將一個後臺拆分爲2個後臺,提升可擴展性和穩定性;
雙機,將單機改爲雙機系統,提高可靠性;
優化,將原來一個耗時5小時的接口優化爲耗時5分鐘。。。。。。
後來我們這個組承擔了更多的系統,現在這個小組5個人,負責了6個系統。

歸納總結一句話:靠自己、做更多、做更好!
記住:不是因爲給你安排高水平的工作你纔有機會提升水平,而是因爲你水平高了纔有機會給你安排高水平工作!

==================2016.01.17補充======================
特別申明一下:我說業務代碼沒有“太多”技術含量,並不是說“完全”沒有技術含量,理解問題千萬不要走極端。有個網友說寫了半年業務代碼就覺得沒意思了,我覺得這就有點急躁了。即使是業務代碼,也還是有一定技術含量的,以java編程爲例,static、final、synchronize、HashMap、try-catch-finally等語言基本特性,這些在業務代碼開發中還是比較常見的,很多人也經常用,但大部分人都沒有深入去研究這些語言特性的原理和作用,只是一知半解的使用,所以經常會看到代碼中亂用、濫用、隨便用的現象。
===================2016.09.28補充======================
成爲技術大牛就像遊戲中打怪升級一樣,要不斷的打更高級別的怪物才能不斷升級。這個過程中,業務代碼只是比較初級的怪物,業務代碼都寫不好,肯定不能成爲技術大牛;但只是把業務代碼寫好了,一樣成爲不了大牛!就像遊戲時小怪都打不死,直接去打BOSS是不可能的;但一直只是打小怪,即使能夠秒殺小怪,離打大BOSS還差得遠

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章