【CSDN 编者按】有人说,AI 编程普遍提高了程序员的编码效率,也有人说,AI 智能编程增加了程序员改 Bug 时长,而本文作者却说:编程真的很难,你们觉得编程难吗?不妨一起看看。面分析难处
原文链接:https://myme.no/posts/2023-09-19-programming-is-hard.html
作者 | Martin Myrseth译者| 弯月
责编 | 夏萌
出品 | CSDN(ID:CSDNnews)
软件很奇妙。从基本形式来看,软件非常抽象,似乎和真实世界没有任何关系。但现代手机等硬件设备之上运行的图形应用却感觉非常真实,人们甚至完全不需要理解“黑盒子”内发生了什么。一些软件甚至能够控制硬件,在真实世界中执行真正的动作。
作为程序员,我们编写的一些代码是对真实世界概念的建模,所以这些代码的结构和形式通常都反映了真实世界。而有些代码则是完全抽象的,负责解决只有计算机领域才会出现的“元物理”问题。负责解决抽象问题的代码也是必不可少的组成部分,真正看得见摸得着的“真实世界的建模”正是构建在其上。
然而,代码并没有被要求必须反映它要解决的问题,有时代码解决的问题甚至不是“真实存在”的问题。当然,能够通过某种方式来表现关系的代码更“容易阅读”且“容易维护”,因为人们更熟悉这样的代码。但我们构建系统的目的是“建模”,而不是“模仿”。
我认为:
“只要模型的行为能够解决问题并让用户满意,软件就完成了使命。”
姑且不考虑性能问题,计算机并不关心程序的结构。遗留的意大利面式的代码解决问题的能力并不逊色于精心打造的系统。只有在考虑人们需要修改系统的时候,糟糕的解决方案的代价才会体现出来。
这就引出了程序员需要面对的另一个更隐蔽、更困难的问题:将真实世界的需求转换成抽象的结构,该结构在计算机上执行时,需要对问题域建模,并达到一定的满意程度。而在建模的过程中,我们还需要考虑怎样才能更好地对抽象进行建模,以保证其他人和自己将来依然能理解。
网上的许多关于编程复杂性的讨论都集中在编程语言本身、工具以及技术栈的复杂性上,而忽视了怎样才能更有效地理解需求并将其转换成代码。而对于系统不断发展时,如何去沟通并维护这些需求更是只字不提。这并不意味着这些事情不需要做。
学习编程语言的语法和语义需要花费很多时间和精力。构建现代应用程序和服务所需的工具、服务和基础设施也是如此。但这并非全部!许多技术都在快速发展,努力跟上时代的脚步已经令我们感觉力不从心。但不要忘记或忽视我们的任务是理解他人,理解周围的世界,而这才是保证代码质量和目标的关键。
没错,编程很难,真的很难!