原文出处: linuxtoday   译文出处:CSDN

// 伯乐在线转注:英文原文写于 2011 年

导读:没有人比Linus Torvalds更了解软件开发项目管理中的酸甜苦辣了。作为Linux的创建者,Torvalds在过去二十年指导了数以千计的开发者共同改进开源操作系统内核。

文章内容如下:

Linus Torvalds说,有两件事,世界上大都数人,无论是独立开发者还是公司级别的开发团队,都有普遍的错误认知。

其一:“大都数人认为可以把事情丢给其他人,让他们帮忙。在你公开你的想法后,你得假设自己一个人要干完全部的活,然后你在网上征求人们的意见,你应该询问自己该干什么,而不是他们该干什么。或许开始他们会偶尔帮助你解决一些实际问题,但是,必须从一开始就告诉自己这份工作只有你一个人负责,并且做好完成它的准备。”

如果你一开始就认为全世界的人们都会联合起来为你的项目工作,一起创造一个更美好的世界,那么你可能不会走得很远。

其二:“人们往往认为自己写的代码是最重要的东西,而事实不是这样。即使你编写了100%的代码;即使你是世界上最好的程序员并且从来不需要任何帮助。然而最重要的东西也不是你写的代码,而是代码的用户。代码本身不重要;只有当用户真正用到它的时候项目才是有用的。之所以提到这一点是因为它不只是一个程序员的问题,我见过一些公司把追求完美的程序当做事情的全部。”

Torvalds就第二个问题上继续展开言论,他说:“这就是为什么Linux内核团队无法容忍这种‘脱离本质’的东西。比如,为了“修复”某个问题而打破原来的用户体验绝对是错误的观点;千万不要这么干。如果你破坏了用户体验,或许你觉得是在修复问题,但你就犯了刚才说到的第二个错误——你以为代码质量比用户重要,大错特错。”

Torvalds最后总结道:“有太多的项目将代码质量置于用户之上,结果两边都不讨好,而且还不肯承认错误,因为他们觉得是在“修复”问题,并且一点都没错。”

关于开发工具的重要性

关于SCM(Software Configuration Management软件配置管理系统 )工具,比如,以Git版本控制系统的问题为例,他回答说:“我不认为工具是最重要的。”

“现在重要的是你的项目是否有一个好的工作流程,工具当然能够启到帮助的作用,”他说,“但是,大多数的项目其实并不是必须要使用这些工具。许多项目其实并没有那么多改动,多到必须要在他们整个工作流程中使用这些工具;如果你在每个release中只有几百个补丁,你可以随便怎么维护他们,完全手动也不是问题。”

当然,Linux就绝对不是同一个层次的了,“对于内核,我们每个release都有成千上万个补丁,而且基本上每三个月就有一个release,所以对我们来说SCM工具就尤其重要了。”他说,“但我仍然不认为这所有大的错误是因为最初几年开发的目标球和补丁,这是一个小得多的项目,而且直到很多年后是因为缺乏管理工具才显现出来。”

他还说,“一些工具积极鼓励工作流程,我认为CVS(Concurrent Versions System并发版本控制系统)”例如已经影响了很多项目,使他们有了一个概念“承诺团体”,

Torvalds继续说,“我个人认为tar-balls和补丁相比他来说要好得多,因为他们使开发者都是“平等”的。而且你不会遇到这种情况:一些开发者有委员权限而其他的人都是二级权限。有时全部人都只有二等权限要比有人有特权要好得多。”(注:Torvalds很熟悉CVS很而且非常讨厌有很多年时间了。就如他在Google Talk 2007所说的,“我讨厌带着许可证的CVS”。)Torvalds还说:“比工具更重要的是人,是维护者和他们的思想。”

如何把大家都保持在正轨上

现在的人们是怎么一起工作的呢?我向Torvalds提问了关于正在实施中的LKML(Linux Kernel Mailing List ,用来将讨论话题转发给各位开发者。)他回答说:“我认为过去在LKML上发生的讨论比现在的多。LKML中的signal-to-noise和纯信息量表明大多数开发者没有时间仔细地去读LKML——最多他们会扫一下标题栏。所以,现在我主张大多数开发者都在独自完成工作,然后他们会在一个大的开发者范围中发送email告之对方是如何完成的”。

“并不是说LKML不重要,而是说LKML已经成为了独立开发者的公共纽带。所以事情最后会变成这样:你其实只有4-5个人一同参与一个讨论,但是LKML会转发并且让其他人有机会能够参加进来,而不是让他成为一个封闭的讨论。”

接下来说说它怎么工作的,“大多数人其实不阅读LKML,他们经常让它自动存档,只对某几个关键词或关键人物参与的话题感兴趣。”它其实有点类似于某种存档机制。人们可以在日后查阅它,而且很多Bug可以通过Google找到LKML中以前报道的记录。如果某人提出了一个问题,它可能只是个别硬件问题,但如果Google后发现在LKML中已经被提交过几次了,那这个问题原因会有点不确定,但必然不是个案。”

