讲讲我刚入大学时参与的一次 AI 创业经历。一位校友看到了我的博客后,将我介绍给他的一个朋友(以下便称之为项目创始人)。后者对 AI 很感兴趣,想做 AI 项目、询问我是否想要帮忙。彼时的我因一些私事、正处于极度自卑的状态,急需要一件事来证明和安抚自己,同时也是为了学习如何协同开发,便一口答应了下来。殊不知,我一脚踏入的,正是一个名副其实的空中楼阁。

空中楼阁的想法

项目创始人认为,大学是没有用的、只是在盲目要求学生去追求更高的 GPA(绩点),并将 Reddit(红迪)上询问哪节课好拿分的学生称之为「GPA 奴隶」。

我不反对他的观点。我也认为当下的大学对我而言用途不大(学历还是重要的):

  • 我的 GPA 很低,但并不妨碍我去做我喜欢的事情、并在这些领域上变得擅长
  • 我很讨厌那些要求高 GPA 才能递交申请的实习:你这份实习又不需要用到这些必修课教的知识(我大三的时候才开始修专业课,因为进学院就要上一定数量的必修课)
  • 我认为维持高 GPA 需要我花费更多精力在大学课程上,但它们很无聊、只会让我感觉浪费时间

但我认为将追求高 GPA 的学生群体简单地称呼为「GPA 奴隶」,属实有点过了。

这种行为与其说是「奴隶式」的盲从,不如说是在现有教育体制下的一种理性策略。

首先,当大学的课程设置充斥着大量与专业无关、却又必须完成的必修课时,「如何以最小的时间成本,换取最高的 GPA 收益」就成了一个非常现实的议题。学生们主动去寻找「水课」,恰恰是他们认识到自己时间宝贵、不愿将其浪费在低价值课程上的体现。这是一种主动的资源管理,而非被动的思想禁锢。

其次,这种行为也是被「唯 GPA 论」的外部环境(如某些实习和研究生申请)所逼迫的一种无奈之举。当系统用单一的标准来衡量你时,学生们自然会想办法在系统规则内最大化自己的优势。这种情况下,他们又一定是「奴隶」吗?

他当时说的是:「现在的大学不会教你你工作上需要的知识,也缺少这方面的指导。」我认为他这句话说的没问题,一开始认为他是一个印象不错的人。他也是个「怪人」,他喜欢抨击手机对人们的危害、喜欢宣传自己的哲学、喜欢用折叠手机(不是折叠屏手机,而是几十年前的折叠手机)、因为过往经历的霸凌而坚持健身数年…… 这些「怪」不会让人觉得必须去远离他才行,只会觉得他是一个颇有想法的人、对他产生兴趣(至少我当时是这样的)。

正是他这套基于对大学教育的批判,使他想去做 AI 学习辅导 项目。问题在于,他选择了让 AI 去辅导数学。

这个想法从一开始就存在致命的技术缺陷。首先,让 AI 去做严谨的逻辑工作在技术上极为困难,更何况团队里压根就 没有 AI 领域的专家。他本人虽是数学专业,但机器学习项目经验都在视觉方面。其次,他所谓的项目实现,也只是在简单调取 GPT API(顺便还把 API Key 上传到云端的 .env 文件里了),完全谈不上核心技术。

结果就是,我这边的客户端网站都做好了 MVP,他的模型也无法处理一些「理应可以处理」的数学问题。

再之后,他声称「赞助商不满意该结果」,决定转型。虽然做的还是 AI 相关,但这次他想要彻底贯穿自己的哲学:人们要少用电子设备、多花时间在现实中培养出好习惯。他决定做一个「习惯培养和管理」App,然后在里面添加类似宝可梦养成的游戏元素。也就是说,他希望用户多花时间在使用这个 App 上,又希望用户可以少使用电子产品。很明显的左右脑互搏。在他提出这个想法之后,我们就否决了这个方案、把他赶到了角落里去反省。

其实你可以略微看出来,他其实是一个做事容易 想一出是一出 的人。如果你是一个员工,你绝对不想要遇到这样的上司。而我作为他的「员工」,很快便遇到了我的「苦果」。

不专业的代码管理

在我加入团队的第一天,便发现了该项目的「不对劲」。项目的维护糟糕透顶,它甚至跑不起来,理由很傻:服务端的代码被导入了一堆既不会被用到、也早就过时的依赖包。这群人只是在自己的本地环境里删去了这些导入代码,却没有任何人将这个变更 push 到云端仓库。我那时候检查客户端代码发现了一个 bug,提出后还有人问我是不是服务端导入依赖的 bug。合着你们都心知肚明啊!

不仅如此,项目创始人对着工具也有着离谱的执着。当时我们在讨论如何统一代码风格、编写两端的 README。我提出「客户端和服务端的代码都可以使用 lint 检查代码格式」,他却拒绝了,理由照样很傻:人类不能依赖工具。我事后将此事告诉了我的朋友,他回复「猜猜人类和动物的最大区别是什么」,引得我哈哈大笑。

我理解他那种希望回归「纯粹」编程的理想主义情怀,但在一个需要多人协作的现代化项目中,这种情怀不仅不切实际,而且是对团队成员时间的不尊重。作为团队中负责前端实现的核心成员,当我看到这些业余的管理方式时,我的心情也从最初的期待跌入了谷底。

