个人作业4

一、个人总结

自我评价表

类别 具体技能和面试问题 现在的回答 毕业找工作
语言 最拿手的计算机语言之一,代码量有多少 java,代码量大概八千左右吧
语言 最拿手的计算机语言之二,代码量有多少 C语言,代码量大概两千左右吧
软件实现 (阅读代码的能力,实现,单元测试)有没有在别人的代码基础上进行改进,你是怎么读懂别人的代码,你采取什么方法不影响原来的功能?你在开发中遇到的最复杂bug是什么,怎么解决的?这个bug出现的原因是什么,你在未来应该怎么避免bug的再出现? 有;强行看,看不懂的百度;新功能避免占用原来功能的资源;最复杂的bug...想不起来了T T
软件测试 (测试方法、测试工具、测试实践、代码覆盖率)你是怎么测试自己的代码?怎么测试别人的代码?你掌握了多少种测试工具和方法?你写过测试工具么?你如何对一个网站进行压力测试和效能测试?你如何测试一个软件的人机界面(UX/UI)? 添加测试用例;添加测试用例;勉强算一种吧;仅会在eclipse上进行简单测试;没有;不知;不甚了解
效能分析 (效能分析,效能改进)你写过的最复杂的代码是什么?你是如何测量和改进它的效能的,用了什么工具,如何分析的? java课设写的学生管理系统吧;啊...没测
需求分析 (需求分析、典型用户、场景、创新)你做过多少个有实际用户的项目,用户最多有多少?你的项目有什么创新的地方? 之前没做过,这次软工小程序做成的话就算一个,因为目前还未发布,用户数未知;便捷记录开支
行业洞察力 你最感兴趣的领域是什么?这个领域过去十年有什么创新?你分析过这个领域前十的产品吗?请分析一下他们的优劣,你要进入这个领域,如何创新? 说实话,计算机这方面的都不怎么感兴趣(逃...)人工智能还是有点点兴趣的;正在不断发展,成为目前最火热的领域,没分析过;开发出全新的东西
项目管理 你参加过项目管理吗?如何决定各个任务的优先顺序?如果项目不能及时完成,你要怎么办? 参与过;按时间紧急程度排序;将最主要的功能完成予以交付,后抓紧时间补救补充
软件设计 你做过架构设计,模块化设计,接口设计么?请说明一下你为何是这样设计,你比较过什么不同的设计方式,你的设计取得了什么结果? 做过接口设计;更加简洁明了;只设计过一种,无法比较
质量意识 (代码复审/代码规范/代码质量)你是怎么做代码复审的,你加入我们团队后,能帮我们提高代码质量么,请具体说明怎么提高? 保证功能的前提下将冗余代码删除,创建接口并使用Dao模式
工具/社区 Software Tools(performance tool,version control,work item,TFS)你在各种开发平台(web,linux,PC,mobile,macheine learning)都使用过什么样的工具,自己写过什么工具来改进工作效率?给社区贡献过什么工具和代码?GitHub有分享代码么?你写的技术博客坚持了多久,读者最多的是哪一篇? CodeBlocks/Visual C++ 6.0/myeclipse/微信web开发者工具;没贡献过啥;没分享过;坚持了一年两个月,都是写作业的博客,阅读量平平
团队协作 Work with others(协同合作,提供反馈,说服别人)请描述你在项目中如何说服同伴采取你更好的方案,或是听取别人的意见改进自己的方案?如何说服懒惰的同伴加紧工作 团队开会并讨论,口头劝说,若同伴不改进就将实际情况验证给他看(时间效率更高、前端设计大多数人更喜欢等等);让同伴意识到事情的重要性,deadline是第一生产力
理论素养 你上过什么数学,计算机或是理论课,举出具体的例子,如何帮你解决问题 高数、离散、概率论、计算机组成原理、线性代数等;高数吧,比如斐波那契函数编写就需要用到高数知识
自我管理 全年级你专业排名多少?你从刚入学(大学一年级)到现在排名有变化么?如何解释你的排名的变化? 大三上排名40多吧,具体记不得了;有变化大学一二年纪成绩都在二三十名左右;原因是:慢慢确定自己不向计算机方面发展,多放心思在自己更感兴趣的地方了

