构建之法-第一次作业

阅读与准备作业

课程属性

作业课程 系统分析与设计
作业要求 第一次个人作业
课程目标 学习现代软件工程的思想
作业目标 阅读优秀博客,回忆初心,规划未来。预习教材,熟悉工具
学号 201731062416
博客地址 博客园博客 个人博客

自我介绍

我是来自西南石油大学的练习时长三年的编程练习生,我喜欢音乐、编程。我是一个自律的人,能够坚持自己的目标的人。并且我觉得我的一个比较大的优点是具备忧患意识,许多事情都能理性分析,提前准备,而不是在幻想中自我陶醉。在日常交往中,我在不熟悉的人面前一般比较羞涩,但是熟悉了还是比较活泼的。(哇,自我介绍好难啊)

阅读与思考

我初入大学对软件工程专业的畅想

  1. 我对软件工程专业的初次了解来源于知乎。知乎上有着众多的程序员,他们是知乎用户群体中最酷的一群人。我从那些大佬口中了解到,小小的程序原来可以帮我们解决大到登录月球,小到给女朋友发晚安等许多有趣的问题。当我填报自愿时,软件工程专业成了我为数不多的比较熟悉的专业。并且当时我认为学习软件工程能够建立自己的能力壁垒使得自己无法被其它人替代(现在看来,我当时是真的天真,现在培训班一两个月就能训练出一个能替代我的程序员了)。
  2. 在过去的学习中,我对所接触到的课程还是比较满意的。理论课程和实际课程相结合,能够提供比较成体系的知识。但许多课程讲的比较基础,需要自己下来花更多的时间(这其实也很正常)。有许多课程都有实践环节,在实践环节中应用所学知识,以项目驱动的方式学习新知识,培养自学能力,收获感满满。但是还是有一些课程不是很满意,感觉和其它课程内容有重叠,知识密度低。
  3. 我觉得我所在的专业是我比较喜欢的领域了,因为我是一个比较能安静的人,我觉得写代码需要静下心来思考的工作非常适合我。并且通过这几年的学习,我发现我越来越喜欢写代码了,简直爱了。
  4. 未来我会选择从事相关的工作。我想留在成都成为一名优秀的Java工程师。我的终极梦想是阿里(好像在这个阶段不管问谁,回答都是想去BAT)。

现在的我

  1. 目前我对Javaweb相关的技术已经有了比较全面的了解,应用层面上掌握的还是不错的。但对背后的基本原理和分布式相关的知识了解还不够深入。对操作系统、计算机网络等重要知识的掌握也只是自学了一些。因为我是一个比较自律的人(几乎每天都有写代码哦),所以这些年积累的代码量还是比较多的,但是你要问代码量有多少行我还真估计不来。在学习过程中我所接触过的最复杂的项目是一个语音数据标注系统,我在项目中主要负责音频的剪切模块和绩效模块的开发,这个项目的难点在于流程复杂,用户角色繁多、并且音频处理占用系统资源多。在项目进行中,因参与人数较多而造成的管理困难,安全性考虑欠缺等问题也成为项目推进的阻力。并且参与项目时,我具备的知识还非常少,所以当时觉得很难(现在看来其实也不简单)。虽然这个项目最后草草收尾,但是给我留下了非常非常宝贵的经验,直到现在有时我还会思考,如果现在的我去做这个项目,我应该怎么做?
  2. 目前我离成为一名合格的本科毕业生的差距主要在,对计算机基本中的一些基本原理的理解还不够深入,对软件工程等相关知识的储备还比较少。而且,天天埋头写代码不仅交际能力变差了,健康情况也不行了(越来越油腻了)。离德智体美的大学生越来越远了啊!

我的未来选择和规划

  1. 我的目标一直都很明确,就是大学毕业参加工作成为一名优秀的软件工程师。
  2. 相比其它选择的同学我觉得我选择就业的优势在于能够很快的进入企业体验真实的开发工作。软件工程是一个实践性非常强的学科,我觉得在企业高强度的开发工作中,至少在初期能够学到很多知识,在加上自己额外的学习我相信我能从基础开发转变为中高级技术员。相比其它选择的同学,我觉得我的劣势主要在于没有了无忧无虑的安逸的学习时光,以后的自我提升可能更多的是忙里偷闲的学习,同时也会更早的感受世界的残酷。并且没有那么宽裕的时间去学习当前非常热门的技术(比如人工智能、区块链,大数据等)。
  3. 我对我的大三设定的目标主要是积累基础知识,学习技术原理为工作做准备。具体的安排可参见我的个人博客
  4. 为实现成为一名优秀的程序员的目标,我前期已经有了一些技术积累,后期就是以工作面试为导向的学习了。参加工作后,我希望我能保持危机感、持续学习、只有这样才能在风云变幻的互联网行业里处于不败之地。

看完书之后的疑问

问题一

所有的测试环节都需要经历一次吗?


书中第二章和第十三章均讲到测试,我在阅读时我发现测试的环节非常的繁多。测试环节已经成为软件开发整个生命流程中非常耗时的部分了。一点小改动也需要经历繁多的测试环节,这些测试项目是否能根据情况进行取舍去?如果可以,那么取舍得原则是什么?

问题二

使用敏捷开发是否只需要简单的做一下需求分析就可以了?


在需求分析中,要求我们在尽可能的明确软件需求。而敏捷开发可以应对需求经常变化。那么我们是否可以在开发环节使用敏捷开发模型,缩短需求分析环节的时间。

问题三

我们要如何进行需求确认?


需求分析是软件生命周期中非常重要的环节。我们应该如何对前期生成的需求说明书进行确认,确保功能的完整,描述清除,逻辑自洽。

问题四

在使用敏捷开发模型时,遇到比较艰难,难以估计时间的任务时如何解决?


我在阅读时发现敏捷开发强调效率,迭代周期较短。但项目中一些任务的时间会难以估计,并且开发难度很高,很有可能因为一个困难的任务而拖累整个进度。如果我们遇到这种任务,我们应该如何调整。

问题五

MFS模型每个成员都需要完成自己的目标,否则将会危及整个项目,那么NFS还适合技术能力较弱的团队吗?


MFS模型中每个成员都非常重要,这是否意味着能力较弱的团队就不适合使用MFS模型了。如果能力较弱的团队也能使用NFS模型的话,应该注意什么?

源代码管理工具

git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理[1]
优点:

  1. 适合分布式开发,强调个性。
  2. 公共服务器压力和数据量都不会太大
  3. 速度快,灵活。
  4. 任何两个开发者之间很容易解决冲突
  5. 可以离线工作
    缺点:
  6. 学习周期相对而言比较长
  7. 不符合常规思维
  8. 代码的保密性较差

Microsoft TFS

优点:

  1. 任务版上能将需求、项目进度一览无余。
  2. 集成了项目管理、版本控制、bug跟踪等功能
  3. 能与vs无缝对接
    缺点:
  4. 搭建维护TFS比较困难,硬件要求比较高

Mercurial

Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现。[2]
优点:

  1. 采用分布式模型易于管理。
  2. 较集中式版本控制系统,系统更将的健壮
  3. 学习使用简单
    缺点:
  4. 基于python,并且只支持python2.7
  5. 相关教程资料较少。

  1. 百度百科,Git词条 ↩︎

  2. 百度百科,Mercurial词条 ↩︎

posted @ 2019-09-11 09:51  zofun  阅读(202)  评论(1编辑  收藏  举报