这是一篇译文,原文在 Hacker News 上得到接近 500 个点赞。css
每过几年都有相似的文章出现,然而程序员却依然疲于学习新的框架,看完此文但愿对你有所启示。html
那么,译文开始。前端
咱们是程序员,天天都在了解最新的技术,天天都在学习编程语言、框架和库。
由于咱们知道的现代编程工具越多越好,对吧?vue
不停地追随 Angular、React、Vue、Riot、Ember、Knockout 的脚步还真是一件有意思的事情呢。(译注:反话)react
但这实际上是在浪费时间!程序员
时间是人类最宝贵的资源。时间是有限的、不可再生的,你能够用钱买任何东西,却买不了时间。面试
技术,就像时尚,在以光速在变化着。为了遇上它,咱们须要跑的很是快。
可是这个跑道上没有终点,因此没有赢家。编程
华尔街之狼设计模式
个人导师曾经这样教我:数据结构
导师:艾德,你在作什么?
我(自豪地说):我在读一本关于如何使用 GWT 构建现代 Java 应用的书呢。
导师:你读它作什么?
我:做为一名 Java 开发者,我须要跟上潮流。GWT 就是如今的潮流。
导师:你在读这本书以前还读过什么书?
我:我读了一本关于 Apache Tapestry 的书,那本书有 500 页。Apache Tapestry 是以前的潮流。
导师:Apache Tapestry 如今仍是潮流吗?
我:不是了,GWT 才是。
导师:你以前从 Tapestry 学到的技能如今还能用吗?
我:不能用了呀。
导师:Tapestry 能帮助你更好地理解 GWT 吗?
我:不能。不过二者都用到了一些设计模式。
导师:那就是设计模式了,设计模式能帮你解决你遇到的问题吗?
我:能够,并且帮助很大。
导师:新事物来了又走,其实有不少共同点。你应该学你该学的。你应该把你 80% 的学习时间用在学习基础上,剩下 20% 的时间才是用来学习框架、库和工具的。
我:哦……只留 20% 的时间学习框架、库和工具?
导师:是的。你在工做中解决问题时天然就会学会框架、库和工具。
我:谢谢指导。
导师:你以后还会谢个人。
导师的建议改变了个人生活。我把书架上关于框架的书所有都扔了,五十本书一本不剩,扔得我很开心。
我买了一些不会过期的书,并用 80% 的学习时间来读这些书:
我只买了一本关于最新技术的书,是关于 Spring 的。由于根据林迪效应,学习 Spring 是一项不错的投资。
林迪效应认为,对于不会天然消亡的事物,如一项技术或一个想法,其预期寿命与其当前的生命成正比;即,只要这一事物多存活一天,就意味着其预期生寿命会更长一些。
一项技术在市场上存活得越久,就越值得咱们投资(学习)它。
不要急着学习新技术,由于这些技术极可能会死。
时间会告诉你答案,你要学会等待。
十年来,我参与开发过 50 个不一样的软件项目。得益于我导师的建议,我学的全部东西都适用于不一样的公司、团队和领域。个人知识今天仍然有用。我没有浪费个人时间。
若是你看得更深刻些,你会发现全部的软件项目都是相似的:
记住,框架、库和工具来了又走。时间才是珍贵的。
© In Time (2011) by Andrew Niccol
将你的黄金时间用于学习通用技能,那些不会过期的技能。
热门评论:
我赞成你的大部分观点,可是我以为你不用这么坚定地不学习一些东西。
「学习工具」与「学习它所蕴含的设计模式」并不互斥。
2007 年的时候我曾经试图搞清楚到底什么是「数据层」以及怎么使用它,这是当时流行的 ORM 概念。我向别人问了一堆关于 NHibernate(译注:一个面向.NET框架的对象关系映射解决方案。主要用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去)的问题,不少人都回复我说「你应该先搞清楚原理,而不是学习这个工具」。但我内心想的是,shit,不行啊,由于我须要经过大量的实践才能理解这些原理啊。这是我学习的重要途径。
因此我以为学习这些蕴含了丰富原理的工具实际上是很是有用的。
一样的道理对不少工具都适用。好比 React,若是没有 React 谁能理解虚拟 DOM 呢?
不过我基本赞成你的论点,可是过度强调不要学习工具就有一点何不食肉糜的意味了。
另外,Docker 也不只仅是持续交付,「学习新的编程语言」和「学习设计模式和 DDD」也不是互斥的,Angular 最难的部分也不是 Web 和 HTTP,最难的是学习 Angular 提供的这些傻傻的工具和工做流(我不是很喜欢这些玩意)。
做者的回复:
看来咱们达成了共识——学习基础经常意味着深挖某个框架、库或者工具。框架和基础都要学习,可是优先级必须是基础高于框架。
个人观点:
假设你面前有两个应聘者,一个对框架特别熟,可是对基础知识一点都不懂;另外一个对框架一点都不熟,可是基础知识特别懂。你会雇佣谁?
小公司雇佣前者,能用就行。大公司雇佣后者,能堪重任。
------------------------------------------------------------------------------------------------------------------
知乎网友热评:
当初刚从Android转前端的时候,一点基础也不会,什么html什么css,彻底不懂,上手就是angular1.0,学的很痛苦,很难受,后续半年前后接触了vue和react,emmm没错,我就是框架仔。后来跳槽,个人上司告诉我,不要用框架,所有使用原生,这才让我真正感受踏入了前端的领域。给个人实际经验就是,你从框架中学习基础,效率很是之低,当你脱离了双向绑定,脱离了全家桶,你会发现,离开框架你什么也不会。
因此就像题主说的同样,框架只是工具,咱们只须要拿来用,可是真正须要学习的,是底层的原理,以及脱离框架后相似功能的实现方法。
我以为可能从框架(或相似东西)的代码中学习基础也颇有效(我很难静下心来读理论书,由于我在不使用这些基础知识的时候根本不知道他们有什么用,很枯燥)。而经过读前人的代码先了解了大多数基础知识(这每每很不全面),这时再看基础的书,就能找到共鸣了。
匿名
"把你 80% 的学习时间用在学习基础上,剩下 20% 的时间才是用来学习框架、库和工具的。" 这句是重点。换句话说能够理解为20%的时间来写业务代码,80%的时间来思考其深层的原理。
我司连续走了三名前端 都是只会用vue的 react上手上不上去 最后走的俩个前端 总会问我一些抛开框架的基础问题 而实际他们使用框架很是糟糕 我想说 我也就看了半个月react 相关的一些文档去面试 俩天看了公司使用的脚手架及其相关工具 一共八个文档 。用的时候,根本不须要太熟练,不会就看文档,基础好,学得就是快,有些人确实会用,可是真的会用吗?基础差的,一旦某些脚手架出现一些涉及看封装源码的,就懵逼了。最后jrg牛逼。
学习框架,并非达到能用就好了,我以为吧,框架的存在就是对主流技术的一个封装,仍是有不少思想值得去学习。
就拿前端三大主流框架来讲,每一个框架都表明着一种开发思想,都有本身的一套技术方案,他们基本上囊括你所能想到和用到的技术,难道就很差奇他们怎么实现的吗。
要学就深刻去学。