我有 47 个未完成的副项目。以下是我不感到愧疚的原因。
Source: Dev.to
概览
上周我运行了 ls ~/projects,并实际数了一下文件夹。
47.
四十七个项目。让我给你展示一些亮点:
~/projects
├── todo-app-v1/
├── todo-app-v2/
├── todo-app-final/
├── todo-app-FINAL-final/
├── social-network-app/ # just a login screen lol
├── crypto-tracker-2023/ # mass grave of API keys
├── fitness-app/ # ironic given my lifestyle
├── weather-app-but-cool/ # it was not cool
├── tinder-for-dogs/ # don't ask
├── my-portfolio-site-v7/ # v1 through v6 also in here
├── chat-app-realtime/ # real‑time for about 10 minutes
├── ai-wrapper-startup/ # before everyone else did it
├── expense-tracker/ # $0 tracked, $0 earned
├── recipe-app/ # I can't cook
├── markdown-editor/ # abandoned in favor of VS Code
└── … 32 more
我叫 Daniil,19 岁,以开发 iOS 应用为生。我的 projects 文件夹看起来像一座数字墓地。每个文件夹最初都带着 “这就是唯一的那个” 的能量,结果两周后我又打开了一个新的 Xcode 项目。
听起来熟悉吗?
罪恶感是真实的
现在打开 Twitter。我保证只要滑动三次,你就会看到有人发“刚发布!”并附上他们完美小应用的截图。围绕“完成”已经形成了一整套文化。效率达人会告诉你,成功的秘诀就在于坚持到底:
“完成你开始的事情。”
“想法毫无价值,执行才是一切。”
“最后的 10 % 决定了赢家和输家之间的差距。”
酷吧。那我就是个 47 次的失败者了。
曾经,我的未完成项目真的让我很烦恼。我会看着那个文件夹,感到一种奇怪的羞耻和沮丧交织。我为什么就不能把事情做好? 我懒吗?我是不是个糟糕的开发者?我的注意力是不是像患有 ADHD 的金鱼一样短暂?
我会在 Reddit 上看到别人炫耀他们打磨好的应用,然后想,“那个人比我强,因为他们已经发布了。” 与此同时,我有四个待办事项应用,却没有一个真正跟踪我的待办。
互联网的效率文化把不完成项目当成了一种道德失败。如果你放弃一个副项目,就等于承认自己不够格。
那是胡说八道。我会告诉你原因。
Source: …
但每个失败的项目都教会了我一些东西
我项目文件夹里那 47 个“尸体”每一个都给了我收获。不是作品集里的案例,也不是任何用户,而是 我在工作中每天使用的实际技能。
教会我 SwiftUI 的待办事项应用
全部四个。
- 第一个是带复选框的列表;我花了两天才弄清楚为什么
@State没有更新视图。 - 第二个尝试加入 Core Data,结果崩溃。
- 第三次尝试时,我真正理解了 SwiftUI 中的数据流。
- 第四个我放弃了,因为我意识到根本不需要自定义的待办事项应用。
结果:我离开时已经对 SwiftUI 了如指掌。我没有完成应用;我完成了对框架的学习。
教会我 WebSocket 的聊天应用
我本打算打造“下一个 Discord”。(停顿,笑声)我做到的程度是两位用户能够实时发送消息——没有语音、没有频道、没有文件共享。我花了一周时间学习:
- WebSocket 连接是如何工作的
- 在不稳定的 Wi‑Fi 环境下重连的行为
- 当服务器宕机时,排队的消息会怎样
六个月后,一个客户需要在他们的 iOS 应用中加入实时功能。我已经知道怎么做了,也因此获得报酬。谢谢你,已死的聊天应用。
教会我支付 API 的电商站点
本来想做一个定制手机壳的店铺。我从未设计过任何壳子,但我花了三天集成 Stripe,弄清 webhook,处理诸如支付失败和退款等边缘情况。项目在没有任何商品上架的情况下夭折,却在之后让我能够在真实项目中直接加入应用内购买,而不必从零开始。
教会我发布包的 CLI 工具
我写了一个命令行工具,用来格式化 Swift 代码。它还能用,算是勉强。虽然不如 SwiftFormat 好,但我学到了:
- 如何组织一个 Swift 包
- 如何写一份体面的 README
- 如何发布到注册表并处理版本管理
该工具零下载量;但这些知识此后已经被我用了几十次。
教会我状态机的游戏
我尝试做一个 2D 平台游戏。实现了可以跑动和跳跃的角色。当我需要处理“跑动 + 跳跃 + 攻击 + 受伤”时,我意识到必须使用状态机。于是我花了一周时间学习它们。游戏从未发布,但现在我在几乎所有复杂 UI 中都使用状态机。
教会我 API 限流的 AI 包装器
2023 年的巅峰想法:“我只要把 GPT‑4 包装成一个好看的 UI,就能成为百万富翁。” 富翁的部分没有实现。我在一个下午就把 40 美元的 API 额度烧光,因为我不懂限流、令牌预算或缓存。代价高昂的教训,但此后我再也没有犯同样的错误。
这些项目都没有上线。它们全部让我成为了更好的开发者。
为什么“完成所有事”是错误的建议
“总是完成你开始的事情”的建议实际上对开发者有害——尤其是在职业早期。
如果我强迫自己在继续之前完成第一个 todo 应用,我会花数周时间打磨一个没人会使用的东西,学不到任何新东西,只是不断地在 UI 调整和边缘案例上磨蹭,而 App Store 已经有一万种类似的版本。
相反,我在停止学习时就转向了别的项目。这才是关键。
有一种叫做 sunk‑cost fallacy(沉没成本谬误)的现象。你可能听说过:“我已经在这上面投入了 40 小时,不能现在放弃。”是的,你可以。那 40 小时不管你继续还是停止都已经消失。重要的是你保留下来的知识以及通过转向获得的新技能。
结论: 未完成的项目不是失败;它们是垫脚石。拥抱学习,放下内疚,继续构建吧。
知道何时放弃副项目
如果接下来的 40 小时不能让你学到新东西或产出有价值的东西,你只是在浪费时间,以免感觉自己是个放弃者。
知道何时放弃一个项目是一项 非常重要的技能。在我的日常工作中,我看到团队在本该在第 2 周就被砍掉的功能上花费了数月时间。他们之所以继续,是因为“我们已经投入了这么多”。这不是坚持——而是披着职业道德外衣的固执。
放弃副项目是一种 优先级排序。你选择把有限的时间和精力投入到回报更高的事物上。这正是高级开发者整天在做的事:他们决定 不 去构建什么。
每次终止一个项目,你都会更擅长辨别何时某件事不值得投入。这个技能的回报远远超过一个完成的待办应用。
何时放弃 vs. 何时坚持
我并不是说一旦遇到困难就立刻放弃——那是另一种极端,同样糟糕。有些项目值得你坚持;关键在于辨别哪些项目值得。
当我的动力开始消退时,我会自问四个问题。如果对大多数问题的回答是 “no”,那可能是该继续前进的时候了。
-
我仍在学到新东西吗?
如果每天在项目中都能学到昨天不知道的东西,就继续下去。当你只是在做重复的工作(连接相同的界面、编写相同的 CRUD 操作、复制已经熟悉的模式),价值已经被提取完毕。项目已经完成了它的使命。 -
真的会有人(包括我)使用它吗?
要残酷地诚实。不是“理论上有人可能会用”,而是“我会把它装到自己的手机上并打开不止一次吗?”我的四个 todo‑app 在这项测试中彻底失败。世界并不需要另一个 todo‑app。如果你正在构建的东西已经有 500 种替代方案,而你的并没有实质性的区别,这就是一个信号。 -
这件事有趣,还是已经变成了一项家务活?
副项目本应是开发者的乐趣部分——没有产品经理在背后盯着的自由构建。如果你的副项目感觉像第二份工作,就出了问题。要么项目本身已经不再有趣,要么你出于义务感强迫自己继续。两者都不是继续下去的好理由。 -
我是在因为它难而想放弃,还是因为它毫无意义?
这需要诚实的自我反省。“难” 不是 放弃的理由。我从未因为项目太难而放弃过任何项目。我放弃了 47 个项目,因为它们对我已经没有用了。这里有巨大的区别:“我搞不定网络通信”(坚持下去,你需要它) vs. “我已经搞定网络通信,但这个聊天应用仍然只有两个人在聊天”(继续前进,你已经得到想要的东西)。
如果你的得分是 0 或 1(满分 4),就离开吧。不要有负罪感。你已经从那个项目毕业。
我的唯一完成项目(以及它为何成功)
在 47 次尝试中,只有一个项目真正冲到了终点线:一个财务追踪应用。它并不光鲜,也不是“革命性”的,但它之所以存活下来是有充分理由的。
- 真实问题: 我在理财方面很糟糕。我需要一个工具来查看我的钱花到哪里去了。这不是“如果人们想要……”的想法;而是“我真的明天就需要这个”的必需品。
- 直接用户: 我从第一天起就是自己的用户。每天早上我打开它;每个烦恼当晚就被修复。反馈循环是即时的——不必猜测用户可能想要什么。
- 严格截止日期: “在下个月开始之前让它能工作,这样我就能跟踪整整一个月的开支。” 三周。没有足够的时间去过度设计、添加社交动态、AI 助手或任何闪亮的分心功能。
- 荒唐地小的范围: 三个界面——添加支出、查看支出、查看月度汇总。最初没有分类(后面添加),最初没有图表(后面添加),没有导出功能(至今仍没有)。是最小且有用的东西。
这项目与其他 46 个项目的区别不在于天赋或自律,而在于 情境。我有真实的问题和真实的截止日期。其他 46 个项目都是“如果……”的设想。而这个项目是“我现在就需要它”的项目。
你的 ~/projects 文件夹不是墓地
我过去把我的项目文件夹当成墓地——一堆被抛弃的梦想和破碎的承诺。现在我更像把它看作训练场。
里面的每个项目都是一次锻炼。有的是冲刺(AI 包装器只用了三天)。有的是长跑(那个游戏用了两个月我才停手)。所有这些都锻造了我至今仍在使用的肌肉。
如果你正盯着一堆半成品应用感到内疚,停下来。打开那个文件夹,别把它们当作失败,而是列出每个项目教会了你什么。你会感到惊讶。
- 那个“失败”的天气应用?它教会了你 API 集成。
- 那个“被抛弃”的博客引擎?它教会了你身份验证。
你并没有让这些项目失败;你学习了它们,在课程结束后继续前进。
真正让我害怕的开发者不是拥有 47 个未完成项目的人,而是拥有 零 个未完成项目的人——因为这说明他们不敢实验,缺乏足够的好奇心去启动可能无法完成的事。
所以,是的,我有 47 个未完成的副项目。说实话?我可能这个周末就会开始第 48 个:一个番茄钟。我最多给它两周时间。