> 原文出处:http://lrthw.github.io/intro/
这本小书的目的是让你起步学习程式。虽然书名说是「笨办法」,但其实并非如此。所谓的「笨办法」是指本书教授的方式。在这本书的帮助下,你将通过非常简单的练习学会一门程式语言。写练习题是每个程序设计师的必经之路:
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.
- 笨方法更简单
- 习题 0: 准备工作
- 习题 1: 第一个程式
- 习题 2: 注释和井号
- 习题 3: 数字和数学计算
- 习题 4: 变数(variable)和命名
- 习题 5: 更多的变数和印出
- 习题 6: 字串(string)和文字
- 习题 7: 更多印出
- 习题 8: 印出,印出
- 习题 9: 印出,印出,印出
- 习题 10: 那是什么?
- 习题 11: 提问
- 习题 12: 模组 (Module)
- 习题 13: 参数、解包、参数
- 习题 14: 提示和传递
- 习题 15: 读取档案
- 习题 16: 读写档案
- 习题 17: 更多的档案操作
- 习题 18: 命名、变数、程式码、函式
- 习题 19: 函式和变数
- 习题 20: 函式和档案
- 习题 21: 函式可以传回东西
- 习题 22: 到现在你学到了哪些东西?
- 习题 23: 阅读一些程式码
- 习题 24: 更多练习
- 习题 25: 更多更多的练习
- 习题 26: 恭喜你,现在来考试了!
- 习题 27: 记住逻辑关系
- 习题 28: 布林(Boolean)表示式练习
- 习题 29: 如果(if)
- 习题 30: Else 和 If
- 习题 31: 做出决定
- 习题 32: 回圈和阵列
- 习题 33: While 回圈
- 习题 34: 存取阵列里的元素
- 习题 35: 分支 (Branches) 和函式 (Functions)
- 习题 36: 设计和测试
- 习题 37: 复习各种符号
- 习题 38: 阅读程式码
- 习题 39: 阵列的操作
- 习题 40: Hash, 可爱的 Hash
- 习题 41: 来自 Percal 25 号行星的哥顿人(Gothons)
- 习题 42: 物以类聚
- 习题 43: 你来制作一个游戏
- 习题 44: 评估你的游戏
- 习题 45: 物件、类和从属关系
- 习题 46: 一个专案骨架
- 习题 47: 自动化测试
- 习题 48: 更进阶的使用者输入
- 习题 49: 创造句子
- 习题 50: 你的第一个网站
- 习题 51: 从浏览器中取得输入
- 习题 52: 创造你的网页游戏
- 下一步
- 一个老程式设计师的建议