程序员的进步从阅读自己的老代码开始

  英文原文:Look at your old code

  关于如何成为一个更优秀的程序员这个问题,互联网上比比皆是。而答案大同小异:看书、同行评审、参与开源项目等等。但是,关于如何检测自己是不是真的进步了这个问题,却一直悬而未决。

  我经常鼓励我的同行说,对于自己写的代码,无论是什么语言什么项目都应该不遗余力地尽可能长时间地保存下来,放到安全的地方(即 GIT/ SVN)。几年过去之后,再拿出来翻一翻。回过头来看自己的代码,会有一种神奇的喜剧效果,“OMG,这么狗屎的代码居然是我写的!!”,但是相信我,没有比重新纠正这些项目和游戏代码更有成就感的了。

  上周末我在整理我七年前保存的一堆 Ruby 源文件时,发现了这个文件:fizzbuzz.rb。尽管曾经的我对此不屑一顾,但是现在,我,顿时心花怒放、兴高采烈:

# I am part of the chosen 1/200th!!!!
# http://blog.codinghorror.com/fizzbuzz-the-programmers-stairwa y-to-heaven/
(1..100) .each{|i| if i % 3 == 0 && i % 5 == 0
        print ‘FizzBuzz‘
    elsif i % 3 == 0
        print ‘Fizz‘
    elsif i % 5 == 0
        print ‘Buzz‘ else print i
    end
}

  $ ruby fizzbuzz.rb

12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz22
23FizzBuzz26Fizz2829FizzBuzz3132Fizz34BuzzFizz3738FizzBuzz41Fiz
z4344FizzBuzz4647Fizz49BuzzFizz5253FizzBuzz56Fizz5859FizzBuzz61
62Fizz64BuzzFizz6768FizzBuzz71Fizz7374FizzBuzz7677Fizz79BuzzFiz
z8283FizzBuzz86Fizz8889FizzBuzz9192Fizz94BuzzFizz9798FizzBuzz

  狗屎的时刻来了,看着这些代码,我竟然给自己点了几个赞:

  • 幸亏我写了点注释,我记起来了,我是在 2007 年 2 月的时候,看了 Jeff Atwood 的书之后,突发奇思妙想写了这段代码。我可真有先见之明。
  • 这段代码结果很正确。
  • 可读性真 TM 高,嘿嘿。

  不过,我可没有盲目地沾沾自喜。看着这些代码,我有了一些新的想法:

  • if 条件语句得重写,这样能提高可读性。
  • 数学模型执行了两次。
  • 由于代码里面的1、100、3、5 这些诡异的数字,使得想要在文本中做点改动变得很难。
  • 无法测试。

  几分钟之后,我知道该如何改进了。以条件语句为例:

  Ruby 语言允许我们将 if 放在代码块后面,更易于阅读。所以,我们可以稍微精简一点代码空间:

# I am part of the chosen 1/200th!!!!
# http://blog.codinghorror.com/fizzbuzz-the-programmers-stairwa y-to-heaven/
(1..100) .each{|i| print ‘Fizz‘ if i % 3 == 0
    print ‘Buzz‘ if i % 5 == 0
    print i if i % 3 > 0 && i % 5 > 0
}

  然后我开始好好写 FizzBuzz 文件的新版本,希望下一个 7 年后能再次看到它。

  只有当我们回过头去看看曾经写的代码,我们才会真正明白自己取得了多么大的进步。这种创新自我的学习方式,常常会带给你美好的回忆。就在一个月以前,我找出了我 10 年前,还在读大学的时候,创作的一个游戏。尽管里面有很多 bug,但是因为编程水平的提高,我很快就完善成功。

  曾经的代码代表了曾经的我们,蕴含了曾经的我们是如何艰辛创作的历程,展现了我们的缺陷,我们的优势,我们的发展和进步。它们能敦促你对其他程序员时刻保持谦虚和耐心。这是你在这个计算机世界的进化史,宝贵无比。所以,请务必好好保存你写的所有代码。它们是你的孩子,是你的骄傲。

时间: 2024-10-28 10:33:35

程序员的进步从阅读自己的老代码开始的相关文章

程序员修炼之道阅读笔记02

在<程序员修炼之道>这本书里,我也了解到了不一样的知识.对于前面一部分的阅读让我受益匪浅,也加深了我继续阅读下去的渴望.然而在对注重实效的途径这部分内容阅读的时候,我也发现很多东西令我把握不了,它出现了非常多的术语,这对于我这样的菜鸟来说,无意识非常致命的.所以我只能对这部分的内容加以了解,而不能完全理解与消化.下面就是我对所读部分的内容(注重实效的途径)做出的简单总结. 1.不要重复你自己. don't repeat yourself; 系统中的每一项知识都必须具有单一.无歧义.权威的表示:

《高效能程序员的修炼》阅读笔记

