不要再学习框架了!

https://zhuanlan.zhihu.com/p/53626164前端

 

AI 前线导读:做为开发人员,咱们须要跟上技术发展的步伐。天天,咱们都在学习新的编程语言、框架和库。可是,技术和时尚同样,正在以光速变化。本文做者认为,这是一场没有赢家的比赛,由于技术的发展没有终点。所以,他建议你们中止学习框架,而是把最宝贵的时间花在可迁移的技能上。本文的英文原文在 Hacker News 上得到了接近 500 个点赞。其实每过几年都会有相似的文章出现,然而程序员却依然疲于学习新的框架,但愿本文能给你带来一些启发。程序员

 

更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)web

咱们是开发人员。咱们须要跟上技术发展的步伐。天天,咱们都在学习新的编程语言、框架和库。咱们知道的现代化工具越多越好。算法

跟踪 Angular、React、Vue、Riot、Ember、Knockout 的最新进展颇有意思。数据库

可是,咱们在浪费本身的时间。

时间是咱们拥有的最宝贵的资源。时间是有限的,不可再生的,你没法多买一点。编程

技术和时尚同样,正在以光速变化。为了遇上其发展速度,咱们就须要跑得很快。这场比赛没有赢家,由于它没有终点。设计模式

 

来自 Martin Scorsese 2013 年拍摄的《华尔街之狼》

个人导师曾给我上过这样一课。安全

导师:“Ed,你在作什么?”
我(骄傲的): “我在读一本有关使用 GWT 构建现代 Java 应用的书。”
导师: “为何?”
我: “做为一名 Java 开发人员,我须要紧跟潮流。GWT 是流行趋势。”
导师:“在 GWT 以前,你读过什么技术书籍?”
我: “一本关于 Apache Tapestry 的 500 页的著做。 Tapestry 那时是流行趋势。”
导师:“Tapestry 如今还流行吗?”
我: “不流行了。如今流行 GWT。”
导师:“你还能够重用 Tapestry 的技能来解决当前的问题吗?”
我: “不能,如今没人用它了。”
导师:“Tapestry 的知识能帮助你更好地理解 GWT 吗?”
我: “不,不能。但我看到了一些重叠的模式。”
导师:“那是设计模式。它们能帮你解决当前的问题吗?”
我: “是的。能够解决其中许多问题。”
导师:“技术变化无定,但有不少共同点。肯定好优先级。将 80% 的学习时间投入到基础知识上。剩下的 20% 用于框架、库和工具。”
我: “嗯…仅 20% 用于框架、库和工具?”
导师:“是的。反正你在工做中解决问题的时候会学习它们。”
我: “谢谢。”
导师:“你之后会感谢个人。”

这个建议改变了个人生活。我从个人书架上拿走了全部介绍框架的书。这些书从 50 本降到了 0 本。我总算松了一口气!微信

我买了一套常青树著做。这些书占据了我 80% 的学习时间。架构

  • 《程序员修炼之道》
  • 《代码整洁之道》
  • 《程序员的职业素养》
  • 《领域驱动设计》
  • 《测试驱动的面向对象软件开发》
  • 《持续交付》

我还买了一本关于当前技术的书。Lindy 效应 代表,Spring 框架必定是项不错的投资:

技术将来的预期寿命与其当前的年龄成正比。它每多活一段时间,预期寿命就会延长。

一项技术在市场上存在的时间越长,投资就越安全。

不要急于学习新技术——它有很高的死亡概率。

时间会证实哪项技术值得投资。时间是你最好的导师。学会等待。

10 年过去了。我为 50 个不一样的软件项目提供了帮助。因为这些建议,我学到的全部东西均可以跨公司、团队和领域迁移。个人知识到今天仍然有用。我没有浪费时间。

除非你能看透表象,不然全部的项目看上去都不一样:

  • 编程语言不一样,但设计相似;
  • 框架不一样,但会体现出一样的设计模式;
  • 开发人员不一样,但与人打交道的规则一致。

记住——框架、库和工具变化无定。时间宝贵。

来自 Andrew Niccol 2011 年拍摄的《时间规划局》

把最宝贵的时间花在可迁移的技能上——那些永不过期的技能。

  • 不是微服务框架,而是演化架构;
  • 不是新的编程语言,而是整洁的代码、设计模式和 DDD;
  • 不是 LeSS、SAFe,而是精益生产原则;
  • 不是 Hystrix,而是容错模式;
  • 不是 Docker,而是持续交付;
  • 不是 Angular,而是 Web、HTTP 和 REST。
    HackerNews 热门评论

在 Hacker News 上,这篇帖子引发了热烈讨论,然而,并非全部人都承认做者的观点:

网友 1: 学习框架的一个好处是,你能够理解做者的心里,另外一个好处是你能够看到做者最初的抽象模式和想法。

学习 Rails 教会了我元编程、可逆数据库迁移、ACID 以及 ORM 的优缺点。学习使用 C#构建 XAML 应用程序让我了解了双向数据绑定、MVVM、DSL 和套接字通讯。学习 React 和 Redux 让我搞懂了协做线程、函数式编程、事务状态管理和测试前端功能,而不使用 selenium 和 webdriver。

如今,我已经“知道”了大部分这些知识,但此前并无将它们应用到现实世界中。在精心设计的框架中实现这些经验,教会了我不少理论之外的关于实际应用的知识。

网友 2:框架有好有坏。

原文里提到的 GWT 我用过,体验很是糟糕。当我在 GWT 最初发布时试用过,它只适用于演示代码 / 页面。

解决任何更复杂的问题都要求我搞懂 Java、JavaScript 以及他们用来将 Java 代码转换为“生成 JS”代码的代码 / 系统 / 进程。对于我有限的大脑,这个问题的复杂性是 O(n ^ 3)。

也许这种情况已被改变,2017 年我看到他们又发布了一个新版本。

Python 做为一种语言 / 框架在我看来很是好,它很是容易学习、调试、建立复杂的系统并根据须要深刻挖掘。

网友 3: 做者说他买了这些书:

  • 《程序员修炼之道》
  • 《代码整洁之道》
  • 《程序员的职业素养》
  • 《领域驱动设计》
  • 《测试驱动的面向对象软件开发》
  • 《持续交付》

不是打击你们的热情,但这都是一些软技能书籍。

我曾经在一次 10 小时的飞行中看《程序员修炼之道》这本书,可是由于太无聊睡着了两三次。初学者也许能从中学到一些东西,但都是刚入行几个月须要学习的常识性知识。

每一个人的书架上应该都有这类书,以及其余更经典的书,好比《计算机程序设计艺术》(Art of Computer Programming)。有趣的是,我发现几乎没人看这些书,并非由于它们很无聊(软技能),也不是由于很难学(AOCP),只是由于把它们摆在书架上的仪式感。好像书架上没有几本没看过的编程书,你就很差意思称本身是个程序员。

弃框架而专转向软技能书籍彷佛并非进步。若是你想学习价值更长久的东西,仍是学习《计算机科学》更实用点。

我是说算法和数学。

这还意味着你会接触功能编程或逻辑编程等范例。我推荐 Haskell,不是由于你须要学习另外一种语言,而是由于这个生态系统中的知识上限很是高,并且它是目前关于函数式编程的论文使用的通用语言。

有些技术比其余技术更持久。例如咱们仍在使用 POSIX。CPU 体系结构不断发展,但 CPU 处理指令和访问内存的基础知识没有发生什么变化。框架和库十年河东十年河西,但并发性、并行性、异步性的基本原理不会改变。

做者回复:“软技能”这个词用得不许确。

这些书并非关于软技能的,而是软件编程:软件质量、软件设计、软件测试、部署、软件生命周期等。

《计算机科学》并不能教会你软件编程。

做为工程师,你不须要学计算机科学,而是编程技巧。

网友 4: 大部分开发者所作的项目都是由其中的利益相关方来决定成败的。

因为没有使用正确的算法致使产品失败的案例数量,和由于指望不合理或构建错误的软件致使产品失败的案例数量相比,两者之间至少存在一个数量级的差异。

沟通尤为重要,因此关于沟通和架构的书也很重要。

做者回复: 这难道不是选择误差的锅吗?管理不善的项目确定不会成功。那些算法很差的项目虽然能上,可是存在不少技术瑕疵。

阅读软技能书籍就像在工做中接受强制性的反腐训练。很明显这很无聊,然而仍是有些人须要它。

查看英文原文:

今日荐文

相关文章
相关标签/搜索