误导:软件开发人员只不过是成为设计人员的跳板
我此前从事的是软件开发工作,一直到现在心里总是一个疑问接一个疑问。那就是“对软件开发而言,设计到底指的是哪个阶段呢?”。由软件工程师转行后,笔者有机会采访了形形色色的系统工程师和软件开发人员,这一疑问也越来越难以释怀。
一般来说,商业应用的开发可以分为设计和制造(编程)两个阶段。软件开发人员则有设计人员(主要是系统工程师)和软件开发人员之分,先由设计人员写出“设计书”,然后由软件开发人员来编程。设计书式样各异。所谓的设计阶段就是指“设计人员完成设计书然后交给软件开发人员”这么一个过程。
当然,不能否认尽量以简单的模块来实现复杂的软件结构这一工作的重要性。但是,单靠设计书就真的能开发出软件吗?至少笔者还从来也没有听说过“只凭设计书就能自动生成所有代码”的说法。
这样一来,软件开发人员就得仔细阅读设计书,深挖“字里行间”的要求,并解决设计阶段无法预见,但在编程过程中出现的问题。特别是随着近来技术革新速度的加快,比起自动代码生成技术来说,还是人更容易跟上形势。但是这种情况下,如果设计书比较含糊,或者软件开发人员能力不足的话,就可能会开发出功能不全或及性能不佳的软件来。
这一点正是软件开发同其它工程领域最显著的不同之处。比如说工业产品的设计书(设计图)是绝对的,只要有设计书,那么拥有相同的制造设备的生产商就能生产出相同的产品(当然也有例外)。而在软件开发领域,软件开发的编程阶段主要依赖于软件开发人员的能力而不是设计书。由软件开发人员完成的软件与设计书的内容大相径庭的例子也并不少见。也就是说设计书并不能起到像机械加工方面的设计图一样的作用。
笔者认为,这种想法从根本上改变了设计人员与软件开发人员之间的关系。话虽如此,实际上大多数软件开发人员还是仅仅被看作是从事简单的重复劳动的人员,不管他们付出怎样的辛勤劳动从事编程作业,都难以得到公正的评价。实际上,整个软件业界都有这么一种印象“比起软件开发人员来说,设计人员更加优秀”。笔者也曾经接受过上司这样的教导“要朝高级设计人员努力!不要再做软件开发人员了”。这其中的逻辑就是:只有成为设计人员才是升职之道,而软件开发人员随时可以从外面招聘。
如果大家都认为软件开发人员只不过是成为设计人员的一个跳板的话,那么谁也没有情绪老老实实地干活了。这样下去要培养出优秀的软件开发人员可就难上加难了。而且从设计人员与软件开发人员的力量对比来说,软件开发人员也还是处于不利的地位。笔者认为,最近被人们挂在嘴边上的职业道德危机及软件质量低下的问题,实际上原因正在于此。
或许重新审视编程并将其纳入设计过程,就会为目前僵硬的软件开发体制提供一个洗心革面的机会。因为这样一来,比起做出周密的设计来说,人们会更加关注如何才能写出优秀的程序来。