作业课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/
作业要求:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2706
课程目标:学习编写软件的方法与过程,锻炼团队编程的能力。
具体方面:这次作业让我更好的思考了自身,让自己对自我能力的审判更加清晰,发现自己的优点和缺陷。以及锻炼了自学能力,学会从多种角度看问题。
一.建立博客并介绍自己
我的博客:https://www.cnblogs.com/xiaolang77/
个人简介
我来自四川内江,一位普通的软件工程大二学生,会打篮球会唱歌,除此之外,我还喜欢画画,加入过团队学习板绘,这些兴趣爱好都是经过了很长很长的时间才培养起来的。篮球我从小学一年级就开始接触了,到现在也还在一直坚持,绘画也是从小在两位姐姐的熏陶下感兴趣的。
1)回想一下你初入大学时对软件工程专业的畅想
· 当初你是如何做出选择软件工程专业的决定的?
选择软件工程是因为自己本身对电脑挺感兴趣的,感觉这个专业酷酷的,在平时的生活中也能运用得上。
· 你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?
符合,因为进过这两年的学习,已经基本掌握了C语言以及C#的基本知识,虽然没有具体的学习怎么完成一个项目,但是基础扎牢了才能更快地上手。目前还能够帮助非计算机专业的同学学习C语言,感觉还是挺好的。
· 你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?
我觉得软件工程是我喜欢的领域,但确实不是我擅长的领域。这个行业有太多人才了,他们的知识面比我广,想法比我新奇,各种数学原理可以融汇在编程中,而我现在还并不具备这样的能力。
· 将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
我会选择从事软件开发相关的工作,如果可以的话,我会留在成都,具体的公司并没有想好,我现在也没有过多的了解,岗位可以先从普通的码农做起,经过两三年的学习,希望可以能够独立地带领一个三到五人的团队完成一些项目。
(2)即将大三的你,对照前人们走过的路和描述未来发展,现在的你
· 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?
我已经学习了C语言以及C#的编程语言,我觉得我在数据库的建设及运用上的能力还是不错的,我的代码量不是很多,就平时完成课程上的作业,还假期有跟着网站上的学习视频敲一敲代码。
· 离成为一个合格的软件工程专业本科毕业生,在专业知识、技能、能力上还差距哪些?
距离一位合格的软件工程本科毕业生,我觉得我至少还需要掌握一门主流的编程语言,例如Java或者是Python。此外,还有office方面的知识也是我所欠缺的。
(3)大三是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
· 对照以上你阅读的前人们的经历,你的选择是什么?
我偏向于选择参加工作,我喜欢在实践中学习,不太喜欢理论上枯燥的学习,我觉得参加工作带给我实践上的锻炼会让我成长得很快。
· 在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
很明显劣势在于学历问题,现在社会本科毕业的人很多,很多大公司会选择研究生以上的学历。我觉得优势的话在于可以更早地接触社会,更早得开始累积解决实际问题的经验,可以学到很多书本上学不到的知识。
· 针对你的选择,你给自己的大三设定的规划安排是什么?
大三的话,除了正常的课程安排以外,还会规划时间学习多种编程语言,以及更多的代码练习, 以及跟着参加一些项目。
三.提有质量的问题
Q1.第四章4.5.4,P81
书中第五条说到在结对编程时,“只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家多大的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。”我并不太认同书上的观点,我认为两人拥有完全平等的权利这应该只是理想上的情况,而实际上应该还是有一个主次之分。书中将结对编程的两人类比为赛车比赛的驾驶员和领航员,在一场赛车比赛中,我觉得驾驶员的决策作用要大于领航员,领航员只能起到一个提醒的作用,而方向盘却掌握在驾驶员的手中,而当驾驶员的操作并不完全贴合领航员的想法时,领航员也不可能抢夺方向盘,这个时候通常会是领航员向驾驶员妥协。而在结对编程中,如果驾驶员与领航员之间产生了分歧,我认为通常情况下也会是驾驶员更有决策的权利。
Q2.第十一章11.5,P234
这节介绍了团队合作的问题,提到“有些优秀团队(例如Google公司的一些团队)规定一周有一天不能开会”,这和前面提到的敏捷流程中提到的每日立会是否有冲突?“每日立会强迫每个人向同伴报告进度,迫使大家把问题摆在明面上。同时团队要启动每日构建,让大家每天都能看到一个逐渐完善的版本。P110”
Q3.第六章,P108
本章介绍了何为敏捷流程,提到在软件工程的语境里,“敏捷流程”是一系列价值观和方法论的集合。我感觉只是介绍了敏捷流程的一些意义,并没有学到具体的内容,似乎敏捷只是一种思维上的一种转换?
Q4.第五章5.2.6,P93
关于特工团队,书中说这样的团队是由一些有特殊技能的专业人士组成的,负责解决一些棘手而有紧迫性的问题。我觉得这样的团队是不是缺少一定的凝聚力,特工一般都是单打独斗的较多,过分强调个人能力的特工团队是否已经不能够算作一种团队?
Q5.第十三章13.2.12,P287
关于“小强”大扫荡(Bug Bash),提到“如果过分重视奖励,会导致一些数量至上、滥竽充数的做法”,难道bug的发现不是鼓励大家发现的越多越好吗,至于出现是数量至上的情况,可以根据bug的具体情况调整奖励,我觉得应该是多多益善吧。
四.了解和调查源程序版本管理工具
GIT
优点:出来的目标是支持多人同时维护庞大的开源代码(linux),所以它的分支能力特别强大,体验特别好。加上支持离线提交,分布式推送拉取,使得代码层面的协作相当流畅。
缺点:不符合常规思维。保密性差
GitHub
优点:支持多人共同完成一个项目代码不需要保存在本地或者服务器
缺点:不是最好的设计跟踪工具,将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
Microsoft TFS
优点:团队工具,贯穿需求,开发,测试,发布各个流程提供自动化工具。
缺点:用户面小,功能使用率低。
Apple XCode
优点:是开发macOS和iOS应用程序的最快捷的方式。速度快,操作轻松。
缺点:不知道……