(一)软件工程导学 —— 软件工程师与软件工程团队

南京大学软件工程导学课:《软件工程导学》程序员


软件工程师是干什么的

咱们或多或少都听过软件工程师这个称谓,可是软件工程是具体是干吗的呢?根据坊间或者网络灌水论坛,能够获得一些信息,软件工程师具备如下特征:web

  1. 是互联网时代的弄潮儿,接触新鲜技术
  2. 是码农,是程序猿
  3. 多金,工资高
  4. 工做单调,天天写代码
  5. 工做环境温馨,坐办公室的
  6. 每天加班,996

等等,以至于矛盾的特征,都是坊间对软件工程师的评价。算法

这里抛出一个结论,上面说的都是事实,但又不是所有的事实。编程

看完下面的东西。每一个职业扮演的角色,也就明白了。安全


软件工程的目标

了解软件工程师,首先来搞懂软件工程。网络

软件工程,重点在工程二字上。按照科学的定义,工程:应用科学的方法,在成本效益比 有效的方式下,创建一个机器,解决针对性的现实世界的问题架构

有了工程的定义,咱们看软件工程,就能够理解了,软件工程是开发软件来解决实现世界的问题的。框架

好比已经有的软件,word 解决文书工做问题,导航 解决平常出行问题。svg

可是咱们这是过后的眼光看待问题的,由于,不管是 word 仍是 导航 都已经被发明出来了。工具

若是在事前,那么问题是很差被发现以及处理的。就比如 导航 出来以前,人们都是买地图使用,可是鲜有人能发现须要 导航 这个东西出来解决出行问题,等到 导航 被发明出来之后,人们发现,哦,原来我就须要这个东西,比地图方便易用。

从事前的眼光看待问题,就是软件工程须要处理的问题。

所以软件工程处理的问题,也就是目标,通常有以下特性

  1. 有必定的难度,每一个问题都是新的,不清楚的,由于在你作以前,鲜有人作。
  2. 须要处理的问题很广,你能解决某个领域的问题,那么咱们假设你也能解决另一个领域的问题。全部你须要处理的问题很广。

基于这两种缘由,软件工程中专门分出一类人,来处理这个问题,他们是需求工程师,或者需求分析师,或者你熟悉的产品经理,这几种称呼,描述的一类人。


产品经理

划分出产品经理(需求分析/工程师)的愿景是,帮助软件工程解决上述的2个问题。

所以,产品经理的职责是:专门负责与现实问题打交道,专门负责发现问题、处理问题、肯定问题的业务解决方案

简答说,你要发现用户的问题(痛点)、帮助他们解决这个问题,给出一个业务解决方案。好比,你要发现用户每天使用地图,何不开发一个机器来专门作这件事,而非每次带上纸质地图。

这里的业务解决方案,须要注意下,与工程解决方案不同,它不关心软件的内部细节,如何实现,它只关注现实问题,如,关注用户的成本等。

再回到工程的定义 (应用科学的方法,在成本效益比 有效的方式下,创建一个机器,解决针对性的现实世界的问题) 上,其中问题被丢给了产品经理。至关于起点被解决了。那么问题的终点,建立一个机器,这个机器呢。

按照其余行业,针对某个问题,出作出个具体的机器来针对性的解决,那么这个机器就是计算机,可是这个计算机只是通用的计算机,由于软工面临的问题很广,为每一个问题建立一个针对性的计算机是不现实 的。

软件工程中有一种 软件抽象解决方案 ,用于解决这个问题。通用的计算机+软件抽象解决方案,以此来解决特定问题。

说的大白话一点,就是计算机上装个特定软件,而后解决特定问题。


软件工程的任务

分为 本质性工做附属性工做

其中本质性工做,也就是 开发,附属性工做也就是 安装。这里的开发与安装,与咱们一般理解的不是一回事,开发指的是拿出一套软件抽象解决方案,须要先分析,再设计。安装指的是,将没法落地的软件抽象解决方案落地,也就是进行编码、测试工做。

而且开发工做是永远没法避免的,是困难的,注意这里的措辞永远。由于新问题层出不穷,须要新的解决方案,就须要新的分析、设计。因此说开发是永远没法避免的,并且还难。而安装,则能够经过各类工具、方法使得其变得简单。好比你二十年前写代码和如今写代码,必定是如今写代码更简单些,各类框架层出不穷,解放生产力。可是面对新问题的分析,不管二十年前仍是二十年后的今天,都是同样的,须要独立的分析、设计,没有工具和方法避免。

上文已经提到,开发主要是指:分析、设计。其中具体含义以下:

分析,是产品经理通过对问题的分析,拿出业务解决方案。

设计,则是将业务解决方案回归到工程解决方案。

这里的设计,有好几类工做的划分。


xxx设计师

设计师,一个团队的标配是:人机交互设计师、体系架构设计师、详细设计师

其中详细设计师必定是程序员,也就是须要扎实的编程经验,可是不是全部的程序员都是详细设计师。

上面提到的是标配,可是在某些复杂问题下,还有许多其余设计师出现,如网络环境比较复杂,则须要有网络设计师;若是安全很值得关注,则还须要安全设计师,等等。


程序员

附属性工做的编码,就是程序员作的。按照设计师的设计,完善细节。


测试人员

附属性工做的测试,就是测试人员作的。

