这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。
这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些想法,我希望能够激励您做自己的项目
这一切都始于几年前。我时不时地需要一些似乎总是涉及到由我或其他人重新创建相同的旧 Bash 脚本的东西。
总体要求很简单,因为它们通常都很高。
我们开发人员主要做的事情实际上只是将信息从 A 点转移到 B 点,对吧?
这里的目标是在 CLI 应用程序中将一堆 Git 存储库镜像到另一个 Git 提供程序、磁盘、存档格式。
我私下和工作中都需要这个。我见过人们很挣扎,投入大量时间手动完成这些事情,这让我很困扰。
然而,它似乎始终是一个简单的 Bash 脚本。很快就完成了,但一旦需要添加任何额外的东西 - 特殊情况、错误处理、模块化、打包等 - Bash 脚本无法支持更大的工具,正如我们大多数人所同意的。
所以我决定为其创建一个完整的 CLI 应用程序。
首先要做的就是不要重新发明轮子。
有一些开源工具可以解决这个问题。至少有一个用 Go 编写的脚本,一些 Bash 脚本,如果算上 Gitea 中的导入函数的话。
我尝试了它们,但找不到任何能完全按照我想要的方式工作的。由于我对这个项目有其他想法,所以我决定不深入研究
开始对现有项目应用补丁。
也存在一些商业工具,但我觉得这个小工具也应该以开源形式存在。
结论:这个 CLI 工具在这个世界上有一席之地。
我们在冲刺结束时和其他场合都有黑客时间。一种方法是在这些情况下随着时间的推移对其进行破解,将其制作成有用的东西。
我很快决定完全用我的私人业余时间来做这件事,原因如下:
结论:我应该在闲暇时为了好玩而做。
这些年来我的大部分时间都花在了 Java/Kotlin 世界中,也参与了一些 JS/TS、Python/Ruby 项目,并且像每个高级开发人员一样,有时也会涉足其他领域。
但很长一段时间以来,我一直想真正学习 Go 和/或 Rust。所以这将是一个获得学习新语言动力的机会
我选择 Go 的原因是开源 DevOps 世界中相当多的 CLI 应用程序都是用 Go 编写的,而且我希望能够不时向第三方项目提交补丁。此外,用 Go 编写意味着一个二进制文件具有多个目标架构。
我可以用 Java 来完成此操作,例如使用 Pico CLI 和 GraalVM,自从之前的尝试以来,我对其中的印象很好,但我决定我真的想学习 Go。
结论:我应该用 Go 来做并从中学习。
有了这个,我还想更深入地研究交付包装精美的开源项目的主题,遵循大多数安全实践 - 记分卡、SLSA、
并使用 GoRelease 等工具来创建各种类型的构建。
结论:抓住机会学习和深入研究您选择的主题。
由于我计划进行很多实验,而且我对 Go 完全陌生,所以我知道我会做很多非结构化工作。
在这里设置范围很重要 - 什么时候对于 alpha 版本来说足够好?
我很早就决定了它应该具有什么功能,尽管坐下来进一步完善和扩展它是很诱人的,但这很好。
我可以坐这个很久。
结论:当你同样感到尴尬和自豪时,将项目发布为 alpha。
学习一门新语言只是学习该语言本身的一小部分,但更多的是学习它的生态系统及其习语。
使用了哪些库,如何使用它们,这样做或那样做的惯用方法是什么?
在这个项目中我必须花费大量的时间来学习和研究,也许50%的时间我都会
我只用我熟悉的语言和生态系统进行编码。
结论:在学习新的核心堆栈并进行实验时,将您的时间估计乘以三。语言语法将是小事。
基本实现在一天内完成 - 它没有构建、错误处理、文档、边缘情况、可维护性等。
这就是大多数周五黑客行为的结局,而且大多数都不会再进一步。
但正如所有高级开发人员所知,让某些东西发挥作用距离发布产品还有很长的路要走。
很快就完成了,嗯?不是真的。
有时真的很难找到时间来完成这个项目,尤其是因为我在春天工作得筋疲力尽。
您并不是每天晚上都想花 2 小时阅读一本有关特定内容的书,或者学习一项新技术。
或者花时间编写文档。我有孩子和房子,我不能让私人项目比其他爱好消耗更多的精力。
但总要付出一些代价 - 我最终观看的系列剧减少了,并且在此期间几乎不存在任何游戏。
话虽如此,虽然我希望我能在这个项目上花更多的时间,但它几乎总是能激励我——我有几个晚上睡得很少,编码或学习,
因为我很兴奋能走得更远。另外,当某件事有趣时,它就是有趣的,无论是举重、写书、开发等等。
长期以来我已经习惯了团队合作。对于一个单独的项目,你必须管理更多的帽子,并且在每个部分都非常出色,但通常不是技术性的。
我花了很多时间来研究良好的 CLI 设计和惯用的选择。另一个领域是发布过程和为不同平台构建二进制文件。
遵循 SLSA 和其他开源标准也需要时间。我们想要良好的测试覆盖率,对吧?
在团队中工作,希望其他人能做你想要的标志,需要编写的文档。
独自工作,只有你一个人,否则就不会发生。
编写代码甚至还不到交付项目的 50%。剩下的就是了。
冒充者综合症在我们以知识为基础的开发者世界中很常见。每个人都有不同的技能,在任何特定的时间,总会有人比你懂得更多。
在一个团队中,你有人可以讨论事情。
一个人,没那么多。
但是,这一切都在于接受人们有时会在代码中做一些愚蠢的事情。
而且,开源并不意味着完美。这是关于学习、解决和发布可能对其他人有用的东西。
好吧,我能说什么——该做的就做完了。
有几个深夜的调试、重构,但也有无数心流和多巴胺的时刻。
对我来说,当我觉得项目中的整体架构不会发生根本性的变化时,发布时间就到了——我已经确定了接口,并且觉得它是可扩展的。
代码库没问题。
大多数基本功能都已具备,虽然一切都有待改进,但它仍然是一个基础。
尽早设定范围:决定在哪里停止。尽早设置项目结构、文档、版本、管道和社区指南。未来的你会感谢过去的你。
不要有压力,享受学习过程:完成了就完成了。
坚持不懈:开源是一场马拉松,而不是短跑。不要烧坏。这是一种爱好,而不是你的生活。不过一定要坚持。每天做一件小事。
学习,学习,学习:将一切视为学习和改进的机会,而不是问题。
编码是最简单的部分:主要代码会花费你最少的时间;其他一切,例如文档、测试等,都是花费时间的地方。
做额外的事情:它们和编码一样有趣。是的,即使是文档也可以节省您解释和重新解释的时间。如果让你感到无聊,那就让它变得有趣。文档即代码、vim-pong 等
休息一下:倦怠是真实的。当你需要的时候退后一步。就像其他创造性学习过程一样,分批进行。
使用系统:尽早在实践和现实世界中使用你自己的狗粮。更好的是,找到一个人/社区来提供反馈。
享受旅程:创造真是太棒了。
完成它:这个世界上有无数个半成品的项目。完成它。
使用人工智能作为帮助:我通过委派一些额外的工作来节省时间,例如要求代码改进、代码审查、文档结构、总结等。但是,不要永远盲目地相信它。回顾并批评答案。
好了,黑客快乐,现在去想想你下一步想要做什么!!
项目:Git Provider Sync
以上是从周五黑客到发布:对创建和发布开源项目的思考的详细内容。更多信息请关注PHP中文网其他相关文章!