课程:软件工程原理和方法
作业要求:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2706
课程目标:通过学习《现代软件工程》这本书去了解到什么是真正的软件工程,并且学习到课本内所介绍的新技术新原理,通过对于项目的实践操作努力使自己成为一个合格的初级软件工程师
具体方面:代码的解读、技术的介绍以及对于软件项目流程的详解
作业正文:
一、自我介绍
博客地址:https://www.cnblogs.com/liner-/
自我介绍:现软工17级学生,截至去年还处于一种迷茫划水的状态,每天想着不挂科就好。有时候就是觉得啊不努力不行了,可是又静不下去心学习,现在的希望就是能够把大一学的C和大二上的C#学的更好顺便再自己找找新的编程语言,不求学的花里胡哨,只想有一门扎扎实实地技术。业余的话玩羽毛球比较厉害吧,想抽抽空去考个羽毛球国二裁判证,不过当年的梦想是成为国家二级运动员,不过因为身体素质和时间安排放弃了。偶尔也会看看书什么的,算个假文青吧。
二、阅读与思考
(1)回想一下你初入大学时对软件工程专业的畅想
- 当初你是如何做出选择软件工程专业的决定的?
答:当年填报志愿的时候只知道软件行业出身比较好就业而且薪资客观,冲着以后工资高好就业所以就选了这个专业,也没有过多的去了解软件工程到底是什么。
- 你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?
答:不符合。不是当年所期望的电影里那种黑客场景,也没有能力独立动手自主研发软件,也许是自己在大学学习方面的惰性,更没有学到太多有用而且在外人看来很神奇的技术
- 你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?
答:软件工程确实是我喜欢的领域但是没有学到太多有用的东西所以并不是特别擅长
- 将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因
答:会。重庆、腾讯分公司、Java软件开发工程师
(2)即将大三的你,对照前人们走过的路和描述未来发展,现在的你
- 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?
答:经过程序设计基础、数据结构及算法、数据库原理及应用、面向对象程序设计四门课程的学习,一般的代码程序还是会一点,但是业务能力不强,不能够跟进团队进行开发任务,已经写过的代码量算上平时上机作业差不多几千行吧
(3)大三是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。
- 对照以上你阅读的前人们的经历,你的选择是什么?
答:我想去多了解一下各类编程语言,不再盲目学习,找一门感兴趣且热门的语言好好进行一次系统性的学习,为以后的找工作打一点基础
- 在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
答:我想专注的时候能够很投入地做一件事,虽然有这种想法的时候比较少。天赋上可能差别人一截,急性不是特别好
- 针对你的选择,你给自己的大三设定的规划安排是什么?
答:要把以前没有学扎实的基础课重新好好学一下,多去了解了解前沿技术,丰富一下见识,想办法在假期去业内公司跟进学习一下
三.提有质量的问题
1)在《现代软件工程》这本书3.1中提及个人能力的衡量与发展,对于其中所言个人能力不是特别理解。同样的大学生A和B,A的团队能精确下达模块任务,B的团队却只能给B一个模棱两可的任务,任务交工是A做得很好,B拿出了不是特别切合目的的代码,那么我们能说B比A能力差吗?如果不能,那么个人能力将是在团队中的体现,那又何谈这是个人能力的衡量呢
2)7.2.3中MSF原则中的充分授权和信任的合理性存在争议。公司每接到一个项目都要重新组建团队,新团队的成员之间互相不了解,有一个人出差错将影响大局进度,而使用VSTS、GitHub等系统只能是看到工作进度,并不知道员工是在糊弄了事还是认真完成,这就需要组长的不信任才能发现是否产生了问题。我认为这条原则应该用于长期合作的,互相比较了解的团队。
3)第八章8.5所提到的功能的定位和优先级到底是如何确定的。打个比方来说一个即将交工的软件项目,但是还没开发完,摆在面前的是一堆都不痛不痒但是用户必然会用到的功能,如何来进行取舍?
4)第九章对于项目经理进行了详细的介绍,对于程序员来说,项目经理和产品经理无疑是最大的敌人,那么项目经理和产品经理有什么区别呢。
5)第14章讲到了对于软件质量的保障,其中提到了对于用户不常用的功能暂不设计等正式上线后再慢慢打补丁的行为是否属于一种欺骗,是否会让代码人员怠慢每次都以这种方式交付工程。
四.了解和调查源程序版本管理工具(以下均引自百度百科)
1).Git
优点:适合分布式开发,强调个体。公共服务器压力和数据量都不会太大。 速度快、灵活。任意两个开发者之间可以很容易的解决冲突。离线工作只有一种简单的模型,但非常全面且好用。功能设 计简洁实用上手很快,可用性好(很少访问有问题,即使在我国)
缺点:资料少(起码中文资料很少)。学习周期相对而言比较长。 不符合常规思维。 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
2).Mercurial
优点:更轻松的管理。传统的版本控制系统使用集中式的 repository,一些和 repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial 中就没有这样的困扰,每个用户管 理自己的 repository,管理员只需协调同步这些repository。 更健壮的系统。分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式管理系通常不会因为一两个节点而受到影响。 对网络的依赖性更低。由于同步可以放在任意时刻进行,Mercurial 甚至可以离线进行管理,只需在有网络连接时同步
缺点:不支持基于单个文件的提交信息