尽管他的哲学是「不依赖工具」,但是他花费了大量时间在 Obsidian 上写服务端每个文件的作用和依赖链。他不仅自己在写,还要求我们前端组也写组件之间的联系,美其名曰:帮助新人加入团队后快速了解项目结构(记住这个「新人」)。可是我们的项目本来就没多大,并且这个的优先度也不高,明明还有更重要的事情要做吧! 要记住这个时候,项目的核心服务功能是 完全不合格 的。

除此之外,我在客户端的代码里添加过一个新的依赖项。他虽然拉取了最新版本的代码,但是没有运行下载所有依赖项的命令,导致客户端没有运行成功。他认为这是我们前端组写的 bug,擅自在代码里加了奇怪的字符(我事后才意识到他把 GitHub 显示冲突用的字符添加进来了,原因不明且很迷),还发了个自信满满的「fixed」。这么做怎么可能跑得动呢?这次他把错误日志直接贴到了 bug 频道里,便再也不管了(可恶的是那个 bug 频道仅他可发送消息,我每次都只能复制消息链接然后在 general 频道里回复)。

有名无实的团队

最后便要讲讲该项目极其糟糕的人员管理。这样一个 AI 项目,Discord 服务器里名义上足足有近二十个人,但实际的构成却一言难尽。具体来说:

  • 前端组(4 人):除开我,有一个只在频道里聊天、从未贡献过代码的;一个留下一堆 bug 后就因学术繁忙消失的;以及一个热衷于「闭门造车」、拒绝任何建议的
  • 其他职能组:所谓的 UI / UX 组和市场营销组,从我加入到离开,从未在公开频道里发过一次言,形同虚设
  • 项目创始人的朋友们:不参与开发,日常就是帮他找资料、写论文

这个团队为什么会变成这样?根源在于项目创始人极其随意的招聘和完全缺失的管理。讽刺的是,至于他心心念念的那些「新人」,招来的方式更是随意得令人震惊。他习惯在 LinkedIn(领英)上刷到一个看着顺眼的个人资料,便立刻发出邀请,既不审核对方的真实能力,也不考虑项目是否真的需要这个岗位。

人员臃肿的直接后果就是管理成本剧增。然而这个团队根本没有项目管理(创始人自己就是所谓的 PM),导致大部分人进团队后完全不知道该做什么,最终变成了列表里「挂机」的成员。

这种管理的恶果,在一次线下会议中暴露无遗:一个近二十人的线上团队,最终到场的,只有五六个人。

糟糕 Git 协作的另一个精彩故事

以下是我个人的观点。

我由衷地建议参与项目开发的学生们去花时间学习 Git。并不是会用 git pullgit push 就行了,而是能够理解在一个多人协作的情况下,你要如何拉取、推送代码变更的同时,又不会影响到别人。

我先前说过,我在的那个前端组有四人,有两人后续不参与实际开发,所以就只有我和另一个哥们。他对 Git 的理解简直差到离谱,经常不更新本地环境的代码便去写一大堆新代码,接着闭眼 force push 到 main 分支。

是的,该项目的团队当然是 没有 审查代码的环节。项目创始人最初就要我不用 fork 再提 PR,而是直接对着 main 分支推送就好了。

当时项目创始人要求我写一个谷歌登录,我写了足足三次,每次 push 上去后就又会被他用新写的、用不了的代码覆盖。

这一点也槽点满满。同我协作的哥们本来已经用 firebase 做好了登录注册功能,但是项目创始人觉得他「没做完」,认为用谷歌登录更快。

不知道为什么,很多刚开始写项目的人都喜欢先钻研怎么登陆注册(我也是这样)。实际上不先写登陆也没关系,因为用户本身就稀少得可怜,重点应当是实现核心技术。

结尾

说了这么多,该项目又怎么样了呢?答案是在线下会议结束的一个月后,我发现 Discord 服务器被删除了,问了其他组员才知道项目创始人 直接放弃 了该项目。

这不是他第一次「没有告知所有人便擅自决定某事」了。例如在某个频道进行了讨论后,他会在晚上或者次日直接将该频道删除,不留任何记录。这些讨论包含了争论、转型等各大重要的事件。如果你不是第一时间在现场,那你就完全不知道项目发生了什么改动,因为他是绝对不会写通告的。

题外话,项目的半年后他突然找到我,问我近期过得如何,还做出老前辈的样子劝我转行干别的。那个时候的他已经因为「大学无用论」带着另一个朋友辍学了。真是让人感到恼火

经历了这场混乱,我对创业之路有了几点清晰的思考:

  • 关于团队:人员规划必须精准。团队的每一个岗位都应该与实际需求对应。作为创始人,你必须清楚地知道你需要什么样的人才,以及需要多少人来完成任务
  • 关于创始人:自我认知至关重要。创始人不仅是想法的源头,更是项目的核心管理者。你必须对自己的能力边界有清晰的认识,你的资历能否支撑你的野心?
  • 关于想法:拒绝异想天开。任何一个好的想法,都必须经得起现实和市场的考验。一拍脑袋就往前冲,往往是悲剧的开始

一个好的想法,需要一个同样好的团队来实现。否则,它永远只能是一座空中楼阁。