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