主要是按照,产品经理当初给出的业务解决方案,测试程序员编写的程序,是否知足需求,若是不知足,则说明这中间有问题,或者理解出现问题、或者出现bug了。


项目经理

再回到工程的定义,其中有个 成本效益比,整个开发+安装过程,咱们须要注意生产的控制:对时间、成本、质量的把控,这关乎软件开发的成败。

对时间、成本、质量进行把控,通常都是由项目经理作的。


辅助管理人员

若是项目很庞大,一个项目经理是不够的,就须要其余人员来帮助管理,如配置管理人员、生产管理人员,他们虽然挂着管理的名头,可是不是管理层,和开发、测试等属于一个级别。相辅相成。


软件工程师是干什么的

最后再次回到这个问题,咱们发现,咱们大概能够回答了。

咱们发现。软件工程师根本不是具体的,至少能够细分为,产品经理、设计师、程序员、测试、项目经理。

而以前的那些平价,对应于其中,因此那些都是事实,但又不是全部的事实;好比高薪,那么产品经理、架构师、项目经理的,说到加班、996,青春饭,那多是普通的程序员。




软件工程的三驾马车

它们是软件工程中最重要的三个角色。


产品经理

是产品的灵魂、把控整个产品的方向、定义产品实现的细节、构建业务解决方案。

  • 把握方向

    之因此,说它们是产品的灵魂,把控产品的方向,是由于他们掌握着产品的最终目标,最终产品是这个什么样,全是产品经理把控的。

    比如淘宝和京东,两者的产品经理的目标就不同,一个是作自营、一个是作电商的平台。

    产品经理为了把握好目标、方向,会进行一些假设、而后拿出原型,根据反馈,再评估下方向是否合理。这里面有许多方法,好比目标、利害关系人、场景等分析,这里仅是导学课,老师没展开讲。

  • 定义细节

总之产品经理很重要!!!一个好的产品经理更是少见。他们的工资是高的,他们也不用写代码,码农跟他们不搭嘎,可是他们须要写 文档

若是须要一个好的产品经理,可是又找不到这样的,可使用 team 来弥补下,就是创建一个产品团队,用一个团队来弥补我的的欠缺。


架构师

决定产品的质量,是整个团队的技术权威

凡是技术问题不会的,均可以去找架构师,这个技术问题,包括程序员以及测试人员的技术问题。

架构师须要 经验、知识、天赋,其中经验占比重最大。一个好的架构师也是很可贵的。

一样的高工资,与产品经理有的一拼。

写关键代码、困难代码、文档。

若是找不到一个好的架构师,一样可使用 team 弥补下。


项目经理

协调整个团队,具备领导力、领导、团结、激励你们

是一个决策者,须要决策团队的选择。

是问题的解决者,当出现问题的时候,而非去寻找产生问题的人,而后去处罚。

讲究激励团队,而非处罚。在软件工程中,命令与惩罚无效。由于程序员能够作在电脑面前一成天,可是一行代码不写。

由于须要决策,特别是在一些出现重大问题的状况下,作出决策,须要承受必定的 压力

也比较 ,由于须要计划、跟踪、监控整个团队的进度。




其余角色


人机交互设计师

主要是交互。使得软件具备如下特性:

  • 易学习,天然工做(word)
  • 高效工做(扫描收银)
  • 低记忆负担
  • 避免错误
  • 吸引眼球
  • 使用方便

须要必定的美学,还要了解行为,基本不须要会写代码。


程序员

软件开发中的中流砥柱。

通常具备以下特性:

  • 要具备抽象能力
  • 逻辑思惟要强
  • 算法能力(这条是普通程序与高级程序员的划分,也是薪水的划分)

不一样的程序员的生产效率比能有 20:1 这么大,可是两者之间的薪水差距要小的多。

有的代码须要创造性,须要高级程序员(算法),可是85%的代码是重复出现的,所以在软件开发中,接触高端技术、须要创造性是少数。

普通程序员,是比较吃青春饭的,对软件工程师的吃青春饭的印象,通常是这类程序员留下的。同时,他们的工资也通常,以代码为生,讨厌写文档。

发现了吗。写文档的工资比写代码的高。写文档的更赚钱。


软件测试

首先,测试不是像用户使用软件那样,用鼠标点几下就行了,测试也是须要写代码的,测试代码。

测试,之前是完备性测试,测试有效性,可是好多状况下,完备性是测不完的,太多种可能了,后来改成缺陷性测试,只要测出来的 bug 越多,则表明隐藏的 bug 越少。

地位、工资与程序员差很少。可是一直在测试,没有程序员写代码创造有成就感,有点枯燥。

同时地位比较尴尬,测出来的 bug 多,程序员头疼,测出的 bug 少,本身头疼。


维护工程师

这里的维护,不是其余行业的维护、保养的意思。而是增值、附加值、修改等意思,为软件添加新功能、修复 bug

地位比较尴尬,不受重视,成就感低,好比,程序员去找工做的时候,本能的找开发岗,而不去找维护岗。高级的程序员会被调去开发,而非维护。

工资与程序员差很少,有时候还低。

可是干的活,还比较难,由于须要理解、甚至修改别人的代码。写代码的都知道,看别人的代码是怎么样的体验。

可是行业调查发现,维护工程师确是软件工程从业者最多的行业,说明维护软件的成本很高。

相关文章
相关标签/搜索