完美的代码库救不了你的公司:技术追求与商业现实的博弈

为什么我们总是抱怨公司的代码库是一坨屎山?为什么管理层总是对重构提议视而不见?Catalyst Monitor 的这篇 The perfect codebase won’t save your company 直击灵魂地回答了这个问题:市场奖励的是速度和执行力,而不是完美的工程。

文章核心观点

  1. 市场不关心你的代码质量
    现实是残酷的,拥有糟糕代码库的公司依然可以赚取数十亿美元。对于大多数公司而言,它们的生死存亡并不取决于代码写得有多漂亮。

  2. 软件市场的“赢家通吃”效应
    软件行业具有独特的规模效应。因为分发成本极低,只要产品比竞争对手好一点点(或者快一点点),就能迅速占领市场。在这个“送披萨到全球任何角落”的比喻中,用户只会选择最好的那家。因此,速度至关重要。

  3. 竞争的本质是寻找生态位(Niche)
    在找到产品市场契合点(PMF)之前,所有的代码本质上都是为了验证假设。Slack 和 Discord 能共存,不是因为谁的代码更好,而是因为它们占据了不同的生态位。在市场被验证之前,重写代码的 ROI(投资回报率)极低。

  4. 工程师的价值:增加尝试次数
    既然市场是未知的,那么工程师最大的价值不是打磨一个完美的产品,而是赋予团队更多次尝试的机会,去击败竞争对手。

读后感与反思

这篇文章读起来可能会让有代码洁癖的工程师感到不适,但它揭示了商业软件开发的底层逻辑。

工匠精神 vs. 艺术家情结
文章引用了 Anthony Bourdain 的话:“好的厨师是工匠(Craftsman),不是艺术家。”
很多工程师(包括我自己)常常陷入一种“艺术家情结”,认为代码必须优雅、架构必须完美。但实际上,我们更应该是雇佣兵性质的工匠。我们的任务是用专业技能解决问题,而不是创作艺术品。

速度即质量的辩证
但这并不意味着我们要故意写烂代码。文章也澄清了一个误区:追求速度并不意味着放弃质量。
优秀的工程师通过编写可维护的代码、遵循 YAGNI(You Aren’t Gonna Need It)原则来提升速度。因为烂代码会拖慢后续的迭代,而好代码能让我们在未来改得更快。这里的关键在于平衡:为了“将来好改”而写好代码,而不是为了“现在好看”。

完美是完成的敌人
在创业初期或探索新业务时,完美的代码库往往是一种浪费。因为那段完美的代码可能连同整个产品线在三个月后被砍掉。 Casey Neistat 提到 BEME 被 Snapchat 的 Stories 功能截胡的例子非常生动:用户不在乎你是先想到的,也不在乎你的代码多牛逼,他们只在乎谁先发布了好用的产品。

总结
作为技术人员,我们需要跳出 IDE,去理解商业运作的规律。当我们不再执着于“代码的完美”,而是关注“交付的价值”和“迭代的速度”时,我们才能真正成为公司的核心资产,而不是仅仅被视为“写代码的人”。

拥抱不完美,用技术加速商业验证,这或许才是高级工程师的成熟标志。

20年软件工程经验的20条感悟:从代码到价值的跃迁

Simple Thread 的创始人 Justin Etheredge 分享了一篇名为 20 Things I’ve Learned in my 20 Years as a Software Engineer 的文章,总结了他从业20年来的深刻感悟。这篇文章在技术圈引起了广泛共鸣,因为它不仅关乎技术,更关乎心态、价值观和职业智慧。

文章精华总结

