聊聊技術路線的選擇


Java還是C++,C++還是Python,人工智能還是大數據,深度還是廣度……

經常逛技術論壇或在技術群里嘮嗑的小伙伴,對以上的選擇題應該都不陌生了,出題者往往也是新入行的小伙伴們。作為一個老鳥,很慚愧我沒有足夠的智慧去做這樣的選擇題,尤其是在對提問者的背景和基礎完全不了解的情況下。那么技術路線的選擇,真的有那么重要嗎?

在着筆此文時,我忍不住回憶了下,大約十年前,技術圈里頗有名氣的孟言先生關於技術路線選擇的文章:《技術路線的選擇重要但不具有決定性》。如今看來,我仍然同意孟先生的觀點,就是技術路線雖然重要,但是不具有決定性,具有決定性的是個人獨特的個性知識經驗組合。而這個知識經驗組合在我看來,就是某方面的技術實力 + 行業知識 + 業務能力 + 前瞻視野。

這么說來,技術路線是可以盲選的嗎?倒也不是,只是它對你是否能夠成長為大牛起的作用沒有那么關鍵而已。接下來我將結合自己的技術經歷,來聊聊這個話題。

我在學校里學編程時,首先入坑微軟技術路線,折騰最多的就是VC++、.NET那套工具。畢業后,也自然就找了這方面的工作,一直在這個路線上走了五年。期間,我曾經對軟件破解、系統內核驅動開發感興趣,也花了不少的時間去理解盡可能底層的東西。而當我的一些同事因為在用Linux系統而沾沾自喜的時候,我心想Linux不就那幾個命令嗎,你們知道一段代碼反匯編后是怎樣的嗎,知道參數入棧順序嗎,知道C++虛函數表是怎么存放的嗎,知道一個結構體的內存如何對齊的嗎,知道應用層到內核層調用是怎么實現的嗎,知道Intel三卷本是什么內容嗎,知道操作系統系統啟動的具體流程嗎……。可見,當年的我對自己深入底層的學習方式還是蠻自豪的。

然而,一次工作的變換,讓我偶然地從Windows開發轉向了Linux服務器運維開發。這家公司是搞雲平台的,我的主要任務就是使用各種虛擬化技術搭建私有雲,比如進行OpenStack、VSphere、XenServer等集群系統的自動化部署。從事雲計算,需要對計算、存儲、網絡都有一定程度的理解,才能搭建出一套可用的系統。這樣,我從原來網關具體是什么都不知道的情況下(雖然之前也進行過網絡編程),變成了公司里對網絡技術原理理解比較好的少數人之一。因為我需要寫代碼去自動配置交換機、自動划分VLAN、自動化安裝服務器操作系統和部署其上應用,這些工作任務都要求我必須理解透一些相關技術。雖然在這之前,我對網絡上軟件領域各個方向的牛人都挺了解,時常苦悶於自己的視野早早超越了自己的能力,但轉向Linux服務端后,我又感覺自己的視野才被真正打開,原來還有這么多有趣的技術內容,我之前是一無所知的。因此,即便這是我服務過的在福利方面最摳門的公司,我仍然要呆到合同滿期才考慮換工作,我要在這里完成徹底的技術轉型。

從這家雲計算公司離職后,我剛開始是想繼續找雲計算系統研發方面的工作,但因為回到大南寧,這類坑位很少,而且我當時認為雲技術是大廠玩的技術,小企業打打鬧鬧沒有多少前景,還是轉到應用層研發吧,畢竟自己也比較缺應用服務開發方面的經驗。這樣一來,我工作的內容就從雲平台系統研發變成了如何使用雲平台提供的產品組件進行應用系統架構和開發,直至今日。

有時我在想,如果職業生涯可以重來的話,我會怎么選擇呢?首先,我覺得我不會在微軟系技術上花費那么多時間,反正不會是五年,可能三年左右就好了。我也不會想着特別深入地去理解C++的一些東西,而是遵循一些最佳實踐,用不到的淫技就先擱一邊,然后早點學習Java。大四的時候,我就收集了Java的相關學習資料,當時聽說Java跟C#差不多,而我在用C#,所以就覺得學習Java是多余的。然而Java生態繁茂,有很多技術思想都值得去學習,我卻因為自己的無知錯過了,直到今天,項目需要使用Spring Cloud,我才真正認真地去接觸Java方面的一些技術。內核相關技術呢,我倒不后悔花時間去學習,當然如果能結合應用場景去學習,可能會有更好的效果。現如今,內核相關技術我也忘了很多,但這句歌詞還是比較能表達我的心情,就是“我愛你不后悔,也尊重故事的結尾”。

