# 优秀程序员的九种素质

- Link: https://www.ixiqin.com/2020/06/14/the-nine-quality-of-good-programmers/
- Published: 2020-06-14T20:09:23+08:00
- Author: 白宦成

转载自：[http://macshuo.com/?p=1473](http://macshuo.com/?p=1473)

一个优秀的程序员需要什么特质呢？由此我想到之前读过的一篇文章，是 Redis 之父萨尔瓦
托 · 桑菲利普（Salvatore Sanfilippo）写的 9 种高能程序员的特质，重新意译一下，推荐
给读者：

1、高效完成子任务

从处理编程子任务上，可以看出一个程序员的短板和长处，比如实现一个函数或者一个算法。
事实上，擅于使用基本的编程技能来高效完成任务的程序员，并没有人们想象的那么多。有
时候，团队里有些不称职的程序员，他们甚至不知道该怎么写一个简单的排序算法。

2、合理使用自己的经验

桑菲利普认为，经验就是一系列解决方案，它们已经被证实可以用于处理一些重复性的任务。
经验老道的程序员知道该如何处理各种子任务，这样不但省掉了很多设计工作，而且避免了
很多设计错误，而设计错误是简洁性最大的敌人。

3、准确预测工期

花在编码上的时间不仅要看数量，也要看质量。造成注意力不集中的因素既有内部的，也有
外部的。集中注意力和避免被打扰，对于提高编程效率来说是至关重要的。

4、设计权衡：用 5% 换取 90%

项目的「非根本性」目标在很大程度上导致了设计的复杂性，或者导致无法达成其他更重要
的目标，因为根本性功能和非根本性功能在设计上存在竞争关系。如果意识不到这点，复杂
性就会随之而来。对于设计者来说，如果项目要最大化产出，就要把精力集中在重要的事情
上，并在合理的时间内完成。

5、简洁性

简洁性是成败之间最为明显的分界点，理解复杂性的产生过程有助于理解什么是简洁性。不
愿意做出设计权衡和设计错误的累积是导致复杂性的两个主要因素。我在第一点里讲的 Internal
其实是提高了复杂度导致用户选择错误。

6、拒绝完美主义（为了偏袒设计而放弃生产力）

完美主义可以分为两种：一种是追求程序极致性能的工程文化，另一种是个人特质。不管是
哪一种完美主义，它们都会对程序员实现快速交付造成阻碍。完美主义和对外部评判的恐惧
会导致设计上的偏袒，程序员根据主观的心理因素和无关紧要的衡量参数做出设计决策，却
忽略了健壮性、简洁性和及时交付。

我曾经服务过的一家公司就犯了这种错误。当然，错误不止于此。

7、理解知识理论的价值

在处理复杂任务时，具备一些理论方面的知识会对设计产生重要影响，比如数据结构方面的
知识、了解计算能力的局限性和一些重要的算法。虽然程序员没有必要成为无所不知的超级
专家，但是至少要知道一些问题的潜在解决方案，避免设计出复杂、缓慢、低内存效能的解决
方案。

8、理解机器原理

程序的很多问题都是源于对计算机工作原理的误解，即使是使用高级语言开发的程序也不外乎
如此。这种情况可能导致一个项目需要重新设计和实现，因为项目所使用的工具和算法出现
了根本性的错误。

7 和 8 说的道理差不多，这也是极客时间会连续推出数学、算法、数据结构、网络协议、软件
工程等课程的原因，后面还有架构设计、操作系统、编译原理等等。

9、调试技能

查找和解决 bug 经常会占用程序员大量的时间。查找引起 bug 的问题根源，在合理的步骤
内修复 bug，以简单的方式编写包含较少 bug 的代码，对于程序员来说，做到这几点就可以
显著提升效率。

能否运用调试技能快速解决问题是衡量一个程序员水平的重要标准。

你具备这些特质嘛？我觉得村上说的没错，程序员同时还需要集中力和耐力。
