首先,为什么要专门学习软件工程?
两个误区:
-
你不是来学什么什么语言的,你是来学技术的;
-
你不仅仅要学技术,你还要学工程学管理的!
概念分类
复习概念:软件和硬件、工程和科学
软件工程的特点:
-
为实现既定目标:大白话首先你要有一个idea,你要“清晰地”(特别强调)知道,你究竟想做个什么出来
-
利用现有资源:资源包括:技术、人力、物/财力、时间等,他们都是有限的(特别强调“现有”技术,尖端都可以算现有,但还未出现的技术属于科学发明范畴),所以产生了工程学的要求:
-
科学合理组织:
-
效益优先:而不是技术优先。这是从(搬砖的)程序员到(做管理的)老大思想上的标志性的升华。
-
良好的管理:管人管钱管工期,项目经理其实就干这活
项目开发流程
整个软件工程,如果采用瀑布型开发模式,又可按阶段分为:
-
需求:弄清楚说明白究竟要做一个什么软件出来!干这事的人现在通常被称之为“产品经理”(公司内部)或者“甲方”(公司外部)。细分的话又还可以包括:美工(把产品界面弄漂亮点)和UI(界面布局更合理更人性)……这个岗位其实不需要什么计算机专业知识,当然懂一点更好,免得提一些莫名其妙的需求被程序员打,^_^
-
开发:把需求以代码的形式实现。干这活儿的,就是大家都熟悉的“程序员”(或者“码农”“代码民工”)。这是最核心技术含量最高的岗位,有兴趣了解的同学先点个赞,我们再后面细说。
-
测试:开发出来的代码不一定——好吧,我承认,是肯定有问题(被称之为bug)的。所以在正式交付/上线之前还需要测试。干这活儿的被称之为“测试人员”,就类似于工厂里面的质检员,把不合格的产品给找出来。这个岗位又可以分为:
-
人工测试就像普通用户一样拿着鼠标点点点,几乎不需要任何技术含量;
-
自动化测试其实就可以算是程序员了,他一样要写代码,所以技术含量也不低。
-
支持:软件开发完成,就需要部署(发布),可以是打包压缩成光盘,也可以是发布到服务器网站/APP上线;一般部署/发布之后,还需要监控其运行情况,比如有时候访问量过大,服务器挂了,就要采取一些(不更改代码)的措施,这些岗位都被称之为“支持”,其技术含量高于人工测试,略等于自动化测试。
企业应用
复习概念:应用
其实并不是所有的和网络相关的编程开发都是(我们通常意义上说的)Web开发。Web开发除了好网络相关,和浏览器相关,还应该是一种企业应用。
“企业”(enterprise)这个翻译其实是有问题的,容易把人引向:企业/公司级别所开发/使用的应用……让人挠头!但木已成舟,约定俗成。
同学们最好回归其本义:(英英词典)
a large or important project, especially one that is new or different
或者,大家想一想:企业号航母……航母和企业(公司)也没关系是不是?
关于“应用”(Application),复习:操作系统
Martin Fowler的定义
那么,究竟什么是企业应用?在这本号称“企业应用开发圣经”的《企业应用架构模式》(强烈推荐!)中
Martin Fowler花了一章节的来进行解释。我总结出来了一些关键字:
-
pesistent data
-
a lot of data
-
access data concurrently (要使用“数据库”)
-
a lot of user interface screens (很多“用户界面”)
-
integrate with other enterprise applications
-
conceptual dissonance:比如:评价(赞/踩/评论……)
-
complex business "illogic" (繁杂:业务逻辑)
数据库
Martin的定义1-3:都和数据相关,更通俗粗糙的解释:就是要利用数据库。
因为目前来说,数据库是完成大量 数据的持久化,并有效处理 并发冲突 的不二选择。
PS:为什么我学的数算都没用呢?这锅就该数据库来背,^_^
所有的应用,按其是否使用数据库,或者说,看软件的主要目的/功能是不是:
-
录入/保存数据:添加和修改(包括删除)
-
检索数据:查找
又可以分为:
-
数据型:比如一起帮(注册登录/发布/浏览)、淘宝(上架/购物车订单/后台账目)、医院挂号、银行取款……
-
功能型:几乎不需要数据库,比如WPS、CAD、360安全管家……
用户交互
Martin的4:用户使用大量的UI界面和应用进行交互。
Web开发里面就是浏览器里面的一个又一个的网页,里面包含了:内容、链接、表单元素(文本框/选项/按钮……)
复杂的业务逻辑
首先大家要习惯的第一个词:业务(business),有点商业的味道,实际上代指应用应该实现的功能。比如:注册/登录、发布、评论、提交订单……
那么业务逻辑(Buisness Logic)的特点:
-
complex:复杂的。和数据结构和算法里面的复杂度不是同一个意思。这里用“繁杂”可能更为贴切,意思是造成“复杂”的原因是:繁多、琐碎、七零八落……整个应用是由无数个小功能小模块构成,每一个单个的小功能小模块都很简单;但是,把这些功能糅合在一起,问题就复杂了!
-
illogic:这里Martin进行了调侃:业务逻辑不逻辑。这个,只有等同学们接触了各种“千奇百怪”的业务之后才会有所体会(参考)。这里说了也是白说,因为“一起帮”的业务逻辑是非常有逻辑性的,^_^
反对的童鞋可以上来领一个轮椅……
-
dissonance:概念上的“不一致”。理解一个应用,你首先要理解它里面大量的“概念”,比如“一起帮”里的:帮帮币、悬赏、冻结、求助……但是,不同的应用之间他们的概念完全有可能是不相同的。比如,最简单的用户(User)
-
“一起帮”里面,注册的才算用户;
-
另外一个系统,只要访问网站的都算用户。
这种概念上的不一致,对我们理解需求也造成了非常大的困扰。
我们要学习的Web开发,就是典型的企业应用。