几周前,我参加了在慕尼黑举办的单日会议 Zigtoberfest。我有幸在会议开幕时作了简短的开场白。我借此机会向听众提出了一些关于如何看待 Zig(作为一个项目和一个社区)的建议,这些建议分为三个层次,分别面向 Zig 的初学者、中级用户和高级用户。我不会在这篇博客文章中重复所有内容,但我想强调我演讲的核心观点:Zig 之旅。
巧合的是,这篇文章或许也有助于回答一些人的疑问:鉴于 {Go, Rust, Modula-2, Mojo, LLMs, …} 的存在,Zig 的意义究竟何在。
1. 目标是计算机,而不是框架
我对新手的核心建议是:学会将问题视为目标系统所提供的一系列操作,而不是将提供更高层级(但有限且可能造成浪费)API 的依赖项组合在一起。无论你身处哪个生态系统(包括Web开发),这都是一项极具价值的训练技能。
“系统编程是一种对软件开发进行建模的方法。它关心的不是你正在做什么类别的项目,而是一种看待问题的方式。优秀的系统编程人员对所涉及的系统有着全面的理解。”
—— Andrew Kelley @ Systems Distributed ’23
这并不是说你不应该使用依赖项或框架,但如果你只会这一招,那就是个问题了。
许多简单的应用程序通过将各种依赖项拼凑在一起就能很好地解决,但如果你想尝试创造一些具有创新性的东西,你就会希望完全掌控程序的核心功能,以便为用户提供真正新颖且经过深思熟虑的设计体验。
2. 深入设计代码行为
如果说上一条建议是审查应用程序的功能需求,那么我对 Zig 中级用户的建议则是:接管并设计好其他所有方面。
如果你的应用程序有一些重要的 C/C++ 依赖项,那么要求用户自己去安装它们,与你在 Zig 构建脚本中直接提供它们,会有巨大的差异。
在前一种情况下,你的应用程序实际上对包管理器(apt、brew、winget 等)产生了依赖,每当包维护者修改了他们打包依赖项的方式(例如版本或功能开关),你的应用程序就会崩溃。
这也是某些生态系统中过度使用容器的原因,而 Zig 仅通过运行 zig build,就能实现“从所有系统为所有系统构建应用程序”这一行业最高标准。
为了实现这一点,我创建了 All Your Codebase (GH, CB),这是一个收集并共同维护 C/C++ 项目构建脚本的组织。
这只是深入设计代码行为的一个例子。其他例子还包括提高效率、消除不必要的堆分配以及进行适当的模糊测试(fuzzing)。
3. 将完美的软件化为现实
对 Zig 高级用户的建议很简单:找到一个你热衷的项目,并将其带到终点。
在此语境下,“完美”意味着你已经充分探索了你决定通过应用程序解决的问题范围,你对提供给用户的核心功能拥有完全的掌控权,并且不再有重大非功能性改进需要你去完成。
根据项目的规模,达到这一阶段可能需要数年的工作,但归根结底,这正是赋予你在这段旅程中所付出的所有努力以意义的方式。
结论
我刚刚描述的内容并非 Zig 所独有。
你完全可以(也应该!)在其他生态系统中遵循同样的道路,但 Zig 既是一个工具链,也是一个社区,它刻意致力于帮助你在这段旅程中取得进展。虽然工具链和生态系统都尚未完全成熟,但根据你的个人感悟和成为早期采用者的意愿,Zig 可能已经是让你成为更具影响力的软件工程师的最佳途径。
在《你好,系统》(“Hello Systems”)一文中,我曾探讨过,与 Zig 这样的底层语言相比,用 Python 编写一个功能完备的静态网站生成器要困难得多。这是因为一旦超越了最表层的功用(将 Markdown 转换为 HTML),Python 所涉及的所有抽象层就会让微调并发性以及许多其他事情变得难如登天。
认为高级编程语言永远是创建软件最简单方式的想法是错误的,这会导致对依赖项的过度依赖,最终使你与机器能够实际做到事情的现实脱节。
学会深入理解系统不仅会让你更擅长使用依赖项,还会让你更擅长引导大语言模型(LLMs)。初看之下这可能有些违反直觉,但这是一个显而易见的真理:如果你根本不知道什么是可能的,又如何去评估从依赖项或 AI 代理那里获得的东西的质量呢?
在 Zigtoberfest 的演讲结束时,我请台下觉得自己正在 Zig 之旅中取得良好进展的听众举手,几乎全场(约 100 人)都自信地举起了手。
这对我和团队来说是一个美妙的时刻,因为它表明我们的共同努力(Andrew、核心团队、活动组织者等)正在真正将 Zig 软件基金会(Zig Software Foundation)的使命化为现实。
如果你想结识其他渴望深入理解软件工程的人,请参加你附近的 Zig 日活动或任何其他 Zig 活动(下个月就有“Software You Can Love Vancouver”大会!)。
最后,请考虑支持我们的非营利基金会。在当今时代,推行自我提升的理念变得越来越困难,而 Zig 软件基金会依靠大众的支持来保持独立性,在不偷工减料的前提下将 Zig 推向终点,并培育一个充满活力的全球社区。
https://kristoff.it/blog/the-zig-journey/
加入我们
Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:
- 供稿,分享自己使用 Zig 的心得
- 改进 ZigCC 组织下的开源项目
- 加入微信群、QQ 群、QQ 频道、Telegram 群组、Google Groups 与更多 Zig 爱好者交流
几周前,我参加了在慕尼黑举办的单日会议 Zigtoberfest。我有幸在会议开幕时作了简短的开场白。我借此机会向听众提出了一些关于如何看待 Zig(作为一个项目和一个社区)的建议,这些建议分为三个层次,分别面向 Zig 的初学者、中级用户和高级用户。我不会在这篇博客文章中重复所有内容,但我想强调我演讲的核心观点:Zig 之旅。
巧合的是,这篇文章或许也有助于回答一些人的疑问:鉴于 {Go, Rust, Modula-2, Mojo, LLMs, …} 的存在,Zig 的意义究竟何在。
1. 目标是计算机,而不是框架
我对新手的核心建议是:学会将问题视为目标系统所提供的一系列操作,而不是将提供更高层级(但有限且可能造成浪费)API 的依赖项组合在一起。无论你身处哪个生态系统(包括Web开发),这都是一项极具价值的训练技能。
这并不是说你不应该使用依赖项或框架,但如果你只会这一招,那就是个问题了。
许多简单的应用程序通过将各种依赖项拼凑在一起就能很好地解决,但如果你想尝试创造一些具有创新性的东西,你就会希望完全掌控程序的核心功能,以便为用户提供真正新颖且经过深思熟虑的设计体验。
2. 深入设计代码行为
如果说上一条建议是审查应用程序的功能需求,那么我对 Zig 中级用户的建议则是:接管并设计好其他所有方面。
如果你的应用程序有一些重要的 C/C++ 依赖项,那么要求用户自己去安装它们,与你在 Zig 构建脚本中直接提供它们,会有巨大的差异。
在前一种情况下,你的应用程序实际上对包管理器(apt、brew、winget 等)产生了依赖,每当包维护者修改了他们打包依赖项的方式(例如版本或功能开关),你的应用程序就会崩溃。
这也是某些生态系统中过度使用容器的原因,而 Zig 仅通过运行
zig build,就能实现“从所有系统为所有系统构建应用程序”这一行业最高标准。为了实现这一点,我创建了 All Your Codebase (GH, CB),这是一个收集并共同维护 C/C++ 项目构建脚本的组织。
这只是深入设计代码行为的一个例子。其他例子还包括提高效率、消除不必要的堆分配以及进行适当的模糊测试(fuzzing)。
3. 将完美的软件化为现实
对 Zig 高级用户的建议很简单:找到一个你热衷的项目,并将其带到终点。
在此语境下,“完美”意味着你已经充分探索了你决定通过应用程序解决的问题范围,你对提供给用户的核心功能拥有完全的掌控权,并且不再有重大非功能性改进需要你去完成。
根据项目的规模,达到这一阶段可能需要数年的工作,但归根结底,这正是赋予你在这段旅程中所付出的所有努力以意义的方式。
结论
我刚刚描述的内容并非 Zig 所独有。
你完全可以(也应该!)在其他生态系统中遵循同样的道路,但 Zig 既是一个工具链,也是一个社区,它刻意致力于帮助你在这段旅程中取得进展。虽然工具链和生态系统都尚未完全成熟,但根据你的个人感悟和成为早期采用者的意愿,Zig 可能已经是让你成为更具影响力的软件工程师的最佳途径。
在《你好,系统》(“Hello Systems”)一文中,我曾探讨过,与 Zig 这样的底层语言相比,用 Python 编写一个功能完备的静态网站生成器要困难得多。这是因为一旦超越了最表层的功用(将 Markdown 转换为 HTML),Python 所涉及的所有抽象层就会让微调并发性以及许多其他事情变得难如登天。
认为高级编程语言永远是创建软件最简单方式的想法是错误的,这会导致对依赖项的过度依赖,最终使你与机器能够实际做到事情的现实脱节。
学会深入理解系统不仅会让你更擅长使用依赖项,还会让你更擅长引导大语言模型(LLMs)。初看之下这可能有些违反直觉,但这是一个显而易见的真理:如果你根本不知道什么是可能的,又如何去评估从依赖项或 AI 代理那里获得的东西的质量呢?
在 Zigtoberfest 的演讲结束时,我请台下觉得自己正在 Zig 之旅中取得良好进展的听众举手,几乎全场(约 100 人)都自信地举起了手。
这对我和团队来说是一个美妙的时刻,因为它表明我们的共同努力(Andrew、核心团队、活动组织者等)正在真正将 Zig 软件基金会(Zig Software Foundation)的使命化为现实。
如果你想结识其他渴望深入理解软件工程的人,请参加你附近的 Zig 日活动或任何其他 Zig 活动(下个月就有“Software You Can Love Vancouver”大会!)。
最后,请考虑支持我们的非营利基金会。在当今时代,推行自我提升的理念变得越来越困难,而 Zig 软件基金会依靠大众的支持来保持独立性,在不偷工减料的前提下将 Zig 推向终点,并培育一个充满活力的全球社区。
加入我们
Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来: