GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

不要再学习框架了

2018 年 12 月 30 日

不要再学习框架了

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


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


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


跟踪 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: 作者说他买了这些书:


  • 程序员修炼之道(The Pragmatic Programmer)

  • 代码整洁之道(Clean Code)

  • 程序员的职业素养(The Clean Coder)

  • 领域驱动设计(Domain-Driven Design)

  • 测试驱动的面向对象软件开发(Growing Object-Oriented Software, Guided by Tests)

  • 持续交付(Continuous Delivery)


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


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


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


弃框架而专转向软技能书籍似乎并不是进步。如果你想学习价值更长久的东西,还是学习《计算机科学》更实用点。


我是说算法和数学。


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


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


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


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


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


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


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


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


沟通尤其重要,所以关于沟通和架构的书也很重要。


作者回复:这难道不是选择偏差的锅吗?管理不善的项目肯定不会成功。那些算法不好的项目虽然能上,但是存在很多技术瑕疵。


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


查看英文原文:Stop Learning Frameworks


2018 年 12 月 30 日 08:0010493
用户头像

发布了 1008 篇内容, 共 313.8 次阅读, 收获喜欢 282 次。

关注

评论 6 条评论

发布
用户头像
只有掌握多个框架精髓的人,才可以说框架不重要。正如无招胜有招的高手,必定是曾经精通过多种招数。
2019 年 01 月 07 日 11:40
回复
用户头像
这个不是 驳学指南 吗
2019 年 01 月 02 日 19:27
回复
用户头像
构建良好的底层逻辑,让知识更加体系化
2019 年 01 月 01 日 22:07
回复
用户头像
怎么没人过来驳了?
2019 年 01 月 01 日 20:16
回复
用户头像
归根结底,持续学习的能力才是一个程序员核心竞争力。
2018 年 12 月 31 日 22:15
回复
用户头像
框架层出不穷,但程序员必备的软技能却在相当一段时间内不会过时。
2018 年 12 月 30 日 13:42
回复
没有更多了
发现更多内容

学习总结

李朋

架构师 0 期第六周总结

何伟敏

架构师训练营第6周心得

方堃

第六周作业

CP

第六周总结

Acker飏

架构师课作业 - 第六周

Tulane

分布式数据库

ruettiger

week06 学习总结

Safufu

架构师训练营week6作业1

平淡人生

LeetCode题解:15. 三数之和,JavaScript双循环+双指针,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师0期第六周命题作业

何伟敏

架构师训练营第六周学习总结

Bruce Xiong

Week06作业

uangguan

如何设计一个公司级别的消息通知系统?

诸葛小猿

kafka 通知系统 mqtt

WEEK6-学习心得

蒜泥精英

week6 总结

雪涛公子

第六周总结

考尔菲德

Week06总结

uangguan

极客大学架构师训练营-本周总结

Geek_zhangjian

CAP原理简述

ruettiger

架构师训练营 No.6 周总结

连增申

CAP定理的理解

考尔菲德

WEEK6-作业-对CAP理解

蒜泥精英

第7周作业

方堃

案例研究之聊聊Mybatis源码(一)

小诚信驿站

刘晓成 聊聊架构 开源框架Mybatis ORM框架 小诚信驿站

分布式数据库设计中关键几点

dony.zhang

CAP原理

架构师训练营 - 第六课作业 -20200715- CAP与DORIS

👑👑merlan

架构是训练营 CAP

作业 - 第6周

Happy-Coming

可读代码编写炸鸡五 - 教练,我想要来到第二层

多选参数

代码组织 代码规范 可读代码编写 可读代码

架构师训练营 No.6 周作业

连增申

Lesson 6 分布式系统架构-分布式数据库、NoSql、ZooKeeper -心得笔记

edd

DNSPod与开源应用专场

DNSPod与开源应用专场

不要再学习框架了-InfoQ