摘要: 我认识到一个非常有悖常理的现象,优秀的程序员都是即懒又傻的。因为懒,他才会写出各种各样的工具来替自己干活。因为懒,他才会想办法避免去写无聊重复的代码——因此避免的代码的冗余,消减了维护的成本,使重构变 ...

我认识到一个非常有悖常理的现象,优秀的程序员都是即懒又傻的。

因为懒,他才会写出各种各样的工具来替自己干活。因为懒,他才会想办法避免去写无聊重复的代码——因此避免的代码的冗余,消减了维护的成本,使重构变得容易。最终,这些由于懒惰激发出的动力而开发出的工具和最佳编程实践方法提升了产品的质量。

懒惰的程序员也因此变成了优秀的程序员。当然,这只是事情的一部分;从一个懒惰的程序员变成一个优秀的程序员,他/她会在学习如何能够永远保持懒惰时表现出惊人的不懒惰——也就是,什么样的软件工具能让自己干活更轻松,什么方法能避免繁冗,如何能让工作更容易的维护和重构。

其次,(我将用多一点篇幅来说明这一点,因为我发现这个观点比第一个更难接受。)优秀的程序员都是傻的。为什么?因为如果他很聪明,或他知道自己很聪明,他就会:

a)停止学习b)对自己的工作不再高标准、高要求

第一点将会导致他不再努力的去发现新的技术,让自己工作的更快捷。第二点将导致他的代码变得难以debug,难以重构。在程序员和编译器无休止的战争中,程序员最好一开始就投降并承认是自己的错,而不是编译器的错(除非是关于字符编码问题,有些编译器确实有问题)。

但是,还有一个优秀的程序员必须笨的更重要的理由。为了寻找到更好的问题解决方案,他必须保持一个谦虚的心态,他必须跳出模式想问题。某种程度上,这会让他们回到小孩的思维模式;因从未经历“no”的打击而极具创造力。

相反的思维模式就不是那么具有创见性,会认为对现状了如指掌,会接受现状。可是又有谁知道多少你认为的不可能是真正的不可能?知道的越少你就会越激进。你开发的工具越好,你的产品就会因为它们变得质量更高。

我从工作中总结出,一个优秀的程序员,在从经理那里确认一个需求时,他需要以一个笨人的思维模式;他会从最简单的,孩子般的问题问起。他不会想当然的接受这个问题提供者提供的信息。在web开发中一个典型的交谈会是这样:

“昨天,一个客户说我们网站上的logo图片无法显示。”

“他重启浏览器了吗?”

“是的。”

“他重启计算机了吗?”

“是的。”

“他清空缓存了吗?”

“是的。”

“他用的是IE6吗?”

“是的。”

“他确信是没看见吗?”

“是的。”

“他是在电脑屏幕上看我们的网站吗?”

“什么?”

“是这样,他也许把它打印了出来。”

“不,看是盯着屏幕看的。”

“除了logo,他能看到网站上的其它图片吗?”

“什么?哦,我问问。”

为了说明我们的主题(这个故事完全是虚构的),我们假设客户真的关闭了浏览器的图片显示。也许是他儿子干的。不管怎样,如果你用“聪明”的模式思考,你很难找出这样的答案。所以这个程序员问的问题都不需要任何的编程知识。因为这是一个很傻的问题,所以只有傻办法才能解决。

数 年前,我曾就因为我的一次更新而弄坏整个网站的事情进行了一此很长的电话讨论….事实证明是因为那个家伙把他的浏览器的CSS给禁掉了。从那时起,我就开 始怀疑一切,而不是因为这样一个简单的事情而聆听一个半小时什么是代码质量的抱怨。最终,猜测是我的更新出了问题….只是一个猜测。如果你想解决问题,最 好的方法是只听事实部分,不要听他们认为的可能的原因。

相似的,当同事问我:“这为什么不好用?”大多数时候是因为他们修改错了问题(例如,他想链接lib1,但他实际链接的是lib2,或事实上他根本没有链接 任何lib)。当你向一个同事求助,尤其是编程问题,你一般不会告诉他更多关于项目的事情。当他问一些很傻的问题时,你潜意识里就会抵制回答,因为你认为 你知道的很清楚,但事实上你并不是这样。

事情当然有另外一面。太笨也就想不出任何办法,做错事,解决不了任何问题。而太聪明的喜欢坐着计划好问题,但却很少行动。实用主义的程序员取其中。他知道,10次决策一次错误比起只有五次正确决定而另五次什么都不做要好的多。

这有点像一个关于蜈蚣的故事。蜈蚣很擅长使用它的100条腿一起走路。它从来没有想过它是如何能做到这些的。直到有一天,一个臭虫问他,“你是如何控制这么多腿走路的?你不觉得让它们按一定的节奏配合走路很难吗?”臭虫说完就走了,蜈蚣却仍然坐在那里思考,思考如何走路的,不解,甚至(此生中的第一次)有些担心了。从那天起,这个蜈蚣再也没能走一步。

所以,如果你想实现某个事情,不要想太多。当然,这也只是事情的一半…

