现代软件工程 第一章 概论 第4题——邓琨
Edsger Dijkstra 曾经提到:“Software engineering, of course,presents itself as another worthy cause,but that is eyewash: if you carefully read its literature and analyse what its devotees actually do,you will discover that software engineering has accepted as its charter ‘How to program if you cannot.’”[i]
软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看? 请采访一个编程特别厉害的学生 (例如学校ACM 队的队员)。
我赞同dijkstra的看法。会一两种编程语言,会写贪吃蛇游戏,会写网站网页,这并不叫会写程序,只能说是管中窥豹,略见一斑。而软件工程是从宏观和微观两个角度教一个人怎么写程序。一是教怎么使用程序语言,怎么设计算法,怎么通过使用语句的组合构成一个可运行的程序;另一方面是怎么进行软件架构,怎么使用设计模式,怎么进行测试,怎么进行运行维护,怎么开发出一个健壮、安全、完善、可靠的软件或系统,它包含多个方面的软件开发技术。
在学校里有的同学算法和数据结构很擅长,例如参加ACM竞赛的同学,他们的编程能力比一般同学强上很多。但是在大型软件系统开发的过程中,他们开发的代码常常没有可读性,并且代码冗余、复杂、各种bug很多并且修改困难,这是没有系统的软件工程思想的结果。软件工程就是解决上诉问题的一个重要的思想,就是教会不会写程序的人开发软件,教会会写程序的人更好地开发软件。