1.(c) 保持高标准,不要受制于破窗理论(broken windows theory)[i]。当你看到不靠谱的设计、糟糕的代码、过时的文档和测试用例的时候,不要想 “既然别人的代码已经这样了,我的代码也可以随便一点啦。

a)从来没听说过;

b)我就是这样随便过来的;

c)如果有明确要求,我可以做好。

d)一直主动这样做

e)不但主动做, 还会影响同事一起做好

2.(c) 主动解决问题。当看到不靠谱的设计,糟糕的代码的时候,不要想“可能别人会来管这个事情” ,或者“我下个月发一个邮件让大家讨论一下”。要主动地把问题给解决了[ii]。

a) 不懂啥是靠谱的设计;
b) 随便应付一下即可;
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

3.(c) 经常给自己充电,身体训练是运动员生活的一部分,学习是软件工程师职业的伴侣。每半年就要了解和学习一些新的相关技术。通过定期分享(面对面的分享,写技术博客等)来确保自己真正掌握了新技术。

a) 从来不看书;
b) 看了就忘;
c) 有时分享。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

4.(c) DRY (Don't Repeat Yourself)——别重复。在一个系统中,每一个知识点都应该有一个无异议的、正规的表现形式。

a) 从来没听说过;
b) 听说过,但是认为意思不大;
c) 这要讲场合。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

5.(c) 消除不相关模块之间的影响,在设计模块的时候,要让它们目标明确并单一,能独立存在,没有不明确的外部依赖。

a) 从来没听说过;
b) 出了问题再说吧;
c) 想做,但是不知道怎么衡量效果。
d) 能够在多种语言和架构中做到
e) 不但主动做, 还会影响同事一起做好

6.(d) 通过快速原型来学习,快速原型的目的是学习,它的价值不在于代码,而在于你通过快速原型学到了什么。

a) 从来没听说过;
b) 把原型直接用于产品,不然就浪费了;
c) 不用原型,一直在产品中直接改。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

7.(d) 设计要接近问题领域,在设计的时候,要接近你目标用户的语言和环境。

a) 从来没听说过;
b) 按我的想法设计,用户以后会适应的;
c) 大概同意,但是怎么接近用户呢?
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

8.(c) 估计任务所花费的时间,避免意外。在开始工作的时候,要做出时间和潜在影响的估计,并通告相关人士,避免最后关头意外发生。工作中要告知可能的时间变化,事后要总结。

a) 做完了,就知道花费了,不用事先估计;
b) 大概估一下,不必在意时间
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

9.(b) 图形界面的工具有它的长处,但是不要忘了命令行工具也可以发挥很高的效率,特别是可以用脚本构建各种组合命令的时候。

a) 一直用鼠标和GUI;
b) 到时候问牛人;
c) 正在学习命令行工具。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

10.(a) 有很多代码编辑器,请把其中一个用得非常熟练。让编辑器可以实现自己的定制,可以用脚本驱动,用起来得心应手。

a) 只用老师教的一个;
b) 随意;
c) 没有任何定制。
d) 会定制,并且分享给其他人
e) 还会学习和使用各种编辑器的扩展。

11.(a) 理解常用的设计模式,并知道择机而用。设计模式不错,更重要的是知道它的目的是什么,什么时候用,什么时候不用。

a) 从来没听说过;
b) 模式没用;
c) 每写100行程序,我就尽量用一个模式。
d)有实际使用的经验
e) 能用具体代码说明模式的利弊

12.(b) 代码版本管理工具是你代码的保障,重要的代码一定要有代码版本管理。

a) 从来没听说过;
b) 用QQ,u盘即可;
c) 领导要求才用。
d) 经常用
e) 不但主动做, 还会影响同事一起做好

13.(b) 在debug的时候,不要惊慌,想想导致问题的原因可能在哪里。一步一步地找到原因。要在实践中运用工具,善于分析日志(log),从中找到bug。同时,在自己的代码里面加 log.

a) 从来没听说过;
b) 只会printf;
c) 加log 太麻烦,我的代码不会有bug 的。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

14.(c) 重要的接口要用形式化的“合同”来规定。用文档和断言、自动化测试等工具来保证代码的确按照合同来做事,不多也不少。使用断言 (assertion) 或者其他技术来验证代码中的假设,你认为不可能发生的事情在现实世界中往往会发生。

a) 从来没听说过;
b) 太麻烦,不用;
c) 想用,但没有时间。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

15.(c) 只在异常的情况下才使用异常 (Exception), 不加判断地过多使用异常,会降低代码的效率和可维护性。记住不要用异常来传递正常的信息。

a) 从来没听说过;
b) 抓住所有异常
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

16.(b)善始善终。如果某个函数申请了空间或其他资源,这个函数负责释放这些资源。

a) 从来没听说过;
b) 随缘;
c) 有时这样做。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

17.(a)当你的软件有多种技术结合在一起的时候,要采用松耦合的配置模式,而不是要把所有代码都混到一起。

a) 从来没听说过;
b) 没有实践的机会;
c) 代码都在一起比较好管理。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

18.(c) 把常用模块的功能打造成独立的服务,通过良好的界面 (API) 来调用不同的服务。

a) 从来没听说过;
b) 拷贝代码过来用也可以
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

19.(d) 在设计中考虑对并行的支持,这样你的API 设计会比较容易扩展。

a) 从来没听说过;
b) 并行不会出错的;
c) 任何代码都应支持并行。
d) 考虑在适当的层次支持并行
e) 不但主动做, 还会影响同事一起做好

20.(b) 在设计中把展现模块 (View) 和实体模块 (Model) 分开,这样你的设计会更有灵活性。

a) 代码都在一起比较好改;
b) 随缘啦;
c) 没搞清楚啥是V,啥是M。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

21.(b) 重视算法的效率,在开始写之前就要估计好算法的效率是哪一个数量级上的(big-O)。

a) 从来没听说过;
b) 我的数据量不大,无所谓;
c) 不会有效率问题的,现在CPU 都快了。
d) 主动测试程序效率,以验证估算
e) 不但主动做, 还会影响同事一起做好

22.(b) 在实际的运行场景中测试你的算法,不要停留在数学分析层面。有时候一个小小的实际因素 (是否支持大小写敏感的排序,数据是否支持多语言)会导致算法效率的巨大变化。

a) 从来没听说过;
b) 想用,但不知道工具
c) 主要靠肉眼观察算法效率。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

23.(b) 经常重构代码,同时注意要解决问题的根源。

a) 从来没听说过;
b) 任何修改都可以叫重构;
c) 每天应该重构两次。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

24.(c) 在开始设计的时候就要考虑如何测试 ,如果代码出了问题,有log 来辅助debug 么? 尽早测试,经常测试,争取实现自动化测试,争取每一个构建的版本都能有某些自动测试。

a) 从来没听说过;
b) 我的代码不会出问题的;
c) 项目没有安排时间,我也没有提这事。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

25.(b) 代码生成工具可以生成一堆一堆的代码,在正式使用它们之前,要确保你能理解它们,并且必要的时候能debug 这些代码。

a) 从来没听说过;
b) 从来不看那些代码;
c) 那些代码没有bug。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

26.(d) 和一个实际的用户一起使用软件,获得第一手反馈。

a) 从来没听说过;
b) 用户太蠢,不值得听反馈;
c) 想做但是没有机会。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

27.(c)在自动测试的时候,要有意引地入bug,来保证自动测试的确能捕获这些错误。

a) 没听说过;
b) 不必这么麻烦;
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

28.(b) 如果测试没有做完,那么开发也没有做完。

a) 从来没听说过;
b) 签入代码,就是做完了;
c) 。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

29.(c) 适当地追求代码覆盖率:每一行的代码都覆盖了,但是程序未必正确。要确保程序覆盖了不同的程序状态和各种组合条件。

a) 从来没听说过;
b) 覆盖20% 就好了;
c) 要覆盖至少60%。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

30.(d) 如果团队成员碰到了一个有普遍意义的bug, 应该建立一个测试用例抓住以后将会出现的类似的bug。

