Redis之父:10x程序员应该具备的9种素质
极客时间编辑部
讲述:杜力大小:4.39M时长:04:47
《人月神话》的作者(Fred Brooks)最早在他的论文“没有银弹——软件工程的本质和偶然性”中提出了“10x 程序员”的概念。一个 10x 程序员,在相同条件下,可以完成十倍于普通程序员的工作。这里所说的“普通程序员”,是指那些能够胜任自己工作的程序员,只是他们不具备 10x 程序员的神奇能力。
对于是否存在 10x 程序员,编程社区的观点呈现出两级分化:有人认为根本不存在所谓的 10x 程序员,有人则认为不仅存在 10x 程序员,如果找对了门路,甚至能找到 100x 的程序员。
在本文中,Redis 之父萨尔瓦托·桑菲利普(Salvatore Sanfilippo)列出了 9 种可以用于区分程序员生产力高低的重要特质,他认为,如果一个程序员同时具备了这 9 种特质,那么就可以说他是一个 10x 程序员。
1. 编程裸技能:完成子任务
从处理编程子任务上,可以看出一个程序员的短板和长处,比如实现一个函数或者一个算法。事实上,擅于应用基本的编程技能来高效完成任务的程序员,并没有如人们所想得那样普遍存在。
有时候,团队里有些不是很称职的程序员,他们甚至不知道该怎么写一个简单的排序算法,但是比起那些看似称职却缺乏实战经验的程序员,这些不称职的程序员却能完成更多的工作。
2. 经验:模式匹配
桑菲利普认为,经验就是一系列解决方案,它们已经被证实可以用于处理一些重复性的任务。经验老道的程序员知道该如何处理各种子任务,这样不但省掉了很多设计工作,而且避免了很多设计错误,而设计错误是简洁性最大的敌人。
3. 专注:实际时间和假设时间
花在编码上的时间不仅要看数量,也要看质量。造成注意力不集中的因素既有内部的,也有外部的。集中注意力和避免被打扰,对于提高编程效率来说是至关重要的。
4. 设计权衡:用 5% 换取 90%
项目的非根本性目标在很大程度上导致了设计的复杂性,或者导致无法达成其他更重要的目标,因为根本性功能和非根本性功能在设计上存在竞争关系。如果意识不到这点,复杂性就会随之而来。对于设计者来说,如果项目要最大化产出,就要把精力集中在重要的事情上,并在合理的时间内完成。
5. 简洁性
简洁性是成败之间最为明显的分界点,理解复杂性的产生过程有助于理解什么是简洁性。不愿意做出设计权衡和设计错误的累积是导致复杂性的两个主要因素。
6. 完美主义(为了偏袒设计而放弃生产力)
完美主义可以分为两种:一种是追求程序极致性能的工程文化,另一种是个人特质。不管是哪一种完美主义,它们都会对程序员实现快速交付造成阻碍。完美主义和对外部评判的恐惧会导致设计上的偏袒,程序员根据主观的心理因素和无关紧要的衡量参数做出设计决策,却忽略了健壮性、简洁性和及时交付。
7. 知识:理论有益
在处理复杂任务时,具备一些理论方面的知识会对设计产生重要影响,比如数据结构方面的知识、了解计算能力的局限性和一些重要的算法。虽然程序员没有必要成为无所不知的超级专家,但是至少要知道一些问题的潜在解决方案,避免设计出复杂、缓慢、低内存效能的解决方案。
8. 底层:理解机器原理
程序的很多问题都是源于对计算机工作原理的误解,即使是使用高级语言开发的程序也不外乎如此。这种情况可能导致一个项目需要重新设计和实现,因为项目所使用的工具和算法出现了根本性的错误。对此,精通 C 语言,知道 CPU 的工作原理,了解系统内核的行为以及系统调用的实现原理,做到这几点就可以解决这些难题。
9. 调试技能
查找和解决 bug 经常会占用程序员大量的时间。查找引起 bug 的问题根源,在合理的步骤内修复 bug,以简单的方式编写包含较少 bug 的代码,对于程序员来说,做到这几点就可以显著提升效率。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 龚健归纳即3点:知识深度,广度和工程经验。14
- 春暖花开很通透
收起评论