前段时间我连续看到了几个很火的人格测试项目。

一个是大家已经很熟悉的 MBTI 风格网站,比如 16personalities,整体做得特别完整,看起来很像某种严肃的人格测评产品。另一个是像 SBTI 这种更抽象、更互联网、更适合在社交媒体上传来传去的测试。除此之外,我还看到了一个程序员版的脑洞来源,比如 B 站上有人在玩“程序员 MBTI”的梗,也看了像 cbti-test 这种把测试做成纯前端小产品的项目。

看着看着,我脑子里就冒出来一个很朴素的念头:

要不我也做一个程序员人格测试?

而且不是那种随便拼几个梗、做个几分钟就看腻了的页面,而是想认真一点做:让它外表看起来像一个很严肃的心理测评网站,但题目和结果全都在影射程序员日常那些很具体、很离谱、但又确实存在的工作习惯和精神状态。

我真正感兴趣的,是那种“外表认真,内容不正经”的反差

如果只是做一个“程序员版 MBTI”,其实很容易做成那种你看完哈哈一笑、截图发给朋友、然后第二天就忘了的东西。

我不太想只停在那个层面。

我更感兴趣的是另一种感觉:

  • 页面看起来要像真的
  • 交互看起来要像真的
  • 结果页也要像真的
  • 但你认真做完以后,会发现它测的全是程序员特有的精神状态

比如:

  • 你写代码到底更依赖 AI,还是更依赖自己手敲?
  • 你是不是那种看到一个小需求也想先讲一轮架构的人?
  • 你排查 Bug 到底是翻日志看源码,还是先打一排 console.log 再说?
  • 你做程序员到底是因为热爱技术,还是说白了就是为了 TC、为了别被 PIP、为了准点下班?

这些问题一旦认真想一想,其实都很有“人格测试”的味道。

真正花时间的部分,不是写代码,而是把方向讲清楚

这个项目一开始其实非常模糊。

最早只是一个感觉:
我想做一个程序员人格测试,而且最好不是泛泛的那种程序员,而是更贴近北美华人程序员、湾区程序员、Tech 公司打工人那种语境。

但只要真开始做,你就会很快发现,里面有一堆问题不是一句“做个测试”能糊过去的。

比如:

  • 到底是先做中文,还是一开始就做中英双语?
  • 到底要不要继续借传统 MBTI 的 E/I、S/N、T/F、J/P?
  • 结果页应该更像正式报告,还是更像方便传播的海报?
  • 前端要不要上 Router?
  • 部署到底挂主站子路径,还是干脆单独开子域名?
  • 英文版要不要强行直译中文,还是让它自己说人话?

这种问题表面看起来都不大,但它们会直接决定你最后做出来的是一个“能跑的小玩具”,还是一个至少看起来像完整产品的东西。

这次我一个很深的感受就是:

真正花时间的不是实现,而是很多方向性的取舍,需要一轮一轮来回掰清楚。

有些地方甚至不是在讨论代码,而是在讨论一句文案该不该更狠一点、结果标题该不该更像网梗、题目到底要更像心理测评还是更像互联网问卷。

这些事听上去很虚,但最后都会非常具体地影响整个产品的味道。

最后我定下来的,是一套叫 SHIP 的四维框架

后来我没有继续沿用传统 MBTI 的四个维度,而是重新造了一套更贴近程序员日常的四维框架,名字叫 SHIP

一方面这个缩写本身挺顺,另一方面也很符合程序员语境:你开了半天会、写了半天代码、画了半天 Design Doc,最后不还是为了把东西 ship 出去。

这四个维度分别是:

1. Source:你代码的来源到底是什么?

  • C = Copilot
  • T = Typecraft

也就是你更像哪一种人:

  • 一看到脏活累活就先让 Gemini、Claude、Copilot 给你吐个骨架
  • 还是哪怕 AI 已经写出来了,你也想自己手敲一遍才放心

2. Hierarchy:你对架构这件事到底有多上头?

  • O = Overdesign
  • A = ASAP

有些程序员看到一个普通 CRUD 需求,脑子里第一反应是:

  • Decoupling
  • Scalability
  • HA
  • Backward compatibility
  • Platform 级通用服务

另一些人想到的则只有一句:

今晚能不能先 Push to Prod。

3. Investigation:你排查问题的方式,到底偏理性还是偏玄学?

  • L = Logic
  • P = Pray

有的人一出问题先翻日志、看 trace、顺着源码往里挖。
还有的人第一反应是:

  • 先加几个 print
  • 先重启试试
  • 先写个兜底脚本
  • 只要服务先恢复了,根因以后再说

4. Purpose:你做程序员这件事,到底是在追求什么?

  • G = Geek
  • W = Worker

有些人真的会在周末自愿折腾 side project、看新技术、研究新框架。
另一些人则更容易被这些事情驱动:

  • perf review
  • promo
  • PIP
  • H1B / PERM
  • layoff 焦虑
  • 准点下班

我后来越来越觉得,这几个维度虽然听上去像在整活,但落到具体题目里,其实都很“像真的”。

算法我故意做得很简单,因为我不想装神弄鬼

这次在计算逻辑上,我其实有一个很明确的偏好:

不要为了显得“科学”而故意做复杂。

有些人格测试会用各种看起来很高深的向量匹配、距离计算,乍一看很厉害,但放到这个项目里我反而觉得没必要。

因为这套产品本身就只有 4 个维度、每个维度 2 极,所以最自然的方式其实就是:

  • 每道题只打一个维度
  • 7 点量表映射成 +3-3
  • 每个维度各自累计分数
  • 分数正负决定最终字母
  • 四个字母拼起来就是结果码,比如 CAPW

这个算法的好处也很直接:

  • 足够透明
  • 足够容易解释
  • 很适合结果页上的百分比条
  • 后面做中英双语时,逻辑层完全不用变

我后来把 README 也专门补得很详细,就是因为我觉得这种项目最怕的是:表面上看起来只是个整活测试,实际上里面如果堆太多没必要的“神秘逻辑”,后面连自己都不想维护。

技术架构最后也被我收得很克制

虽然这个网站看起来像个完整产品,但最后我的技术路线其实非常克制。

我没有把它塞进主博客 repo 里,而是单独开了一个独立仓库,再单独挂到了子域名上:

  • 代码仓库独立
  • 前端用 Vite + React
  • 纯静态部署
  • GitHub Pages 免费托管
  • 子域名是 mbti.neilmin.com

然后我刻意没有做几件很容易“看起来更高级”,但其实对这个项目没必要的事:

  • 不上 React Router
  • 不上完整 i18n 框架
  • 不做后端
  • 不做数据库

为什么不上 Router?

因为这个产品本质上就是一个单页问卷:

  • 首页
  • 答题页
  • 结果页

如果为了“看起来更像 SPA”去上完整路由,GitHub Pages 上反而会带来一堆没必要的深链接和 404 问题。

所以最后页面切换全靠 React state,真正保留在 URL 里的只有一个东西:

  • ?result=CODE

这样别人如果分享一个结果链接,你还是可以直接打开结果页;但整个项目的部署复杂度会低很多。

为什么不上 i18n 框架?

后来我又给这个网站补了英语版。

但我也没有上完整的 i18n 系统。原因很简单:这个项目的文案非常重,而且英文版我根本不想做成中文直译。

所以最后的做法是:

  • 一个轻量 locale 状态
  • 一套共用的评分逻辑和结果 code
  • 两套独立的内容数据:
    • 中文题库
    • 英文题库
    • 中文人格文案
    • 英文人格文案

这样英文版就可以写得像自然英文,而不是带着中文句式的翻译腔。

最后最上头的部分,反而是人物图和分享海报

如果只是把题目和结果页做出来,这个项目其实已经能跑了。

但这种测试一旦想传播出去,真正会被保存和转发的,往往不是网页本身,而是一张图。

于是后面我又开始折腾两件特别容易上头的事。

1. 给 16 个人格做人物立绘

我参考的是那种偏 16personalities 的低多边形、干净、几何切面风格,但内容还是我们自己这套程序员人格。

最开始我还在想,是不是要一张一张单独画。后来发现这样很容易风格漂,而且太慢。最后就走了一条很符合这个时代的路:

  • 先让 AI 一次性生成一整张角色表
  • 再用脚本自动切图
  • 最后把它们接进首页、结果页和分享海报

这种做法特别像现代软件工程版的“批处理”:创意交给模型,机械劳动交给脚本。

2. 单独做一张竖屏分享海报

结果页本身是给“读”的,海报则是给“发”的。

所以最后我没有让用户直接截结果页,而是专门做了一张手机优先的竖屏海报。里面会带上:

  • 人格 code
  • 标题
  • quote
  • 4 个维度摘要
  • 长描述
  • 生活与社交侧写
  • 二维码
  • 网址

而且二维码并不会带着分享者的结果跳转,而是直接回到测试首页。因为这张图真正的任务,不是让别人复现你的结果,而是让别人也去做一遍。

我觉得这个区别还挺重要的:

分享结果是内容,二维码入口是拉新。

最后

回头看,这个项目对我来说,更像是一件“我当时觉得挺有意思,所以就真的把它做出来了”的事情。

一开始其实没有想那么多宏大的东西,也不是奔着做什么特别完整的产品实验去的。就是我刚好连续看到了几个类似的人格测试项目,觉得这种“外表很认真,里面全是圈内梗”的反差特别有趣。再加上程序员这个群体本来就有很多非常具体、非常好笑、但又确实存在的工作习惯和精神状态,于是我就忍不住想:那不如自己也做一个。

最后做出来的这个版本,我自己觉得已经挺好玩了:

  • 能认真地测
  • 能比较顺地看结果
  • 也能生成一张适合分享的图

但它肯定也还远远没到“已经完全定型”的地步。后面不管是题目文案、人格设定、英文版细节,还是视觉和交互,我觉得都还有继续优化的空间。

如果你也好奇自己到底更像哪一种程序员,可以去玩一下:

https://mbti.neilmin.com

如果你测完觉得“这也太像我了”,那说明这次整活至少整对了一半。