a) 从来没听说过;
b) 每个bug都是特殊的;
c) 测试用例不值得加
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

31.(c) 测试:多走一步,多考虑一层。如果程序运行了一星期不退出,如果用户的屏幕分辨率再提高一个档次,这个程序会出什么可能的错误?

a) 从来没听说过;
b) 如果有问题,用户会报告的,我们不用测这些;
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

32.(d)(带领团队)了解用户的期望值,稍稍超出用户的期望值,让用户有惊喜。

a) 从来没听说过;
b) 我们决定用户的期望;
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

33.(d) (带领团队) 不要停留在被动地收集需求,要挖掘需求。真正的需求可能被过时的假设、对用户的误解或其他因素所遮挡。

a) 从来没听说过;
b) 用户不说的,我们不做;
c) 如果有明确要求,我可以做好。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

34.(b)(带领团队)把所有的术语和项目相关的名词、缩写等都放在一个地方。

a) 从来没听说过;
b) 都记在我脑子里;
c) 大家看代码就好
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

35.(c)(带领团队)不要依赖于某个人的手动操作,而是要把这些操作都做成有相关权限的人士都能运行的脚本。这样就不会出现因为某人休假而项目被卡住的情况。

a) 从来没听说过;
b) 我们没有休假的,没关系;
c) 出了问题再说
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

36.(c)(带领团队)要让重用变得更容易。一个软件团队要创造一种环境,让大家有轻松的心态来尝试各种想法 (例如,模块的重用,效能的提升,等)。

a) 都听领导的;
b) 团队严肃紧张最好;
c) 不必尝试,失败的可能性太大。
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

37.(c)(带领团队)在每一次迭代之后,都要总结经验,让下一次迭代的进度安排更可靠,质量更高。

a) 没有时间总结,直接做下一版;
b) 总结用处不大;
c) 如果上级有要求,就做一下;
d) 一直主动这样做
e) 不但主动做, 还会影响同事一起做好

38.(d)(带领团队)团队中往往会有矛盾产生,作为领头人,怎么办?

a) 我没看见矛盾。
b) 和稀泥,过得去就行 ;
c) 如果没有捅到上级那里,就打哈哈,希望他们自己搞定;
d) 有明确和一致的处理矛盾的原则
e) 不但有明确和一致的处理原则,而且对于影响团队士气的任何事情追究到底

二、回答问题

ps:当时就整本书找出三个问题,如下:

【问题一】 书中第四章4.4.2 代码复审的步骤 部分,第五个步骤说道:

复审者有权提出很多看似吹毛求疵的问题,复审者不必亲自调查每一件事,开发者有义务给出详尽的回答 · · · · · ·
要记住复审者是通过这些问题来确保软件质量的,而不是有意找碴儿。

对于这句话,不知是自己理解能力欠佳还是语义有歧义。复审者可以提出吹毛求疵的问题,又不用亲自调查每一件事,不要找茬。那复审者是要仔仔细细阅读开发者的代码,提出非常细节的各种问题,还是观其大略了解通透,明白开发者大致的意思即可,并就不懂的地方提问?

回答:复审在软件开发中非常重要的一个环节,就像测试一样。伊始我认为软件开发中写代码开发才是最重要的,但其实测试在某些时候比写代码还要重要。所以,私以为复审者复审时应该先自行读懂开发者的代码,就不懂的问题及时提问与改进,但问题不太过***钻(比如那些根本不会发生的问题),开发者和复审者双方都抱着使软件更完善健壮的态度完成自己的本职工作。

