程序員的進步從閱讀自己的老代碼開始
關于如何成為一個更優秀的程序員這個問題,互聯網上比比皆是。而答案大同小異:看書、同行評審、參與開源項目等等。但是,關于如何檢測自己是不是真的進步了這個問題,卻一直懸而未決。
我經常鼓勵我的同行說,對于自己寫的代碼,無論是什么語言什么項目都應該不遺余力地盡可能長時間地保存下來,放到安全的地方(即 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,但是因為編程水平的提高,我很快就完善成功。
曾經的代碼代表了曾經的我們,蘊含了曾經的我們是如何艱辛創作的歷程,展現了我們的缺陷,我們的優勢,我們的發展和進步。它們能敦促你對其他程 序員時刻保持謙虛和耐心。這是你在這個計算機世界的進化史,寶貴無比。所以,請務必好好保存你寫的所有代碼。它們是你的孩子,是你的驕傲。
譯文鏈接:http://www.codeceo.com/article/look-your-old-code.html
翻譯作者:碼農網 – 小峰