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

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


软件工程师是干什么的

我们或多或少都听过软件工程师这个称谓,但是软件工程是具体是干嘛的呢?根据坊间或者网络灌水论坛,可以得到一些信息,软件工程师具有以下特征:

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

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

这里抛出一个结论,上面说的都是事实,但又不是全部的事实。

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


软件工程的目标

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

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

有了工程的定义,我们看软件工程,就可以理解了,软件工程是开发软件来解决实现世界的问题的。

比如已经有的软件,word 解决文书工作问题,导航 解决日常出行问题。

但是我们这是事后的眼光看待问题的,因为,无论是 word 还是 导航 都已经被发明出来了。

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

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

因此软件工程处理的问题,也就是目标,一般有如下特性

  1. 有一定的难度,每个问题都是新的,不清楚的,因为在你做之前,鲜有人做。
  2. 需要处理的问题很广,你能解决某个领域的问题,那么我们假设你也能解决另外一个领域的问题。所有你需要处理的问题很广。

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


产品经理

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

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

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

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

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

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

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

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


软件工程的任务

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

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

并且开发工作是永远无法避免的,是困难的,注意这里的措辞永远。因为新问题层出不穷,需要新的解决方案,就需要新的分析、设计。所以说开发是永远无法避免的,而且还难。而安装,则可以通过各种工具、方法使得其变得简单。比如你二十年前写代码和现在写代码,一定是现在写代码更简单些,各种框架层出不穷,解放生产力。但是面对新问题的分析,无论二十年前还是二十年后的今天,都是一样的,需要独立的分析、设计,没有工具和方法避免。

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

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

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

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


xxx设计师

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

其中详细设计师一定是程序员,也就是需要扎实的编程经验,但是不是所有的程序员都是详细设计师。

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


程序员

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


测试人员

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

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


项目经理

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

对时间、成本、质量进行把控,一般都是由项目经理做的。


辅助管理人员

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


软件工程师是干什么的

最后再次回到这个问题,我们发现,我们大概可以回答了。

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

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




软件工程的三驾马车

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


产品经理

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

  • 把握方向

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

    好比淘宝和京东,二者的产品经理的目标就不一样,一个是做自营、一个是做电商的平台。

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

  • 定义细节

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

如果需要一个好的产品经理,但是又找不到这样的,可以使用 team 来弥补下,就是建立一个产品团队,用一个团队来弥补个人的欠缺。


架构师

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

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

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

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

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

如果找不到一个好的架构师,同样可以使用 team 弥补下。


项目经理

协调整个团队,具有领导力、领导、团结、激励大家

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

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

讲究激励团队,而非处罚。在软件工程中,命令与惩罚无效。因为程序员可以做在电脑面前一整天,但是一行代码不写。

因为需要决策,特别是在一些出现重大问题的情况下,做出决策,需要承受一定的 压力

也比较 ,因为需要计划、跟踪、监控整个团队的进度。




其他角色


人机交互设计师

主要是交互。使得软件具有以下特性:

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

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


程序员

软件开发中的中流砥柱。

一般具有如下特性:

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

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

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

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

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


软件测试

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

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

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

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


维护工程师

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

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

工资与程序员差不多,有时候还低。

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

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

内容概要:本文档是详尽的 Android SDK 中文帮助文档,介绍了 Android SDK 的核心概念、组件、开发环境搭建、基础开发流程及常用工具使用指南。首先解释了 Android SDK 的定义及其核心价值,即提供标准化开发环境,使开发者能高效构建、测试、优化 Android 应用。接着详细列出了 SDK 的核心组件,包括 Android Studio、SDK Tools、Platform Tools、Build Tools、Android 平台版本系统镜像。随后,文档提供了详细的环境搭建步骤,适用于 Windows、macOS Linux 系统,并介绍了基础开发流程,以“Hello World”为例展示了从创建项目到运行应用的全过程。此外,还深入讲解了 ADB、AVD Manager SDK Manager 等核心工具的功能使用方法。最后,文档涵盖了调试优化工具(如 Logcat、Profiler Layout Inspector)、关键开发技巧(如多版本 SDK 兼容、Jetpack 库的使用资源文件管理)以及常见问题的解决方案。 适合人群:具有初步编程知识,希望深入了解 Android 应用开发的开发者,尤其是新手开发者定经验但需要系统化学习 Android SDK 的技术人员。 使用场景及目标:①帮助开发者快速搭建 Android 开发环境;②指导开发者完成基础应用开发,理解核心工具的使用;③提高开发效率,掌握调试优化技巧;④解决常见开发过程中遇到的问题。 阅读建议:此文档内容全面且实用,建议读者按照章节顺序逐步学习,结合实际开发项目进行练习,尤其要注意动手实践环境搭建基础开发流程,同时参考提供的扩展学习资源,进步提升开发技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值