有银弹、没有银弹
Brooks在《没有银弹》这篇文章中指出没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍。高级语言等工具的出现解决的是accidental difficulties。但是Essential difficulties(complexity,conformity,changability、invisibility)制约了银弹的产生。而在Cox的《有银弹》的文章中,作者巧妙地变换的看问题的角度,指出银弹应该是一个思维方式而不是一个技术创新。作者认为面向对象的编程和可复用的模块是应该被广为采用的思维方式。我觉得编程要讲究复用性这一点很重要,复用性的程度可以在一定程度上解决invisibility这个Essential difficulties。在实习的时候经常会用到philly api和pipeline实验。最初的时候我写的philly class是只能完成一类特殊的任务,在做这一类任务的实验的时候用起来非常顺手,但一旦要做别的实验,基本上就要重写philly class,后来随着实验的增多,我发现如果想提高复用性,首先要定义一致性,然后根据一致性来写复用的脚本。于是我把一致性定义成所有的philly job提交一个训练脚本和压缩包,philly class的复用性大大提升。有没有银弹这件事情本身我认为不是很重要,但是提高复用性和积极复用别人的轮子是提高效率的好方法
为什么计算机系的老师教不好软件工程水平的编程
高赞回答认为工业界对CS学生期待过高,而且本科时间不够,但教理论又比教职业技能更加重要。因此CS != SE并不是教不好软件工程的借口,或者说CS毕业并不保证毕业生就一定擅长软件工程。我觉得在大学里教理论比教实践重要这一点十分明显,这个态度在双学位这种时间显然不够的情境下体现的尤为明显。课程安排上学校首先选择了删去《算法导论》、《软件工程》这样的偏工程技能的课程,保留的《编译原理》、《计算机网络》、《操作系统》等课程也只是保留了理论课,配套的实验课也被全部删除。在这种价值观的指导下,学校毕业生软件工程能力不足是很正常的。而且在这次软件工程课上我深深感觉到软件工程需要一个连续的时间,比如连续10天冲刺一个项目,而这样的课程条件学校也很难具备。
软件工程教育实践反思
作者在第三部分总结了软件教育需要的组成成分,强调了实践的重要性和导师和学生的互动,并指出可以通过工作室的形式来促进软件教学。使学生有更多的实践和与老师交流的机会。工作室形式很有用,在学校里也能明显看出早进入实验室的同学或参加专业性比赛的同学成长比较快。但是如果给每个同学或者每几个同学配备一名导师,以工作室的形式教学软件工程,可行性似乎存在问题。个人认为软件工程可以不止限定于一门课,可以向金融系的课程计划学习,要求每一位学生至少有一次实习经历,算必修学分,利用整个产业界的资源来推动学生软件工程能力的提高。毕竟中国的大学还是大班教学,想实现工作室感觉条件不足。
国外大学的软件课是怎么教的
第一个作业让我印象深刻,老师在上课前做了这么多的准备。不仅能让学生focus在课程内容上,还能让学生在无形中学会很多具体的软件工程知识。帮学生写好详细的设计文档设计好贴心啊,虽然有可能会束缚学生的想法,但是如果学生基础比较差的话,详细的设计文档会让学生受益良多。我经历的大多数课程都不给设计文档,学生的能力又制约着老师不能出很难的题目,最后课程作业就变成了很多个很小的作业,到课程结束学生也无法对复杂编程有把握。也有老师给过我们一个很长的code让我们读,然后在这个基础上增加功能,这样的形式比一堆小作业好,但总感觉缺少了自己实现架构的方式,不如股票交易项目来的优秀,老师的设计的确很走心。
习而学的软件工程教育
文章的核心观点是把理论课放在了后面,计算机课放在了前面。我觉得这是一个很好的创新,现在的课程设计是清一色的数学物理在前,计算机专业课在后,但如果是专门的软件学院的课程设计,既然是为了培养工程性人才,把计算机课程提前不失为一个好方法。但是现在的学科发展大势是学科合并而不是学科精细,高考专业的招生简章充斥着各种“理科实验班、工科实验班”,分专业分方向的时间在不断后推,给“习而学”的课程设计的可行性提出了挑战。高考学的内容全是基础学科,学生在进校之前很难确准我就想学软件工程,如果课程设计的专业性太强,会不会制约学生转专业(尤其是跨度比较远的转专业)的可能,权衡利弊,那么“习而学”是否真的是一个优选方案呢?