这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。
这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些思考,我希望能启发你做自己的项目
这一切都始于几年前。我时不时地需要一些似乎总是涉及重新创建相同的旧 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
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3