阅读和提问作业3 (期中作业)
《大教堂与集市》
集市模型的应用:Linux项目,采用开源的方式来进行开发维护,但带来了很多问题。正如评论中所提到的,
开源最大化群体智慧,增加了复杂性;而敏捷去繁留简,丢失了规范化。
我之前在Alpha阶段,想要通过一些开源的代码来实现某个算法,但是发现存在这样的问题:同一个算法实现,有很多的版本,但我也并不能判断出哪个更权威,尝试采用他们的算法时,有遇到了各种各样的问题,比如一些python依赖库的安装,奇奇怪怪的底层bug,尝试了几个版本都不行,这时候我就希望能有一个权威的代码实现,而非开源社区的各种实现。
我们组在Alpha阶段采用的是大教堂模式,因为各个部分分工明确,也只有组里的同学在做这个项目,并没有开源,让其他开发者参与进来。
Agile Method
我们的团队在开发过程中,用了哪些敏捷的思想和做法:
基于MVP的准则,没有过多的考虑交互界面的设计,着重考虑从用户上传图片到用户收到对联数据整个过程的实现,虽然后来受到了批评,认为我们不应该急匆匆地,每个部分都有瑕疵,应该着重做好某个环节。
将10天分为5天5天,完成了一个简易版本的设计和对简易版本的改进,每天更新工作进度,冲刺完成各自的工作。
为什么计算机系的老师教不好软件工程水平的编程?
对于第一个问题,我认为CS!=SE不应该成为不教授变成技能的原因。也就是说,CS的学生也应该上一些培养编程技能的课。通过上更多的编程课,做更多的上机练习,可以帮助CS的学生更深入的理解所学的理论知识,否则只是纸上谈兵,不能活学活用,就好像PM和engineer,CS做更多的SE,能够方便他日后与SE的同事沟通交流。
对于第二个问题,我同意强制要求增加更多的编程练习,但前提是也会减少CS的学生在其他方面的学业压力。
工业界也应该增加对CS出身的同学在SE方面能力较弱的理解,看到他们身上的潜力。
鼓励大家去做一些项目、大作业,因为在这个过程中,大家的代码规范、代码管理等能力都会有所提升,提高SE的技能。
国外大学的软件课是怎么教的
老师前期的工作很用心,做的都是有趣的有意义的工作,考虑到不同学生的能力差距,并设置时间节点来督促课程学习,并且增加附加作业来减轻学生的心理负担。
ios APP的开发,可以很好的提升学生对于图形化界面的使用。中科大的软件工程课,缺乏对同学们团队合作意识的培养,往往是一个人carry全组组员。文中提到,即使是一门讲程序语言的课程,也会统一使用git来提交代码,有点类似于部分课程老师要求同学们的作业用Latex来完成,比某些高校在纸上手写C语言作业要好很多。我们在这次ASE大作业中使用了github来维护代码,我也学到了一些操作。
习而学的软件工程教育
陶艺课的例子其实也说明了上面"CS出身的同学,不应该以出身CS为借口,忽略培养自己SE的能力"的观点。
文中所列举的软件学园的培养计划乍一看是很合理的,包括在大一先上一些激发同学学习CS兴趣的课程,推迟数理知识的学习到大三,强调团队合作,要求高质量的实习。从学校的培养结果来看也很好,因为学校水平在大陆排10名左右。如果能采访一些他们学校软件学院的学生对于这种培养计划的看法就更好了,毕竟实践是检验真理的唯一标准。
总的来说,我是赞同习而学的方式的,让自己能力提高的,往往也是课程的大作业,但是这种方式学到的知识好像往往很局限,比如只是某一个知识的应用,理论知识也是不可忽略的,因为这种方式学到的知识能够更系统,更全面。