学编程,来源栈;先学习,再交钱
当前系列: 软件工程 修改讲义


首先,为什么要专门学习软件工程?

两个误区:

  • 你不是来学什么什么语言的,你是来学技术的;
  • 你不仅仅要学技术,你还要学工程学管理的!


概念分类

复习概念:软件和硬件、工程和科学

软件工程的特点:

  • 为实现既定目标:大白话首先你要有一个idea,你要“清晰地”(特别强调)知道,你究竟想做个什么出来
  • 利用现有资源:资源包括:技术、人力、物/财力、时间等,他们都是有限的(特别强调“现有”技术,尖端都可以算现有,但还未出现的技术属于科学发明范畴),所以产生了工程学的要求:
  • 科学合理组织:
    • 效益优先:而不是技术优先。这是从(搬砖的)程序员到(做管理的)老大思想上的标志性的升华。
    • 良好的管理:管人管钱管工期,项目经理其实就干这活

项目开发流程

整个软件工程,如果采用瀑布型开发模式,又可按阶段分为:

  1. 需求:弄清楚说明白究竟要做一个什么软件出来!干这事的人现在通常被称之为“产品经理”(公司内部)或者“甲方”(公司外部)。细分的话又还可以包括:美工(把产品界面弄漂亮点)和UI(界面布局更合理更人性)……这个岗位其实不需要什么计算机专业知识,当然懂一点更好,免得提一些莫名其妙的需求被程序员打,^_^
  2. 开发:把需求以代码的形式实现。干这活儿的,就是大家都熟悉的“程序员”(或者“码农”“代码民工”)。这是最核心技术含量最高的岗位,有兴趣了解的同学先点个赞,我们再后面细说。
  3. 测试:开发出来的代码不一定——好吧,我承认,是肯定有问题(被称之为bug)的。所以在正式交付/上线之前还需要测试。干这活儿的被称之为“测试人员”,就类似于工厂里面的质检员,把不合格的产品给找出来。这个岗位又可以分为:
    • 人工测试就像普通用户一样拿着鼠标点点点,几乎不需要任何技术含量;
    • 自动化测试其实就可以算是程序员了,他一样要写代码,所以技术含量也不低。
  4. 支持:软件开发完成,就需要部署(发布),可以是打包压缩成光盘,也可以是发布到服务器网站/APP上线;一般部署/发布之后,还需要监控其运行情况,比如有时候访问量过大,服务器挂了,就要采取一些(不更改代码)的措施,这些岗位都被称之为“支持”,其技术含量高于人工测试,略等于自动化测试。


企业应用

复习概念:应用

其实并不是所有的和网络相关的编程开发都是(我们通常意义上说的)Web开发。Web开发除了好网络相关,和浏览器相关,还应该是一种企业应用

“企业”(enterprise)这个翻译其实是有问题的,容易把人引向:企业/公司级别所开发/使用的应用……让人挠头!但木已成舟,约定俗成。

同学们最好回归其本义:(英英词典

a large or important project, especially one that is new or different

或者,大家想一想:企业号航母……航母和企业(公司)也没关系是不是?

关于“应用”(Application),复习:操作系统


Martin Fowler的定义

那么,究竟什么是企业应用?在这本号称“企业应用开发圣经”的《企业应用架构模式》(强烈推荐!)中

Martin Fowler花了一章节的来进行解释。我总结出来了一些关键字:

  1. pesistent data  
  2. a lot of data
  3. access data concurrently  (要使用“数据库”)
  4. a lot of user interface screens    (很多“用户界面”)
  5. integrate with other enterprise applications
  6. conceptual dissonance:比如:评价(赞/踩/评论……)
  7. complex business "illogic"   (繁杂:业务逻辑)


数据库

Martin的定义1-3:都和数据相关,更通俗粗糙的解释:就是要利用数据库

因为目前来说,数据库是完成大量 数据的持久化,并有效处理 并发冲突 的不二选择。

PS:为什么我学的数算都没用呢?这锅就该数据库来背,^_^

所有的应用,按其是否使用数据库,或者说,看软件的主要目的/功能是不是:

  • 录入/保存数据:添加和修改(包括删除)
  • 检索数据:查找

又可以分为:

  • 数据型:比如一起帮(注册登录/发布/浏览)、淘宝(上架/购物车订单/后台账目)、医院挂号、银行取款……
  • 功能型:几乎不需要数据库,比如WPS、CAD、360安全管家……

用户交互

Martin的4:用户使用大量的UI界面和应用进行交互。

Web开发里面就是浏览器里面的一个又一个的网页,里面包含了:内容、链接、表单元素(文本框/选项/按钮……)

复杂的业务逻辑

首先大家要习惯的第一个词:业务(business),有点商业的味道,实际上代指应用应该实现的功能。比如:注册/登录、发布、评论、提交订单……

那么业务逻辑(Buisness Logic)的特点:

  1. complex:复杂的。和数据结构和算法里面的复杂度不是同一个意思。这里用“繁杂”可能更为贴切,意思是造成“复杂”的原因是:繁多、琐碎、七零八落……整个应用是由无数个小功能小模块构成,每一个单个的小功能小模块都很简单;但是,把这些功能糅合在一起,问题就复杂了!
  2. illogic:这里Martin进行了调侃:业务逻辑不逻辑。这个,只有等同学们接触了各种“千奇百怪”的业务之后才会有所体会(参考)。这里说了也是白说,因为“一起帮”的业务逻辑是非常有逻辑性的,^_^
    反对的童鞋可以上来领一个轮椅……

  3. dissonance:概念上的“不一致”。理解一个应用,你首先要理解它里面大量的“概念”,比如“一起帮”里的:帮帮币、悬赏、冻结、求助……但是,不同的应用之间他们的概念完全有可能是不相同的。比如,最简单的用户(User)
    • “一起帮”里面,注册的才算用户;
    • 另外一个系统,只要访问网站的都算用户。
    这种概念上的不一致,对我们理解需求也造成了非常大的困扰。

我们要学习的Web开发,就是典型的企业应用。




学习笔记
源栈学历
今天学习不努力,明天努力找工作

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 软件工程 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码