所有人都想走捷徑,然而哪里有那么多捷徑可走,我的反思未必適合你,也許你一直走微軟系技術路線,他日成為技術專家、技術大神,一樣迎娶白富美走上人生巔峰,誰知道呢。關於少走彎路這個話題,我又想到了當年劉未鵬的一篇文章《你應該如何學習C++》,這篇文章是他在南京大學讀書時候發表的,而評論里有不少業界知名的技術人參與,非常精彩,其中還是前面提到過的孟言先生的評論當屬最精彩。八卦下,未鵬兄入職微軟亞洲研究院后移居西雅圖,目前很少網上發聲了。孟言的評論如下:

myan: 我曾經問過一個美國大學的教授,是一項國際大學生編程大賽的主席,那些編程大賽的題目究竟對實際軟件開發有什么用?他說,其實他們也知道不太有用,但是第一只有這個形式的東西搞比賽容易操作,真正有用的東西沒法比賽,第二,重要的是選手參與這個比賽的過程,要想取得最好的成績,往往要花幾年時間,做幾千題,幾千道跟實際軟件開發沒太多關系的題。最后證明,在這個大賽中取得好成績的,以后在工作中大多數也能取得好成績。你說這個彎子繞的大不大,這個時間花得冤不冤? 最后,其實這些話是寫給你的,也是寫給我自己的。10年前的這個時候,正好是我已經熟練掌握了C,開始雄心勃勃地向C++主峰發起進攻的時候。今天如果能夠讓我年輕10歲,回到大學里重新選擇,我可能不會選擇深入研究C++,而是把C學透了,就去研究OS、Compiler、TCP/IP。但是當年我看不到這些,只能看到C++。我后悔嗎?不太后悔。人只能在一種局限性與另一種局限性之中選擇,走了那條路,今天就會后悔別的事情。如今我對IT這個產業鏈有所了解之后,更覺得世界之大,豈是一人一時所能逆料。所以全局最優是可望不可及的,個人所能做的,只是追求局部最優而已,然后讓命運的大浪把你送上高峰或者拍入深淵。比如,你以為出國讀書,一定是好?你以為被一流大公司高薪聘請,一定是妙?你以為你在學生階段寫出一個軟件,搞得天下聞名,萬人敬仰,就一定有好結局?真的不一定啊。但是不一定,是不是我們就可以吊兒郎當,游手好閑?當然不是。全局最優不可期盼,但局部最優一定要努力爭取,要按照自己定的路線去踏踏實實的努力,取得盡可能好的成果。所以,你要想做個好的語言律師,就踏踏實實下功夫去做吧,沒什么不對的。還是那句話,下足功夫,練出一副好身板,比什么都重要。如果說后悔,我從不后悔技術路線的選擇,只是后悔那時候下得功夫還是不夠,還是拿出太多的時間去看電視,吃燒烤了。

我傾向於同意孟言的觀點,我們都不是先知,有些彎路不可避免,而有些你認為的捷徑,到頭來可能會讓你跌入更深的坑,最終會延遲你到達目的地的時間。

那么回到年輕人如何選擇技術路線的問題,其實還是很難回答,答案也因人而異。比如你喜歡弄圖像界面,看到效果心里美滋滋的,那你可能適合做前端,容易有成就感,相反的,你可能適合做后端開發,又或許,你什么都不適合。那C++、Python、Java又如何選擇呢?我覺得你先接觸到的項目用什么就先學什么,而且在我們的職業生涯中,換開發語言也是常有的事。如果你是自學,沒有項目做,那你隨便了,可以都學習一下,然后根據自己喜好去選擇進行更深入學習的方向。至於捷徑,我只想說,也許用心、腳踏實地就是最好的捷徑。

 

歡迎關注公眾號:

原文地址:聊聊技術路線的選擇

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM