這本小書的目的是讓你起步編程。雖然書名說是“笨辦法”,但其實(shí)并非如此. 所謂的“笨辦法”是指本書教授的方式。在這本書的幫助下,你將通過非常簡單的練習(xí)學(xué)會(huì)一門編程語言。做練習(xí) 是每個(gè)程序員的必經(jīng)之路:
就是這樣了。剛開始這對(duì)你來說會(huì)非常難,但你需要堅(jiān)持下去。如果你通讀了這本書,每晚花個(gè)一兩小時(shí)做做習(xí)題,你可以為自己讀下一本編程書籍打下良好的基礎(chǔ)。通過這本書你學(xué)到的可能不是真正的編程,但你會(huì)學(xué)到最基本的學(xué)習(xí)方法。
這本書的目的是教會(huì)你編程新手所需的三種最重要的技能:讀和寫、注重細(xì)節(jié)、發(fā)現(xiàn)不同。
很顯然,如果你連打字都成問題的話,那你學(xué)習(xí)編程也會(huì)成問題。尤其如果你連程序源代碼中的那些奇怪字符都打不出來的話,就根本別提編程了。沒有這樣基本技能的話,你將連最基本的軟件工作原理都難以學(xué)會(huì)。
為了讓你記住各種符號(hào)的名字并對(duì)它們熟悉起來,你需要將代碼寫下來并且運(yùn)行起來。這個(gè)過程也會(huì)讓你對(duì)編程語言更加熟悉。
區(qū)分好程序員和差程序員的最重要的一個(gè)技能就是對(duì)于細(xì)節(jié)的注重程度。事實(shí)上這是任何行業(yè)區(qū)分好壞的標(biāo)準(zhǔn)。如果缺乏對(duì)于工作的每一個(gè)微小細(xì)節(jié)的注意,你的工作成果將缺乏重要的元素。以編程來講,這樣你得到的結(jié)果只能是毛病多多難以使用的軟件。
通過將本書里的每一個(gè)例子一字不差地打出來,你將通過實(shí)踐訓(xùn)練自己,讓自己集中精力到你作品的細(xì)節(jié)上面。
程序員長年累月的工作會(huì)培養(yǎng)出一個(gè)重要技能,那就是對(duì)于不同點(diǎn)的區(qū)分能力。有經(jīng)驗(yàn)的程序員拿著兩份僅有細(xì)微不同的程序,可以立即指出里邊的不同點(diǎn)來。程序員甚至造出工具來讓這件事更加容易,不過我們不會(huì)用到這些工具。你要先用笨辦法訓(xùn)練自己,等你具備一些相關(guān)能力的時(shí)候才可以使用這些工具。
在你做這些練習(xí)并且打字進(jìn)去的時(shí)候,你一定會(huì)寫錯(cuò)東西。這是不可避免的,即使有經(jīng)驗(yàn)的程序員也會(huì)偶爾寫錯(cuò)。你的任務(wù)是把自己寫的東西和要求的正確答案對(duì)比,把所有的不同點(diǎn)都修正過來。這樣的過程可以讓你對(duì)于程序里的錯(cuò)誤和 bug 更加敏感。
你必須手動(dòng)將每個(gè)練習(xí)打出來。復(fù)制粘貼會(huì)讓這些練習(xí)變得毫無意義。這些習(xí)題的目的是訓(xùn)練你的雙手和大腦思維,讓你有能力讀代碼、寫代碼、觀察代碼。如果你復(fù)制粘貼的話,那你就是在欺騙自己,而且這些練習(xí)的效果也將大打折扣。
在你通過這本書學(xué)習(xí)編程時(shí),我正在學(xué)習(xí)彈吉他。我每天至少訓(xùn)練 2 小時(shí),至少花一個(gè)小時(shí)練習(xí)音階、和聲、和琶音,剩下的時(shí)間用來學(xué)習(xí)音樂理論和歌曲演奏以及訓(xùn)練聽力等。有時(shí)我一天會(huì)花 8 個(gè)小時(shí)來練習(xí),因?yàn)槲矣X得這是一件有趣的事情。對(duì)我來說,要學(xué)好一樣?xùn)|西,每天的練習(xí)是必不可少的。就算這天個(gè)人狀態(tài)很差,或者說學(xué)習(xí)的課題實(shí)在太難,你也不必介意,只要堅(jiān)持嘗試,總有一天困難會(huì)變得容易,枯燥也會(huì)變得有趣了。
在你通過這本書學(xué)習(xí)編程的過程中要記住一點(diǎn),就是所謂的“萬事開頭難”,對(duì)于有價(jià)值的事情尤其如此。也許你是一個(gè)害怕失敗的人,一碰到困難就想放棄。也許你是一個(gè)缺乏自律的人,一碰到“無聊”的事情就不想上手。也許因?yàn)橛腥丝淠恪坝刑旆帧倍屇阕砸暽醺?,不愿意做這些看上去很笨拙的事情,怕有負(fù)你”神童”的稱號(hào)。也許你太過激進(jìn),把自己跟有20多年經(jīng)驗(yàn)的編程老手相比,讓自己失去了信心。
不管是什么原因,你一定要堅(jiān)持下去。如果你碰到做不出來的加分習(xí)題,或者碰到一節(jié)看不懂的習(xí)題,你可以暫時(shí)跳過去,過一陣子回來再看。只要堅(jiān)持下去,你總會(huì)弄懂的。
一開始你可能什么都看不懂。這會(huì)讓你感覺很不舒服,就像學(xué)習(xí)人類的自然語言一樣。你會(huì)發(fā)現(xiàn)很難記住一些單詞和特殊符號(hào)的用法,而且會(huì)經(jīng)常感到很迷茫,直到有一天,忽然一下子你會(huì)覺得豁然開朗,以前不明白的東西忽然就明白了。如果你堅(jiān)持練習(xí)下去,堅(jiān)持去上下求索,你最終會(huì)學(xué)會(huì)這些東西的。也許你不會(huì)成為一個(gè)編程大師,但你至少會(huì)明白程序是怎么工作的。
如果你放棄的話,你會(huì)失去達(dá)到這個(gè)程度的機(jī)會(huì)。你會(huì)在第一次碰到不明白的東西時(shí)(幾乎是所有的東西)放棄。如果你堅(jiān)持嘗試,堅(jiān)持寫習(xí)題,堅(jiān)持嘗試弄懂習(xí)題的話,你最終一定會(huì)明白里邊的內(nèi)容的。
如果你通讀了這本書,卻還是不知道編程是怎么回事。那也沒關(guān)系,至少你嘗試過了。你可以說你已經(jīng)盡過力但成效不佳,但至少你嘗試過了。這也是一件值得你驕傲的事情。
有的學(xué)過編程的人讀到這本書,可能會(huì)有一種被侮辱的感覺。其實(shí)本書中沒有任何要居高臨下地貶低任何人的意思。只不過是我比我面向的讀者群知道的更多而已。如果你覺得自己比我聰明,然后覺得我在居高臨下,那我也沒辦法,因?yàn)槟愀揪筒粚儆谖业哪康淖x者群。
如果你覺得這本書里到處都在侮辱你的智商,那我對(duì)你有三個(gè)建議:
對(duì)于其他在這里學(xué)習(xí)的人,你們讀的時(shí)候就想著我在微笑就可以了,雖然我的眼睛里還帶著惡作劇的閃光。
Copyright (C) 2010 by Zed A. Shaw. 你可以在不收取任何費(fèi)用,而且不修改任何內(nèi)容的前提下自由分發(fā)這本書給任何人。但是本書的內(nèi)容只允許完整原封不動(dòng)地進(jìn)行分發(fā)和傳播。也就是說如果你用這本書給人上課,只要你不向?qū)W生收費(fèi),而且給他們看的書是完整未加修改的,那就沒問題。
首先我要感謝幫助我完成這版書的人。首先是 Pretty Girl Editing Services 可愛的編輯所做的編輯工作。然后是 Greg Newman,他提供了美工圖并幫我設(shè)計(jì)了封面,而且還幫忙復(fù)審了本書。是他讓這本書看上去像本真正的書籍,而且就算我沒在第一版里提到他的辛勞,他也沒跟我計(jì)較。我還要感謝 Brian Shumate 在網(wǎng)站設(shè)計(jì)方面的幫助,這方面的幫助也是我非常需要的。
最后,我還要感謝成千上萬讀過本書第一版而且提出 bug 報(bào)告和改進(jìn)建議的讀者。你們的貢獻(xiàn)讓這本書的內(nèi)容更為扎實(shí),沒有你們我是做不到的。謝謝你們。