這本小書的目的是讓你開始學習程序。雖然書名說是「笨辦法」,但其實并非如此。所謂的「笨辦法」是指本書指導的方式。在這本書的幫助下,你將通過非常簡單的練習學會一門程序語言。做練習題是每個程序設計師的必經之路:
1. 做每一道習題
2. 一字不差地寫出每一個程序
3. 讓程序運行起來就是這樣了。剛開始這對你來說會非常難,但你需要堅持下去。如果你通讀了這本書,每晚花個一兩小時做做習題,你可以為自己讀下一本程序書籍打下良好的基礎。通過這本書你學到的可能不是真正的「寫程序」,但你會學到最基本的學習方法。
這本書的目的是教會你程序新手所需的三種最重要的技能:「讀和寫」、「注重細節」、「發現不同」。
# 讀和寫
* * * * *
很顯然,如果你連打字都成問題的話,那你學習寫程序也會成問題。尤其如果你連程序源碼中的那些奇怪符號都打不出來的話,就根本別提寫程序了。沒有這樣基本技能的話,你將連最基本的軟件運行原理都難以理解。
為了讓你記住各種符號的名字并對它們熟悉起來,你需要將程序代碼寫下來并且運行起來。這個過程也會讓你對程序語言更加熟悉。
# 發現不同
* * * * *
程序設計師長年累月的工作能培養出一個重要技能,那就是對于不同點的區分能力。有經驗的程序設計師拿著兩份僅有細微不同的程序,可以立即指出里邊的不同點來。程序設計師甚至造出工具來讓這件事更加容易,不過我們不會用到這些工具。你要先用笨辦法訓練自己,等你具備一些相關能力的時候才可以使用這些工具。
在你做這些練習并且打字進去的時候,你一定會寫錯東西。這是不可避免的,即使有經驗的程序設計師也會偶爾寫錯。你的任務是把自己寫的東西和要求的正確答案對比,把所有的不同點都修正過來。這樣的過程可以讓你對于程序里的錯誤和bug 更加敏感。
# 不要復制粘貼
* * * * *
你必須手動將每個習題練習「打」出來。復制粘貼會讓這些練習變得毫無意義。這些習題的目的是訓練你的雙手和大腦思維,讓你有能力讀程序、寫程序、觀察程序。如果你復制粘貼的話,那你就是在欺騙自己,而且這些練習的效果也將大打折扣。
# 對于堅持練習的一點提示
* * * * *
在你通過這本書學習寫程序時,我正在學習彈吉他。我每天至少訓練2 小時,至少花一個小時練習音階、和聲、和琶音,剩下的時間用來學習音樂理論和歌曲演奏以及訓練聽力等。有時我一天會花8個小時來練習,因為我覺得這是一件有趣的事情。對我來說,要學好一樣東西,每天的練習是必不可少的。就算這天個人狀態很差,或者說學習的課題實在太難,你也不必介意,只要堅持嘗試,總有一天困難會變得容易,枯燥也會變得有趣了。
在你通過這本書學習寫程序的過程中要記住一點,就是所謂的「萬事起頭難」,對于有價值的事情尤其如此。也許你是一個害怕失敗的人,一碰到困難就想放棄。也許你是一個缺乏自律的人,一碰到「無聊」的事情就不想上手。也許因為有人夸你“有天分”而讓你自視甚高,不愿意做這些看上去很笨拙的事情,怕有負你「神童」的稱號。也許你太過激進,把自己跟有20多年經驗的程序老手相比,讓自己失去了信心。
不管是什么原因,你一定要堅持下去。如果你碰到做不出來的加分習題,或者碰到一節看不懂的習題,你可以暫時跳過去,過一陣子回來再看。只要堅持下去,你總會弄懂的。
一開始你可能什么都看不懂。這會讓你感覺很不舒服,就像學習人類的自然語言一樣。你會發現很難記住一些單詞和特殊符號的用法,而且會經常感到很迷茫,直到有一天,忽然一下子你會覺得豁然開朗,以前不明白的東西忽然就明白了。如果你堅持練習下去,堅持去上下求索,你最終會學會這些東西的。也許你不會成為一個編程大師,但你至少會明白程序是怎么工作的。
如果你放棄的話,你會失去達到這個程度的機會。你會在第一次碰到不明白的東西時(幾乎是所有的東西)放棄。如果你堅持嘗試,堅持寫習題,堅持嘗試弄懂習題的話,你最終一定會明白里邊的內容的。
如果通讀了這本書,卻還是不知道編程是怎么回事。那也沒關系,至少你嘗試過了。你可以說已經盡過力但成效不佳,但至少嘗試過了。這也是一件值得驕傲的事情。
# License
* * * * *
This book is Copyright (C) 2011 by Zed A. Shaw. You are free to distribute this book to anyone you want, so long as you do not charge anything for it, and it is not altered. You must give away the book in its entirety, or not at all. This means it’s alright for you to teach a class using the book, so long as you aren’t charging students for the book and you give them the whole book unmodified.
- 笨方法更簡單
- 習題 00: 準備工作
- 習題 01: 第一個程序
- 習題 02: 注釋和#號
- 習題 03: 數字和數學計算
- 習題 04: 變量的命名
- 習題 05: 更多的變量和輸出
- 習題 06: 字符串和文字
- 習題 07: 更多輸出
- 習題 08: 輸出,輸出
- 習題 09: 輸出,輸出,輸出~
- 習題 10: 那是啥?
- 習題 11: 提問
- 習題 12: 模塊
- 習題 13: 參數,解包,參數
- 習題 14: 提示和傳遞
- 習題 15: 讀取文件
- 習題 16: 操作文件
- 習題 17: 更多的文件操作
- 習題 18: 命名,變量,代碼,函數
- 習題 19: 函數和變量
- 習題 20: 函數和文件
- 習題 21: 函數可以傳入信息
- 習題 22: 到現在你學到了什么?
- 習題 23: 閱讀一些代碼
- 習題 24: 更多練習
- 習題 25: 更多更多的練習
- 習題 26: 恭喜你,現在來考試了!
- 習題 27: 記住邏輯關系
- 習題 28: Boolean表達式練習
- 習題 29: 如果
- 習題 30: Else 和 If
- 習題 31: 做出判斷
- 習題 32: 循環和數組
- 習題 33: While
- 習題 34: 存取數組里的元素
- 習題 35: 分支和函數
- 習題 36: 設計和測試
- 習題 37: 重視各種符號