我不是一个工程师 – 我是一个软件开发者
本文是从 I am not an engineer - I’m a software developer 这篇文章翻译而来。
在《Object-Oriented Software Development Using Java》这本书的导言部分,第8-9页上的“软件开发过程是工程化的过程吗?”一节中,Xiaoping Jia写道:
…对于“软件工程”这个词的精确定义仍然没有多少共识,就连使用“软件工程师”作为一个专业职称的正当性也受到质疑…
工程(engineering)和工艺(craftsmanship)之间的一个关键区别就是,工程的成功可以通过事前对设计的科学分析而得到保证,而工艺的成功却是通过当前的和之前的制作上的试验和失误获得的…
在某些非常成熟的工程化领域里,失败、有时甚至是灾难难以杜绝…但相同的失败却很少会重复发生…而对于软件开发,相同类型的失败比比皆是。
成熟的工程化领域里的成功很大的原因在于对知识的规范和积累,重复利用以前的解决方案…对于软件开发,尽管有积累的大量的经验和设计技术,却很少有被系统化的整理过的…
所以,软件开发是一项跟传统的工程方法有很大的不同的活动。充其量也只是一个不成熟的工程学科。软件开发如果想成为真正的工程方法,软件开发人员必须要机械的去执行设计分析,确保已知的失误不会重现,把设计知识系统化。
我不是一个工程师。我是一个软件开发者。在跟一个是工程师的朋友交谈中,我问他觉得我和他的工程作业上最大的不同是什么。他没有想太久。“我的产品都是大规模生产的。”
我是一个软件开发者。在我的想象里,就像Jia指出的,我们更接近是手艺人,而不是工程师。但我所说的“手艺”跟Jia说的有很大的不同,我所指的不仅仅是开发过程和工程过程之间的交集,更指的是让软件成为工艺品的工艺流程方法。
我既不是一个计算机科学家,也不是一个业余人士,既不是一个专家,也不是一个新手。我处在中间,我靠写代码为生。