【轉】技術太多,學不過來怎麼辦


分享羣裏SpeedFirst大神的文章:

上大一時有個同學這麼跟我說:

哥們,我都想好了,下面我列了個單子就學下去了: C, C++, C#, Java, J++, J#, javascript, PHP, HTML, css, python, Visual Basic,Win32的彙編,……,你覺得怎麼樣。

我和周圍小夥伴簡直都驚呆了,我連寫Hello World都不太利索啊,這人簡直太厲害了。

然而幾年以後我看到莊子說了這麼一句話:

以有限的生命去追隨無限的東西,吃棗藥丸!

醍醐灌頂。

知識技能是無窮無盡的,這就好像全國各地的小吃攤一樣,只要你肯投入,吃到死也吃不完。這個道理相信所有人都懂。但爲啥一到自己要學的時候就想這也學那也學,學到最後貌似還是沒把事情辦成?

學習是有成本的

老一輩總是這麼教導,”學好數理化,走遍天下都不怕“。又或者,總是覺得“藝多不壓身”,多學點總是沒壞處。大道理還算對,但是有個關鍵點估計大部分人都不怎麼考慮——學習的投入成本。

學習的投入是驚人的,尤其是極度改變思維方式的學習。一個普通人到熟知微積分、非歐幾何,可能需要巨大的時間和資源來扭轉自己的腦子,使其變成總是習慣用絕對的邏輯思考;學習藝術設計就完全反過來,腦筋要爲感覺讓路,感覺說high就得high;而學習計算機就更加奇葩——一邊得照顧着機器,得精確、嚴謹,而另外一邊得就讓人爽,用戶使用流暢,數據看起來符合心理預期。

你說說這個得多難學。

學習成本很大的一塊是時間

孫子這樣說過。

學習了卻不過腦子,就會犯二;而成天瞎想卻不學習,就會掛科!

深以爲然。

時間都被學習擠佔了,就沒有功夫思考了。思考什麼呢?比如

學習的產出是有限的

即便學到了,任何知識技能都只能在特定條件下才能發揮作用。舉個例子,你計算機再棒,把你扔一個沒電的村子裏,你學的東西有啥用?嗯,有點極端,再說幾個靠譜點的例子:

  • 學了REST和圍繞REST的一坨工具,卻發現業務中壓根就不是正常的CRUD,也不好定義那個“資源”
  • 學了Hadoop,Spark,Flink,想做數據分析,結果發現公司裏就兩臺機器,幾百萬行數據
  • 學了高大炫酷的微軟技術,想寫個界面卻發現世界已經被移動終端佔領了,是app、Web和微信的天下
  • 搞明白了操作系統調度的種種細節,其大部分企業用不着這門手藝,需要這門手藝的不招你
  • ……

所以,我在讀個書之前,會讀摘要和推薦文字,就是要以最小的代價弄明白這個東西對我有用沒用。永遠不要用“炫酷”來給自己要學的東西排序。性價比纔是第一位的。

有人可能會問,“我會的東西不懂,就得多學打好基礎”。我是贊同的。在這個階段,還談不上能夠計較得失的時候。但是,這個階段,最重要的不是“多學”,而是“巧學”,因爲——

要學的東西可能會縮水

這一點在IT圈尤其明顯。IT圈猶如江湖,各大門派紛爭不休。各家都要推廣自己的技術、產品、規範、框架、標準、文化。圍繞這些形成了所謂的技術圈,以及帶來的巨大的市場。

但是切記,巨頭們爭他們的,我們過我們的。沒有皇帝命莫操皇帝心。爭鬥中有成功者(如H5),有失敗者(如Flash)。而成功的也不一定能長時間挺下去(比如IE)。

我經歷了經歷了Win32 API, MFC, COM, ATL, 幾代.Net的歷程,最後連我自己都煩了,因爲學的東西還沒用到就過時了。剛學會Swift,新版本一發布就不兼容,得重學;還沒來得及開發一個賺錢的App,大家開始都投入到了微信小程序的開發……真心趕不上節奏。

