网络行业充斥着副业项目发展成成功企业的传奇故事。像许多人一样,我常在日常工作结束后,埋头琢磨一两个新点子。尽管副业项目充满诱惑,但并非总是一帆风顺——有时它们注定失败无疾而终。若你阅读此文,或许你近期放弃了(或正在考虑放弃)一个副业项目。我们中的许多人都有过这样的经历。事实上,被搁置的副业项目已成为开发者圈中的一种梗。
然而,我经常收到初学开发者寻求建议的邮件,我注意到一个日益增长的主题是他们担心自己无法像预期那样迅速或频繁地完成副业项目。这种焦虑是可以理解的。在当前开发者奋斗文化的主导思想是“始终在发布”,而技术面试官常以候选人课余编码的产出来衡量他们时,那些被放弃的副业项目可能不再那么可笑。这让我感到不安。我们听闻了所有关于副业项目成功的故事,但如果我们更公开地谈论那些失败的项目呢?我们在工作中经常进行回顾,但个人项目却很少受到同样的对待。为什么不让我们关注那些投入了大量时间却未取得任何成果的项目呢?那些当时看似不错的主意,最终却成为遗弃软件;那些仍然萦绕在我们开发环境中的node_modules
文件夹的坟场。
我想谈谈我之前做过的一个副业项目;一个在部署的当天我就放弃了的项目。
我的伴侣是拉脱维亚人,几年前,我开始学习她的语言。由于来自一个小国家,详尽的拉脱维亚语学习资源相当匮乏,但不管怎样我还是取得了不错的进展。直到我发现拉脱维亚语有语法格。如果你之前从未接触过“格”,这里有一个简单的介绍:
像英语这样的语言,使用词序和介词如“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上,并开始了初