前言
作者自2011年离开学校,并未曾离开讲台,甚至还曾又回到原来的学校、站在曾经的讲台上,只是换了一个“身份”,真是颇具中国特色、传奇意味。
在培训机构任职,从985学校到高职,有机会接触不同的学校、更多类型的学生,作者发现,现在学生的状况,真的不是用“堪忧”两字可以轻松描述的。在作者讲授“软件架构设计与实践”课程的时候,大三的学生,编程和项目开发的基础之差,连VS 2010的IDE菜单按钮是干什么的都不知道;而刚学过C语言的大一学生,连在TC 2.0环境下,需要将C语言源程序不单要编译成.obj文件,还需要再链接成.exe文件后(也可以选择直接生成.exe),才能运行都不知道。总是问老师,我的代码为什么不能运行(学生只完成了生成.obj文件一步)。这说明,这个学生从来没有自己完成过一个完整的源程序编写、编译和运行过程。也有的老师教Java,不要求学生用Eclipse/MyEclipse,而是用记事本写源代码。虽然也可以用命令行进行Java编译,但是,不使用Eclipse/MyEclipse的IDE,难道代码不用调试吗?难怪学生看到老师用A作为变量名,自己用B的时候,觉得可能自己用错了。上述这些现象,可能是作者遇到的个别极端情况,但这难道可以简单地批评说,是某个学生的错吗?
本教程是作者近年任职培训机构,担任实训课程教学的总结,也是软件工程、软件架构设计课程实训产品的呈现。有不少老师,用了作者的《软件架构实践教程》后来邮件探讨,如何在大三学生“基础很差”的情况下,上好架构设计这门课。我在该书前言部分的第一句话就讲,上这门课是很吃力、并且是“吃力不讨好”的。因为基础差的根本原因不是这门课难(软件工程专业后端的课程,一定是比编程要难,任何专业的课程都类似),而是学生从一年级开始,就缺乏编程、系统、项目的扎实训练。一本高校情况好一点,二本高校以下难度很大。但是,二本以下也是软件工程专业,也不能放弃。所以,需要从大一开始,用实训的方式,进行补充和强化训练。这就是编写本教程的基本出发点。
本教程原设想是设计为4个实训阶段:逻辑思维训练、小系统开发与集成、企业级系统分析与二次开发,以及软件工程过程实训,分别安排在大一至大四或延伸到研究生的4个假期实训阶段。由于这样的实训课程的时间安排跨学年、跨课程,因此,不可能跟现阶段教学体系和课程计划中的某一门课程直接挂钩——归于某门课下。所以,目前本课程的名称被套在“软件系统分析与设计实训教程”的课程名称之下。为了减轻学生的负担,本书删去软件工程过程实训内容(可参考作者2011年清华大学出版社出版的《软件工程项目实训教程——基于微软VSTS》一书),并主要围绕软件架构设计的主题进行描述。实整,改变了4个阶段实训、分阶段、综合一体化地培养软件工程专业学生系统、项目、软件工程过程能力的大目标,将其缩小到“软件架构设计”这个软件工程过程的具体目标上,从而降低了本教程原设想的高度和作用域。虽然软件架构在软件工程过程中具有一定的“统领”作用,但毕竟只是角色之一,实在遗憾。
有关课程的目的、内容和教学安排等,在教程的第1章中介绍,不再赘述。
张家浩 2015年12月30日于南京百合果园