个人博客-ASE课程最后一周总结

回顾课程计划,完成程度如何?

当时的计划是学习完整的现代的软件工程知识,能够完成一个优质的软件。
能力调查表和课后期望:

技能 课前评估 课后期望 如何提升
程序理解 2 5 科研mentor监督读和修改最先进的算法代码
代码质量 2 5 高效利用时间,对于自己现在的水平,先埋头写就是了
架构设计 2 5 对于最后的团队项目,肯定需要学习开源的项目代码或者和组里其他同学学习才行,在此过程中学习成熟的代码结构设计和项目架构设计
线程进程设计 1 5 科研这边的程序跑在多个GPU上,会练习到
个人源码管理 3 5 使用git

现在看起来,学习完整的现代软件工程知识,完成一个优质的软件,基本算是完成了。比如现在对软件工程的认识,和完成的还不错的期末作业
对于技能表里的计划,程序理解能力提升,有提升,但是大概现在3-4分吧。代码质量感觉几乎没啥提升,因为埋头写代码,也不知道自己写的好不好,基本上就是能完成功能就万岁。架构设计提升挺大的,多亏了组里beta阶段来了王子博同学,跟他学习了很多。现在大概3-4分。线程进程管理有提升,现在大概2-3分。个人源代码管理基本完成,代码质量参考小组作业的开源代码同样的,也是子博给了很多的指导。

你在课程开始快速浏览了《构建之法》,提了 5 个问题, 请回顾那些问题, 自己回答它们。

在第一章的末尾,讨论了bug和feature之间的关系,有些人知道有些产品的质量不如另外一些好,但是也会选择那些不够好的产品,因为它们满足了顾客的需求,产品是否有理想的销量是和能否满足顾客需求直接相关的。在暑期科研中,小组研究的课题是去寻找深度学习库代码之中的bug,但是深度学习中某一层的bug有可能并不会对最后的预测准确率有很大的影响(此处bug指和理论算法中实现的函数有区别,错误的实现代码),因为在训练的过程中可能这个层的bug会起到像新的激活层一样的效果,甚至可能对预测正确率有好的提升。那么这种bug需要解决么?

现在感觉起来,bug是和软件不可分割的,软件中几乎不可能完全没有bug。bug的解决要考虑到成本。比如我们的项目中有一些已知的不足,或者没有实现的功能,但是考虑到同学的时间和项目的进度,只能砍掉。开发新功能和解决bug之间,工作量和代价之间,都要有取舍和平衡。


在第十章中提到,我们有不同程度的典型用户,有的对软件的专业程度需求高,有的需求低,这个在现在的软件产品的对应中,是否是家庭版、个人版、专业版、企业版等等区分呢?如果可以让比较弱需求低的用户在使用过程中不会有那种软件认为我太弱了不给我全部的功能一类的感觉呢?

用户选择合适自己的版本使用起来也会更流畅。新手不需要那些很复杂的但是根本用不到的功能。


在8.6.1以及14.1.2分别提到了项目目标预期与进度调整、开发过程的可见性的问题,在第七章微软MSF中也提到了给员工足够的信任的问题,如果任务紧,赶时间,项目参与人员也在尽力做,但是因为能力不足、或者压力大导致拖延症等等,畏惧汇报进度;这种情况下是应该要求让员工无论做成什么样都如实汇报,还是设置好ddl中途就不再追问了呢?

一定要定时汇报进度!当过PM之后对这个有了很多的体会。有衡量的标准和可靠的spec,即使员工遇到了困难进度缓慢,也一定要如实汇报,方便管理者心里有数,可以处理和协调。


私人问题,在14章质量保障中提到了若干互联网公司的安全事故导致用户用户名、密码泄露,作为软件开发很资深的研发总监,对于个人用户的密码设置问题,是否有什么建议?

是的,有很多软件开发公司对用户的密码保护不好,对于我们的密码没有进行合理的加密保护,甚至前一段时间的12306抢票软件明文密码泄露的问题。作为用户,我们应当分级设计密码,重要的软件用复杂的密码,不重要的软件可以用同一套密码,泄露了危险也不大。

看看还有什么新的问题产生,请列出来,建议列出 2-3 个新问题。 可以让老师和助教来回答


  • 非程序员出身的PM会在工作的过程中出现各种问题,为什么还会有很多大公司很多很重要的岗位的PM是属于不会写代码没有工程经历的呢?为什么不选择那些有代码经验的人做PM呢?

  • 作为资深的软件工程师,对于之前讯飞在demo中使用人工翻译把印度人的口音问题解决记录成文字版再使用讯飞自己的翻译和朗读软件完成,讯飞自己在宣传的过程中比较清楚各个技术的具体情况,在合理的范围类进行宣传,而翻译员曝光后媒体对其大肆批评的情况怎么看?软件的在一定程度上的舞弊是属于可以接受的呢还是尽量避免的呢?怎样避免被媒体抓住鞭子?

你看了一些软件工程的文献, 你的团队也做了一两次 “事后诸葛亮”分析, 可以再去看一遍,现在有什么新的感想?

第一次的事后诸葛亮分析是自己写的,第二次也参与了很多,我觉得当时的想法对于我的成长和认识有很大帮助,现在看起来也觉得收获很大。

对比一些技能评价表,你有什么提高? 还有什么收获是不能用数字衡量的?

在第一部分有写。主要是对完整的软件开发走了一遍流程,对于管理一个小团队,作为PM和作为Developer的体验和收获都是很大的,了解了情况,对于以后如果想从事软件开发,应该会更加心里有数一些。

设想一年之后, 你到了你职业发展的下一个阶段(高年级, 读研,工作),回头看这门课, 你对于这门课的教学方法, 老师和助教的工作,和其他课程的衔接,有什么意见和建议?

如果可以的话,可不可以尝试下增加以下功能?因为作为一个计算机科学的同学感觉下面的能力被培养的很差:

  1. 代码质量。当时只在最一开始学第一门C语言的时候老师有讲一些,但是那是基础的代码质量的规矩。能不能讲解一些优秀的代码,对于如何安排函数的文件、位置、配置等待来进行讲解。
  2. 架构。这个我基本完全没学过,之前完成某个功能可能都是简陋地完成,不太知道现在广泛通用的库函数和规则。比如写一个完整的网页,可以使用vue进行前端书写,django完成api的server如何配置,数据库可以放在某个服务器上,不停工作的引擎对数据库的内容进行完成可以放在别的服务器上,工作的方式是直接和数据库沟通。当时子博指的方向和指导文档很大地帮助了我们,但是如果他不在我们组里,我们可能会用奇奇怪怪的低质量方法完成。感觉架构的知识我在科大的培养体系里欠缺太多了
posted @ 2019-01-15 21:08  头像是我老婆  阅读(225)  评论(1编辑  收藏  举报