软件工程≠计算机科学
从学生的角度,对比在ASE课程上和以前在学校学习CS的一些基础课学习的东西就能发现CS与SE区别,CS里更注重学习像算法设计,代码编译过程,操作系统的调度问题这些有形式化表示的研究,这些都可以利用严谨的逻辑推导得到结论。但在学习ASE课程时,我们关注的更多是一个软件是否值得开发,如果要开发的话,怎么利用有限的资源,有限的人力,有限的时间开发出一个有价值的,具有可持续开发和应用的软件。
Software engineering will never be a rigorous discipline with proven results, because it involves human activity.
这句话我觉的很有道理,因为人力才是一个项目里最不稳定的因素。机器一旦设定好流程就能一丝不苟地按流程完成任务,但人有时可能会犯错,团队中也有可能会有人员流动,这些都是不稳定的因素,而且甚至有可能影响整个项目的执行过程。
The Cathedral and the Bazaar
我alpha阶段是在图片生成对联组,我认为我们组alpha阶段采用的是The Cathedral model,虽然说我们在开发时利用了github开源了我们的code,但开发过程依旧只有我们这个专属的团队去管理和开发。
When you lose interest in a program, your last duty to it is to hand it off to a competent successor.
我觉得这句话到挺适合我在alpha阶段的体验的,alpha阶段一开始,我一人被分工到前端,我本人之前也没有任何前端的经验,开始时调研了一下前端开发,调研了如何开发一个微信小程序,但也还是一头雾水,之后Tao加入了我们组,PM辛苦我,将有前端开发经验的Tao分到前端开发中。经过多次前端组和PM的讨论后得出了第一版的前端界面的纸上模型,在coding的过程中,Tao也给了我这个前端小白很大的帮助,最终我也努力完成了我分内之事,十分感谢Tao在alpha阶段对我的帮助。虽说beta阶段我离开了你们,但还是真心希望你们的小程序能越做越好。
Bjarne Stroustrup 的ACM 文章,计算机系要教什么给将来的程序员?
将来是去工业界还是学术界,这个问题感觉在刚决定读PhD时就有人不断问我,但我觉得无论是去工业界还是去学术界,我们在本科和PhD期间都需要积累很多编程的经验,去工业界就不用说了,需要大量的编程的经验,熟悉使用各种工具,但即使将来去学术界,也需要许多编程的能力去具体实现自己的想法,验证自己的论点。但一般教授手下会有好几个学生,他们会把具体coding的事交给学生来做,自己去思考high level的事,这也正常,教授不能把自己的时间浪费在具体的coding上,把这些coding交给学生也能锻炼学生的编程的能力,但学生在实现有困难时教授需要给与一定的帮助。这其实在其他学术领域也存在,一般物理教授也不会自己做实验,也是叫学生来做具体的实验,但在学生刚入学时会给他足够的培训。
习而学的软件工程教育
我认识许多本科是非计算机学院但对计算机技术十分感兴趣的同学,他们的学习方式大都是采用这种习而学的方式。因为是对一些技术感兴趣,所以一开始会愿意花很多课余时间去学习练习应用这些技术,但在应用过程中会经常遇到原理上不太明白的bug,为了解决这些bug,又要深入去理解其中的原理,需要去调研去看一些更加专业的书籍,久而久之计算机本科的大部分专业课也就差不多自学的差不多了。这种学习方法能让学生在应用的角度理解原理,对这些原理理解的更加深刻(感觉程序员对自己踩过的坑的记忆是最深刻的),但前期过程中可能要花很多时间。如果先学过原理再去应用的话,遇到问题能够迅速定位到问题在哪。
The Ph.D. Grind
为什么要读PhD?这个问题在我大三的时候一直困惑我,为了提升自己的能力,知识?为了在大学谋取教职?为了一个博士的文凭将来能找到更好的工作?这些都是原因。
那如何读PhD?PhD期间至少要5年,这是一个漫长的时间,如果在PhD期间不能找到自己的研究乐趣所在,这五年将是一个极其痛苦的5年,可能和这个作者一样,无法做自己感兴趣的事情,做的大多是老板分配到苦涩的体力活。但好在作者善于查找信息,努力和其他学者交流,为自己创造机会,最终自己能顺利完成学业。所以给我的启发有即使在读PhD阶段遇到什么困难,注意要及时和导师交流,并要和同领域的人士交流,学会自救,不能自暴自弃。