天天看點

如何追求新技術

這篇文章的作者把父母的電腦系統從 windows 切換到了 linux。他解釋了為什麼這麼做以及怎麼一步一步的讓父母适應新的系統。讀完以後我覺得和現在技術人員追求技術進步和技術選型有很多相似的地方。

我總是感覺自己在盲目的學習一些看上去很火熱的技術。比如 React Native,Flutter 等等。我家裡堆了各種程式設計語言的入門書籍,有 Go 的,有 Erlang 的,有 c++ 的,還有 JavaScript 和 CSS。

我到現在都搞不懂這個事情。我連主流的 Python 語言都沒有掌握清楚為什麼要去看這麼多語言的入門書呢?我在工作和生活中根本就用不到他們。隻是因為在某一篇文章中看到 Go 語言是趨勢,Erlang 的穩定性無人能敵,c++ 你永遠都讓不開等等。這些東西我都研究過,可是到現在為止還沒有用他們寫過一行有用的代碼。

相信很多童鞋都有類似的情況。程式員學習新技術的想法是件大好事,總比不思進取的思想狀态要好,可結果卻并不一定比原地踏步強,因為不一定有用,會造成技術浪費。

浪費的事情我們生活中做得很多。我們想要買更貴的手機,因為 cpu 更強,可是很多人并不一定需要那麼強的 cpu。本來隻需要買個上網本看看電視卻要買個工作站。我們的理由自然也很充足:萬一有一天要用到呢?萬一有一天我需要玩遊戲呢?萬一有一天我要 3D 渲染呢?追求新技術的理由也同樣:萬一以後它火了,我就走在了時代的前面。

這種情況确實有可能發生,前提是你能将這門新技術研究得很透徹,比别人更懂,否則那些基礎更強的能用很短的時間就能超越你。

我想在學習新技術之前應該做幾件事情:

先了解自己的需求是什麼?在未來 3-5 年内的主要工作是 python 開發,那就應該圍繞這個需求來學習。首先是 Python 的進階特性和工程設計思想,這些都落實在具體的實踐上,需要積累大量項目經驗,可以自己選擇一些 side project 練習。自己做的時候還應該參考優秀的開源架構,看看别人的設計思路和實作方式。

需要了解 web 原理。像 HTTP 協定、TCP/IP 協定都需要精通,這樣才能站在更基礎的層面來進行開發,不是在網上找幾套解決方案就能做出一套好的系統。看完基本經典書籍以後,要學會用抓包工具來分析流量走向,定位問題的能力。

需要性能優化。要熟練掌握各種算法和資料結構,知道常用算法的應用場景和複雜度。學好算法基礎就要去看 python 的各種内置函數實作他們的性能如何,你寫出來的代碼性能如何。

性能還需要涉獵并發和異步知識。這些東西往往是操作層面的,可以先熟悉多程序、多線程和協程等在 python 的應用,消息隊列等各種異步操作的實作,但是遲早還是要深入研究作業系統是怎麼去進行資源排程的,《深入了解計算機系統》就該去看一看了。

在這個過程中,還應該看一看《重構》《程式員修煉之道》這樣的方法論書籍,争取能形成一套自己的編碼和改進體系。

在工作中應該盡量避免的問題是原地踏步、google 程式設計,這次搜尋完一套方案下次還是不知道,幾年做的都是重複的事情。盲目追求新技術,拼命加班改 bug 都是技術領域盡力要避免的陷阱,看起來非常努力,實際上是在原地不動。

學習應該是有目的的,不是看着哪個火就去學哪個。小時候都學過撿了芝麻丢了西瓜的課文,現在正是不停的在重蹈覆轍,學這個,學那個,最後自己的真正專業都沒有做好了。一門技術的探究最終都會落到基礎知識上,編譯原理、作業系統、算法和資料結構。如果學好了一門技術真正落實到了基礎上,去學另一門技術不應該是很難的事情。

在确定了方向以後把重心放在自己的方向上,平時可以花少量的時間來關注新技術,看看他們的應用領域和簡單實作。喜歡玩手機并不代表每個品牌的手機都要買回來天天使用,那是職業測評師幹的事,我們的思路是買一個牌子的當主力機,一個當備用機,其他的偶爾去專賣店感受一下就可以了。

在項目的技術選型上也應該遵循以需求為重心的原則。如果不是高并發的項目為什麼要使用熱門語言 Go 呢?用 python 快速實作行不行?現在的技術團隊有幾個人懂這門語言,外面招人好招嗎?現有人員教育訓練需要多久呢?一定要用微服務嗎?一定要用docker嗎?很多都沒有必要的!隻是自己給自己挖的一個一個陷阱,把整個團隊推進去。

接下來是怎麼實作的問題。如果要突然去學非常枯燥和底層的作業系統原理,肯定會兩眼一抹黑。突然從 windows 系統換到 linux 系統也會讓人手足無措。一個可行性很高的方案就是漸進式改變。和菜頭在一篇文章中寫道:如果一家餐廳幾十年的口味都不變,那肯定逃不過關門的命運。那些說自己堅持不變的人或者産品往往在發生悄無聲息的改變,他們的變化如此微小,以至于你根本察覺不到,多少年以來,微信添加了多少微小的功能,很多都隐藏在 UI 之下,我們像尋寶一樣一點點的發現,用習慣了以後就感覺它們從一開始就被設計出來了一樣。