高质高效软件开发组织能力模型

背景
至今,我在Motorola网络部工作超过了5年,所在的产品线也是采用统一软件开发过程和敏捷思想(但不是SCRUM)来组织软件开发活动的,但这5年多的工作经历从未引起我象微博上对于SCRUM话题的激烈讨论这样的思考。原因之一可能是,公司的流程已经很成熟了且形成了一种文化,不论怎样的新人进入公司,都只需按照流程按步就班的工作就行了。另外,公司的开发流程并不包含象SCRUM所要求的形式化内容,使得我在工作中没有机会体会和思考各种行为的利与弊。
 
与周围的同事相比,我自认为自己的工作质量和效率都很突出,这归功于我所掌握的知识、工具、方法和形成的思想。这四大块内容也是将要出版的《专业嵌入式软件开发 — 全面走向高质高效编程》一书的骨架。然而,最近微博上对于SCRUM的讨论使我意识到,我的焦点更多地放在了工程师身上,而忽视了从组织的角度思考如何高质高效地从事软件开发工作。即使这样,我仍持这样一种观点:不论是怎样的开发方法,一定要最终从基层工程师身上找到着力点,因为软件产品的最终质量是他们“码”出来的。一个方法论是否真的有效,得看方法论能多大程度地帮助工程师高效地开发出高质代码,且该方法论被工程师所接受。注意,是“帮助”他们而不是“规范”他们。
 
对于SCRUM我还是一个门外汉(注:Motorola网络部被NSN收购后也要求使用SCRUM,希望到时能写些文章与大家分享所得与体会),但这并不妨碍我思考从事高质高效软件开发我们到底需要什么。
SCRUM是银弹吗?绝对不是,因为她只是一个很粗的开发流程框架,仍无法消除开发活动中的人为因素(但可以减缓)。如果SCRUM不是银弹,那将SCRUM引入到团队中时我们应如何本地化呢?
 
模型
纵观软件行业开发方法论的发展,大多关注于开发过程。这一点从瀑布模型、统一软件开发过程、CMMI和现在的敏捷软件开发方法无一例外。开发工程化的思想深深地影响着软件行业对开发方法论的探讨,但业内也以意识到了软件开发不只是工程,它更包含个体心理、行为等难以工程化的内容。在这里,我想抛砖引玉地提出自己的一个能力模型,来帮助思考我们到底需要什么、走向哪。该模型存在抽象与具体两大层次。让我们先从抽象模型开始,如图1所示。 
图1
 
从面象对象的角度来看,抽象模型是基类,而具体模型则是其派生类。高质高效的软件开发工作需要涉及多个部门的各种岗位,各岗位的能力模型应在抽象模型的基础上进行具体化。为了便于理解,图2所示了我所认为的软件开发部门的能力模型。

图2
意义
引入这一能力模型的意义在于:
    1) 让我始终牢记实现高质高效的软件开发是所有活动的根本目的。
    2) 帮助我们在探索软件开发方法论的道路上时刻关注我们需要什么,并以此了解软件开发方法论解决了什么问题,哪些问题又是开发方法论不能解决的。
    3)为人力资源管理提供一定的框架。引导组织思考:我们需要招聘什么样的人?人员培养的着力点是什么?

结束语
这个模型是我花了不到一天的时间想出来的,所以一定很粗糙。个人认为,这个模型不应只是一种文字游戏的玩法,更应包含一定的实证研究。比如,模型中的关键要素又是什么?各要素的比重是多少?但无论如何,我希望这样的模型不会让我们在诸如SCRUM这样的探讨中迷失软件开发活动的本原,这是我写这篇文章的根本出发点。
 
最后,欢迎读者提出自己的见解和参与讨论。我的微博是@杭州李云(新浪)或@杭州李云(51CTO)。
 
Q&A
1. 软件设计是质量之本,为什么在软件开发工程师模型中没有体现?
答:设计能力应体现在工程师的抽象与概括能力上,这两者在模型中已涵盖。

2. 在软件开发工程师模型中为什么没有体现建模的重要性?
答:建模应是软件架构师的工作内容。建模在模型中可分解为“抽象 + 概括 + 工具”,它其实是设计的一种表达形式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python并发编程之多线程

多线程 线程 1.什么是线程 进程是一个执行空间 , 线程就是其中真正工作的单位 , 每一个进程至少有一个线程(如果我们把操作系统比喻为一个工厂 , 进程就是车间 , 线程就是流水线) 进程包含了运行该程序所需要所有资源 , 进程是一个资源单位 , 线程是CPU的最小执行单位 每一个进…

JavaScript几个难点