推荐阅读:程序员应该知道的11句话

新手程序员必读:推进编程工作的七条箴言

为什么优秀的程序员既懒又笨相关推荐

  1. 如何成为优秀的程序员

    1.各种软件技术之间是怎样的关系? 我把软件技术分为三个层次:  问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算等.  系统集成:C++和Java等面 ...

  2. 如何成为一个优秀的程序员

    本文给出了十五个评定软件开发人员的标准,可以帮助程序员朋友从一个好的程序员成为一个优秀的程序员,和大家共飨! 怎样评定一名软件开发人员?这是一个颇为奇怪的问题.现在已经有了很多的理论和形式来做这件事, ...

  3. 优秀的程序员都在哪里 如何寻找优秀的程序员?

    优秀的程序员都在哪里 这是你第一次公开招募雇员.如同大多数人一样,你会发布广告,可能也会浏览一些大型的网上论坛,然后你就收到了一吨的简历. 一份份看下去,你会想:"嗯嗯嗯,这人应该可以.&q ...

  4. 寻找优秀的程序员之实战指南-2

    寻找优秀的程序员之实战指南 --选自<软件随想录:程序员部落酋长Joel谈软件> [好消息]本书今天(12.10)互动有货,感兴趣的朋友可以 逛逛去 [续]http://blog.csdn ...

  5. 寻找优秀的程序员之实战指南-1

    寻找优秀的程序员之实战指南 --选自<软件随想录:程序员部落酋长Joel谈软件> [好消息]本书今天(12.10)互动有货,感兴趣的朋友可以 逛逛去 2006 年 9 月 7 日 ,星期四 ...

  6. 助你成长为优秀的程序员 杰出的软件工程师、设计师、分析师和架构师

    编码规范往往只是对具体编程的格式及细节要求进行规定,但对于提高软件人员编程能力而言,编程规则更具有价值,下面将我的一些观点和想法提出来供大家参考,也希望大家批评指正,谢谢! 1 概述 编程是一个软件工 ...

  7. 同样是程序员,优秀的程序员能够月入5万甚至50万!,一般的程序员却只能月入5千甚至更低?那么他们差别在哪里呢?

    从以下几点来谈谈差别: 1.思路 编程思路,是系统的计划和设想,是程序员写程序时的条理和线索.优秀的思路背后一定是不断的积累.在熟知编程基础的前提下,优秀的程序员会积累尽可能多的经验,这份经验让他们更 ...

  8. 成为优秀高级程序员的10个要点

     成为优秀高级程序员的10个要点 What 软件工程师的职业生涯要历经以下几个阶段:初级.中级,最后才是高级.这篇文章主要是讲如何通过10个步骤助你成为一名高级软件工程师. Why 得到更多的报酬 ...

  9. 漫画:优秀的程序员具备哪些属性?

    很多人问我,你是一个优秀的程序员吗? 我还差得远,但我在朝这个目标努力. 那么,怎样才能成为一个优秀的程序员呢? 优秀的程序员往往具有几方面的特点,这些特点里有的更重要,有的作用略低,我以个人的见解, ...

最新文章

  1. easyui中 在子tabs中 添加新的tabs
  2. 倒计时3天!华为畅想未来智能车大赛报名即将截止,已报名选手请提交参赛PPT!
  3. 5.1.5 IO核心子系统
  4. OpenGL ES之GLKit的使用功能和API说明
  5. 【STM32】待机唤醒程序示例
  6. 论文中常用的几个Word2010技巧
  7. 迭代加深搜索与埃及分数求解
  8. in-nan(ind)_NaN16 Constant in Julia
  9. 无源波分和彩光模块_纯无源粗波分复用器(CWDM)部署4/5G网络,节省光缆资源...
  10. mongoDB的配置以及运行
  11. 如何实现伸缩 (折叠) 报表?
  12. 解决bootstrap-table表头filter-control select控件被遮挡显示不全的问题
  13. 图像拼接算法(zz)
  14. 计算机导论论文论题,计算机导论专业论文题目 计算机导论毕业论文题目怎么定...
  15. 职场减压移魂大法几则 (转东转西)
  16. android 函数式编程,思想交融,Android中的函数式编程(2):什么是函数式编程...
  17. Java 添加和删除Word文档水印
  18. 修复打开Excel提示
  19. Ubuntu 16.04通过命令行连接Wi-Fi
  20. win10下pip安装pytorch-gpu以及CUDA/cuDnn的配置(避坑)

热门文章

  1. kickstarter衆籌
  2. 【行业共话】币码翁研究院浅谈关于分布式存储四大真相
  3. 现货黄金模拟操作建议
  4. linux隐藏以点开头文件夹,为什么 UNIX 等系统的隐藏目录以点开头?
  5. 智能颈部按摩仪——1.硬件设计
  6. Mysql应用性能监控案例分析
  7. AHB lite协议
  8. Spanner学习笔记
  9. Jetpack Compose之 在Compose中使用Navigation导航
  10. 科技大佬该向柴静学点什么?