get:编程主要是思考

这篇文章是 Tim Ottinger 在其博客 "Agile Otter" 上发表的,标题为 "Programming Is Mostly Thinking"(编程主要是思考)。

文章讨论了编程工作的本质,强调了编程不仅仅是编码,更多的是思考和设计。

编程工作的本质:
编程工作很大一部分是思考,而不仅仅是打字或使用工具。即使在没有写代码的时候,程序员也可能在思考解决方案、设计架构或调试程序。

软件工厂的比喻:
生产实物商品时,几乎所有可见的工作都是运动。人们轧钢、冲压、压制、研磨、拾取和放置、螺栓/螺丝/铆钉等。 

现代工厂使用计算机数控机器生产产品,这些机器可以生产出真实生活中可能不存在的原始模型的完美复制品。这些机器以抽象模型(实际上只是数据)为基础,并执行完美的动作。人类负责操作机器,而不是手工加工木材。

软件开发类似现代工厂,其中产品(软件)的复制成本几乎为零。一旦初始模型(数据)存在,就可以通过点击“复制”或“下载”按钮来创建完美的副本。

一旦初始模型(实际上只是数据)存在,那么所有完美副本的边际成本基本上为零。是的,这只是复制而不是创造,但这就是工厂所做的。定制商店可能会生产独特​​的物品(例如吉他),但工厂会制作原件的副本。

软件工厂往往会给你一个进度条,这样你就能直观地看到比特的移动,但从很多方面来说,你可以说产品并不存在。

设计与制造的区别:
软件开发更接近设计工作而非制造。一旦设计完成,机器可以几乎零成本地复制数据模型。

在我与鲍勃·马丁大叔共事的这些年里,我听到他不断告诉客户和学生,软件开发不是制造操作,而是设计操作。一旦完成初始设计,所有重复工作都由机器完成,成本几乎为零。

因此,程序员、测试员、产品负责人、Scrum Master 和软件管理领域所做的一切(如果他们做得对的话)就是设计数据模型,该模型稍后将被工厂用来创建副本,供客户、顾客以及该软件所服务社区中的其他人使用。 

然而,工业时代将软件开发视为工厂的机械化、工业化的理念仍然存在,开发人员尽职尽责地试图让它看起来像是在从事体力劳动,而这损害了整个过程。 

所有智力活动都难以观察和监控。一个完成了 80% 的想法没有实际表现。这只是一个想法,还没有完成。有时我们会进行实验或概念验证代码或笔记,但它们无法像实际工作那样给出准确的“完成百分比”数字。

  • 制造中的椅子在 50% 标记处看起来已完成约 50%。完成后,它看起来已完成。
  • 椅子的设计可能要等到完成 70% 以上才会在纸面上呈现出来。我们不知道它是否真的完成了 70%,因为它还没有设计完成。

思考与编码的关系:
程序员在编码前会花费大量时间阅读、研究、决定、确认、验证,这些智力活动最终转化为代码库中少量的代码变更。

程序员一整天都在不停地打字。
在这 30 分钟里,他们要重现一天中写过的、没写过的、编辑过的、返工过的所有工作的净结果。这并不是他们付出的全部努力,而只是努力的残余。

程序员要尽可能避免Bug。
为了做到这一点,他们必须在编写代码的过程中不断对代码进行评估,假设可能会引入哪些缺陷或安全漏洞。毕竟,在共享代码库中引入缺陷会受到最严厉的批评。

编程是一种有损压缩。
代码只说明程序运行时必须做的事情。程序员为什么选择一种特定的方式而不是其他方式,这种方式如何影响系统的其他部分,引入和删除了哪些错误,以及避免了哪些陷阱,这些(一般)都不会出现在程序文本中。

大部分工作不在于进行更改,而在于决定如何进行更改。做出决定需要我们理解已有的代码。当代码杂乱无章或设计在源代码中并不明显时,这尤其耗费时间。

程序员是在社会环境中工作的,因为他们的所有成果都集成在一个共享代码库中(大多数程序员都使用结对编程或其他 "多眼 "技术)。程序员可能会帮助其他程序员、测试人员或操作人员处理他们的工作。与他人联系和交流的好处和代价并不体现在代码中。

程序员会所做的工作就是阅读、学习、理解,有时是猜测、研究、调试、测试、编译、运行、假设和推翻他们对代码应该是什么样子的想法。

总之,他们是在思考和决定。大部分工作都是脑力劳动。

文章提出其他要点:

  1. 对管理的启示:文章建议,管理层不应仅仅关注程序员编码的时间,而应提供有利于高质量思考的环境和流程。
  2. 社会化工作:程序员的工作是社会化的,因为他们的成果都集成到了共享的代码库中,并且经常使用配对编程或其他“多眼”技术。
  3. 代码只是工作的残留:代码只是程序员思考和决策过程的最终产物,而不是工作的全部。
  4. 提高生产力的方法:作者认为,提高生产力的关键在于构建促进共同思考和决策的系统,而不是简单地增加编码时间。

文章最后还包含了一些读者的评论,他们分享了自己的观点和经验,进一步强调了思考在编程工作中的重要性。

banq注:程序员现在是和ChatGPT一起思考,不在孤独 深入“人迹罕至”的上下文。