这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发
过程中的常见问题及其解决方案,强调团队合作、项目管理和开发流程的优化。该书成为软件开发和项目管理领域的经典著作,受到了广泛的认可和赞誉。
不记录,等于没读。
领导者必须让让团队成员只专注于改善产品的工作上。然而,如果领导者希望他们的项目真正取得成功,他们必须关注培训,以确保每个团队成员定期学习各种广泛有用的新技能。确保团队成员积极成长的一种方法是将个人成长目标与项目里程碑对齐,这可以使每个团队成员每年获得至少六项重要的新技能。程序员在日常工作中确实会获得技能,但这种被动学习的方式使他们的成长速度要慢得多。通过工作分配和明确的教育目标来确保程序员积极学习新技能,领导者不仅帮助项目和公司,也推动了程序员的职业发展。
25 年前的花样滑冰冠军表演,放在现在连小镇上的比赛冠军都拿不到。以现在的眼光看,当年的表演太过于简单了。现在的花样滑冰选手并不比 25 年前的选手条件更好,而是滑冰选手每年都在提高自己的标准,他们都想胜过上一届的全国或世界冠军。
Tom DeMarco 和 Timothy Lister,《人件》一书的作者,他们经常举办“程序设计大战”,用于研究不同公司程序设计师技术水平的差异。他们有两个发现:
- 程序设计师之间的表现可谓天壤之别,所需时间甚至有 1:11 的差距;
- 来自同一家公司的程序设计师技术水平会差不多。如果一位很差,另一位也好不到那里去,如果一位很棒,另一位也会表现不错,即使这两位程序设计师分属不同的部门也是一样。
这种差异的原因,作者认为是“公司培养程序设计师的环境不同”造成的。作为团队负责人,要对团队成员的技术水平有更高的追求,不能只是达到公司平均水平后就停滞不前。
如果程序设计师只是完成预期的程序设计工作,那还不够好。管理者应该不断提高对下属的要求标准,就像花样滑冰选手的教练一样。当你提高了团队的编程标准时,最终将提高整个公司的平均水平。
五年资历的笨蛋
做的久不是问题,问题是一直做同样的工作。
如果一直在一个岗位,工作个几年就能成为这个领域的专家。但一直在一个岗位会剥夺他们扩展新视界、学习新技术的机会。如果一位工程师在第一年成为文件转换的专家,于是在以后的四年里专门为各种产品的文件格式写转换的程序,这件工作绝对是重要的,但是他的技术只有在第一年里大幅提升,其余四年都在重复工作,没有学新的技术。他有五年的工作资历,但不是五年的工作经验,他只是用五年的时间重复第一年的经验罢了。
从长远来看,培养团队成员的各方面专长,即使导致当前工作进度慢些,几年后你就拥有一个强大的团队。团队中的任何一人,都有能力处理任何一种问题。
受用无穷的技术
在微软,对于刚加入项目的新人,通常会派给他基础性的工作,例如追踪 BUG、修改程序等等。慢慢的新人比较熟悉这个软件后,就可以增加工作难度。这是一种循序渐进的培养方式。当分配工作时,要设法让每个人都能在所分配的工作中学习到新的技术。
训练新员工时,先培养对整个公司所有项目都有价值的技术,然后才培养本项目独有的技术。
让专家再重新学习
总有一天,当初的新人会把本项目所有的程序全部摸熟,他们就暂时没有成长空间了。这个时候,你应该把没有新东西可学的程序设计师推到别人项目去。把所有的程序设计师放在他们可以成长、可以进步的地方,这是管理者对程序设计师和公司的义务之一。
作者刚当上函数库组长的第一周,首席程序设计师想去另一个小组,因为他本人对于一直做同一套软件感到厌倦,他需要扩展到新的技术领域。作者经过确定后,认为这是个让组员学习的好机会,于是慷慨放人。事情的发展出乎意料的好:
- 组内其他成员自告奋勇承担起首席程序设计师的工作,这给了新人学习成长的机会
- 首席程序员进入了新的技术领域,他所在的新的项目因为他的加入也出乎意料地顺利
总的来说,市区最棒的程序设计师虽然短期内难免要挣扎适应,但长期来看少了一位停滞不前的程序设计师,多了两位积极学习的程序设计师,和一个进行十分顺利的项目。员工成长,公司资产增加。
最近读过什么好书吗
我个人经常读书,充实自己的知识,不断了解新的观念。选一本好书,用几天的时间就可以吸取别人多年来从错误中获得的体会,这是很划算的。
- 读策略性的书籍,比如《编程精粹—— Microsoft 编写优质无错 C 程序秘诀》、《C陷阱与缺陷》
- 软件开发方面的书
- 技术领域之外的书,比如《在哈佛学不到的管理知识》
作者鼓励组员自由选择想追求的技术,但要求大家的个人目标必须符合:
- 这项技术必须是对程序设计师本人、项目、公司三方面都有用的。
- 目标必须是可以在大约两个月的时间内完成的。
- 目标必须有一个可供评量的指标。
- 最理想的情况,我希望目标是对项目立即派得上用场的。
确定每位组员每两个月都有一项技术上的进步。
即使反馈
一发现某处需要改进,就立即采取更正的行动。
主管对属下的表现有任何意见都应该立即表示出来,迟来的纠正通常毫无效果。比如主管在年终考评时给某一位程序员很差的成绩,但是在一整年中从来没有提过对他什么地方不满意。程序员并不清楚自己哪里有问题,如果一开始就和他沟通,效果可能会更好。
要点
绝不让团队成员一直做相同的工作,这样会限制他的进步,使他停滞在原来的领域。一旦程序设计师精通了某一个领域,就让他换别的领域做做看,永远让他们学习新的技术。
各种技术的用途范围有所不同,有的技术在一般的项目都用得上,有的技术只有在特定性质的项目才用得上。当你训练团队成员时,必须让他们的技术能在公司发挥最大的用处。最好的办法就是,把应用范围最广的技术放在训练的最前期,应用范围最小的技术放在最后训练。
为了确保每位程序设计师的技术都在稳定地进步,一定要让每个人有个努力的目标,最好的方法是把个人的成长和项目阶段性目标相结合,项目阶段性目标一般是两个月,这样一年就至少六次进步了。假定一位组员在公司工作了五年,那么他会学会30种新技术、或是30本好书……
最好的成长目标来自于即时反馈。如果发现团队成员工作效率低下或重复出现相同错误,请抓住机会制定一个特定的改进目标,使团队成员可以立即采取行动。因为这种即时反馈可以他们立即采取明确的行动。
每一份打赏,都是对创作者劳动的肯定与回报。!