当前位置: 首页 > news >正文

微软研发致胜策略 06:学无止境

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案,强调团队合作、项目管理和开发流程的优化。该书成为软件开发和项目管理领域的经典著作,受到了广泛的认可和赞誉。


不记录,等于没读。


领导者必须让让团队成员只专注于改善产品的工作上。然而,如果领导者希望他们的项目真正取得成功,他们必须关注培训,以确保每个团队成员定期学习各种广泛有用的新技能。确保团队成员积极成长的一种方法是将个人成长目标与项目里程碑对齐,这可以使每个团队成员每年获得至少六项重要的新技能。程序员在日常工作中确实会获得技能,但这种被动学习的方式使他们的成长速度要慢得多。通过工作分配和明确的教育目标来确保程序员积极学习新技能,领导者不仅帮助项目和公司,也推动了程序员的职业发展。

25 年前的花样滑冰冠军表演,放在现在连小镇上的比赛冠军都拿不到。以现在的眼光看,当年的表演太过于简单了。现在的花样滑冰选手并不比 25 年前的选手条件更好,而是滑冰选手每年都在提高自己的标准,他们都想胜过上一届的全国或世界冠军。

Tom DeMarco 和 Timothy Lister,《人件》一书的作者,他们经常举办“程序设计大战”,用于研究不同公司程序设计师技术水平的差异。他们有两个发现:

  1. 程序设计师之间的表现可谓天壤之别,所需时间甚至有 1:11 的差距;
  2. 来自同一家公司的程序设计师技术水平会差不多。如果一位很差,另一位也好不到那里去,如果一位很棒,另一位也会表现不错,即使这两位程序设计师分属不同的部门也是一样。

这种差异的原因,作者认为是“公司培养程序设计师的环境不同”造成的。作为团队负责人,要对团队成员的技术水平有更高的追求,不能只是达到公司平均水平后就停滞不前。

如果程序设计师只是完成预期的程序设计工作,那还不够好。管理者应该不断提高对下属的要求标准,就像花样滑冰选手的教练一样。当你提高了团队的编程标准时,最终将提高整个公司的平均水平。

五年资历的笨蛋

做的久不是问题,问题是一直做同样的工作。

如果一直在一个岗位,工作个几年就能成为这个领域的专家。但一直在一个岗位会剥夺他们扩展新视界、学习新技术的机会。如果一位工程师在第一年成为文件转换的专家,于是在以后的四年里专门为各种产品的文件格式写转换的程序,这件工作绝对是重要的,但是他的技术只有在第一年里大幅提升,其余四年都在重复工作,没有学新的技术。他有五年的工作资历,但不是五年的工作经验,他只是用五年的时间重复第一年的经验罢了。

从长远来看,培养团队成员的各方面专长,即使导致当前工作进度慢些,几年后你就拥有一个强大的团队。团队中的任何一人,都有能力处理任何一种问题。

受用无穷的技术

在微软,对于刚加入项目的新人,通常会派给他基础性的工作,例如追踪 BUG、修改程序等等。慢慢的新人比较熟悉这个软件后,就可以增加工作难度。这是一种循序渐进的培养方式。当分配工作时,要设法让每个人都能在所分配的工作中学习到新的技术。

训练新员工时,先培养对整个公司所有项目都有价值的技术,然后才培养本项目独有的技术。

让专家再重新学习

总有一天,当初的新人会把本项目所有的程序全部摸熟,他们就暂时没有成长空间了。这个时候,你应该把没有新东西可学的程序设计师推到别人项目去。把所有的程序设计师放在他们可以成长、可以进步的地方,这是管理者对程序设计师和公司的义务之一。
作者刚当上函数库组长的第一周,首席程序设计师想去另一个小组,因为他本人对于一直做同一套软件感到厌倦,他需要扩展到新的技术领域。作者经过确定后,认为这是个让组员学习的好机会,于是慷慨放人。事情的发展出乎意料的好:

  1. 组内其他成员自告奋勇承担起首席程序设计师的工作,这给了新人学习成长的机会
  2. 首席程序员进入了新的技术领域,他所在的新的项目因为他的加入也出乎意料地顺利

总的来说,市区最棒的程序设计师虽然短期内难免要挣扎适应,但长期来看少了一位停滞不前的程序设计师,多了两位积极学习的程序设计师,和一个进行十分顺利的项目。员工成长,公司资产增加。

最近读过什么好书吗

我个人经常读书,充实自己的知识,不断了解新的观念。选一本好书,用几天的时间就可以吸取别人多年来从错误中获得的体会,这是很划算的。

  • 读策略性的书籍,比如《编程精粹—— Microsoft 编写优质无错 C 程序秘诀》、《C陷阱与缺陷》
  • 软件开发方面的书
  • 技术领域之外的书,比如《在哈佛学不到的管理知识》

作者鼓励组员自由选择想追求的技术,但要求大家的个人目标必须符合:

  1. 这项技术必须是对程序设计师本人、项目、公司三方面都有用的。
  2. 目标必须是可以在大约两个月的时间内完成的。
  3. 目标必须有一个可供评量的指标。
  4. 最理想的情况,我希望目标是对项目立即派得上用场的。

确定每位组员每两个月都有一项技术上的进步。

即使反馈

一发现某处需要改进,就立即采取更正的行动。

主管对属下的表现有任何意见都应该立即表示出来,迟来的纠正通常毫无效果。比如主管在年终考评时给某一位程序员很差的成绩,但是在一整年中从来没有提过对他什么地方不满意。程序员并不清楚自己哪里有问题,如果一开始就和他沟通,效果可能会更好。

要点

绝不让团队成员一直做相同的工作,这样会限制他的进步,使他停滞在原来的领域。一旦程序设计师精通了某一个领域,就让他换别的领域做做看,永远让他们学习新的技术。

各种技术的用途范围有所不同,有的技术在一般的项目都用得上,有的技术只有在特定性质的项目才用得上。当你训练团队成员时,必须让他们的技术能在公司发挥最大的用处。最好的办法就是,把应用范围最广的技术放在训练的最前期,应用范围最小的技术放在最后训练。

为了确保每位程序设计师的技术都在稳定地进步,一定要让每个人有个努力的目标,最好的方法是把个人的成长和项目阶段性目标相结合,项目阶段性目标一般是两个月,这样一年就至少六次进步了。假定一位组员在公司工作了五年,那么他会学会30种新技术、或是30本好书……

最好的成长目标来自于即时反馈。如果发现团队成员工作效率低下或重复出现相同错误,请抓住机会制定一个特定的改进目标,使团队成员可以立即采取行动。因为这种即时反馈可以他们立即采取明确的行动。






每一份打赏,都是对创作者劳动的肯定与回报。
千金难买知识,但可以买好多奶粉

相关文章:

微软研发致胜策略 06:学无止境

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…...

学习大数据DAY21 Linux基本指令2

目录 思维导图 搜索查看查找类 find 从指定目录查找文件 head 与 tail 查看行 cat 查看内容 more 查看大内容 grep 过滤查找 history 查看已经执行过的历史命令 wc 统计文件 du 查看空间 管道符号 | 配合命令使用 上机练习 4 解压安装类 zip unzip 压缩解压 tar …...

【18】Android 线程间通信(三) - Handler

概述 接下来我们会从native层来分析一下,Handler做了什么,以及之前提到过的应用层的两个native的调用链。 nativeWake 最早接触这个方法还记得是什么时候吗?MessageQueue#enqueueMessage中,在这个方法的末尾,我们看…...

静态路由技术

一、路由的概念 路由是指指导IP报文发送的路径信息。 二、路由表的结构 1、Destination/Mask:IP报文的接收方的IP地址及其子网掩码; 2、proto:协议(Static:静态路由协议,Direct:表示直连路由) 3、pref:优先级(数值和优先级成反比) 4、cost:路由开销(从源到目的…...

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外, 自Spring3.1开始,Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件…...

@RequestBody接收到的参数中如何限制List的长度?

在Spring MVC中,你可以使用Valid注解和自定义的验证注解来限制List的长度,防止DOS攻击。具体步骤如下: 创建自定义注解:首先,创建一个自定义注解来验证List的长度。 import javax.validation.Constraint; import jav…...

Linux C语言 54-目录操作

Linux C语言 54-目录操作 本节关键字&#xff1a;Linux、C语言、目录操作、遍历目录 相关C库函数&#xff1a;opendir、readdir、closedir 遍历目录 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <…...

Java实战中如何使用多线程(线程池)及其为什么使用?

这个话题在入行之前就想过很多次&#xff0c;很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话&#xff0c;既没有案例也没有什么公式去证明&#xff0c;但是面试中总是被问到&#xff0c;也没有实战经历&#xff0c;所以面试时一问到多线程的东西就无…...

kafka集群搭建-使用zookeeper

1.环境准备&#xff1a; 使用如下3台主机搭建zookeeper集群&#xff0c;由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内&#xff0c;故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载&#xff0c;或者使用如…...

【python】Numpy运行报错分析:IndexError与形状不匹配问题

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

你有多自律就有多自由

当你失去对时间的控制权&#xff0c;生活也就失去了平衡。 真正对自己有要求的人&#xff0c;都是高度自律的人。 追求自己想要的生活&#xff0c;任何时候开始都不会晚&#xff0c;关键在于你能够坚持下去&#xff0c;以高度自律的精神&#xff0c;日复一日、年复一年的坚持下…...

Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解

Problem A. Diverse Game Statement 给定 n m n\times m nm 的矩形 a a a&#xff0c; a a a 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同。求出 n m n\times m nm 的矩形 b b b&#xff0c; b b b 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互…...

WSL2 Centos7 Docker服务启动失败怎么办?

wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…...

分布式锁-redisson锁重试和WatchDog机制

抢锁过程中&#xff0c;获得当前线程&#xff0c;通过tryAcquire进行抢锁&#xff0c;该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在&#xff0c;如果不存在&#xff0c;插入一把锁&#xff0c;返回null 2、判断当前这把锁是否是属于当前线程&#xff0c;如果是&a…...

ESP8266模块(2)

实例1 查看附近的WiFi 步骤1&#xff1a;进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件&#xff0c;并设置正确的串口和波特率&#xff08;通常为115200&#xff09;。输入以下命令并按回车确认&#xff1a; AT如果模块响应OK&#xff0c;…...

Docker安装笔记

1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后&#xff0c;左侧菜单选中镜像加速器就可以看到你的专属地…...

《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》

Pix2Pix 是一种图像转换模型&#xff0c;使用条件生成对抗网络&#xff08;Conditional Generative Adversarial Networks&#xff0c;cGANs&#xff09;实现图像到图像的转换。它主要由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…...

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

&#x1f3af;要点 &#x1f3af;算法随机图模型数学概率 | &#x1f3af;图预期度序列数学定义 | &#x1f3af;生成具有任意指数的大型幂律网络&#xff0c;数学计算幂律指数和平均度 | &#x1f3af;随机图分析中巨型连接分量数学理论和推论 | &#x1f3af;生成式多层网络…...

在jsPsych中使用Vue

jspsych 介绍 jsPsych是一个非常好用的心理学实验插件&#xff0c;可以用来构建心理学实验。具体的就不多介绍了&#xff0c;大家可以去看官网&#xff1a;https://www.jspsych.org/latest/ 但是大家在使用时就会发现&#xff0c;这个插件只能使用js绘制界面&#xff0c;或者…...

机器学习·概率论基础

概率论 概率基础 这部分太简单&#xff0c;直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中&#xff0c;先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…...

c生万物系列(面向对象:封装)

本系列博客主要介绍c语言的一些屠龙技&#xff0c;里面包含了笔者本人的一些奇思妙想。 该系列博客笔者只是用作记录。如果你偶然找到了这篇博客&#xff0c;但是发现不知所云&#xff0c;请不要过多投入时间&#xff0c;可能笔者本人那时候也看不懂了。 笔者决定用c语言模仿…...

当当网数据采集:Scrapy框架的异步处理能力

在互联网数据采集领域&#xff0c;Scrapy框架以其强大的异步处理能力而著称。Scrapy利用了Python的异步网络请求库&#xff0c;如twisted&#xff0c;来实现高效的并发数据采集。本文将深入探讨Scrapy框架的异步处理能力&#xff0c;并展示如何在当当网数据采集项目中应用这一能…...

React——useEffect和自定义useUpdateEffect

useEffect 是React的一个内置Hook&#xff0c;用于在组件渲染后执行副作用&#xff08;例如数据获取、订阅或手动更改DOM&#xff09;。它将在第一次渲染后和每次更新后都会执行。 useEffect(() > {// 这里的代码将在组件挂载和更新时执行。 }, [dependencies]); // depend…...

Hadoop大数据处理架构中ODB、DIM、DWD、DWS

在Hadoop的大数据处理架构中&#xff0c;ODS、DIM、DWD和DWS分别代表了数据仓库体系中不同的层次和功能。下面解释这几个概念&#xff1a; ODS (Operational Data Store) 想象你有一家超市&#xff0c;每天营业结束后&#xff0c;你会把当天所有的销售记录、顾客信息、商品库…...

【刷题汇总 -- 爱丽丝的人偶、集合、最长回文子序列】

C日常刷题积累 今日刷题汇总 - day0211、爱丽丝的人偶1.1、题目1.2、思路1.3、程序实现 2、集合2.1、题目2.2、思路2.3、程序实现 -- set 3、最长回文子序列3.1、题目3.2、思路3.3、程序实现 -- dp 4、题目链接 今日刷题汇总 - day021 1、爱丽丝的人偶 1.1、题目 1.2、思路 …...

基于vue3 + vite产生的 TypeError: Failed to fetch dynamically imported module

具体参考这篇衔接&#xff1a; Vue3报错&#xff1a;Failed to fetch dynamically imported module-CSDN博客 反正挺扯淡的&#xff0c;错误来源于基于ry-vue-plus来进行二次开发的时候遇到的问题。 错误起因 我创建了一个广告管理页面。然后发现访问一直在加载中。报的是这样…...

批量自动添加好友,高效拓展人脉圈.

随着微信使用数量的不断增加&#xff0c;手动添加好友成为了一项耗时且繁琐的任务。为了帮助大家解决这个问题&#xff0c;下面分享一款高效的微信管理系统&#xff0c;它能够帮助你实现批量自动添加好友&#xff0c;极大提升了人脉拓展的效率。 这款微信管理系统可以同时管理多…...

Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 &#xff08;1&#xff09;获取元素 &#xff08;2&#xff09;显示\隐藏遮罩层与模态框 &#xff08;3&#xff09;实现模态框拖动效果 一、需求…...

【深度学习】fooocusapi,docker,inpainting图像

基础镜像制作来源 fooocusapi接口官方写的&#xff1a; docker run -d --gpusall \-e NVIDIA_DRIVER_CAPABILITIEScompute,utility \-e NVIDIA_VISIBLE_DEVICESall \-p 8888:8888 konieshadow/fooocus-api会下载一些模型&#xff0c;下载完后推这个镜像 docker commit 4dfd1…...

算法017:二分查找

二分查找. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/ 二分查找&#xff0c;其实是双指针的一种特殊情况&#xff0c;但是时间复杂度极低&#…...

嘉兴南湖区建设局网站/产品推广方案范例

1 介绍 hive数据存储基于HDFS&#xff0c;没有专门的数据存储格式。 数据结构主要包括&#xff1a; 数据库文件表视图 可以直接加载文本文件&#xff0c;创建表时可以指定hive数据的列分隔符与行分隔符。 2 表 2.1 内部表 table 1&#xff09;介绍 与数据库中的table在…...

vs网站毕业设计怎么做/44555pd永久四色端口

OpenSSL是一个强大的开源安全套接字层密码库&#xff0c;它包含了主要的密码学算法&#xff0c;常用的密钥和证书封装管理以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。在Android上开发对于安全的需求越来越高&#xff0c;虽然OpenSSL出现过几次漏洞&#xff0c;但它…...

商城网站设计注意什么/跨境电商平台注册开店流程

Java面试过程&#xff0c;JVM属于必考题系列&#xff1a;今天主要谈谈JVM GC的类型和策略&#xff0c;特别是大家经常混淆的Minor GC、Major GC、Full GC&#xff0c;年轻代GC、老年代GC&#xff0c;之间有什么区别和联系。Minor GCJVM堆内存被分为两部分&#xff1a;年轻代(Yo…...

苏州cms模板建站/关键词优化公司

nali&#xff0c;名字取自中文“哪里”的拼音。nali包含一组命令行程序&#xff0c;其主要功能就是把一些网络工具的输出的IP字符串&#xff0c;附加上地理位置信息(使用纯真数据库)。例如218.65.137.1会变成218.65.137.1[广西南宁市 电信]。查询是在本地进行&#xff0c;并不会…...

方法数码做的网站怎么样/线下推广都有什么方式

为方便aelf社区用户即时查询链上信息以及参与到链上事务中&#xff0c;aelf特发布区块链浏览器作为aelf生态的配套工具。本文档将对aelf区块链浏览器的功能属性及使用方法进行图文说明。1.aelf区块链浏览器概述aelf区块链浏览器主要用作监控和搜索主链及其侧链信息。通过aelf区…...

JSP做网站起到的作用/我要安装百度

熟悉Java并发编程的程序员应该对于volatile&#xff0c;synchronized关键都不陌生&#xff0c;这两个关键字是并发编程的基础&#xff0c;在之前笔者看过很多关于volatile关键字的解析博客&#xff0c;讲述的也比较详细&#xff0c;但是感觉不是很全面&#xff0c;今天总结了一…...