做为合格的程序员,要提高自己的编程技能,需要进行各种努力来达到目标。
一些程序员学习编程课程并获得机构认证,还有一些程序员积极做实践,比如创建自己喜欢的项目,为开源项目做贡献等等。
而经常浏览流行的开源项目,查看源代码来学习软件开发模式、工程实践和架构设计,是一个良好的习惯。
程序员不仅仅是编码——要参与设计、开发和维护软件系统的整体生命周期。
因此,我们需要掌握软件架构、DevOps、解决问题能力,当然还有编码,才可能成为一名合格并成功的程序员。
高级开发者通常从自己的编程经验中启动开源项目。这些开源项目经常收到来自开发者社区的各种贡献,因此浏览流行的开源代码存储库是一种很好的学习方式。
在本文中,我向大家展示几个当今流行的开源项目,并希望大家知道为什么要研究每个项目的源代码。坦白说,这些项目帮助我提高了编程技能。也是有了这些项目,本人还发起了几个流行的开源项目。
一起来看看。
Chromium — 构建更广泛的应用程序
我们要开发具有不同复杂度的软件系统,还要面对软件架构设计的挑战。而开发者应该使用最佳架构模式来构建高质量的软件,不要增加不必要的复杂性。
想成为优秀的程序员,掌握软件架构是必须能力。
根据Wikipedia上的数据,Chromium 在 2020 年拥有大约 3500 万行代码 (LOC)。尽管它的代码库包含所有不同平台的代码,包括 Android、iOS 和 Fuchsia 代码,但它的代码库组织良好。
例如,可以Chromium如何将特定于桌面 UI 的代码分离到一个名为Chrome Views的可重复使用的最小框架里面。如下图示:
Chrome Views 控制源码结构
Chromium 代码库仅实现浏览器应用程序功能,查看 Blink 浏览器引擎代码库(WebKit 的一个分支)可以查看 Web API 实现,查看 V8 源代码能够查看到 JavaScript 实现方式,查看 Skia 源代码可以了解网页的渲染过程。
Electron — 掌握 DevOps 技能
DevOps 原则帮助开发团队通过自动化提升整个软件开发生命周期 ( SDLC )。
几乎所有软件开发团队都在 DevOps 上投入大量精力,以便用高质量的产品来保持软件开发市场的竞争力。因此掌握 DevOps 并不仅限于 DevOps 工程师——程序员也还需要学习 DevOps 的原理。
Electron 框架的代码库教了我们各种 DevOps 原则,并且可以在自己的开发项目中使用它们。例如看看它包含的结构良好的测试套件来识别代码中的缺陷:
Electron 测试套件中的一个测试用例
它的开发团队使用一个名为SudoWoodo的 GitHub 机器人来处理发布流程。根据 Electron 开发文档,他们可以通过 Slack 调用发布机器人来触发新版本。Electron 通过其脚本目录中的大量 Python、JavaScript 和 Bash DevOps 脚本自动化了几乎所有手动的行为。
同样,我们也可以通过使用自己的首选脚本语言的自动化执行任务来节约时间。
Flutter — 选择解决问题的最佳方式
一个工程问题可能有多种解决方案。例如可以通过在前端编写大部分应用逻辑来构建特定的 Web 应用程序。
另外,要仔细研究应用程序的性能需求、开发者体验以及交付时间,用什么样的方式将应用程序逻辑以前端和后端形式拆分。
Flutter 为跨平台应用程序开发问题提供了最优化的解决方案。大多数框架都使用基于 Chromium(或基于 webview)的跨平台开发方法。由于浏览器实现的性能开销,它不适合构建大型跨平台应用程序。
而Flutter 使用了最优化的方式,它开发了自己的 GUI 工具包,并提供了一个高性能的二进制消息协议来与来自 Dart 环境的本地平台特定 API 进行通信。
浏览 Flutter Engine 源码,了解 Flutter 架构如何解决跨平台开发问题。在我们的软件开发活动中,可以使用相同的方法并选择最优之解决方案。
React 和 React Native — 软件系统中代码的可重用性和灵活性
DRY、YAGNI、KISS 和 SOC 原则激励程序员用干净代码编写易于管理和优化的软件。
DRY 原则指导我们通过避免代码重复来构建干净的代码库。如果掌握了 DRY 原则,就可以构建可以轻松修改、移植和集成到其他系统中的软件模块。
React 和 React Native 的实现展示了如何通过代码可重用性使软件系统变得灵活。
例如,Meta 最初创建 React.js 用于渲染 DOM 元素,但后来通过引入 React 渲染器概念引入了 React Native。由于 React 的架构灵活性,我们拥有各种基于社区的 React 渲染器来创建 PDF、交互式 CLI 应用以及嵌入式系统。React Native 代码库也很灵活,微软借它创建了 RN Windows 和 RN macOS 项目。
而我们可以使用这个概念来构建与平台/基础设施无关的软件系统,而软件组件或基础设施迁移再不会成为开发团队的噩梦。
Go——掌握 YAGNI 原则
C语言用于编写高性能软件的语言。但是C 没有提供大多数现代开发人员寻求的功能,例如自动内存管理、内置数据结构支持以及字符串操作等。
而Golang 项目引入了一种具有现代特性又类似 C 的快速且小巧的语言。
Go 代码库和架构教我们如何使用 YAGNI 原理,为复杂问题引入简单的解决方案。例如,Go 在以下词法标记图中,仅定义了 25 个保留关键字:
Go的token map定义
整个 Go 实现也是十分精巧的。Go 核心开发团队甚至倾向于将源代码分解为具有单字母变量的最小段落:
一个使用单字母变量的 Go 函数(在Go AST源代码中)
结论
上面这些开源库能够有效帮助我们改进软件架构、DevOps、自动化、问题解决和通用编程技能。
深入研究这些开源项目,学习他们的编程实践,并在自己的项目中进行测试是自学软件开发概念的良好手段。
当我们今天检查一个新的 GitHub 存储库时,可以触发我们以前没有想到的编程新概念。也有可能,你在浏览开源存储库时引发一个超级好的新想法,它可以为整个开源生态系统赋能,那也是极好的。
开发者们,不断检查、学习、实践和创新。而学习永无止境。