原标题:请中止学习结构
咱们都是程序员,咱们应该与技术坚持同步。每一天咱们都要学习编程言语、结构与库。
咱们了解的现代开发东西越多越好,比方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 供给的这些傻傻的东西和工作流(我不是很喜欢这些玩意)。
作者的回复:
看来咱们达成了一致——学习根底常常意味着深挖某个结构、库或许东西。结构和根底都要学习,可是优先级有必要是根底高于结构。
我的观念:
假定你面前有两个应聘者,一个对结构特别熟,可是对根底常识一点都不明白;另一个对结构一点都不熟,可是根底常识特别懂。
你会雇佣谁?
小公司雇佣前者,能用就行。大公司雇佣后者,能堪重担。
责任编辑: