任务1 第一章
1.1 软件 = 程序 + 软件工程
程序=数据结构+算法
一个复杂的软件是从一个简单的程序,扩展到一个满足各种功能的应用软件,再扩展到一个能保证服务质量的软件服务。
程序,在这里指的是源程序,就是一行行的代码,是建立在数据结构上的算法。
一个复杂的软件要有合理的软件架构(Software Architecture)、软件设计与实现(Software Design,Implementation and Debug),还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等等。
我们还有一系列复杂的工具、流程和文档来保证程序的正确性,这就是质量保障,具体的验证过程叫做软件测试。
软件的生命周期=需求分析+程序理解+软件维护
软件企业的商业模式也会影响软件的需求。广义上的软件工程也包括用户体验、用户界面设计(User Interface Design)等。所以,一个推论是:
软件=程序+软件工程
一个扩展的推论是:
软件企业=软件+商业模式
软件开发的不同阶段:
1 玩具阶段
2 业余爱好阶段
3 探索阶段
4 成熟的产业阶段
1.2 软件工程是什么
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
1.2.1 软件的特殊性
- 复杂性(Complexity)
- 不可见性(Invisibility)
- 易变性(Changeability)
- 服从性(Conformity)
- 非连续性(Discontinuity)
1.2.3 软件工程与计算机科学的关系
计算机科学 | 软件工程 |
---|---|
发现和研究长期的、客观的真理 | 短期的实际结果(具体的软件会过时) |
理想化的 | 对各种因素的折衷 |
确定性,完美,通用性 | 对不确定性和风险的管理,足够好,具体的应用 |
各个学科独立深入研究,做出成果 | 关注和应用各个相关学科的知识,解决问题 |
理论的统一 | 百花齐放的实践方法 |
强调原创性 | 最好的、成熟的实践方法 |
形式化,追求简明的公式 | 在实践中建立起来的灵感和直觉 |
正确性 | 可靠性 |
1.2.3 软件工程的知识领域
软件工程的三大类基础知识领域:计算基础,数学基础和工程基础。
- 生命周期
- 软件需求
- 软件设计
- 软件构建
- 软件测试
- 软件维护
- 专门领域
- 软件配置管理
- 软件工程管理
- 软件工程过程
- 软件工程模型和方法
- 软件质量
- 理论基础
- 计算基础
- 数学基础
- 工程基础
1.2.4 软件工程的目标 —— 创造 “足够好” 的软件
和软件打交道的专业人士都知道软件有Bug。Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。
什么是bug呢?简单地说,软件的行为和用户的期望值不一样,就叫Bug。
是否是Bug,取决于用户、开发者的不同角度。
1.3 总结
要通过理论学习和具体项目的练习,做到下面三点:
- 研发出符合用户需求的软件
- 通过一定的软件流程,在预计的时间内发布“足够好”的软件
- 能证明所开发的软件是可以维护和继续发展的
任务2 P18-2
初级软件工程师如何成长呢?
我认为有下面几种成长,1. 积累软件开发相关的知识,提升技术技能。例如:对java、c/c++、c#的掌握;诊断/提高效能的技术;对设备驱动程序(Device Driver)、内核调试器(Kernel Debugger)的掌握,对某一个开发平台的掌握。2. 积累问题领域的知识和经验。3. 对通用的软件思想和软件工程思想的理解。4. 提升职业技能。5. 实际成果。
文中初软是这样成长的。但是我有个问题,像我们学生,平时自己学习软件方面的知识,偶尔可以自己写个app,搭个小网站练练手。积累一下开发经验,但是一段时间,不做编程的话,就会有所遗忘。再编程的时候,一些东西,就会遗忘了,需要各种百度,期间浪费很多时间。大佬级别的开发者,看一眼,接着就有思路,然后写出大概demo的样子。像我这种菜鸡,百度一点写一点,不会太浪费时间了吗?对于初级开发者,那么平时要怎么样才能不容易忘记呢?
怎么做到结对编程?
在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。
介绍就是这么简单,但是学期末的实训中,基本上项目编码都是组长包揽全活,就算组员有想要帮忙的心,有时候讨论来讨论去,还不如自己一个人开发效率高。比方说,组员想用java开发,但是我不会java,我会C,而组员又不懂C。那么怎么实现结对编程呢?是不是需要双方有差不多的能力呢?
获取用户需求——用户调研
- 焦点小组 2. 深入面谈 3. 卡片分类 4. 用户调查问卷 5. 用户日志研究 6. 人类学调查 7. A/B测试
是不是只要不是太离谱的需求都能实现呢?
IT行业的创新
最近几年,我们整个社会似乎对创新都很感兴趣,媒体上充斥着创新型人才、创新型学校、创新型公司、创新型城市、创新型社会等。
创新是刻意的改变,还是不经意的发现呢?我们需不需要刻意地去追求创新呢?
领导力
在软件开发过程中,有许多平等合作,但是也有上下之分的领导/被领导的关系,即使都是平级的员工之间,也有老师傅/新人、某领域的专家/新手之间的领导关系。
如果想要成为一名软件行业中优秀的领导人,需不需要自己具有很强的编程能力呢?
任务2 P18-3
1. 软件分类
-
工具软件
- Magisk Manager
- 黑域
- 冰箱IceBox
- 唐僧藏经
- 八戒助手
- Kernel Adiutor
- Fake Location
-
社交软件
- Tim
- 微信
- 微博
-
支付购物软件
- 支付宝
- 建设银行
- 淘宝
- 饿了么
-
学习阅读
- 百词斩
- 百词斩词典
- 可可英语
- 观止
- 滴答清单
- 笔趣阁
-
游戏软件
- 王者荣耀
- 王者荣耀助手
-
影音视听
- bilibili
- 腾讯视频
- QQ音乐
- 喜马拉雅
-
简易浏览器
- via
- chrome
2. 分析
我选择工具软件的原因:安卓系统的app经常会有启动页广告,通过唐僧藏经上的别人分享热门app的规则,可以跳过广告;还可以通过八戒助手的自动解码,自动解码跳过一些冷门app的启动页广告。magisk获取root权限后,可以通过黑域关闭app后台;还可以通过冰箱关闭一些app的关联启动;还可以模拟定位。这些软件基本都是一些搞机大佬开发出来的。通过一些论坛别人分享下载的。不收费,不过可以选择自愿捐助。
我选择浏览器的原因:像via浏览器,简洁,轻量,极速,而且支持高度定制,不收费,可以自愿捐助。chrome浏览器虽然不如via轻量,但是界面也比较简洁,速度也快。很多同类型的浏览器比较下载的。无广告,不收费。
我选择学习阅读的原因:像百词斩,可可英语,随时随地可以背单词,练听力,他们还有自己的品牌的学习资料,通过出售资料盈利。观止的话,每天推荐一篇优美散文,每天一篇,找回高中的感觉。滴答清单可以每天设置计划,完成以后直接勾掉,方便快捷。笔趣阁是一个可以阅读全网小说的app,完美。无广告,不收费。