Justin 的20条建议涵盖了从个人成长、团队协作到系统设计的方方面面。以下是我认为最核心的几个观点:

  1. 承认无知与持续学习
    “我还不知道的很多。” 无论你工作了多久,技术的世界永远在膨胀。承认无知不是软弱,而是摆脱冒充者综合症(Imposter Syndrome)的第一步,它让你能更坦然地学习和教导他人。

  2. 构建正确的东西 > 正确地构建东西
    软件开发最难的不是写代码,而是搞清楚到底要造什么。不仅要当工程师,还要当半个心理学家和人类学家,去理解用户的真实需求。

  3. 最好的代码是没写的代码
    工程师的天性是写代码解决问题,但最好的解决方案往往是不写代码,或者使用不需要维护的代码。避免“非在此发明(Not Invented Here)”综合症,善用现成的轮子。

  4. 软件只是手段,不是目的
    我们的首要任务是交付价值,而不是展示技术。如果你真的相信这一点,你对工具的选择和问题的解决方式会发生根本性的转变。

  5. 关于人与团队

    • 避坑 > 找牛人:与其费尽心机寻找传说中的 10x 程序员,不如专注于避免那些会拖累团队的 0.1x 程序员。
    • 谦逊不等于无知:不要把别人的谦虚误认为是无能。
    • 面试很难:在面试中很难准确判断一个团队或一个人的真实能力。
  6. 关于系统与设计

    • 拥抱“无聊”的技术:创新往往伴随着高风险和维护成本。成熟、“枯燥”的技术通常是更稳健的选择。
    • 数据至上:数据比代码更重要,更长久。
    • 做小系统:始终致力于缩减系统的规模和复杂性。
  7. 工程师的自我修养

    • 像设计师一样思考:关注用户体验。
    • 定期写作:写作能强迫你理清思路,提升沟通能力。
    • 多问“为什么”:不要盲目执行,要探究背后的原因。

读后感与反思

这篇文章读完,最大的感受是:一名优秀的软件工程师,最终都会进化为一名“产品人”和“极简主义者”。

在职业生涯的早期,我们往往痴迷于各种新框架、新语言,热衷于构建复杂的架构,认为代码行数和复杂度代表了能力。然而,随着经验的积累,我们开始意识到,代码本身是一种负债(Liability),而不是资产(Asset)。每一行代码都需要测试、维护、升级。

Justin 提到的“无聊技术(Boring Technology)”让我想起另一篇经典文章《Choose Boring Technology》。在生产环境中,稳定性压倒一切。那些经过时间考验的、文档齐全的、社区活跃的技术,虽然听起来不酷,但能让你睡个好觉。

此外,文章对“沟通”和“写作”的强调也深得我心。代码是写给机器看的,但软件工程本质上是人与人的协作。能够清晰地通过文字表达复杂的逻辑,能够理解用户的非技术语言,这些软技能往往决定了一个工程师职业生涯的高度。

最后,“始终致力于缩减系统规模” 这一条简直是金玉良言。复杂性是软件的死敌。能够在需求膨胀的压力下,依然保持系统的精简和克制,这才是真正的高级智慧。

在这个技术日新月异的时代,这些“反直觉”的老派智慧,或许才是我们最需要的定海神针。

关于痛苦、职业生涯与硬着头皮做事的反思

最近读了 Charity Majors 的文章 On pain, careers, and doing things the hard way,深有感触。这是一篇关于个人成长、职业选择以及如何面对“痛苦”的深刻反思。

文章总结

文章分为三个部分,记录了作者心路历程的转变:

第一部分:暴力破解恐惧
七年前,作者极度恐惧公开演讲。为了克服这种心理障碍,她选择了一种近乎自虐的方式——强迫自己去演讲。虽然第一次尝试是一场灾难,但她没有退缩,而是通过大量的练习和药物辅助(propranolol),在接下来的两年里进行了几十次演讲。最终,她成功克服了恐惧,将公开演讲变成了一项普通的技能。这段经历让她坚信:“拥抱痛苦”是成长的捷径。

第二部分:对“痛苦”的重新审视
后来,当被问及职业建议时,她本能地想回答“拥抱痛苦”,但随即犹豫了。她意识到,痛苦虽然是很好的老师,但并不是全部。痛苦会让人视野狭窄、扼杀创造力,甚至让人变得麻木。她开始区分“拥抱痛苦”的适用场景:如果痛苦能带来反馈和成长,那它是值得的;但如果只是纯粹的折磨,那它是有害的。

第三部分:CEO 经历与解脱
作者在担任 Honeycomb CEO 期间,虽然尽力而为,但并不快乐。她试图用以往“死磕”的方式来解决问题,但并未奏效。长期的压力和痛苦让她身心俱疲,失去了好奇心和活力。最终,她意识到不是所有问题都能靠忍耐来解决。她选择了卸任 CEO,转任 CTO,去探索新的角色。

读后感与反思

Charity 的文章最打动我的一点是她对**急性痛苦(Acute Pain)慢性痛苦(Chronic Pain)**的区分。

