關(guān)于如何成為一個(gè)更優(yōu)秀的程序員這個(gè)問題,互聯(lián)網(wǎng)上比比皆是。而答案大同小異:看書、同行評審、參與開源項(xiàng)目等等。但是,關(guān)于如何檢測自己是不是真的進(jìn)步了這個(gè)問題,卻一直懸而未決。
我經(jīng)常鼓勵(lì)我的同行說,對于自己寫的代碼,無論是什么語言什么項(xiàng)目都應(yīng)該不遺余力地盡可能長時(shí)間地保存下來,放到安全的地方(即 GIT/ SVN)。幾年過去之后,再拿出來翻一翻?;剡^頭來看自己的代碼,會(huì)有一種神奇的喜劇效果,“OMG,這么狗屎的代碼居然是我寫的??!”,但是相信我,沒有比重新糾正這些項(xiàng)目和游戲代碼更有成就感的了。
上周末我在整理我七年前保存的一堆 Ruby 源文件時(shí),發(fā)現(xiàn)了這個(gè)文件:fizzbuzz.rb。盡管曾經(jīng)的我對此不屑一顧,但是現(xiàn)在,我,頓時(shí)心花怒放、興高采烈:
# 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
12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz2223FizzBuzz26Fizz2829FizzBuzz3132Fizz34BuzzFizz3738FizzBuzz41Fizz4344FizzBuzz4647Fizz49BuzzFizz5253FizzBuzz56Fizz5859FizzBuzz6162Fizz64BuzzFizz6768FizzBuzz71Fizz7374FizzBuzz7677Fizz79BuzzFizz8283FizzBuzz86Fizz8889FizzBuzz9192Fizz94BuzzFizz9798FizzBuzz
狗屎的時(shí)刻來了,看著這些代碼,我竟然給自己點(diǎn)了幾個(gè)贊:
不過,我可沒有盲目地沾沾自喜??粗@些代碼,我有了一些新的想法:
幾分鐘之后,我知道該如何改進(jìn)了。以條件語句為例:
Ruby 語言允許我們將 if 放在代碼塊后面,更易于閱讀。所以,我們可以稍微精簡一點(diǎn)代碼空間:
# 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 文件的新版本,希望下一個(gè) 7 年后能再次看到它。
只有當(dāng)我們回過頭去看看曾經(jīng)寫的代碼,我們才會(huì)真正明白自己取得了多么大的進(jìn)步。這種創(chuàng)新自我的學(xué)習(xí)方式,常常會(huì)帶給你美好的回憶。就在一個(gè)月以前,我找出了我 10 年前,還在讀大學(xué)的時(shí)候,創(chuàng)作的一個(gè)游戲。盡管里面有很多 bug,但是因?yàn)榫幊趟降奶岣撸液芸炀屯晟瞥晒Α?/p>
曾經(jīng)的代碼代表了曾經(jīng)的我們,蘊(yùn)含了曾經(jīng)的我們是如何艱辛創(chuàng)作的歷程,展現(xiàn)了我們的缺陷,我們的優(yōu)勢,我們的發(fā)展和進(jìn)步。它們能敦促你對其他程序員時(shí)刻保持謙虛和耐心。這是你在這個(gè)計(jì)算機(jī)世界的進(jìn)化史,寶貴無比。所以,請務(wù)必好好保存你寫的所有代碼。它們是你的孩子,是你的驕傲。
譯文鏈接:http://www.codeceo.com/article/look-your-old-code.html
翻譯作者:碼農(nóng)網(wǎng) – 小峰
聯(lián)系客服