专栏名称: CSDN
CSDN精彩内容每日推荐。我们关注IT产品研发背后的那些人、技术和故事。
目录
相关文章推荐
新浪科技  ·  【#特斯拉日内跌超7%#】3月10日美股,截 ... ·  2 天前  
新浪科技  ·  【#曝苹果不会推出M4Ultra##苹果不推 ... ·  3 天前  
51好读  ›  专栏  ›  CSDN

学会“投机取巧”——Redis之父九条忠告,如何成为“一打十”的程序员

CSDN  · 公众号  · 科技媒体  · 2017-03-02 09:56

正文

据维基百科记载:“ Redis 是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。根据 月度排行网站DB-Engines.com的数据 显示,Redis是最流行的键值对存储数据库。”

Redis 之父 Salvatore Sanfilippo ,一名意大利程序员,大家更习惯称呼他 Antirez。本文为Salvatore所写,CSDN编译,具体讲述了其心目中成就一名“野兽级”程序员的可贵品质。

附一篇CSDN于2011年发布的 Salvatore访谈文章 (http://www.csdn.net/article/2011-01-18/290347)

Salvatore Sanfilippo (图片来自 Usesthis

坊间流传着“十倍程序员”的传说,所谓“十倍程序员”是指在同样时间内可以做“普通”程序员十倍的工作的程序员,而所谓“普通”是指那些擅长自己的领域,但不具有“十倍程序员”那样特殊魔力的程序员。更准确地说,普通程序员就是指那些具有平均编程效率的专业程序员。

在程序员群体中,对于“十倍程序员”的存在持有极度分化的观点:一些人认为这样的人绝不存在,另一些人则认为不仅存在,而且甚至存在“百倍程序员”。

如果你认为编程是一项线性工作(产出与劳动时间成正比的工作),那么显然“十倍程序员”是一种不合理的存在。一个跑步运动员不可能比对手跑得快十倍,一个建筑工人也不可能在同等时间建造十倍于别人的东西。然而,编程实际上是一项特殊的“设计”工作。此处设计不单指架构师的工作。即便不是项目的整体设计,当工程师具体实现它的时候,依然需要低层的实现策略的设计。

在我看来,程序的设计和实现不是一项线性工作。经验、代码能力、知识、对不重要事项的辨识能力都是不易量化的能力,这些能力的结合在程序开发中发挥重要作用,使程序员更高效。特别是当一个程序员需要全程参与到项目的设计与实现时,这些能力的优势更加明显。

越是以结果为导向的任务越能激发高效程序员的能力。因为在结果导向的任务中,高效的程序员能够找到自己的方式,用更少的投入达到同样的效果。他们可以从顶层改变目标的实现路径,有时甚至直接去掉不必要的模块,来减少工作量而不影响目标的达成。而相对要求严格的项目,则会使这种效应减弱,因为程序员不得不受到诸如“使用某某工具”,“通过某某算法”的限制。虽然如此,高效程序员在这种多限制的情况下仍有其优势:他们可以发掘细节处优化实现的办法。

在我二十年的编程生涯中,始终观察我身边的程序员,无论我的同事、学徒,还是Redis或者其他项目的贡献者,以指导他们高效地达到既定目标。很多人说我是个很“快”的程序员。鉴于我不是个工作狂,所以我想以我为例来说明如何高效编程。

以下是我认为影响程序员工作效率的最主要因素:

纯编程能力:不写一行多余代码

程序员的纯编程能力是程序员水平的最直接表现。在解决实际问题时候,程序员经常会被要求实现项目的某一个子模块,一个函数或者一个算法等等。令人惊讶的是,我发现在这个过程中,很少有人能够做到用最少的命令高效地完成任务。我甚至发现在很多团队中,竟然存在会忘记使用排序算法的不称职的程序员,这让他们甚至无法胜过虽然缺乏实践经验但理论完备的毕业生。

经验:踩在前人的肩膀上

所谓经验,我指的是重复出现的任务的成熟解决方案。一个有经验的程序员知道如何处理各种任务。这可以避免重复设计,更重要的是可以避免设计错误,设计错误是程序员效率的最大敌人。

专注:高效利用时间

对于任何事情,时间的有效利用都至关重要,许多内在和外在的因素都会导致程序员丧失专注度。内在因素包括拖延症、没有兴趣、缺乏经验、睡眠短缺等。外在因素包括频繁的会议、工作环境、同事的干扰等。提高专注度、避免打扰能够提高编程效率,这很好理解。有时,为了专注,需要狠下心来,采取较为极端的措施。比如邮件,虽然都会看,但只回复很少的一部分。







请到「今天看啥」查看全文