这个作业属于哪个课程 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2713 |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2713 |
我在这个课程的目标是 | 更加深入的理解、学习软件工程。 |
这个作业在哪个具体方面帮助我实现目标 | 通过一些资料和提问,让我更深层次地去思考自己想追求的是什么,自己的优劣势,以及应该怎样去提高自己的能力;要求看书并提出问题,让我在看书的时候不仅仅只是“看书”,而还有自己的见解和思考。 |
作业正文 .... | 如下。 |
其他参考文献 ... |
|
一.建立博客并介绍自己
- 我的博客地址:https://www.cnblogs.com/TakeRabbit/
- 我叫徐异潇,来自西南石油大学17级软件工程1班。最喜欢写手账、旅游,我大概是一个热爱生活,很喜欢记录的人。最想做的职业是web前端工程师。
二.阅读与思考
(1)回想一下你初入大学时对软件工程专业的畅想
- 当初你是如何做出选择软件工程专业的决定的?
在即将进入大学时,我对于未来的发展方向很迷茫,选择软件工程专业,确实是因为这个专业很前沿、很火,也好就业。
- 你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?
过去两年接触到的课程比较基础,自主学习就显得尤为重要。仅仅完成老师布置的内容是不够的,还需要自己在课后去学习,并做大量的练习。我觉得比起我对这个专业所期待的,实践的部分少了一些。
- 你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?
刚上大一学习C语言和数据结构的时候,学习的内容非常基础,对于我来说的确是相对枯燥的。我真正对编程产生兴趣是快大二的时候,后来,我感觉到学习必修课的面向对象比以前得心应手多了,也不再觉得编程很枯燥,这给了我挺大的信心,让我越来越喜欢这个专业。所以我觉得它算是我喜欢并擅长的领域了~
- 将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
我以后还是想呆在成都(因为我最爱的城市就是成都),想去的公司还没有考虑,最想做的岗位是前端工程师,或者软件开发相关的岗位。
(2)即将大三的你,对照前人们走过的路和描述未来发展,现在的你
- 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?
目前,我学习过的专业课程有C语言、数据结构及算法、面向对象编程(C#)、数据库原理及应用、计算机系统基础、软件工程原理与方法。除了这些专业课程以外,我自学了前端方面的html/css和JavaScript,接触了一点JQuery。我写过的代码量大约一万行。
- 离成为一个合格的软件工程专业本科毕业生,在专业知识、技能、能力上还差距哪些?
专业知识上缺乏深入的理解,很多知识还停留在浅显的表面,比如说知道“是这样”,而不知道“为什么是这样”,我觉得这是我今后需要下功夫去做的。专业技能上还不够熟练,自己的思考还不够成熟。专业能力上可能学习能力上还有一些欠缺。
(3)大三是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
- 对照以上你阅读的前人们的经历,你的选择是什么?
我的选择是工作。因为我觉得实践才能出真知,一边参与到真正的实践中一边学习会对自己能力的提升更有帮助。
- 在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
优势是实践经验会多一些,劣势是与读过研的同学相比可能机会会少一些。
- 针对你的选择,你给自己的大三设定的规划安排是什么?
大的规划是在学习好专业课程知识的同时,在课外尽可能的多提升自己的专业技能,做项目去丰富自己在专业方面的经验。平时要注意计划安排,阶段性地完成自己的目标,就像博客A[1]里写的,把每天要做的事情分为ABCD四类,这样更有助于规划好时间,让做事情的效率得到提高。
[1]https://book.douban.com/subject/4006425/discussion/22803733/
三.提有质量的问题
- 快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。注明是哪一章哪一节。要有观点、有证据或分析。字数不是直接的考核标准,但是要求篇幅长到能把观点表述清楚。
问题一:我反对作者的观点,(关于第二章单元测试)
单元测试必须由最熟悉代码的人(程序的作者)来写。
我的观点:
会不会由另一个人写出的单元测试更好呢?
理由:
我认为在编写单元测试时,由于自己写程序的惯性思维,作者往往只能考虑到自己在写程序时考虑到的和遇到的问题,而往往会忽略掉某些问题。如果由另一个人来写单元测试,会不会发现作者忽略掉的问题呢?我认为有可能效果反而会更好。
问题二:我看了这一段文字,(关于第三章软件工程师的成长)
在中国,软件工程师的考试有:计算机等级考试和全国计算机技术与软件专业技术资格考试
有这个问题:
对于一个软件工程师,他的能力应该如何量化地评定?这些考级能够真正的评定软件工程师的能力吗?
我的思考:
这样的“软件工程师职业资格考试”也许能相对公平的评定出一个软件工程师的专业知识,但是我认为这无法全面的评定软件工程师的专业技能,以及在实际的软件开发中他是否能很好地完成工作。像书中所说,此类考级确实有一定的权威性和通用性,并且任何人都能参与,但是,对于团队合作能力、沟通能力等等,不能进行很好的考察。
问题三:我看了这一段文字,(关于第四章结对编程)
1.驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
2.领航员:审阅驾驶员的文档;监督驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。领航员也可以设计TDD中的测试用例。
有这个问题:
结对编程究竟是如何运作的,如果是如举例的驾驶员与领航员之间的搭档关系,那么在编程中一个做设计与开发工作,而另一个则负责监督与部分测试,这样本来一个人就可以完成的工作,是否是一种人力资源的浪费呢?
我查了资料,有这些说法:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
根据我的实践,我得到这些经验:
结对编程确实能够更有效地解决问题,工作的效率也会得到提高,并且易于交流。
但是我还是不太懂,我的困惑是:
在实际的开发中,结对编程真的是有效率的方法吗?它比普通的两人团队效率会更好吗?如果两人同时撰写再审查,是否会比结对编程效率高?
问题四:我看了这一段文字,(关于第十六章IT行业的创新)
原始布局设计的优点反而成了缺点。但是,长期以来,人们已经习惯了QWERTY键盘,所谓先入为主。
有这个问题:
真正好的想法不会赢吗?
我的思考:
我认为优化布局之所以没能撼动原始布局,是因为没有做到“足够好”。倘若优化布局较原始布局会给用户带来非常大的便利,那么我相信在经过坚持的推广之后,人们会渐渐尝到打字效率提高的甜头,会很乐意摒弃之前的习惯,很快原始布局键盘会被淘汰。所以我认为好的想法只要足够优秀成熟就会赢。
问题五:我看了这一段文字,(关于第十六章IT行业的创新)
70%的创新者说,他们最成功的的创新,是在他们的那首领域之外发现的。
有这个问题:
为什么领域的专家有时候没有领域外的创新者那么有新意?
我的思考:
我认为其中的原因可能是当一个人成为了某领域的专家,那么他应该会沿着这个领域继续去更深层次地钻研,很多思维已经被这个领域所固化了,无法突破这个局限,很难再创造出这个领域里“创新”的东西了。
四.了解和调查源程序版本管理工具
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,列举至少三个或以上的版本管理软件各有什么优缺点? (提示:搜索一下Microsoft TFS、Git、Mercurial、GitHub、Bitbucket、Trac、Bugzilla、Rational,Apple XCode)
Git
有优秀的开源社区github。
Git支持分支功能。
可拿Git做备份系统,或者同步多台机器的文档,很方便。
支持离线工作。
Git 提交都是原子的,且是整个项目范围的。
学习成本大。由浅入深的过度很漫长,需要大量时间的投入。(有合适的教程其实很快)
Git版本库需要频繁的手动维护。
使用难度大。
SVN
对中文支持好,操作简单。
较好的权限管理功能,可以精确控制每个目录的权限。
集中式,如果中心服务器出现问题,所有人都不能正常工作。
commit必须要求联网。
提交、更新、浏览历史的速度慢。
代码不能及时提交。
Mercurial
采用了分布式系统,管理更加轻松。
不需要定期维护资料库。
在合并时只允许两层父阶层版本异动
学习门槛较低。
分支管理不灵活。Mercurial的branch管理和Git相比不是很方便。不适合大型团队使用。