【问题二】 书中第十六章 迷思之二 大家都喜欢创新 部分。
作者举出了许多例子来论证创新并非人人皆爱,但是我注意到这些例子距离当今已经有很长时间了,这就出现了一个时间的问题。在当今社会,生活中的方方面面都在飞速发展,发展迅猛以至于人类生活各方面的需求都已经被解决了。这不比从前,从前的创新都是飞跃性的,极大提高效率所以导致各种利益的冲突。在温饱已经有保证的情况下,我认为现代社会的创新我认为更加趋向提升人民的幸福感,譬如各样的按摩椅,代步滑轮车等等,这样的创新发明大家都是很喜爱的不是吗?所以我反对作者的观点,我认为应该说的表达更完整些,譬如:过去的时代创新会引起一些利益冲突,所以并非人人都爱,但是当今提升人民生活幸福感的创新是人人都喜欢的。
回答:现在回看之前的问题感觉又有些片面了,hh,这次我支持在作者的观点(pia pia pia打脸...)譬如,各种游戏的创新开发,鱼龙混杂,其中不免掺杂一些不健康的内容,这样子的创新就是不受人喜爱的。创新是进步的不竭动力,但也应该加大对创新的监管力度,创新不是一拍脑袋既成的事,而是需要考虑方方面面,不能创造一些有所他人身心健康的东西出来。

【问题三】 书中第十六章 迷思之四 创新者都是一马当先 部分。
作者用很多实例论证了第一个提出想法的人并不是真正能将想法发扬光大的人。对此,我提出我的问题:在今后的学习工作生活中,若灵光一闪,有了一些自认为极妙的未被开发的想法时,到底应不应该付诸实践呢?还是应该等待他人与你有同一想法并实践后自己像那些后来崛起的公司一样不断“线性扩展”,后来追上呢?那如果等待他人提出想法后是否会丧失先机及时间优势,并因此丧失一些重要资源呢?或者换一个提问方式:当你有一个自认为很棒的想法时,怎样做才是最佳的办法?
回答:私以为,当有一个自认为很棒的想法时,可以先广泛搜集资料,看看是否有与自己类似的想法相关的一些东西,或者请教自己值得信赖的好友专家等,吸取他人的意见,如果已经经过多方考量,我认为可以抓住机会just do it,做不做得出来是一回事,起码在过程中有所获就好。

三、再提问题

【问题一】 团队编程中关于PM的问题。
课堂及书本上,我得到的关于PM的认知是:PM是做开发与测试之外的所有事情。但是在我们实际的团队项目中,在选定PM时,大家都是本着谁的编程能力最强而选择的,我们的理由是,学生团队中选择舵手时应该选择那个能力最强的同学(但不一定是领导能力最强的),这样的话大家在实际开发中遇见什么编程问题都可以联系PM寻求解决办法。请问这样的选择是正确的吗?因为我感觉在我们的团队项目中,PM似乎并不是起组织领导,统筹全局的作用,而是成为了编码最多最辛苦的那个人,导致大家都不情愿当PM。那如果重新选择PM的话,是应该选择编程方面最厉害的人还是应该选择领导能力比较强的人呢?(如果领导能力强但是编码能力弱的可以当PM吗?)

【问题二】 关于需求调查的问题。
需求调查中,询问用户关于自己将要开发的项目的想法时,若你调查了100个用户,其中20多个用户对你开发的项目持怀疑或者否定态度时(觉得没有用没有必要啊什么之类的),那项目还要继续进行吗,是否应该调整项目方向?还是应该加大需求调查范围,征求更多人的想法?

【问题三】 团队编程中关于项目燃尽图的问题。
燃尽图在我们本次项目中是有点棘手的事情。一开始我们团队的任务卡没有设置完善,导致后续几天冲刺的时候我们再进行添加任务卡等操作,导致燃尽图变得很奇怪,请问这样的燃尽图还有意义吗?还能正确反映团队项目的进度吗?关于燃尽图,是必须一开始就将任务卡设置完善吗,若冲刺当中遇到需要增加任务卡的情况该怎么处理?

【问题四】 关于本课程博客撰写问题。
这种新的教学方式是好的,比传统教学能学到更多东西,但是真的占用很多时间,是否博客量有点过多了呢?(不一定所有人的方向都是软件开发这方面,甚至有一些同学根本不打算走计算机这条路,要考研要考公的大有人在,是否能缩减一点任务量将一些博客时间出来给同学学习一些他们更想学的技术知识呢)

【问题五】 关于提问题的数量。
为什么一定要五个问题呢...真的没什么问题的怎么办?

【附加题】: https://book.douban.com/annotation/56693463/

posted @ 2018-05-18 23:45  打不死的小顾  阅读(215)  评论(1编辑  收藏  举报