1. 立即执行函数 立即执行函数,即Immediately Invoked Function Expression (IIFE),正如它的名字,就是创建函数的同时立即执行。它没有绑定任何事件,也无需等待任何异步操作: (function() { // 代码 // ...})(); f…

真格量化学习

真格量化学习使用 期权的量化回测 引入必须的库: from PoboAPI import * import datetime import time import numpy as np初始化参数设定 以50为例 def OnStart(context) :print("I\m starting...")#设定一个全局变量品种,本策略交易50ETF期权g

智能小程序档案馆——如何给“包”瘦身

上传小程序代码的时候包体积太大不知如何是好?小程序打开速度慢,流量耗费大不知如何优化?在今天的文章里,我们一起来讨论一下如何给“包”瘦身。 为什么要限制包的大小? 我们都知道小程序作为一种 Hybrid 的解决方案&a…

软件架构师的能力与特质

软件开发工程师的职业发展无非两大类:一是做“官”,从事管理工作;二则继续从事技术工作。对于后者,软件架构师(software architect)是很多软件开发工程师追求的理想岗位。在这我想谈一谈软件架构师所需的几…

IntelliJ IDEA编码设置

见:https://www.cnblogs.com/winner-0715/p/6364306.html项目中为了避免乱码等问题应该使用UTF-8编码方式,其实把编码方式设置成UTF-8是创建完项目后就要做的事,按照如图所示进行设置:这里要将Transparent native-to-ascii conversion选项勾选, 否则项目…

C#实现像微信PC版一样的扫码登录功能

现在好些网站都支持扫码登录,感觉上安全了很多,但是本地程序扫码登录的不多,就用C#实现了一下,需要作如下准备 在官网上申请一个企业微信,有条件的话做个企业认证吧,我们的是认证过的,所以账号和本地其他系统的账号是统一的.在应用中创建一个应用,这个是关键,我们扫码就是和它有…

JVM(一)史上最佳入门指南

2019独角兽企业重金招聘Python工程师标准>>> 提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的…

如何成为一个技术“牛人”

今天给浙江大学过来的几个还没有毕业的研究生做面试,这些研究生是想来公司实习的。在面试的过程中,一个学生问我“我们有C/C、JAVA等等多种语言,我如何才能成为某一方面的一个技术牛人呢?这一问题一直困扰着我”,对于这…

python量化数据处理小细节(以后还会不断补充)

使用tushare数据源获取数据后处理 以下都是本人在获得数据后,进行量化回测时,处理数据遇到的各种坑以及解决方案,有些甚至都很幼稚,切勿嘲笑 获取数据 导包 import tushare as ts import pandas as pd import matplotlib #(ju…

Linux find和grep的区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 grep是查找文件中匹配条件的行,find是搜索匹配条件的文件。 1.find:查找文件或目录语法: find 查找位置 文件名或目录名如:在…

Mysql 忘记密码重置教程

https://jingyan.baidu.com/article/454316ab4e9e65f7a7c03ad1.html 百度经验转载于:https://www.cnblogs.com/leaf-cq/p/10410694.html

067:【Django数据库】ORM查询条件详解-range

【Django数据库】ORM查询条件详解-range range:判断某个 field 的值是否在给定的区间中。示例代码如下: # views.py文件内容:from datetime import datetime from django.utils.timezone import make_awaredef index(request):start_time ma…

贴吧爬虫

import requests import re#根据url获取网页html内容 def getHtmlContent(url):page requests.get(url)return page.texthtml getHtmlContent(https://tieba.baidu.com/p/4840106397)#以html中使用re模块解析出所有jpg图片的url #百度贴吧html中jpg图片的url格式:…

别把自己变成了“二等公民”

上周参加一个代码审查会,在会上发现了设计上的一个很严重的错误。于是,我提了好几个问题,想知道为什么会出现这一错误。但是,我的同事告诉我这都是印度团队做的设计。需要提供的一个背景信息是,这个项目是我所在的研发…

jquery函数加载及生成随机数

$(document).ready(function () {var code ; //在全局定义验证码  1.将函数写好 function createCode(){code "";var codeLength 4;//验证码的长度var checkCode document.getElementById("code");var random new Array(0,1,2,3,4,5,6,7,8,9,A,B,C…

rsync解说

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、简介1、认识Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间…

关于java中getClass()和getSuperClass()的讲解

为了讲解这个问题,我们先来看一下下面的代码: package com.yonyou.test;import java.util.Date;class Test extends Date{private static final long serialVersionUID 1L;public static void main(String[] args) {new Test().print();}public void print(){Syste…

期权回测框架设计思路

期权回测,博主已经研究了很长时间,也接触了不少平台,如真格,以及这位博主提供的思路(https://blog.csdn.net/luoqingyong/article/details/107523930),利用backtrader进行期权回测。确实国内做期…

UVA815

这道题主要学到的就是数据结构的组织,一些需要从小到大排列的东西,这些东西还有对应的东西。这个时候使用map可以解决 下面贴出代码。其中所使用的思想,估计这个东西是没法学的,这就只能是灵感 //这是什么吉尔题,题意都…