“所以我认为LKML非常重要,但我们不是通过它来保持人们走在正轨上的。所有的开发者都非常主动积极,而且他们都有非常好的意见和想法(核心成员之所以是核心成员因为他们的自我定位)。LKML很重要,因为这是公开讨论的,即使实际中参与某些特定问题的只有特定的一小组人。在开源项目中事情就是和其他不一样。”Torvalds总结道。

关于信任,托付和保持清醒

曾经Linux是一个个人项目。现在他有成千上万的提交者和贡献者。接下来我问道:“现在有多少工作你是交付给其他人做的?对于如何分配才能保持人们思路清晰和遵循工作流程你有什么想法?”

“如果我从中学到了什么的话,那就是你必须学会放手,不要试图控制别人和他们的代码。如果你不信任别人,而一定要监视着他们的话,还是早点放弃这个负责人位置吧。”

他说:“是的,我经常会跟别人纠结一些细节,但不是因为我不信任别人或不愿分配给他们权限。而是因为一些小错误最后会闹到我头上。要么是个Bug(而且都是一些平时忽视的小错误),要么是一些把我弄烦了的工作流程问题(就像今天早些时候我向一个分负责人抱怨开发者的名字显示不正常)。”

Torvalds还说,“你只能偶尔关注一下细节,而不是老是站在开发者后面监视他、检查他写的每一句代码。我相信分负责人做的事99%都是没问题的,然后偶尔我会大声抱怨一些东西。”比如说GNOME桌面系统正在怎么改进,或者根本没有改进。

以上就是全部内容了。这就是Torvalds怎么做的,如果你觉得你比他好,先问问自己:有创造过一个在大多数超级计算机、股票交易和类似于Google这样的网站上运行的世界级的操作系统吗?如果你的答案是没有,如果我是你,我会重新读一遍他的答案并且好好想想自己是怎么维护项目的。

Linus 谈软件开发管理经验的更多相关文章

  1. Linus 谈软件开发管理经验(转载)

    转注:英文原文写于 2011 年 导读:没有人比Linus Torvalds更了解软件开发项目管理中的酸甜苦辣了.作为Linux的创建者,Torvalds在过去二十年指导了数以千计的开发者共同改进开源 ...

  2. Python 浅谈编程规范和软件开发目录规范的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...

  3. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

  4. python浅谈编程规范和软件开发目录规范的重要性

    前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...

  5. 浅谈传统语音通信和APP语音通信音频软件开发之不同点

    本人在传统的语音通信公司做过手机和IP电话上的语音软件开发,也在移动互联网公司做过APP上的语音软件开发.现在带实时语音通信功能的APP有好多,主流的有微信语音.QQ电话.钉钉等,当然也包括我开发过的 ...

  6. 【转载】浅谈TDD、BDD与ATDD软件开发

    转载自(此处仅供学习):http://blog.csdn.net/zhenyu5211314/article/details/22033295 1. 首先了解一下这三个开发模式都是什么意思: TDD: ...

  7. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  8. 浅谈Excel开发:十一 针对64位Excel的插件的开发和部署

    自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集. 随着64位操作 ...

  9. python基础之迭代器、装饰器、软件开发目录结构规范

    生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大 ...

随机推荐

  1. java.lang包学习(转自微学苑)

    Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明.该包中包含了Object类,Object类是整个类层次结构的根结点,同时还定义了基本数据类型 ...

  2. github上面创建文件夹

  3. lnmp 环境搭建

    3.安装 lnmp : wget http://soft.vpser.net/lnmp/lnmp1.3-full.tar.gz tar -zxvf lnmp1.3-full.tar.gz cd lnm ...

  4. ssm项目,web容器无法初始化项目

    在web.xml中配置加载spring时,发现项目无法运行:而去掉spring的配置时,项目可以被初始化. 此时应考虑到spring的配置文件中存在错误,以至于web容器无法对项目成功初始化,在web ...

  5. 转:PriorityQueue

    转自:PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地 分析 ...

  6. 【poj3522-苗条树】最大边与最小边差值最小的生成树,并查集

    题意:求最大边与最小边差值最小的生成树.n<=100,m<=n*(n-1)/2,没有重边和自环. 题解: m^2的做法就不说了. 时间复杂度O(n*m)的做法: 按边排序,枚举当前最大的边 ...

  7. 【51NOD-0】1006 最长公共子序列Lcs

    [算法]经典DP [题解]经典lcs,输出路径可以记录上一个有效节点就是有点麻烦. 因为开始时写法不太明确,打印结果时初始循环地方搞错了,后来修正写法时忘了改过来,调了好久. #include< ...

  8. 基于 Docker 的 Zabbix 微服务系统

    zabbix 官网提供一个镜像 [ zabbix-appliance ], 可以直接拉起一个 zabbix-server. 但是数据库无法分离出来. 本实践使用 zabbix 官方提供的 Docker ...

  9. HDU 1465 不容易系列之一 (错排公式+容斥)

    题目链接 Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上 ...

  10. scikit-learn中的岭回归(Ridge Regression)与Lasso回归

    一.岭回归模型 岭回归其实就是在普通最小二乘法回归(ordinary least squares regression)的基础上,加入了正则化参数λ. 二.如何调用 class sklearn.lin ...