课程介绍

运用 TypeScript 编写出既易于扩展又方便测试的高质量代码,并在此基础上,从最基本的原则和概念出发,掌握软件设计、架构和测试的十二大核心要素。
为何你应该关注软件本质主义?
代码并非全部
开发者领域的变化。
还记得2017年吗?
那时你只需学习HTML、CSS,再在Udemy上购买一门超过25小时的React.js课程,就能在短短三个月内找到工作?
还记得那时候,只要你的GitHub上有款Vue.js天气应用,就能轻松通过面试?
那是一张通向年薪8万美元的快速通行证。
真是疯狂的时代,老兄。
然而,近几年来发生了巨大变化,
这一点并不难看出。
- Thousands of new devs are entering the market every month
- 每个月都有成千上万的新开发者涌入市场;
- 我曾合作过的最喜爱的前端开发者遭遇裁员;
- 自学成才的开发者仅凭推特(Twitter)私信就能被一流公司录用(这也是我获得最佳职位的方式);
- 前端开发者正与职业倦怠和冒充者症候群作斗争;
- 而那些擅长处理乏味事务的中级全才,却因适度的晋升而坐享舒适(这正是我所专注的领域,请继续阅读)。
这里究竟发生了什么?
我认为:我们正经历着一个变化,而这个变化我多年来一直在为自己和我的观众做准备。
我将这种变化称为价值差异。
价值差异
技能胜过工具
保持与时俱进(不仅仅局限于最新的库和工具)
抽象是关于封装底层的、超特定的工作。
优秀的程序员明白这一点。
这只是事物发展的自然规律。
过去需要整个前端开发团队完成的工作,现在只需要一个使用GitHub Copilot的全栈开发者就能搞定。
从前,一个专精Webpack的开发者可能是组织的救星,如今,几个ChatGPT的提示就能解决问题。
我一直对过分关注库、框架、工具和技术持谨慎态度——别误会我,我认为它们很重要……
但一定有原因解释了为什么我曾工作过的前端咨询公司,以及他们的客户,最终都关门大吉。
我在前端领域听过不少类似的故事。
我们知道这就是我们前进的方向。
软件本质主义
有一种更快的方法学习如何编写可扩展的代码(无论是在前端还是后端)…… 无需阅读复杂书籍、观看无休止的YouTube视频、浅尝辄止的课程,或是被迫学习新的库和框架。
软件本质主义者是一门在线课程,教导专业的JavaScript开发者如何快速编写可扩展、可测试的代码。
这是一个专为初级到中级开发者设计的项目,帮助他们成为无可替代的、极富价值的开发者。
无论你现在处于哪个阶段。
或许你正在努力寻找第一份工作。 或许你试图“实践领域驱动设计”。 或许你是一名“资深初级开发者”(即:你了解大量不同的库和工具,但仍然——你在测试、设计与架构能力的自信以及判断自己是否在正确的道路上挣扎)。
“顶级软件开发者比普通开发者在生产力上的差距不是10倍、100倍、甚至1000倍,而是10000倍。” —— Nathan Myhrvold,微软前首席技术官
软件本质主义是一种全新的思考代码的方式。
它关乎于大幅度减少我们的关注点。
它关乎真正重要的东西。
设计、测试、架构与策略。
基于亚里士多德的《形而上学》和本质主义哲学,我提炼出了12个核心要素,它们涵盖了过去40年来专家们传承下来的智慧精华的80-20法则——帕累托原则。
这12个核心要素构成了以下内容最重要的部分:
- 领域驱动设计
- 测试驱动开发
- 面向对象设计
- 函数式编程
- 设计模式
- 设计原则
- 架构风格与模式
- 架构原则
- DevOps与持续交付
- 以及更多……
在软件本质主义者课程中,我们将通过我称之为工艺之旅的阶段,掌握这12个核心要素。
你将学到什么?
你将在大约8周内学习到这些内容。
第一部分 形而上学(心智模型与12个核心要素)
想象一下,你试图击出全垒打,但却朝着相反的方向挥棒。
如果你专注于错误的事情,这就像现在的情况。让我们重新回到第一性原理的轨道上来。
在这课程的第一部分,我们将阐明软件本质主义的基础哲学。
你将获得一个简约、剥离冗余、综合提炼后的视角,看清哪些是重要的,哪些则不然。
课程的这一部分为我们采取重大行动奠定了基础,让我们专注于能够带来最大成效的领域。
在这里,你将:
- 学习心智模型在作为开发者技能水平中的关键作用
- 理解软件及其开发的目的,以及如何成为一名价值导向的开发者
- 分解四大支柱,了解为何独立掌握它们如此困难,以及我们将采取何种不同的策略
- 发现自己在开发者旅程中的当前位置,以及我们如何通过工艺之旅的五个阶段来进步
- 学习构成领域驱动设计(DDD)、测试驱动开发(TDD)、行为驱动开发(BDD)、架构模式、风格、设计模式、面向对象与函数式编程、部署流水线等核心领域80-20法则的12个核心心智模型
第二部分 工艺之旅的五个阶段
课程的主要部分是工艺之旅的五个阶段,每个阶段包含一系列的课程、实验室、演示、练习和作业,旨在帮助你从当前的位置迈向下一个阶段,直至超越。
代码优先阶段(已发布) 在代码优先阶段,我们将专注于将你培养成一名理解抽象、抽象层、MVC以及与交付价值到世界相关的堆栈各部分的全栈开发者。
最佳实践优先阶段(✨ 最新发布) 在最佳实践优先阶段,我们将从典型的“最佳实践”转向真正的最佳实践。你将建立一个基于TDD、BDD、面向对象设计的强大基础,不仅学会使用可测试架构编写有价值的测试,而且还将学会:
- 在构建之前澄清你要构建的内容
- 安全地重构现有功能
- 使用六边形架构与基础设施解耦
- 设置可扩展的项目架构
- 修复脆弱的端到端测试
- 在部署管道中嵌入有价值的测试
- 结合面向客户的端到端、单元和集成测试,用于前端和后端
- 等等
模式优先阶段 在模式优先阶段,我们将专注于理解领域、通用语言、用于组织代码的模式,以及以更高的灵活性和熟练度进行测试。你将学习如何:
- 使用领域驱动设计(DDD)技术发现领域的数据、规则和关系
- 创建一个领域模型,承载你应用程序的核心
- 将代码组织成各种前端和后端模式,使你能够与基础设施解耦并实施新的测试策略
- 使用事件驱动技术以可扩展的方式编写功能
- 在堆栈的任何一侧引入更强大的测试策略
- 等等
责任优先阶段(即将推出) 在责任优先阶段,我们将学习如何使用设计方法在最原子级别分解和设计问题解决方案。你将学会如何:
- 在最深层次平衡耦合和内聚
- 使用3步RDD流程设计任何内容,以培养核心设计信心
- 使用刻板架构选择和集成库与框架
- 等等
价值优先阶段(即将推出) 在价值优先阶段,我将教你基于系统思考的FA²STR框架,这是一个基于第一性原理技术的一致、可重复的过程,用于设计、测试和开发任何挑战。在这个阶段,你还将使用我们在各个阶段中学到的一切,构建并重构来自5个以上项目(后端、前端、桌面、Chrome扩展、自定义集成等)的功能。
无论你处于哪个阶段,课程设计都确保你能取得进展并进入下一阶段,这将使你在职业和创意方面达到新的高度。
第三部分 精通并非终点
再次强调,精通是关键,但它并非最终目标。它只是你迈向下一阶段进化、去实现和成为最真实的自己的第一步。
当您到达工艺之旅的下一阶段时,我们将提供指导,告诉你接下来该怎么做。
- 如何以开发者身份进行自我营销
- 如何吸引你想要的机会
- 如何验证和测试你可构建的产品想法