分享

优秀程序员的素质:(上篇)懒惰、没耐心和骄傲

 ymh 2005-11-21

看到“优秀程序员的两大要素:懒 + 笨”一文,  是比较有趣的,刚好在上月我的“KISS原则”文中也引用了Larry Wall(Perl的创造者)的经典语录:

“We will encourage you to develop the three great virtues of a programmer: laziness, impatience and hubris.”

就是:“好的程序员要有3个宝贵品德:懒惰、没耐心和骄傲”。那篇文章主要谈KISS原则,没有深入展开,只是简单说:

  • 懒惰: KISS, 讨厌复杂的; 宁可加班加点、承担风险也要寻求“偷懒”的捷径;
  • 没耐心:讨厌重复劳动,不重复自己(DRY原则: Don‘t Repeat Yourself); KISS, 没耐心搞“复杂繁琐”的东西;
  • 骄傲: 相信自己能写出一流的软件,相信自己可以做出最棒的设计;
  • 这篇“优秀程序员的两大要素:懒 + 笨”基本阐述类似观点。 其实我觉得一个好的程序员光“懒惰、没耐心和骄傲”还不够, 他(她)还必须同时“勤奋、耐心和谦虚”。

    因此准备凑成两篇来写:

    • 优秀程序员的素质:(上篇)懒惰、没耐心和骄傲
    • 优秀程序员的素质:(下篇)勤奋、耐心和谦虚

    本篇主要写“懒惰、没耐心和骄傲”的素质。

    懒惰

      这个素质在“优秀程序员的两大要素:懒 + 笨”一文已经比较详细指出了:

    只有懒惰的程序员才会去编写那些可以最终代替自己工作的自动化工具,才不会成天为了实现相似的功能去编写大段大段冗余重复的代码 - 这种代码往往是软件后期维护和重构的天敌。通常来说,由于惰性的驱使所产生出来的工具和程序将最终极大的提高生产开发的速度

    一个勤奋的,但是水平拙劣的程序员可能给项目带来的损失更大! 所谓勤奋的差程序员 就是不搞清楚如何编程序就野蛮开工的, 他们不厌其烦地堆砌垃圾代码, 使用最熟练的按键组合是CTRL+C/CTRL+V(和网站编辑们相似), 他们可能会产生惊人的代码量,如果这些代码能幸运地运行起来, 只能叹服他们的debug的水平和耐心。  这些人与其叫作程序员,不如叫作代码民工。

    不幸的是,目前市面上相当数量自称程序员的人可能就属于这一类。 在UUZone我们采用笔试的方法来作为招聘的第一关, 一些最最基础的试题往往难倒了大部分人, 超过95%的笔试者直接被淘汰。

    优秀程序员绝对不会愿意去浪费时间做重复劳动, 他们宁可寻求捷径,宁可花更多时间去磨刀, 也要在砍柴的时候最省力,最偷懒。

    正如“优秀程序员的两大要素:懒 + 笨”一文说的:

    光光具备懒惰这个要素还是不够的。在享受懒惰之前,他必须以最大的热情和最高的效率去研究解放自己的途径,比如:找到最有助于开发的工具,最能体现“一次编写,多次复用”精神的代码架构的设计。只有在这些必要的工作之后,才可能真正享受轻松编程的乐趣。

    所以“懒”的精髓用一句老话来描述,那就是磨刀不误砍柴功。如果你不想办法磨亮手中的柴刀,就算一天二十四小时都在砍柴,效果也不如拿把锋利的斧头一天只砍一小时。

    没耐心

       和懒的作风类似, 好的程序员没有耐心,尤其是重复自己的工作。他们往往痛恨copy paste, 认为copy paste是带来代码维护性差,容易出错的重要因素。

       好程序员甚至发明了DRY原则来为自己的美耐心开脱。 所谓DRY就是Don‘t Repeat Yourself原则。 为了能满足自己的没耐心的需求, 优秀程序员们设计出各种可以让自己省心或者偷懒的工具, 比如代码生成器、各种程序框架,各种重用库等,这样“一次编写,多次复用”可以真正得到推行。

       好的程序员不喜欢重新发明轮子、更不喜欢重新制造轮子, 遇到一项任务即时如何实现已经是一目了然,他们也宁可耗费一些时间去求证有没有可以重用的东西,也不愿意拉起来就自己做,即使这样可以骗到工资或者项目经费 -- 因为他们绝对没有耐心浪费自己的时间去重复别人已经完成的工作。

       为了不重复发明轮子, 好的程序员会试图让每一次的工作都尽可能成为下一次工作偷懒的工具和没有耐心的替代品, 哪怕这一次为了达成这些目的需要耗费一些耐心和额外的工作量。

       好的程序员没有耐心老去调试程序,由于编程不调试是不可能的, 所以这些家伙就弄出各种方法来让bug不容易产生,他们称为write  solid code. 其实无论code多么solid, bug还是有,调试还是不可避免。但优秀的程序员们通过各种方法从设计的时候,编码开始的时候,就试图让bug和调试的量减少,因为他们实在没有耐心那么干。

       相反,差的程序员喜欢什么都动手自己来搞, 他们宁可耐心地copy paste代码, 非常耐心地调试, 耗费大量的时间,填写加班单, 每日每夜地干活。 我见过一些人专门喜欢对着书抄袭其中的代码,还很有成就感,我只能抱歉地说,他们因为太有耐心, 所以成为了差的程序员。

    骄傲

     你是世界上最优秀的程序员吗? 我是, 你是不是呢?如果你的回答不是,而你干着程序员的工作, 那么你要小心, 你缺乏了一个能成为优秀的程序员的重要素质!

      优秀的程序员的骄傲并不是表现在傲慢上,更不是表现在对别人的轻视和对项目的心不在焉, 而是表现在他们的骨子里和心里。他们对自己的能力充满自信,他们不相信所谓权威, 他们敢于怀疑一切, 他们敢说出让别人以为他是疯子的话来。

      优秀的程序员从来不在讨论中告诉你“不可能”或者“做不到”,他们最常说的是“我去尝试一下”。 优秀的程序员从来不会自行惭晖地说,那是高手才能作到的,我做不到。他们相信别人能作到的,我一定也行,甚至可以做的更好。

      优秀的程序员有时甚至会过度高估自己的能力,尤其是时间和工作量上, 他们很少会故意把工期估计得充分 -- 把工期估计充分应该是项目经理们做的事情。 所以优秀的程序员经常心甘情愿地加班加点-- 因为他们太骄傲了,必需证明自己的能力。

    ---

    如果你具备了“懒惰、没耐心和骄傲”这3个优点,恭喜你! 你有了成为优秀程序员的素质! 但是不要着急, 你还必须同时具备“勤奋、耐心和谦虚”的素质, 你才能真正修成正果! 而这些素质,有待我下blog分解!

    • 本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多