技术界的 Unboxable:30 年的错误形状
Source: Dev.to
这是对2026 WeCoded Challenge:Echoes of Experience 的提交
每次招聘人员或人才中介联系我时,谈话总是以同样的方式结束。
“你的简历真的很有趣……但说实话,我们不知道该把你归入哪个类别。”
起初我把它当作礼貌的尴尬,随后又当作一种背后的赞美。如今,我把它视为迄今为止别人给我的最诚实的诊断。
三十年里,我在凌晨三点进行编码、建模、调试,只因为业务问题在前期没有被理解。三十年里,我构建了能够正常运行的系统——而业界却把我当成没有说明书的宜家家具。
如果问题不是我呢?
Act 1 — TO7 与意外的启示
第一次接触: 在八十年代中期的初中教室里,一台 Thomson TO7。一个稍显疯狂的数学老师在磁带上用 BASIC 教我们让字符跳舞。对一个十三岁的孩子来说,那就是带有 GOTO 的纳尼亚。
三年后,我走上了纯人文的道路——拉丁语、希腊语、德语、哲学、无尽的论文。键盘不见踪影。可是,当我最终进入计算机科学学院时,病毒仍然潜伏在那里,处于休眠状态。
那所学校是完全不同的世界:COBOL、CICS、JCL;大型机、庞大组织、形式化方法。MERISE 用于数据建模,Warnier 用于程序结构。严谨、层级、文档。
第一次实习: 在一台基于 Intel 8088、配有两块 5¼″ 软盘驱动器和 GW‑BASIC 的机器上,为一所初中数字化图书馆。配置相当简陋——远不及我们所学的系统。
很快就变得显而易见:
程序从来不是根本问题。
真正的问题在于结构不良的数据。借阅、归还、作者、复本——如果关系一开始没有正确定义,系统就会崩溃。因此,我先建模,再写任何代码。
这种方法并不依赖于机器。
二十岁时,我在不自觉中已经选定了自己的方向:系统思考者先于编码者。
第2幕 — 拼凑的岁月
随后是一段欢乐而不可思议的拼凑。
- 建筑事务所 – 使用 dBASE III+ 进行工程量清单,配合一台没有说明书的 HP 打印机。花了两周时间像解中国拼图一样破解背面的跳线,因为必须先了解机器,才能对它提出任何要求。
- 地区邮政管理局(Chronopost 仍在试点阶段时) – 小型应用程序,用于跟踪货运和投诉。
- 工业清洁公司 – 使用 OS/2 和 Lotus Symphony,实现发票和排班的自动化。
每一次都是同样的仪式:深入实际业务,建模流程,结构化数据,然后编码。先理解,后构建。
没有固定职位。没有明确的职称。没有线性职业路径。这种工作方式能够维系下去——但在行业分类体系中没有名称。
第三幕 — 巴黎、人才中介与文化冲突
在 2006 年,我尝试了“常规”路线:巴黎、开放式办公室、人才中介、Pierre & Vacances、Photoways、现场合同。我想从内部看看它是什么样子。结果我看到了。
完整的 Agile 推行: Redmine 任务、每日站会、回顾会、速度点。每周三到四小时的仪式,最终只剩十分钟的实际系统思考。
我交付了。但在内部我在呐喊:
“你花更多时间填写燃尽图,而不是弄清楚为什么客户失去了 15 % 的线索。”
整个冲刺都在把用户故事切得精确到毫米——却从未问过:这个数据模型能在五年后仍然成立吗? 我们只顾速度,速度,再以后再补丁。
问题不在于 Agile 本身,而是它变成了:一种集体安慰仪式,消耗了我本该用于实际工作的全部精力和专注。
一个例外
Logic‑immo (2008‑2009) – 通过人才中介雇佣。我走进面试时是为一个 Zend Framework 的岗位,二十分钟后离开,却被雇佣去做完全不同的事情:Oracle‑to‑MySQL 迁移、PHP CLI 模式,一个不可协商的要求——数据完整性优先,执行速度其次。没有流行框架。没有流行词汇。只有一条路线图。
有人看到了我实际在做的事,而不是纸面上的描述。半现场、半远程,数据为核心,脚本严密。这类工作让我能够发挥最佳水平。
这很少见。足够稀有,值得在意。
我坚持到 2011 年,然后收拾行李离开。2012 年,我的女儿出生。这不是退缩——而是一个结论。
第四幕 — 按我自己的方式构建
离开并不意味着停止。
- 区域分类信息站点 – 使用 Zend Framework、Smarty,动态生成和管理超过一百个业务站点,拥有自定义路由。十个月,独自完成。
- B2B 匹配平台 – 处理时间段约束和人工/自动仲裁;算法优化、流畅的界面、性能远超之前的系统。
- 其他项目 – 由我自行挑选,没人要求我使用特定技术——只为交付具体成果。
随后是 dev.to、用英文写作,以及那些没有人委托的项目。
- RFC 2324 – 为咖啡壶设计的 HTTP 协议,1998 年的工程师玩笑。我用 Python 的原始
asyncio服务器认真实现它,因为这正好是讨论协议到底如何体现技术文化的借口。 - 我自己的讽刺 RFC – HTBMCP/1.0,“啤酒杯控制协议”,端口 1414,编号 1516 以致敬《纯酿法》。
- AJC Bridge – 一个 WordPress 插件,可通过 GitHub 将内容同步到静态站点生成器。它在我需要的形态下并不存在,而这正是我要解决的合适问题。
- 以图形式呈现的简历 – 将我的简历分析为关系图谱,而非时间线,因为线性的简历无法表现像我这样的职业轨迹。
这些项目都没有职位描述。它们也不算传统意义上的“全职”,但每一个都是拼图的一块,最终让我 把自己装进自己设计的盒子。
ack React Node AWS. 然而它们都从同一点出发:真实的问题,而不是要填满的简历。
最后一个例子。我把 AJC Bridge 提交到官方的 WordPress.org 插件库。等待数周后,审查员给插件分配了一个通用的 slug,覆盖了插件的名称——没有解释,也不理会我的异议,只是引用了一个假设的商标问题,而该词根本不属于任何人。我撤回了提交。插件现在直接通过 GitHub Releases 分发。
相同的机制。不同的舞台。
Source: …
第五幕 — 同样的工作,三十年后
我不再全职写代码。我现在做课堂助理。
我不想假装这是一份梦想中的工作。做课堂助理意味着我选择了就业不足——或者说,是因为拒绝。拒绝继续与一个永远不知道如何对待我的系统抗争。拒绝牺牲我的地区、我的女儿、我的工作方式,以迎合一个从未为我量身定做的模子。
这是一种妥协。清晰、刻意,有时也会让人筋疲力尽。
但它是我的。
我对这些孩子的做法仍然奇怪地像我过去对系统的做法:不带假设地观察,了解事物实际是如何运作的,而不是文档声称的那样,适应,拼凑出对特定个人有效的解决方案——而不是为某人想要把他们塞进的盒子服务。
我的方法在这里同样具有颠覆性。
WeCoded 挑战旨在庆祝科技领域的边缘声音。我不是性别少数群体。但我与足够多的此类同事共事,已经认识到其中的机制:问题不在于你不适合盒子——而是盒子本身是为排除你而建的。无论声明的理由是性别、背景、资历,还是仅仅一种让人感到不适的思维方式——结果都是一样的。
边缘化并不总是可见的。有时它只是——不可分类。
如果你曾被告知——“简历很棒,但不太符合我们的盒子”——请仔细聆听:你并没有出问题。他们的分类网格实在太狭窄。
行业热衷于超专业化的组件。它几乎容不下那些能看到整体系统并敢于说出:*“如果我们继续这样下去,两年后系统就会崩溃”*的人。
你并不是不可分类的。你只是对匹配算法而言不可读。
而且,不,你不需要等他们学会阅读。
当一切在技术债务和破碎承诺的重压下崩塌时——那些不可分类的人正是他们要找的人。不是为了感谢他们,而是为了修复问题。随后他们又会把这些人忘在一旁,直到下一个危机来临。
所以现在就打造你的空间。不要等到得到许可后再行动。
他们不会要求你的盒子。他们只会问:“你能修好这个吗?”
是的,我能。
而你也能,可能。