文章摘要
文章指出,大多数技术问题本质上是人的问题。作者以亲身经历为例,讲述公司因团队决策不当导致代码重复、技术债务堆积的困境。技术债务项目难以获得管理层支持,因为改进后功能看似不变。这反映了技术决策常受人为因素影响,而非纯粹技术考量。
文章总结
标题:技术问题的本质往往是人的问题
我曾在一家技术债务堆积如山的公司工作——数百万行代码、没有单元测试、基于过时十多年的框架。有个项目需要将仅支持Windows的模块移植到Linux,而另一个团队没有采用跨平台编译,而是直接复制粘贴了数十万行代码,简单替换了系统相关组件。
这种做法会导致两个代码版本并存,所有功能更新和错误修复都必须在两个渐行渐远的代码库中重复进行。年轻天真的我试图解决这个问题...
技术债务项目向来难以获得管理层支持,因为即便完美完成,代码功能也基本保持不变。这个项目也不例外,表面收益不明显。我像许多工程师那样"回避办公室政治",埋头苦干完成了项目,但耗时过长导致个人影响力受损。
我意识到自己是在用技术方案解决人的问题。这家公司大多数开发者安于现状,代码僵化正反映了开发者的思维固化。正如Andrew Harmel-Law所言,代码往往体现编写者的个性。抗拒改变的人自然也不会为未来变化设计代码。
技术问题的核心常在于人: - 技术债务源于需求未明确 - 销售人员承诺不切实际的期限 - 开发者选择熟悉但过时的技术 - 管理层中途叫停项目 - 个人自尊阻碍采纳更好方案
这个项目的根本矛盾在于:承认需要重构就等于承认公司软件开发方式已失效,个人技能严重落后。当我们小组试图修复某个模块时,其他开发者仍沿用几十年前的编码方式。有位开发者直言:"我不想学习新东西"。我明白了技术债务清理永远赶不上新增速度,就像急诊室处置,必须先止血再治疗。
理想幻灭
这个项目打破了我对技术乌托邦的幻想——那个可以纯粹解决工程问题、避开"办公室政治"、让成果说话、没有截止期限(坦白说也没有客户)的理想世界。现实项目中总有非技术利益相关方,"相信我们正在处理"这样的说辞远远不够。我认识到让团队显得高效与实际高效同等重要。
技术债务清理的价值需要用商业语言量化呈现。除非领导层有工程背景,否则必须将技术工作转化为可量化的商业价值。
抬头看路
这些经验或许正是为更高级职位做的准备。我认为,高级工程师以上人员都需要掌握跨职能协作能力,无论选择技术还是管理路线。学校教授计算机科学,却不会教如何应对个性、自尊和认知盲区。
我曾与许多技术造诣远超我的优秀工程师共事。年轻时我想成为那样的"工程师的工程师",但现在我接受那不是我的天性。
这类工程师虽然技术精湛,但往往回避人际互动。遗憾的是,他们作为独立贡献者效率惊人,却可能在大规模计划中受挫——单个处理器核心的速度终究有限。同样宝贵的是那些既懂技术又能抬头看路的"全景型程序员",他们能预见项目风险(技术或其他方面)并引导团队规避。
(编辑说明:在保持原文核心观点的基础上,对技术细节进行了适度简化,突出了人际关系与管理思维的重要性,删减了部分个人感慨,使内容更聚焦于"技术问题实质是人的问题"这一主题。调整后的结构更符合中文阅读习惯,同时保留了关键案例和比喻。)
评论总结
以下是评论内容的总结,按主要观点分类:
技术过时与适用性
- 观点:技术不存在"过时",只有是否适合当前需求
- 论据:技术被淘汰通常是因为环境支持、维护缺失、功能不足或规模限制
- 引用:
"There are technologies that are no longer fit for purpose but that is almost never because of their age" (zaphar)
"Outdated may sometimes be a euphemism...it just means 'old' or 'out of fashion'" (zaphar)
技术债务的人为根源
- 观点:大多数技术问题本质是人的问题
- 论据:需求不明确、销售承诺不切实际、开发者舒适区选择、团队政治
- 引用:
"Why does technical debt exist? Because requirements weren't properly clarified..." (quadrifoliate)
"Jerry Weinberg...'it's always a people problem'" (philk10)
沟通与管理的核心作用
- 观点:沟通能力是区分资深与初级开发者的关键
- 论据:跨部门协作需要非技术语言翻译,管理者缺乏技术理解会加剧问题
- 引用:
"the language that leadership works with is usually non-technical" (willguest)
"most people problems are communication problems" (jeffheard)
组织架构与康威定律
- 观点:部门割据导致技术碎片化
- 论据:不同团队坚持自己的工具链和方法论,标准化难以实现
- 引用:
"Conway's law causing multiple different data science toolchains" (munchbunny)
"the feudal lords of each...strongly believe their way is the only way" (munchbunny)
领导层与技术决策
- 观点:技术背景的高管能更好评估技术债务风险
- 论据:非技术领导需要量化价值论证,两者都可能选择暂时忽略某些债务
- 引用:
"senior leadership had a development background then tech debt would be easier to get support" (deelayman)
"wrong choices (either way) can kill your company" (jillesvangurp)
反对意见
- 观点:技术债务存在合理原因,不能简单归咎人为失误
- 论据:需求必然变化,稳定技术有优势,销售面临现实压力
- 引用:
"Maybe the develop chose a stable...because it's battle worn" (SilverBirch)
"it's worrying that...they all boil down to 'someone fucked up'" (SilverBirch)
关键共识:技术问题的核心往往在于人的决策、沟通和组织动态,而非纯粹的技术因素。分歧点在于对人为因素的责任认定(管理失误vs合理妥协)和解决方案侧重(技术翻译者vs流程改进)。