既然學什麼都不穩固,那麼就學兩類東西:

  • 馬上能上手用起來的
  • 可能長久有效的東西,可以跟一輩子的

前者大家都懂,自己的工作需求被老闆扔過來,怎麼做的快、靈活、高效就怎麼來。如果技術有得選,選擇容易學、概念清楚簡單、不過於裝的技術。這也是爲什麼很多業務場景腳本語言(比如python和js)和鬆散的約定(比如html)更吃香的地方——學了用,用完了就完了,不糾結。

而對於第二類

什麼東西學的不吃虧

無數的牛人在不斷的踩坑中總結了大量的經驗。有些經驗是超越了技術的自然規律——即,不管技術怎麼變,抽象如何增加,也無法徹底隱藏/抽象的東西。瞭解它們,基本上就可以吃透大部分的技術出現的動機和工作原理;

  • 存儲 - 即數據寫入/查詢。不管幹什麼,總是要把數據用某種格式存到某個地方。不同存法有快有慢,有的便於寫,有的便於查。有的在磁盤上工作的好,有的更利於SSD。以此爲中心有數據結構、文件系統、B樹、LSM、Cache、SQL、索引等主題。
  • 任務調度 - 人類之所以能站在生物鏈的頂端,是因爲人能夠組織起來協調完成任務。計算機幹活也類似,那麼怎麼調度幾個核心協同工作是很重要的內容。圍繞這個主題,有了進程、線程、協程、事件觸發、並行/併發等內容。
  • 分佈式的一致 - 即A和B是兩個分離的東西,A告訴B一件事,那麼如何保證A說的和B聽到的就是一摸一樣。如果保證不了,又怎麼做取捨。這個是現代分佈式系統立足的基礎。圍繞這個問題衍生了網絡、通訊協議和一致性協議等等。如果你接觸的東西和分佈式有關(比如Web,移動),那麼必須非常細緻的理解怎麼做能達到一個什麼樣的一致。
  • 狀態機 - 計算機的經典思考方式。編程語言編譯需要、網絡通訊需要、甚至是常規業務也大量需要(比如一個人先答題,答了題才能拿券,拿了券下單才能優惠,優惠發生了才能發通知——一組狀態切換)。
  • 安全 - 計算機天然的狀態是開放的。所有的約束都是在開放的基礎上追加上去的。那麼在一個系統中一條數據是怎麼在可接受的代價內無法輕易被惡意第三方獲取/篡改?基於這個中心,有對稱/非對稱加密,SSL協議,加Salt,Token編碼,ACL管理,CSRF,注入等話題。

而這些,在後續的文章裏,都會按照主題分期討論。

那什麼是不那麼有價值的東西呢?對比一下SQL和JPA,前者非常有價值。而後者卻相對不那麼有用。SQL存在了數十年,成爲這個星球上主流存儲的訪問語言,幾乎涵蓋了各種你能想得到的場景;而後者僅僅是一種編程語言下的一個框架下的一種特定用法,業務稍一複雜就無法解決問題。如果真要在二者之間分配時間,我猜應該是9:1。

結論

其實,學習是一門投資。而對待投資,就要

  • 算計投入產出
  • 不要被別人牽着鼻子走,學能用得上的
  • 找到有長期價值的學習目標。

最後記得,不要忘記莊孫兩位老夫子的話,用有限的生命去思考那些最有價值的東西吧。

PS

那個大一的哥們怎麼樣了?他之後回了老家做了小生意,有車有房,去了老婆,生了娃,還辦了個廠。生活滋潤幸福美滿,真人生贏家。至於這個語言,那個語言什麼,不提也罷。



作者:SpeedFirst
鏈接:https://www.jianshu.com/p/297c8de2896b
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發佈了14 篇原創文章 · 獲贊 28 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章