1.一路向前冲:沿着那条路下去,一定要快.如果有什么东西挡住了你的去路.....绕开它! 2.第一条原则:永远都是你的错!甚至在开始出错的地方根本就不是你的代码的时候,也应该首先假定问题出在你的代码里! 一定不要在代码出问题的时候,去怀疑系统或者IDE的问题!因为在所有报告的程序错误中,百分之95都是程序员造成的,只有2%由系统软件,2%由其他软件,1%由硬件造成. 3.避免写注释:你应该总是专注于编写代码,而忘了还有注释这种东西的存在. 4.学会读源代码:不管文档上怎么说,源代码才是最终的真实

程序员修炼之道阅读笔记之一

书中提到有关调试的问题: 读书的时候学习编程,觉得和其他人最不一样的地方在于两点,一是自己思考程序的流程,写下代码之前,知道代码将要(预期)执行的顺序逻辑,二是会调试代码,出现错误时不像一般人完全不知道该如何是好,而是去调试来寻找出错的原因.我相信,现在还是有不少工作了的程序员,不习惯去调试,他们期待的是自己的代码都是一次编写就能正确无误的执行,如果不行,那么别人大概可以帮忙解决.  一直以来,一直觉得,一个程序员的经验丰富情况很大程度依赖于他遇到的bug并解决的数量,所以一个人代码写的越多,解

程序员修炼之道阅读笔记之二

在<程序员修炼之道>一书中,Dave和Andy将告诉我们怎样以一种我们能够遵循的方式编程.他们何以能这样聪明?他们不也是和其他程序员一样,专注于各种细节而已吗?答案是他们在做某件事情时,会把注意力投注在他们在做的事情上——然后他们会试着把它做得更好. 设想你在参加一个会议.或许你在想,这个会议没完没了,你还不如去写程序.而Dave和Andy会想,他们为什么在开会,他们想知道是否可以通过另外的方式取代会议,并决定是否可使某样事情自动化,以使开会的工作推后.然后他们就会这样去做. 这就是Dave和

程序员修炼之道阅读笔记1

为你自己和你的行为负责这样一种观念,是注重实效的哲学的一块基石.注重实效的程序员对他自己的职业生涯负责,并且不怕承认无知或错误.如果你为某个结果负责,你就应该切实负起责任.当你犯错误(就如同我们所有人都会犯错误一样),诚实的承认它,并设法给出各种选择. 在你走向任何人,告诉他们为何某事做不到,为何耽搁,为何出问题之前,先停下来,听一听你的辩解是否合理,如果是对方听来,会是什么感受,对方会如何回应.他们会问:“你试了这个吗...”“你考虑过那个吗...”你讲怎么样回答,在问他们之前是否再试一试其他

工作5年的Java程序员,才学会阅读源码,可悲吗?

最近一位5年开发经验的群友与我聊天 他说:最近慢慢的尝试去看spring的源码,学习spring,以前都只是会用就行了,但是越是到后面,发现只懂怎么用还不够,在面试的时候经常被问到一些开源框架的源码问题,即使在网上各种百度,当时回答出来也会是很皮毛,不痛不痒的解答. 对于目前碰到的瓶颈,他不知道怎么办. 我相信,绝不仅仅只有他一个人遇到这样的瓶颈,中国上百万的Java程序员中,大部分Java程序员都卡在这个苦恼中,或者还有更多的程序员们不知道自己不知道,因为他们看不到冰山下是什么. 回到为什么工

C#程序员经常用到的10个实用代码片段 - 操作系统

原文地址  如果你是一个C#程序员,那么本文介绍的10个C#常用代码片段一定会给你带来帮助,从底层的资源操作,到上层的UI应用,这些代码也许能给你的开发节省不少时间.以下是原文: 1 读取操作系统和CLR的版本 1 OperatingSystem os = System.Environment.OSVersion; 2 Console.WriteLine("Platform: {0}", os.Platform); 3 Console.WriteLine("Service P

【好程序员笔记分享】——iOS开发之纯代码键盘退出

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 EndEditing,但是因为即有textView,又有TextField而且他们各有不同的方法,虽然笔者现在搞懂了,但是不知道什么时候又不记得 了,而且虽然感觉很简单现在感觉很简单的样子,但是对于没

2018程序员必备的4大网站推荐(代码、编程、SQL等)

科技时代,程序员是一个热门行业,也是一个高薪行业,很多人很羡慕程序员,其实作为一名合格的程序员,要不断的提升自己,因为科技也在不断进步,所以,接下来小编分享5个程序员必备网站,包括代码.编程.SQL等,需要的朋友可以收藏起来慢慢学哦. 一.百度 百度是我们常用的中文搜索引擎,它包含各个方面的信息,当然程序员方面的知识也不少,包括Javaccript.CSS.代码.软件等等,应有尽有. 二.w3cschool 一个专业的编程入门学习及技术文档查询网站,包括html.PHP.Java等数十种编程语言