程式設計師需要專精,還是廣度多一點?
於一名優秀的技術人員來說,究竟是專精一塊技術方向,做到深耕其中所向披靡。還是謀求“什麼都能略懂一點”的廣度,成為一個全方位的人才?
這其實是一個職業發展和學習規劃路線的問題,許多同學都有這個困擾。
今天我們邀請了 4 名淘系技術工程師,結合他們自身在小廠和大廠的經歷故事,給大家分享一些他們在技術人員成長中對於【精】和【廣】的選擇觀點,希望能夠對你有幫助。
01
淘系技術部 - 應用演算法 - 立青
“更早地認識自己和自己的方向,能更快地幫助我做出成績。”
我想先撇開這個具體的問題,談一談一個程式設計師的技術發展和職業規劃。
寫程式碼這件事絕大多數人在喜愛的同時,更多的都是當做一個職業來做的,當然也確實有一部分人真的完全當做愛好,例如前段時間的新聞,HashiCorp 的創始人 Mitchell Hashimoto:“頂級凡爾賽CTO辭職:寫程式碼才最快樂!管理只會影響我搞研發”;著名的Linux創始人Linus大神也是出了名的熱愛程式設計。對於這樣的追求(土豪),拋棄功利熱愛程式設計,我覺得在程式設計上完全可以喜歡什麼方面就追求什麼方面,是廣泛的發現興趣探索興趣,還是在一個方向上深入挖掘都沒有問題,大可以今天做前端,明天搞開發,後天攢演算法,一人搞定全棧。
但是對於絕大多數人來說,程式設計更多的是職業發展道路上一個立身的手藝,在眾多專業技術方向上挑了一個自己比較喜歡和熱愛的。程式設計師的發展和眾多職位的發展一樣,每個人都希望自己能夠往"上"走:更專業,更能在職場上發揮自己的作用和影響力,從單兵作戰做小事,到帶隊做大一點的事,再到影響一個領域,影響一個行業。這樣的發展單單靠自己各方面都懂,都有涉獵,恐怕是不行的。剛畢業的應屆同學可以靠自己的知識儲備做自己的標籤,久經職場的同學必須靠自己在某些領域做出的成績做自己的軍功章。
所以我們越早在某些方向做出自己的成績,對自己的成長和發展是越好的。我本人是做演算法的,演算法領域有很多大牛在學校期間就已經找準了自己的發展方向,並做出了成績,例如caffe作者@賈揚清大神,Taichi作者@胡淵鳴等等。他們的成就就需要及早的找到自己的方向+不懈的努力+億點點的天賦……對我們絕大多數人來說更需要及早的找到一個熱愛的,希望精通的方向並做出成績。
我自己的經歷其實不是好的榜樣,我抱著做機器人的夢想本科學的機械,在學校的時候對什麼都感興趣,既參加過機器人大賽,參加過結構設計大賽,也和同學做過熱力學相關的一些機械設計;一個比較有意思的經歷是,當時在學校還做過一個上天失敗的小衛星。當時學校的微小衛星研究所發射了一顆皮星(體積很小的衛星)之後,在學校辦了一個小衛星的比賽,我們做了一個模擬衛星太陽能電池片自動追蹤陽光的衛星模型,在答辯前熬夜完成了,然而在最後測試的時候由於線的固定太過粗糙,在運動中扯掉短路了,把電路都燒了……萬幸留下了影片支援最後的答辯。對我後來職業選擇影響比較大的是臨畢業用Kinect做了一個姿態識別控制無人機飛行的專案,初步接觸了視覺演算法的一些知識。
後來研究生就真正的開始做起了機器人的方向,也是研究生時期做的控制演算法和視覺演算法的經歷讓我走上了程式設計師的道路。在這個過程中自己也是對機器人領域中的SLAM方向產生了興趣,自己惡補了一些知識,並靠著這些最後走上了這個方向的職業。一方面我覺得自己如果能早一些找到自己的方向並且積累起來一些成果,肯定對自己的發展是要好很多的,但是另一方面每個人也確實需要一個認識自己的過程,但這個過程我想還是越快越好。在這個過程中,我們自己的技術發展就像是一棵樹,我們儘可以無限的去展開自己的枝葉,多瞭解一些不同的方向和知識,但一定記住這是為了讓自己的枝頭長得更高。
02
淘系技術部 - 應用演算法 - 朔玥
“大部分的精力還是要用於鞏固自己的長處上,你一定要有競爭力的依憑。”
做一件事是要精還是要廣?其實相當於賭博裡你是要多壓,還是要單押。我們的籌碼是有限的,當然我們的精力也是有限的,不可能去做所有的選擇。那麼這時候,問題就變成了如何去組合投資獲得最大化的收益。
如果你選擇去把所有的籌碼壓在一個選項上,那麼你就一定要去承擔選擇失誤帶來一切清零的後果。但是我們也知道,如果你選擇到一支潛力項,不費吹灰之力就可以贏到盆滿缽滿。所以孤注一擲,一定對應的高風險。
另外一個選項就是廣博,它帶給我們的好處是平攤風險,但是平攤風險的同時收益也會被稀釋掉。比較好的一種做法,應該是兩者相結合,在該廣博的時候廣博,在該專注的時候專注。
作為一名演算法工程師,我的建議是,廣泛的去涉獵相關領域的知識,以及弱相關領域的知識,因為這些知識全都可以作為你自己的儲備,作為你專注行業的加成。比如說,你從事影像識別相關演算法研究,那麼直接的,除了影像相關的專業知識,一些基礎的知識例如代數分析等數學理論,計算機原理與體系結構,甚至色彩,攝影美學等知識,都可以為模型設計帶來一定的輔助。除基礎的知識以外,相關領域比如自然語言處理當中的時序模型就與影片影像分割問題有很多的共通之處;訊號處理中很多變換運算元能夠直接遷移到影像處理當中。這些知識,都可以作為你研究影像演算法的加成。
又如,你想不到心理學,消費者行為學以及經濟學都可以為我們的工業推薦體系賦能。在洞悉了消費者在購物時的選擇動機,心理活動以及當下經濟趨勢後,演算法設計者能夠依據這些先驗知識有聚焦地設計相關的模組,或是作為趨勢因子加入演算法當中。用一種更柔軟的方式將大眾認知融入模型,將表象和理論相結合,從而更好地發揮推薦系統的效能。
世界上很多知識底層是相通的,不要去抗拒學一些基礎的知識,很有可能那將是你未來抓住機遇的契機。但是,大部分的精力還是要用於鞏固自己的長處上,你一定要有競爭力的依憑。廣泛的涉獵,精準地融會貫通,提取出你需要的那一部分,轉化為自己需要的能量。
03
淘系技術部 - 前端技術 - 禾鳥
“我個人經歷覺得,精進一門技術,不管是對於開發還是其他工作,都是重中之重!”
當我剛畢業的時候,在一家小廠做Flash遊戲開發,由於當時開發人員配比嚴重不足(qiong),所以不但要用AS3去寫前端遊戲UI功能,還需要用NodeJS寫服務端遊戲邏輯、SQL處理資料讀寫操作、HTML/CSS/JS寫後臺配置管理頁面,且一度在公司沒有招到測試的情況下,所有的功能測試只能透過自測來完成。
時間一長就有些膨脹了,自我感覺非常好,覺得自己就是全棧,覺得只有更大的舞臺才能配得上自己,進入大廠應該是輕而易舉的事情,於是開始往網易、阿里、華為一些大廠投簡歷,Flash遊戲開發、H5遊戲開發、Web前端開發、NodeJS開發、服務端開發、測試開發各種崗位都投了遍。結果就是被現實狠狠地打了臉,投的簡歷石沉大海,少有的幾個面試也都是一輪遊。
後來總結反思了一下,在所有面試中,面試官經常會問這麼幾個問題:XX原理是什麼?XX如何實現?對XX你是如何理解的?對於XX功能是否有更好的解決方案?面對這些問題,發現了自己其實對底層原理一竅不通,所有都還是停留在使用層面。
看清楚了這個問題之後,我暫時放下了其他域的學習,專注在前端領域的學習,從基礎的HTML/CSS/JS入手,到lodash/JQuery等常用工具庫的使用,再到Vue/React等主流框架的使用以及原理的學習,以及ES6、TS等學習掌握。等熟練掌握了這些技能之後,再深入到瀏覽器工作原理、網路通訊機制、前端效能最佳化、穩定性安全保障等知識點的學習。一步一步從搬磚菜鳥變成了熟練搬磚工,然後繼續朝著搬磚磚家努力。
總的來說,在小廠,老闆當然希望能更省錢,巴不得一個人就能幹完所有的活。而對於個人而言,精進一門技術,不管是對於開發還是其他工作,都是重中之重!
04
淘系技術部 - 移動開發 - 臨境
“不要把自己當做業務研發的工具人。”
這個問題沒有標準答案,角度不同,得出的結論會大相徑庭。前不久剛從小廠跳到阿里,簡單聊下我自己的感受。
小廠會更偏重於業務,因此我們更多的是在實現業務方的需求,日常的研發工作也少有接觸特別難或者深的內容。這個階段不是說基礎不重要,但深入學習基礎知識可能對你業務研發不會有特別明顯的提升。
曾有段時間我為了學習演算法知識跑去刷 leetcode,刷完兩三百題後陷入了迷茫。這些刷題獲得的演算法知識在大部分的業務場景中不太能用上,雖然它對於在程式設計中邊界條件判斷、減少低效程式碼確實起到了一定的幫助,但相較於投入的時間來說價效比略低。
同樣道理,學習作業系統、計算機網路、計算機組成原理能讓你對整個計算機體系有一個更深層次的認識,但工作的人不比在校生,時間比較有限,如果你不是一個特別特別自律的人,投入時間沒有看到明顯產出很可能會中途放棄。
如果想要在工作的同時更深入學習一些計算機基礎知識,可以從你正在做或者感興趣的效能最佳化入手。不少效能最佳化手段背後都伴隨著深入的知識,比如之前不少大廠分享的針對 iOS 二進位制重排最佳化冷啟動的內容。學習過程中一定會碰到自己不瞭解的知識,一點點去積累,會比盲目的抱著一本磚頭書直接啃更容易堅持。
另外,如果是業務研發,請一定鍛鍊自己對業務的理解程度,不要只停留於需求來了做完就完了,把自己當業務的工具人沒有對個人成長沒有益處。
最後,和大家分享一句我和喜歡的話:“書上沒有知識,書上只有資訊;知識是在特殊的工作和行動中運用資訊的能力。”共勉。
結語
程式設計師要精還是要廣,並不是一個有著標準確定答案的選擇題。
精於基礎,廣於工具,熟於業務,永遠保持進步和學習的心態。
以上就是程式設計師專精和廣度問題的探究,希望對大家有所幫助。更多精彩內容分享:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3209/viewspace-2828276/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- @程式設計師,你需要點財商程式設計師
- @程式設計師,你需要點金融常識程式設計師
- 工作一兩年的程式設計師,有點錢,買房還是買車?程式設計師
- [推廣] 程式設計師的痛點:我竟然還不懂 Linux 效能優化程式設計師Linux優化
- 一個專為程式設計師設計的精緻 Java 部落格系統程式設計師Java
- 程式設計師是一個需要天賦的職業嗎?程式設計師
- 程式設計師程式設計入門一定知道!程式設計師需要學什麼?程式設計師
- Google程式設計師的一天是如何度過的?Go程式設計師
- "無程式碼"時代的到來,還需要程式設計師嗎?程式設計師
- 程式設計師程式設計入門,物件導向需要知道這6點!程式設計師物件
- 現在的你,是開發工程師、程式設計師還是碼農?工程師程式設計師
- 【投票】程式設計師是幾點睡覺的?程式設計師
- 程式設計師是什麼讓你停滯不前—是安逸,還是….程式設計師
- 你需要程式設計師鼓勵師嗎?程式設計師
- 12月書訊 | 程式碼之外,程式設計師還要修煉一點PPT技能程式設計師
- 程式設計師最重要的一點_面向金錢程式設計程式設計師
- 程式設計師觀點:過度思考的三種毒程式設計師
- 程式設計師可以自己寫測試?還需要測試人員嗎?程式設計師
- 程式設計師面試除了技術外,還需要注意這些程式設計師面試
- 美女程式設計師觀點:程式設計師最重要的非程式設計技巧程式設計師
- 對程式設計師而言,學歷重要還是技術重要?程式設計師
- 非程式設計師選擇學習C++還是Python?程式設計師C++Python
- 作為程式設計師,是死死的呆在一家公司進步快,還是多跳槽多換公司技術進步快程式設計師
- 程式設計師需要懂點的批處理命令之bat(1.0)程式設計師BAT
- 一個合格的程式設計師,需要哪些必備技能?程式設計師
- 【1024程式設計師節】程式設計師,你學程式設計的初衷是什麼?程式設計師
- 你好,我是程式設計師程式設計師
- 程式設計師的macOS系列:精選MacApp程式設計師MacAPP
- 新年程式設計師福利(多圖)程式設計師
- 【譯】我是一個平庸的程式設計師程式設計師
- 做了三年還覺得自己是菜鳥程式設計師程式設計師
- 好程式設計師精講 java設計模式—享元模式程式設計師Java設計模式
- 是成就還是削弱?AI程式碼生成工具與程式設計師的「相愛相殺」AI程式設計師
- 騰訊架構師分享的Java程式設計師需要突破的技術要點架構Java程式設計師
- 程式設計師做產品需要知道程式設計師
- Java程式設計師都需要懂的「反射」Java程式設計師反射
- .Net WEB 程式設計師需要掌握的技能Web程式設計師
- 前端程式設計師需要了解的MySQL前端程式設計師MySql