如何追求新技術

原文鏈接:https://blog.simon-frey.eu/how-switching-my-parents-over-to-linux-saved-me-a-lot-of-headache-and-support?utm_source=wanqu.co&utm_campaign=Wanqu+Daily&utm_medium=website

外鏈無法訪問請點擊最後 閱讀原文。

這篇文章的作者把父母的電腦系統從 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 之下,我們像尋寶一樣一點點的發現,用習慣了以後就感覺它們從一開始就被設計出來了一樣。

要學好操作系統不一定要全心全意去攻克每一個知識點,在工作中接觸到了多線程,先看看線程消耗,鎖機制和信號量行不行?一點一點來,每天進步一點。人往往會高估短期能力而低估長期能力,這是思維和眼光的侷限性導致的。

學習是個非常講究方法論的事情,盲目的學習是不行的。都是參加高考,爲什麼那些看上去努力的學生大多成績平平,天天打籃球、約會的就考上清華北大呢?智商是一方面,不過我到現在都不相信高考能到達人類平均智商的極限,估計方法是更加重要的一面。

萬維鋼關於學習的話題我覺得是很有意思的,概括幾個要點是:循序漸進、逃離舒適區、重複的基礎訓練。最重要的是要形成整個體系和思維,不然學到的知識都不是自己的。

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