程式設計師,請停止學習框架!
作者:sizovs 譯者:方應杭
來源:
之前發過類似的一篇文章,這篇更加全面。
我們都是程式設計師,我們需要與技術保持同步。每一天我們都要學習程式語言、框架與庫。
我們瞭解的現代開發工具越多越好,比如Angular,React,Riot,Vue,Ember,Knockout,和這些新技術保持同步真是一件很有意思的事情。
但是....我們卻是在浪費時間!
時間是我們擁有的最為寶貴的資源。時間有限,它不可再生,你我都不能購買更多的時間。
為什麼?就像時尚時裝界一樣,技術領域如光速一般發生著變化。要趕上它,我們需要快速的學習,這場比賽沒有贏家,因為它永無止境。
馬丁·斯科塞斯2013年作品《華爾街之狼》劇照
我的授業導師曾經教我這樣一課:
導師:“艾德,你在做什麼?”
我(自豪地說):“我在讀一本使用GWT構建現代Java應用程式的書。”
導師:“你為什麼要讀這本書?”
我:“作為一個Java開發者,我需要緊跟趨勢,GWT現在最火。”
導師:”在讀GWT之前你在讀什麼技術書?“
我:”是一本500多頁的Apache Tapestry的書,Tapestry當時非常流行“
導師:”這個Tapersty一直流行嗎?“
我:”沒有多長時間。GWT現在最火。“
導師:”你能重新用Tapersty的能力來解決現在的問題嗎?“
我:”不能了。現在它沒有什麼用。“
導師:”Taperstry的知識能幫你對GWT理解的更好嗎?“
我:”不能,沒有太大用。但是我看到裡面有一些設計模式有些相似“
導師:”是設計模式。這些能幫你解決現在的問題嗎?“
我:”是的,幫助太多了。“
導師:”技術一直在向前發展。但是有一些是相通的,要找準重點,將80%的時間放在提升基礎問題上,餘下的20%再去學習框架,庫和工具“
我:”Hmmm... 只留20%的時間學習框架,庫和工具?“
導師:”是的。你在解決問題時自然就會學會框架、庫和工具“
我:”謝謝指點“
導師: 現在不忙著謝,過一段時間,你自然會明白。
這次談話可以說改變了我的人生!我把所有的講框架、庫的書從書架上全部撤下,一本都沒留,那叫一個輕鬆啊!
我在書架上換了一些長期的基礎技術讀物,不會過時的那種,比如像下面這類書就佔據了我閱讀學習時間的80%:
-
程式設計師修煉之道 The Pragmatic Programmer
-
程式碼整潔之道 Clean Code
-
程式設計師的職業素養 The Clean Code
-
領域驅動設計和實踐 Domain-Driven Design
-
測試驅動的物件導向軟體開發 Growing Object-Oriented Software, Guided by Tests
-
持續交付 Continuous Delivery
我只買了一本關於最新技術的書,是關於 Spring 的。因為根據林迪效應,學習 Spring 是一項不錯的投資。
林迪效應認為,對於不會自然消亡的事物,如一項技術或一個想法,其預期壽命與其當前的生命成正比;即,只要這一事物多存活一天,就意味著其預期生壽命會更長一些。
技術的未來預期壽命與其當前的“年齡”成正比,技術每延長存續一段時間,其剩餘生命週期也會相應延長。
越是在市場上持續存活時間長的技術,投入時間學習越安全、越值得。
不要忙著去學習最新的技術,因為這些新技術很可能很快消亡。
時間會告訴你,哪種技術值得投入精力去學習,時間是你最好的顧問,學會等待是很重要的。
自那次與導師的談話後,十年過去了。期間我陸陸續續參與了50多個不同的軟體專案的開發。感謝導師的建議,我學到的一切東西都可以在不同公司、團隊和領域之間順利遷移。我學到的知識到今天仍然有用。我沒有浪費時間。
電影《時間規劃局》劇照
所有的專案看起來都不一樣了。但是,如果剝離表面,往深處看不難發現其中的共通之處,比如:
-
程式語言不同,但設計風格相似
-
框架不同,但有類似的設計模式
-
開發人員不同,但與人打交道的原則卻是一致的
永遠記住,框架、庫和工具的更替永不停息,而你的時間很寶貴。
一定要把你最寶貴的時間投入到可遷移的技能上。也就是說,在那些始終會用得到的技能上下最多的功夫,比如下面這些內容,可能會讓你長期受用。
-
不要學習微服務框架,學習演進式架構(Evolutionary Architecture)。
-
不要學習新的程式語言,學習程式碼整潔之道、設計模式、領域驅動設計(DDD)。
-
不要學習 LeSS 和規模化敏捷框架(SAFe),學習精益生產原則(Lean manufacturing principles)。
-
不要學習 Hystrix,學習容錯模式(Fault Tolerance Patterns)。
-
不要學習 Docker,學成持續交付。
-
不要學習 Angular、React 和 Vue,學習 Web、HTTP 和 REST。
熱門評論:
我同意你的大部分觀點,但是我覺得你不用這麼堅決地不學習一些東西。
「學習工具」與「學習它所蘊含的設計模式」並不互斥。
2007 年的時候我曾經試圖搞清楚到底什麼是「資料層」以及怎麼使用它,這是當時流行的 ORM 概念。我向別人問了一堆關於 NHibernate(譯註:一個面向.NET框架的物件關係對映解決方案。主要用來把物件模型表示的物件對映到基於SQL的關係模型資料結構中去)的問題,很多人都回復我說「你應該先搞清楚原理,而不是學習這個工具」。但我心裡想的是,shit,不行啊,因為我需要透過大量的實踐才能理解這些原理啊。這是我學習的重要途徑。
所以我覺得學習這些蘊含了豐富原理的工具其實是非常有用的。
同樣的道理對很多工具都適用。比如 React,如果沒有 React 誰能理解虛擬 DOM 呢?
不過我基本同意你的論點,但是過分強調不要學習工具就有一點何不食肉糜的意味了。
另外,Docker 也不僅僅是持續交付,「學習新的程式語言」和「學習設計模式和 DDD」也不是互斥的,Angular 最難的部分也不是 Web 和 HTTP,最難的是學習 Angular 提供的這些傻傻的工具和工作流(我不是很喜歡這些玩意)。
作者的回覆:
看來我們達成了共識——學習基礎常常意味著深挖某個框架、庫或者工具。框架和基礎都要學習,但是優先順序必須是基礎高於框架。
我的觀點:
假設你面前有兩個應聘者,一個對框架特別熟,但是對基礎知識一點都不懂;另一個對框架一點都不熟,但是基礎知識特別懂。
你會僱傭誰?
小公司僱傭前者,能用就行。大公司僱傭後者,能堪重任。
·END·
程式設計師的成長之路
路雖遠,行則必至
本文原發於 同名微信公眾號「程式設計師的成長之路」,回覆「1024」你懂得,給個讚唄。
回覆 [ 520 ] 領取程式設計師最佳學習方式
回覆 [ 256 ] 檢視 Java 程式設計師成長規劃
往期精彩回顧
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902700/viewspace-2645260/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 駁 《駁 《駁 《駁 《停止學習框架》》》》、《駁 《駁 《停止學習框架》》》、《駁 《停止學習框架》》、《停止學習框架》框架
- 程式設計師,請停止說這20句話程式設計師
- 請學習程式設計程式設計
- 請停止結對程式設計程式設計
- 停止學習框架框架
- 駁 《停止學習框架》框架
- 駁 《駁 《停止學習框架》》框架
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- 程式設計師,停止你的焦慮程式設計師
- 駁 《駁 《駁 《停止學習框架》》》框架
- 好程式設計師web學習路線初步認知react框架程式設計師WebReact框架
- PHP 程式設計師的堆學習PHP程式設計師
- 程式設計師英語學習指南程式設計師
- 小小程式設計師的學習方法程式設計師
- 程式設計師持續學習之道程式設計師
- 程式設計師的有效學習策略程式設計師
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 程式設計師,請你不要在坑程式設計師了?程式設計師
- 好程式設計師Java學習路線分享Java框架怎麼搭建程式設計師Java框架
- 嫁程式設計師?請慎重!程式設計師
- dubbo框架設計學習框架
- Ruby 程式設計師學習 Laravel 框架筆記 (8)-view 的更多知識程式設計師Laravel框架筆記View
- 黑馬程式設計師前端學習之路程式設計師前端
- 程式設計師十步學習法程式設計師
- Java程式設計師需要學習的技能Java程式設計師
- 淺論程式設計師的英文學習程式設計師
- 程式設計師的學習和積累程式設計師
- 好程式設計師Java學習路線分享SpringMVC之請求和響應程式設計師JavaSpringMVC
- 《程式設計師歌單》請查收程式設計師
- 程式設計師學習程式設計需要攻克的8個障礙程式設計師
- Go Web 程式設計--深入學習解析 HTTP 請求GoWeb程式設計HTTP
- 好程式設計師Java學習路線之Spring框架之動態代理程式設計師JavaSpring框架
- 器材攝影師與框架程式設計師框架程式設計師
- 程式設計師學習、招聘網站導航程式設計師網站
- 好程式設計師學習筆記:函式程式設計師筆記函式
- Java程式設計師需要學習哪些知識?Java程式設計師
- 寫給程式設計師的有效學習方法程式設計師
- Python程式設計師學習路線圖Python程式設計師