微软软件工程 第一周博客作业
1. 自我介绍
时隔1年, 我又上了这门软件工程课, 只是上课地点还有老师助教发生了变化, 之前在科大,邓金宏老师,现在在微软亚洲研究院,著名的邹欣老师。传说邓老师就是被我们这届科大的软件工程课学生给“气“走的, 邹欣老师可要小心了,哈哈哈。
我叫黄志鹏,是中科大16级信息安全系的学生,现在在微软联培博士项目,目前是pre-phd阶段。我篮球打得不错,其它兴趣广泛但是不是很精通,换句话说我的特点就是广泛的兴趣和比较持续的热情吧(好像和phd专精的特点不太一样)。值得一提的是,我擅长冥想,就是那种到一分钟只呼吸两次的程度,开始练习是看了《自控力》那本书,然后就每天早上起来,晚饭之后冥想2分钟, 没花什么努力吧,养成了习惯而已。
2. 现状经验和计划
- 我认为目前对我最重要的能力有
能力 课前 课后 途径 程序理解 4 7 阅读大的开源项目,阅读队友的代码,多谢代码去犯错去写bug,刷leetcode,阅读系统源码,研究原理 设计 3 5 阅读大的开源项目,阅读程序架构的书籍,写代码在迭代中积累经验,自己的代码尽量解耦,thinktwicecodeonce 测试 3 5 坚持自己的代码进行充分的测试(单元测试覆盖率测试回归测试),熟悉各种自动测试工具,思考深度学习这种概率代码怎么测试(这一直是我的一个疑问),测试自动化 Python 语言 5 7 阅读进阶书籍,多用高级语法功能,深入到python底层代码和解释器,学习怎么设计一门编程语言 计划和时间估计 1 4 每个任务给自己估计时间,然后计时,然后反馈 协同工作 3 7 沟通的艺术,三明治法则,看一些将沟通的书籍,多交盆友 报告 2 6 做展示,presentation,多写写有逻辑性的总结博客或者文章
- 对课程的承诺
- 每节课都认真参与,又不懂向老师和同学请教,全部完成作业,杜绝抄袭。
- 未来的打算
- 在微软这里读博,多发论文,成文AI(或者其他)领域的专家,同时站在科技和行业发展最前沿,紧跟动向,为以后可能的“发展” 做打算。
- 课程计划
- 课程上,从科大的软件工程课的套路来看,应该是极限施压吧,反正习惯了,化压力为动力,全部完成任务吧。同时要多看书,多多停在学习区,不要老在工作区待着。希望这门课让我真实且完整地体验一番程序猿的生活吧,更加坚定我做research 的决心。
- 我的代码量,没计算过,github上的代码掺杂很多课程框架代码,没有参考性,写过的最大的程序大概万行(合作的)。 进著名公司可能要百万吧。从事高校教研可能不需要什么编程能力,编程不都是学生去做吗?
- 我每周拿出3个晚上, 一个下午的时间, 在这门课上的作业上。如果不够的话再加,提高效率来更好完成作业。
- 这门课程我大概会贡献1 万行代码, 每周1000 ~ 2000行左右。
- 前人经验
- 引述我之前组的组长的博客:https://www.cnblogs.com/jennawu/p/9411158.html 总体来说,这门课会不是很好受,就像公司员工压榨程序猿生命一样,但是,这个确实是福报,个人会有提高,所以要加油做。
3. 通读《构建之法》 之后提出几个“有质量” 的问题
- 测试(第13章第2节): 书中的这些测试方案(单元测试,覆盖率测试,回归测试。。。) 怎么使用到一个深度学习算法训练程序里面。这个算法,不像一般的软件程序,对于一个输入,有相对确定的输出,很多时候,我们只看到程序再跑,那么里面数据tensor 的size 都是对的,没有报错,但这就对了吗?有的时候一个dropout layer 放错了位置,训练程序照样一直再跑,出来的model 正确率在给定测试集上也许只是少了一点点,但是放在真实的应用场景中,也许会差很多。然而我们怎么设计这个算法模块的测试程序呢?难道是对于一个固定问题,正确率必须在多少多少以上吗?本书中没有提到。
- 需求分析(第8章第5节): 我看到了书中关于杀手功能和外围功能, 必需要求和辅助要求的分类还有功能分析的四个象限。有这个问题:我认为关于这些分类和这个象限的划分不是静态的,而是相对于用户群体,用户年龄等,动态的。也就是说,在这个四象限中,应该有一个垂直于象限的一条轴表示用户,用户群体或者是用户年龄什么的。这样, 某个需求就是一条3D 空间的曲线, 而不是一个2D 平面的点。比方说,微信这个程序,他的杀手功能是什么?是与抖音的社会推荐相对的朋友推荐(朋友圈/ 看一看)? 但是这个是年轻人喜欢的,很多妈妈辈的人,从来就没与用过这些功能,吸引他们的是简单的即时通讯,这个是杀手功能,但是对于年轻人来说,即时通讯手机qq也有。
- 软件工程师的成长(第3章第1节): 我看到了书中这样的论述,软件工程师如何成长,有以下5方面的成长,软件开发相关知识,领域知识,软件工程设计思想,职业技能,实际工作。我觉得首先我觉得写作能力和代码能力一样重要,但是里面没有提到。而且,我认为这里用“成长”这个词不是很准确, 应该用“进步”这个词,因为我觉得按照这个一直“迭代优化”下去, 会进入一个“局部最优值”, 就是会钻到一个点去,成为一个厉害的工匠,进入一个舒适区,所有的技能(不管是新的还是旧的)总是在自己的Knowledge Area 里面,会觉得熟悉而且学的很快。但是我觉得这个不算是成长。因为我觉得成长,在外在看来是职位的提升,调用社会资源能力的提升;在内在看来是眼界和心境的阶跃。然而随着这些“成长“ 的发生, 这里提到的很多东西(如对编程语言的掌握)就不是那么重要,但是一些其他的技能(管理手下,像马斯克一样预测未来,理解用户等)就变得更加重要。 大部分的初级程序员不会想一辈子只做一个底层程序员,他会想要飞升,这个时候,这种成长需要做出哪些方面的努力呢?是不是需要经常了解行业动态,尝试做出什么改变?
- 第4章第97页:我读到了一个“三明治”方法 来对他人进行反馈,我有一个问题,就是人总是倾向于记住最后面的几句话,在这个“三明治”方法论中,就是“第二片面包” (拍马屁), 而不是记住中间的“肉” (真正提出的反馈意见)。 相比之下,“虽然,但是”这个结构是不是更好,就是少了“第二片面包”, 然后听的人会倾向于记住“但是”后面的主要内容。
- 第4章第94页: 我读到了影响他人的方法有4中:断言,桥梁,说服,吸引。我觉得还有一种,威胁,这种威胁可以使武力上,也可以是言语上,(如“你不实现这个feature, 你明天就别来上班了”)。
最后说一句,邹老师的书写的非常好,读起来非常流畅,一气呵成,以上问题很多都是纯属找茬,不用太过在意。