从业10年程序员揭秘:软件开发的颠覆认知与不变真理


我改变主意的事情:

我现在相信的事情,过去的我可能会争论不休:

  • 简单不是天生的。需要不断努力
  • 管理或理解复杂性并不值得骄傲
  • 对于经验水平各异的团队来说,类型化语言至关重要
  • Java 是一门伟大的语言,因为它很无聊
  • REPL 不是有用的设计工具(尽管它们是有用的探索工具)
  • 大多数编程应该在编写一行代码之前完成
  • 前端开发是一个噩梦般的世界,我不再喜欢它了
  • 优雅并不是真正的衡量标准
  • 良好的管理是无价的。(我职业生涯的大部分时间里都没有看到过好的管理)
  • DynamoDB 是一个很好的数据库(前提是你的工作负载与它提供的功能相符)
  • 面向对象在其擅长的领域中表现极佳。盲目追求函数性是愚蠢的。
我一路走来学到的观点
  • 工程主要与沟通有关
  • 永远不要在 Java 中使用完整的 monad
  • 查询规划器是一个具体且痛苦的问题
  • 如果我认为某件事很容易,那肯定表明我不理解它。
  • 你必须给年轻的开发人员探索和犯错的空间
  • 你必须积极投资于提高你的软技能(投资会立即带来回报)
  • 在一般的应用程序开发中,抽象很少。只需编写所需的代码即可
  • 相反,库的开发是关于抽象的。花时间寻找代数
  • ORM 在所有语言和所有实现中都是魔鬼。只需编写该死的 SQL
  • 函数式编程的问题在于函数式程序员
  • 如果时间跨度足够长,你会深深后悔在无服务器函数上进行构建
  • 类型是我们对世界做出的断言
  • 由于某些原因,分布式锁定仍然非常困难
  • 形式建模和分析是一项必不可少的技能
  • 隔离性是良好集成套件的最重要的特性。
  • DynamoDB 是一般应用程序开发最糟糕的选择
  • 大多数人不会关心手艺。珍惜那些关心的人,在他们所在的地方遇见其他人
  • 渐进式、依赖类型的语言是未来
  • 你确实不能在测试代码中添加太多注释(我挑战任何人去尝试)
没有改变看法的事情:
  • 在我看来,那些过于强调代码风格、代码检查规则或其他细节的人都是疯子。把注意力放在更重要的事情上吧。
  • 代码覆盖率与代码质量完全无关(在许多情况下,它们是成反比的)
  • 整体式架构仍然相当不错
  • 几十年来 RDBMS 的研究和改进很难被超越
  • 微服务需要论证(它们越来越被假定
  • 大多数项目(甚至 AWS 内部的项目)都不需要“扩展”,而且假装这样做会造成损害
  • 93%(或许是95.2%)的项目经理可能会在明天消失,要么毫无影响,要么效率会有所提高。(这一估计比 4 年前有所上升)
我们将看看其中哪些在第 15 年发生了变化。