| 项目 | 内容 |
| ---- | ---- | ---- |
| 课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/2018CST|
|这个作业要求链接|https://www.cnblogs.com/nwnu-daizh/p/14483282.htm|
|我的课程学习目标|(1)对面向对象语言加深印象
(2)熟练运用博客园
(3)可以自主设计软件项目|
|这个作业在哪些方面帮助我实现学习目标|(1)首次登录Github网站,认识到开源代码对于软件项目的重要性
(2)在本次作业中,初步学会以及了解了博客园的使用方法
(3)对于《现代软件工程——构建之法》一书有了初步的了解,通过查阅资料以及查看作者邹欣老师的博客对软件项目的开发以及管理有了初步认识|

正文

任务1:调查问卷——关于个人代码量、软件项目产出量的认识

在实验课中已经完成,并且课后也重新审视了自己。

任务2:在博客园平台注册个人博客账号和加入班级博客

完成时间较长,因为网络问题以及个人原因。

任务3:注册Github账号

之前已经注册过网站账号,但是一直不会使用,所以也希望通过这门课可以学会Github网站的使用。

任务4:填写博客园、github账号信息

我的博客:https://www.cnblogs.com/wentingxiong/
Github地址:https://github.com/xwt721

任务5:构建之法与博客首秀

- 对Markdown有初步的认识和了解,不同于JavaScript,Markdown更具有简洁、方便、易懂的语法特点,更容易上手以及编写
- 对于《现代软件工程——构建之法》,首先在了解作者的前提下,再看博客或者书会更加简明,重点在于把握软件项目的思想

任务5——《现代软件工程——构建之法》的认识

软件工程是什么?

软件 = 程序 + 软件工程

软件企业 = 软件 + 商业模式

-- 引用自《现代软件工程——构建之法


1.软件、程序、软件工程

       软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

       运用移山公司程序员阿超的例子。起初,阿超只是简单的利用编程软件编写程序完成老师布置的任务,此时这个程序是用来服务于自己,这个阶段属于程序阶段;中期阶段,老师觉得阿超的做法很好,便提出了要求,这些要求只是用来满足一部分人群的需求,这个阶段属于软件阶段;最后,教导主任对阿超的程序赞不绝口,提高了要求,扩大了用户,将整个软件发布在网上,提供更多人使用,这个阶段就是软件工程。
       软件的核心部分是构建管理、源代码管理、软件设计、软件测试、项目管理,那么,广义上的软件工程也包括用户体验、用户界面设计等。
       除此之外,如何成为一名合格的软件工程师或者程序员呢?这也就提到了learning by doing(“做中学”)。程序是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。


2.软件工程与计算机的联系

       何为工程?创造性地运用科学原理,设计和实现建筑、机器、装置或生产过程;或者是在实践中使用一个或多个上述实体;或者是实现这些实体的过程。

表1-1 计算机科学与软件工程的不同侧重点

计算机科学 软件工程
发现和研究长期的、客观的真理 短期的实际结果(具体的软件会过时)
理想化 对各种个因素的折中
确定性,完美,通用性 对不确定性和风险的管理,足够好,具体的应用
各个学科独立深入研究,做出成功 关注和应用各个相关学科的知识,解决问题
理论的统一 百花齐放的实践方法
强调原创性 最好的、成熟的实践方法
形式化,追求简明的公式 在实践中建立起来的灵感和直觉
正确性 可靠性
-- 引用自托尼·霍尔(Tony Hoare )(p13)

       起初,我个人认为计算机科学与软件工程的差别其实不太大的,因为计算机科学也是对于软件项目的,但是,在阅读了邹欣老师的书后倒是感觉到了区别。计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与实践相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会的需求息息相关,软件工程的研究目标都有“人”出现,这些“人”可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。对于此,我觉得计算机科学与软件工程虽然都是两个年轻的学科,但是确实密不可分,是现代社会所需要的产物。


3.软件工程的目标

       侧重点在于:用户满意度、可靠性、软件流程的质量、可维护性

初步学会软件工程,做到下面三点:

  • 研发出符合用户需求的软件
  • 通过一定的软件流程,在预计的时间内发布“足够好”的软件
  • 能证明所开发的软件是可以维护和继续发展的

-- 引用《现代软件工程——构建之法》(p18)

  • 目标:
    • 在给定成本、进程的前提下、开发具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性、可互操作性并满足用户需要的软件产品。
  • 原则:
    • 选取适宜的开发模型
    • 采用合适的设计方法
    • 提高质量的工程支持
    • 重现开发过程的管理

4.总结

       在学习《软件工程》这门课之前,我觉得很有必要先学会Markdown,因为在写这篇博客的时候我感受到了乐趣,并且这次作业我改了三次之多,所以我愿意将更多的时间花费在这门课中。关于邹欣老师的书,我在看之前在网上也找了很多关于这本书的简介或者读后感,其中令我印象比较深刻的知乎上某个博主对于邹欣老师书中的一些看法提出的问题,他觉得编码规范因人而异,不应该花费过多的时间在这方面纠结,那么在我看来,干净,整洁的代码更具有可读性,也更会让其他软件维护人员在维护过程中感到轻松,所以不管是做什么事情,都要有一定的规范。在今后的学习中需要我们更加注重这门课,深入学习和研究。

5.问题
1、在对《软件工程》有了初步的了解以后,对于项目有了很浅的认识,那么什么是好的项目?如何验证一个项目的好坏?
2、之前也有参加校级科研立项的经历,也编写过许多项目代码,但是都是个人完成,所以团队真的很重要吗?
3、之前见过许多项目面临弃项,那么如何才能保证以及判断一个项目可以成功结项?