在技术圈,我们往往推崇“硬核”、“死磕”的精神。遇到难题不睡觉也要解决,遇到不懂的技术硬着头皮也要学会。这种精神在很多时候确实是我们成长的动力。就像作者克服演讲恐惧一样,这种短期的、有明确目标的痛苦(急性痛苦),通过反馈循环,能让我们迅速进化。

然而,我们很容易陷入一种误区,认为所有的痛苦都是成长的必经之路。当一份工作、一个环境或者一个角色让你感到长期的压抑、无助和麻木时(慢性痛苦),继续“死磕”可能不仅无益,反而会毁了你。慢性痛苦会劫持你的奖赏回路,让你失去对生活和工作的热情,甚至造成不可逆的伤害。

正如作者所言:“拥抱痛苦在你有能力改变它、掌握它或适应它时是强大的。如果你做不到,或者不能做,拥抱痛苦会毁了你。”

这其实是另一种形式的“宁静祷文”:

请赐予我平静,去接受我无法改变的;
赐予我勇气,去改变我能改变的;
并赐予我智慧,去分辨这两者的区别。

在职业生涯中,我们需要这种智慧。当感到痛苦时,停下来问问自己:这是成长的阵痛,还是无谓的消耗?我有能力改变现状吗?如果答案是否定的,也许“放弃”并不是软弱,而是对自己负责的勇敢选择。

学会“硬着头皮做事”是一种能力,学会“放过自己”则是一种智慧。

六年日记:从混乱到有序的思考艺术

写日记到底意味着什么?是记录流水账,还是情绪的宣泄?最近读了 Herman 的文章 Observations on 6 years of journaling,他对六年日记习惯的总结,让我对“书写”这件事有了新的认识。

文章精华总结

Herman 回顾了自己六年的日记生涯,这一习惯已经从最初为了心理健康而做,转变为一种自然而然的生活方式。他总结了几个核心收获:

  1. 让隐形变得有形(Make the intangible, tangible)
    日记是将内心混乱的想法、情绪和经历进行结构化和编码的过程。它不仅是记录,更是一种理解自己的方式。

  2. 增强记忆与思维结构化
    作者发现,通过日记复盘一天,不仅能加深对经历的理解,还能显著提高记忆力。这就像上课做笔记能帮助消化知识一样,记录生活能让你真正“拥有”你的经历,而不是让日子在浑浑噩噩中流逝。

  3. 生活中的“小黄鸭调试法”(Rubber Ducking)
    程序员都知道“小黄鸭调试法”——对着一只橡皮鸭子解释代码,往往能自己发现 Bug。Herman 认为日记就是他的“橡皮鸭”。通过文字梳理问题,往往写着写着,答案就浮出水面了。这与祷告或冥想有异曲同工之妙。

  4. 预写作(Pre-writing)与表达能力
    长期的写作训练让大脑学会了“预处理”。当遇到有趣的事情时,大脑会自动开始组织语言。这种习惯直接提升了口头表达能力。正如 Neil deGrasse Tyson 所说,优秀的演讲者往往是优秀的写作者,因为他们已经将思想结构化地“写”在了脑子里。

读后感与反思

这篇文章最让我共鸣的是**“写作即思考”**的观点。

很多时候,我们以为自己想清楚了,但一旦试图写下来,才发现逻辑是断裂的。写作是一个强制思考的过程,它逼迫你把模糊的感觉具象化,把跳跃的思维逻辑化。

日记是最低成本的心理咨询
作者提到的“Rubber Ducking”非常形象。我们每天都会产生大量的念头和情绪,如果不加处理,它们就会像后台运行的僵尸进程一样占用我们的认知带宽。写下来,就是一次系统清理和碎片整理。在这个过程中,我们成为了自己的观察者和咨询师。

输出倒逼输入与表达
Herman 提到写作让演讲更流畅,这一点在技术领域尤为明显。那些能把复杂架构讲得清晰易懂的大佬,通常都有长期写作或输出文档的习惯。因为在开口之前,他们已经在脑海中建立了一个有序的索引库,而不是在一堆杂乱的书籍中翻找。

不要为了记录而记录
日记不应该成为负担。它不需要文采斐然,也不需要每天都写得长篇大论。它的核心价值在于**“结构化”**。哪怕只是每天睡前花五分钟,问自己几个问题:“今天最重要的一件事是什么?”“有什么新的感悟?”,这种微小的仪式感,长期坚持下来,也会产生复利效应。

生活值得被记录,更值得被理解。