专栏首页java思维导图请停止学习框架

请停止学习框架

我们都是程序员,我们需要与技术保持同步。每一天我们都要学习编程语言、框架与库。

我们了解的现代开发工具越多越好,比如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 提供的这些傻傻的工具和工作流(我不是很喜欢这些玩意)。

作者的回复:

看来我们达成了共识——学习基础常常意味着深挖某个框架、库或者工具。框架和基础都要学习,但是优先级必须是基础高于框架。

我的观点:

假设你面前有两个应聘者,一个对框架特别熟,但是对基础知识一点都不懂;另一个对框架一点都不熟,但是基础知识特别懂。

你会雇佣谁?

小公司雇佣前者,能用就行。大公司雇佣后者,能堪重任。

本文分享自微信公众号 - java思维导图(java-mindmap)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何阅读Spring源码

    因为不断有朋友,或留言,或私信,问我Spring源码阅读问题。我本有心回答,但奈何这是一个非三言两语能说清出的事。所以就决定写一篇小文,来分享下我的浅薄经验。

    Java编程指南
  • SpringBoot | 是如何实现自动配置的?

    相信接触过 SpringBoot 的朋友都知道 SpringBoot 有各种 starter 依赖,想要什么直接勾选加进来就可以了。想要自定义的时候就直接在配置...

    一个优秀的废人
  • Mybatis 使用的 9 种设计模式,真是太有用了~

    虽然我们都知道有26个设计模式,多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的...

    一个优秀的废人
  • 创建节约内存的 JavaBean

    每个普通Java对象在堆(heap)中都有一个头信息(object header),头信息是必不可少的,记录着对象的状态。

    一个优秀的废人
  • SpringBoot 深度调优,让你的项目飞起来!

    关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。

    程序员小明
  • SpringMVC 工作原理

    DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。

    一个优秀的废人
  • 如何快速掌握 Github 的开源项目?

    Github 是全球最大的代码托管网站,也是最大的程序员交友网站。我注册 Github 的账号特别早,一直对这个“英文网站”不感冒!直到2018年我才发现 Gi...

    心莱科技雪雁
  • SpringBoot 填坑 | Shiro 与 Redis 多级缓存问题

    来自不愿意透露姓名的小师弟的第三篇投稿。这篇主要讲了,项目中配置了多缓存遇到的坑,以及解决办法。

    一个优秀的废人
  • 为什么要重写 hashcode 和 equals 方法?

    来源:cnblogs.com/JavaArchitect/p/10474448.html

    一个优秀的废人
  • Java 并发编程 71 道面试题及答案

    任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thre...

    一个优秀的废人

扫码关注云+社区

领取腾讯云代金券