[博客翻译]放弃你的副业项目也许是件好事


原文地址:https://robbowen.digital/wrote-about/abandoned-side-projects/


网络行业充斥着副业项目发展成成功企业的传奇故事。像许多人一样,我常在日常工作结束后,埋头琢磨一两个新点子。尽管副业项目充满诱惑,但并非总是一帆风顺——有时它们注定失败无疾而终。若你阅读此文,或许你近期放弃了(或正在考虑放弃)一个副业项目。我们中的许多人都有过这样的经历。事实上,被搁置的副业项目已成为开发者圈中的一种梗。

然而,我经常收到初学开发者寻求建议的邮件,我注意到一个日益增长的主题是他们担心自己无法像预期那样迅速或频繁地完成副业项目。这种焦虑是可以理解的。在当前开发者奋斗文化的主导思想是“始终在发布”,而技术面试官常以候选人课余编码的产出来衡量他们时,那些被放弃的副业项目可能不再那么可笑。这让我感到不安。我们听闻了所有关于副业项目成功的故事,但如果我们更公开地谈论那些失败的项目呢?我们在工作中经常进行回顾,但个人项目却很少受到同样的对待。为什么不让我们关注那些投入了大量时间却未取得任何成果的项目呢?那些当时看似不错的主意,最终却成为遗弃软件;那些仍然萦绕在我们开发环境中的node_modules文件夹的坟场。

我想谈谈我之前做过的一个副业项目;一个在部署的当天我就放弃了的项目。

3.png

我的伴侣是拉脱维亚人,几年前,我开始学习她的语言。由于来自一个小国家,详尽的拉脱维亚语学习资源相当匮乏,但不管怎样我还是取得了不错的进展。直到我发现拉脱维亚语有语法格。如果你之前从未接触过“格”,这里有一个简单的介绍:

像英语这样的语言,使用词序和介词如“for”、“to”或“in”来为句中的每个词添加意义。如果词序错误,或者你漏掉了一个介词,句子可能就失去了意义。例如,“He gives the book to her”(他把书给了她)听起来很自然,而“He the book to her gives”(他书给她给)则不通。格的使用稍有不同。它不依赖于词序和辅助词,而是通过改变每个词本身的结尾来显示它在句子中的作用。回到相同的例句,在拉脱维亚语中是“Viņš dod grāmatu viņai”(加粗部分用以突出功能性的词尾)。字面翻译回英语,这句话就像是“He-subject gives book-object her-towards”。

从语言学的角度来看,格是一个相当酷的系统,因为你不再需要关心词序。然而作为一个学习者,这是个问题,因为你确实需要关心你学到的每个词的所有不同词尾。拉脱维亚语总共有七个格,两个语法性别(每个性别有三种不同的变位模式),名词可以是单数和复数。简而言之,就是要记住大约84种可能的词尾。

所以,对于英语为母语的人来说,格可能是一个大问题。不过幸运的是,我也是一个开发者,因此我天生就认为我可以用代码解决一切问题。如果我能建立一个测验应用来帮助我学习名词词尾会怎样呢?这听起来像是一个副业项目🚀

我希望我的应用保持简单。虽然我还有许多其他语法需要学习,但我只关注名词变位,这将帮助我将最初的概念缩减到一个最小可行产品(MVP)。测验机制将呈现一系列拉脱维亚语名词,用户需要将名词变位到适当的词尾。为了保持趣味性,测验将允许用户犯三次错误后结束,并且我会加入一个简单的最高分系统来记录我在过去的测验中的表现。

技术栈也很简单。在规划时,Svelte 3.0是新的亮点,所以我决定用它来构建我的用户界面。我知道我想把所有东西都托管在Netlify上,所以对于后端,我会编写几个无服务器函数来呈现问题和检查答案。主要的名词列表可以从一个静态的JSON文件中提供,由于我会是唯一的用户,我可以安全地将之前的测验结果和最高分持久化到本地存储中。我现在不需要数据库。

至于我将如何实际检查答案,这需要一些研究。在广泛阅读了关于变位模式和如何分类各种类型的名词后,我决定我最简单的选择是建立一个系统,这个系统严重依赖于正则表达式来剥离名词词干并附加适当的后缀。

有了一个不错的计划,我开始编码。

经过一个星期的夜晚工作,我完成了MVP的最后润色。我将一切部署到Netlify上,并开始了初步测试。

用户界面简单但可接受,并且在移动设备上运行良好。测验问题顺利进行,设计中的会话在三个错误答案后结束。在测验之间,仪表板正确显示了每个单词命中和错过的统计数据,整体最高分在会话之间持久化。高兴地看到一切按计划工作,我开了一瓶啤酒,开始训练词尾。

很快就明显地看出我的应用有一个我没有预料到的大问题。测验太容易了。更糟的是,如果我没有犯三个错误,测验就会无限地继续下去。它使用起来并不有趣。

我绞尽脑汁想办法让测验更有趣,但最终,我意识到:问题实际上无法在代码中解决。事实证明,在设计和编码测试各种名词词尾所需的所有逻辑时,我已经被动地学会了形成它们的规则。

在过去的一周里,我每天晚上都在研究和构建一个应用程序——目标受众只有一个人——而我不再需要使用它了。哎呀。

或许真正的宝藏是我们一路编写的代码。permalink

在我所有放弃的副业项目中,这是一个让我换了一个思考方式的项目。即使我永远不会实际使用最终的“交付成果”,参与项目的工作仍然间接实现了我最初的目标。这让我意识到一个重要的观点:我们常常将放弃的副业项目视为“失败”,但它们的成功实际上是一个视角问题。

尽管一些技术招聘人员可能让你相信,副业项目的成功不需要以一个完美、发布的产品来定义。我们工作在一个实用的媒介中,任何构建经验,无论是好的、坏的还是被放弃的,都是有价值的经验。如果你能够摆脱发布的压力,而是像对待一次性原型那样对待它们,副业项目就成了一个实验的绝佳创意板。正如我在构建我的拉脱维亚应用时发现的,即使是编写代码本身,也可以是解决问题的成功工具。

这并不是说我们应该忽视这些项目被放弃的原因——自省仍然很重要——但我发现,长期来看,专注于取得的进展会感觉更有建设性。在放弃我的拉脱维亚项目后,我重新回到了我笔记本电脑上搁置的其他副业项目。在之前,我对一连串的失败和浪费的时间感到抱怨,现在我可以重新聚焦于那些进行得不错的地方。在一个项目中,我可以看到我第一次学习如何在Go中制作API的地方。在其他地方,我对自己弄清楚如何在Postgres中处理GIS地图数据感到印象深刻。在另一个废弃的目录中,我看到的不过是一个破碎的动画——一个我后来会重新审视并演变成这个网站的动画。

我仍然经常从事副业项目,但我的视角和动机现在不同了。我对初学开发者在副业项目上挣扎的建议是,始终确保你是为自己做这些项目,并且出于正确的原因。不是将你的第一个项目纯粹作为一种成功或给招聘人员留下印象的手段,而是首先将其视为学习和探索可能性的手段。一旦你积累了足够的经验(即放弃了几个项目),其他的通常就会随之而来。副业项目应该是创造性和有趣的。如果你发现发布你的项目开始给你带来压力,或者更糟的是,让你感到精疲力尽,那么不要犹豫,放手吧。很可能,如果你仔细观察,它已经为你带来了很多价值。