这个作业属于哪个课程 | <课程的链接> |
这个作业要求在哪里 | <作业要求的链接> |
我在这个课程的目标是 | 能够明白软件工程的原理和软件开发流程,清晰的了解开发过程 每一个节的重点和难点,并如何去解决。退能够知道软件开发的 全局,进可以开发过程的细节,同时明白团队的意义。 |
这个作业在哪个具体方面帮助我实现目标 | 这个作业让我明白了如何做一个合格的软件工程师,并且如何努力并成 为一个优秀的软件工程师,如何在这个领域从小白到大牛的过程。 |
一.建立博客并介绍自己
- 在cnblogs.com上注册开设博客。(并在作业中附上自己的博客地址)
我的博客地址:https://www.cnblogs.com/wang20173/
2.自我介绍
我是来自2017级软件工程3班的学生王力,喜欢骑上自己的摩托车,去自己想去的的地方,追寻自由的感觉,并欣赏沿途的风光,
特别希望来一次川藏线之旅。
二.阅读与思考
阅读以上材料,并回答下面几个问题:
(1)回想一下你初入大学时对软件工程专业的畅想
- 当初你是如何做出选择软件工程专业的决定的?
小的时候看见电影里面的黑客在计算机键盘上飞快地敲击代码,心里面不由自主的产生了一些仰慕之情,到了高考结束,填志愿的时候,
了解到近几年软件工程行业比较火,平均薪资可观,同时我国在软件方面人才紧缺,因此就喜欢上了这个专业,并且自己的性格特点也比较
适合在这个专业学习发展,因此最终选择了软件工程专业。
- 你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?
基本上符合。说实话刚开始还真的不符合我的预期,因为刚刚来到大学,大一上就学了C语言,大一下也仅仅学了数据结构及算法,完全是看不见的东西,
和想象中在计算机或手机上面跑的软件完全是两回事,这种偏基础理论的课程和我想象的编写软件有一定的出入,但经历了大二上的学习和这学期正在学习的《软件工程原理》
让我明白了万丈高楼平地起,基础极为重要,通过基础学科的学习,在学习软件工程这一系统性的课程,让我把软件工程的知识贯穿了起来,知道了一个软件是如何从提出到开发出来,
最后如何运行维护,再消亡。现在更接近了我的期待。
- 你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?
我觉得软件工程是我喜欢的领域,同时也相对是我擅长的领域。虽然相比其他人我目前的水平很有限,当我相信在不久的将来,我会擅长并精通这一个专业。软件工程这个专业逻辑性也比较强,
我也很喜欢这方面的东西,喜欢编程解决面临的问题,看到自己的代码成功编译运行,这种喜悦感让我喜欢这个专业。
- 将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
我将来会选择从事软件开发相关的工作。我想去深圳,公司当然是向往大公司,岗位是后台开发。我认为大城市大公司的机会更多,成长地更快,自己的职业生涯前景会更好,哪怕是更累,
快节奏,我觉得我也愿意。
(2)即将大三的你,对照前人们走过的路和描述未来发展,现在的你
- 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?
目前掌握的程序语言有C,C++,C#,知道数据结构及算法,掌握了数据库及原理,知道怎么去建立数据库,维护数据库,可以写一个简单的信息管理系统。
估计代码量在10000~20000。
- 离成为一个合格的软件工程专业本科毕业生,在专业知识、技能、能力上还差距哪些?
首先专业课没有学完,九门专业课目前只学习了五门,在专业知识方面距离软件工程本科毕业生还有较大的差距,其次代码量远远不及毕业生,
另一个是项目开发经验不足,大一大二绝大部分时间是在学习专业基础知识,几乎没有项目经验,所以在实践方面与软件工程毕业生还有较大的差距。
(3)大三是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
- 对照以上你阅读的前人们的经历,你的选择是什么?
我会选择考研。我在考研和工作之间一直犹豫,如果直接工作多话,同样的时间会比研究生多三年的工作经验,而这三年的工作经验在薪资方面或许更有优势,
但我在这个行业我究竟想要什么,发展到什么地步,一直当开发人员?如果烤研究生,我又是追求什么?为了什么,混文凭还是搞研究?仔细想想之后,我最后还是
觉得考研是相对较好的路。我觉得在本科阶段,所学的知识很短浅,很多课程只学习了基础,并没有深入学习,我想在研究生阶段在这个专业更加深入的学习三年,我想
对以后的职业生涯更清晰,更有帮助。
- 在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
优势:喜欢学习新知识,比较喜欢独立思考探索问题。
劣势:自律性比较差。
- 针对你的选择,你给自己的大三设定的规划安排是什么?
首先学好专业课程,在大三上的时候专业核心课就可以学完,其次学好英语,任何时候英语非常重要,最后合理规划时间,准备考研内容。
三.提有质量的问题
- 快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。注明是哪一章哪一节。要有观点、有证据或分析。字数不是直接的考核标准,但是要求篇幅长到能把观点表述清楚。
(如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html,以及在互联网时代如何提问题。 还有这些要点:- 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文。
- 列出一些事例或资料,支持你的提问 。
- 说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾?
一个模板可以是这样:
我看了这一段文字(引用文字),有这个问题(提出问题)。我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。
【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。
d. 大学生应该能写出自己的思考, 而不是摘抄书本内容。
e. 提示:编程经验不多的同学,建议看16章 “创新”, 提出自己的问题。)
提问:
问题一:6.1敏捷流程的原则
敏捷开发的原则:1.尽早并持续地交付有价值的软件以满足顾客需求。
2.敏捷流程欢迎需求的变化,并利用这种变化来提高用户的竞争优势。
3.经常发布可用的软件,发布间隔可以从几周到几个月,能短则短。
4.业务人员和开发人员在项目开发过程中应该每天共同工作。
5.以有进取心的人为项目核心,充分支持信任他们。
6.无论团队内外,面对面的交流始终是最有效的沟通方式。
7.可用的软件是衡量项目进展的主要指标。
8.敏捷流程应能保持可持续的发展。领导、团队和用户应该能按照目前的步调持续合作下去。
9.只有不断关注技术和设计,才能越来越敏捷。
10.保持简明——尽可能简化工作量的技艺——极为重要。
11.只有能自我管理的团队才能创造优秀的架构、需求和设计。
12.时时总结如何提高团队效率,并付诸行动。--《构建之法》
什么时候合适选择敏捷流程,对于开发项目有什么界定来选择敏捷流程?
问题二:4.3.2goto
函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。
疑惑:大一的时候,老师告诉过我们写程序尽可能不要使用goto语句,这里我更加困惑,goto什么时候才可以使用,有什么优缺点?
问题三:1.5.4如何结对编程
疑惑:作者提到了如何结对编程和两人合作的技巧,在真正开发软件的过程中,这种结对编程的意义是什么,有多大,从经济角度来看是否
合算,在现在的企业中这种开发方式占比多少。
问题四:‘
11.25.2每日构建
在我们的全球调研中,我们发现成功公司中有94%每天或者至少每周完成构建,而
不成功公司绝大多数每月甚至更少去做构建......当有一个能运行的系统时,即使是一个简单的系统,(团队的)积极性也会上升。
疑惑:这种情况和软件过程模型的原型模型有什么区别,会不会与瀑布模型相矛盾,尤其是开发大型软件,这种情况还可以适用?
问题五:13.2.5软件测试的回归测试
疑惑:对于回归测试,感到非常抽象,其中什么是基准线?
问题六:17.6,绩效管理
疑惑:现在的软件公司中,是怎样考核一个程序员的绩效?
四.了解和调查源程序版本管理工具
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,列举至少三个或以上的版本管理软件各有什么优缺点?
GIT
优点:
- 比svn更快速的分支切换,因为分支都在本地。这使得git特别适合处理临时需求,或者小实验。
- 可以在星巴克写代码的时候随时提交,因为各版本快照(commit)都在本地
- 有一个全世界最大的开源社区——github,上面可以看到各种优秀的各语言代码,去官网语言列表看看才知道有那么多语言,就跟奥运会开幕式才知道世界上有那么多国家一样
缺点:
- 因为是分布式的,每台机器上都commit的时候,有的时候忘记了push到远程服务器(github),那就不同步了。不过常常status一下看看状态,问题不大
不知道是优点还是缺点的:
- 要使用命令行(我在windows下装的git bash),其实用gui也是可以的,但基本上还是命令行更灵活,而且有一本专业开源教程《Pro Git(中文)》,而且如果遇到问题可以在stackoverflow上去搜解决方案,答案都是命令行
GitHub
优点:
- GitHub是一个非常万能的工具。对于任何大小的项目,他都是理想的工具;他也是伟大的web工作流工具。首先,他可以作为一个版本控制系统和协作工具,用它来发布工作
。 - 利用GitHub,你可以将项目存档,与其他人分享交流,并让其他开发者帮助你一起完成这个项目。优点在于,他支持多人共同完成一个项目,因此你们可以在同一页面对话交流。
- 创建自己的项目,并备份,代码不需要保存在本地或者服务器,GitHub做得非常理想。
- 学习Git也有很多好处。他被视为一个预先维护过程,你可以按自己的需要恢复、提交出现问题,或者您需要恢复任何形式的代码,可以避免很多麻烦。Git最好的特性之一是能够跟踪错误,这让使用Github变得更加简单。Bugs可以公开,你可以通过Github评论,提交错误。
- 在GitHub页面,你可以直接开始,而不需要设置主机或者DNS。
SVN
优点:
- 对目录的组织的管理更加方便。SVN不光对文件做版本跟踪,也会对目录做版本跟踪。因此可以根据项目的需要,对目录结构随时进行修改,可以把现有的目录移动到新的地方。
- 保证提交操作的完整性。SVN对提交操作的处理方式类似数据库的事务处理,要么全部成功,要么全部无效,保证了原子性。
- SVN允许一个文件有任意多的可命名属性,功能十分完全。
缺点:
- 不能离线工作。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。
- 提交、更新、浏览历史的速度慢。耗费CPU资源。
- 代码不能及时提交。强迫使用者即时处理冲突,然后才能提交。
- 不能恢复到历史版本。SVN记录了单个文件的历史版本,但没有记录全局版本,不能恢复到上次的状态。
- 需手动“cleanup”。很多评论回复这点让他们抓狂。
Mercurial(hg)
- 优点:
- 学习门槛较低。整体上看,hg需要掌握的命令要比git少很多。
- 可以一键完全恢复到历史版本的某一个切面。
- 封装好。相比git,hg很少暴露一些实现内的细节。
- 照顾 svn 的迁移用户。hg 的很多命令是迁移自 svn 命令的,目标其实是为了让 svn 用户更容易接受。这使得已经习惯 svn 命令的团队,几乎零成本的切换到 hg。
- hg 的 pull 更多的时候可以让你避免创建分支。hg 好比苹果系统,git 好比 Linux,前者在常用命令上更好用更易用,后者在功能上更强大更灵活。
- hg的版本库不需要维护。
- 缺点:
- 分支管理不灵活。Mercurial的branch管理和Git相比不是很方便。大型团队不愿使用。
Microsoft TFS
优点:
- 任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用集成了项目管理、版本控制、BUG 跟踪。
- 能有效实现 SCRUM能与 VS 无缝接合。
- 缺点:
- 搭建、维护tfs比较复杂,硬件要求也比较高。
- 整个系统是用 asp 实现的,用浏览器访问相当慢。