# 前言:笨办法更简单
这本小书的目的是让你起步编程。虽然书名说是“笨办法”,但其实并非如此. 所谓的“笨办法”是指本书教授的方式。在这本书的帮助下,你将通过非常简单的练习学会一门编程语言。做练习 是每个程序员的必经之路:
1. 做每一道习题
1. 一字不差地写出每一个程序
1. 让程序运行起来
就是这样了。刚开始这对你来说会非常难,但你需要坚持下去。如果你通读了这本书,每晚花个一两小时做做习题,你可以为自己读下一本编程书籍打下良好的基础。通过这本书你学到的可能不是真正的编程,但你会学到最基本的学习方法。
这本书的目的是教会你编程新手所需的三种最重要的技能:读和写、注重细节、发现不同。
### 读和写
很显然,如果你连打字都成问题的话,那你学习编程也会成问题。尤其如果你连程序源代码中的那些奇怪字符都打不出来的话,就根本别提编程了。没有这样基本技能的话,你将连最基本的软件工作原理都难以学会。
为了让你记住各种符号的名字并对它们熟悉起来,你需要将代码写下来并且运行起来。这个过程也会让你对编程语言更加熟悉。
### 注重细节
区分好程序员和差程序员的最重要的一个技能就是对于细节的注重程度。事实上这是任何行业区分好坏的标准。如果缺乏对于工作的每一个微小细节的注意,你的工作成果将缺乏重要的元素。以编程来讲,这样你得到的结果只能是毛病多多难以使用的软件。
通过将本书里的每一个例子一字不差地打出来,你将通过实践训练自己,让自己集中精力到你作品的细节上面。
### 发现不同
程序员长年累月的工作会培养出一个重要技能,那就是对于不同点的区分能力。有经验的程序员拿着两份仅有细微不同的程序,可以立即指出里边的不同点来。程序员甚至造出工具来让这件事更加容易,不过我们不会用到这些工具。你要先用笨办法训练自己,等你具备一些相关能力的时候才可以使用这些工具。
在你做这些练习并且打字进去的时候,你一定会写错东西。这是不可避免的,即使有经验的程序员也会偶尔写错。你的任务是把自己写的东西和要求的正确答案对比,把所有的不同点都修正过来。这样的过程可以让你对于程序里的错误和 bug 更加敏感。
### 不要复制粘贴
你必须手动将每个练习打出来。复制粘贴会让这些练习变得毫无意义。这些习题的目的是训练你的双手和大脑思维,让你有能力读代码、写代码、观察代码。如果你复制粘贴的话,那你就是在欺骗自己,而且这些练习的效果也将大打折扣。
### 对于坚持练习的一点提示
在你通过这本书学习编程时,我正在学习弹吉他。我每天至少训练 2 小时,至少花一个小时练习音阶、和声、和琶音,剩下的时间用来学习音乐理论和歌曲演奏以及训练听力等。有时我一天会花 8 个小时来练习,因为我觉得这是一件有趣的事情。对我来说,要学好一样东西,每天的练习是必不可少的。就算这天个人状态很差,或者说学习的课题实在太难,你也不必介意,只要坚持尝试,总有一天困难会变得容易,枯燥也会变得有趣了。
在你通过这本书学习编程的过程中要记住一点,就是所谓的“万事开头难”,对于有价值的事情尤其如此。也许你是一个害怕失败的人,一碰到困难就想放弃。也许你是一个缺乏自律的人,一碰到“无聊”的事情就不想上手。也许因为有人夸你“有天分”而让你自视甚高,不愿意做这些看上去很笨拙的事情,怕有负你”神童”的称号。也许你太过激进,把自己跟有20多年经验的编程老手相比,让自己失去了信心。
不管是什么原因,你一定要坚持下去。如果你碰到做不出来的加分习题,或者碰到一节看不懂的习题,你可以暂时跳过去,过一阵子回来再看。只要坚持下去,你总会弄懂的。
一开始你可能什么都看不懂。这会让你感觉很不舒服,就像学习人类的自然语言一样。你会发现很难记住一些单词和特殊符号的用法,而且会经常感到很迷茫,直到有一天,忽然一下子你会觉得豁然开朗,以前不明白的东西忽然就明白了。如果你坚持练习下去,坚持去上下求索,你最终会学会这些东西的。也许你不会成为一个编程大师,但你至少会明白程序是怎么工作的。
如果你放弃的话,你会失去达到这个程度的机会。你会在第一次碰到不明白的东西时(几乎是所有的东西)放弃。如果你坚持尝试,坚持写习题,坚持尝试弄懂习题的话,你最终一定会明白里边的内容的。
如果你通读了这本书,却还是不知道编程是怎么回事。那也没关系,至少你尝试过了。你可以说你已经尽过力但成效不佳,但至少你尝试过了。这也是一件值得你骄傲的事情。
### 给“小聪明”们的警告
有的学过编程的人读到这本书,可能会有一种被侮辱的感觉。其实本书中没有任何要居高临下地贬低任何人的意思。只不过是我比我面向的读者群知道的更多而已。如果你觉得自己比我聪明,然后觉得我在居高临下,那我也没办法,因为你根本就不属于我的目的读者群。
如果你觉得这本书里到处都在侮辱你的智商,那我对你有三个建议:
1. 别读这本书了。我不是写给你的,我是写给需要学习的人的。
1. 放下架子好好学。如果你认为你什么都知道,那你就很难从比你强的人身上学到什么了。
1. 学 Lisp 去。我听说什么都知道的人可喜爱 Lisp 了。
对于其他在这里学习的人,你们读的时候就想着我在微笑就可以了,虽然我的眼睛里还带着恶作剧的闪光。
### 许可协议
Copyright (C) 2010 by Zed A. Shaw. 你可以在不收取任何费用,而且不修改任何内容的前提下自由分发这本书给任何人。但是本书的内容只允许完整原封不动地进行分发和传播。也就是说如果你用这本书给人上课,只要你不向学生收费,而且给他们看的书是完整未加修改的,那就没问题。
### 特别感谢
首先我要感谢帮助我完成这版书的人。首先是 Pretty Girl Editing Services 可爱的编辑所做的编辑工作。然后是 Greg Newman,他提供了美工图并帮我设计了封面,而且还帮忙复审了本书。是他让这本书看上去像本真正的书籍,而且就算我没在第一版里提到他的辛劳,他也没跟我计较。我还要感谢 Brian Shumate 在网站设计方面的帮助,这方面的帮助也是我非常需要的。
最后,我还要感谢成千上万读过本书第一版而且提出 bug 报告和改进建议的读者。你们的贡献让这本书的内容更为扎实,没有你们我是做不到的。谢谢你们。
- 译者前言
- 前言:笨办法更简单
- 习题 0: 准备工作
- 习题 1: 第一个程序
- 习题 2: 注释和井号
- 习题 3: 数字和数学计算
- 习题 4: 变量(variable)和命名
- 习题 5: 更多的变量和打印
- 习题 6: 字符串(string)和文本
- 习题 7: 更多打印
- 习题 8: 打印,打印
- 习题 9: 打印,打印,打印
- 习题 10: 那是什么?
- 习题 11: 提问
- 习题 12: 提示别人
- 习题 13: 参数、解包、变量
- 习题 14: 提示和传递
- 习题 15: 读取文件
- 习题 16: 读写文件
- 习题 17: 更多文件操作
- 习题 18: 命名、变量、代码、函数
- 习题 19: 函数和变量
- 习题 20: 函数和文件
- 习题 21: 函数可以返回东西
- 习题 22: 到现在你学到了哪些东西?
- 习题 23: 读代码
- 习题 24: 更多练习
- 习题 25: 更多更多的练习
- 习题 26: 恭喜你,现在可以考试了!
- 习题 27: 记住逻辑关系
- 习题 28: 布尔表达式练习
- 习题 29: 如果(if)
- 习题 30: Else 和 If
- 习题 31: 作出决定
- 习题 32: 循环和列表
- 习题 33: While 循环
- 习题 34: 访问列表的元素
- 习题 35: 分支和函数
- 习题 36: 设计和调试
- 习题 37: 复习各种符号
- 习题 38: 阅读代码
- 习题 39: 列表的操作
- 习题 40: 字典, 可爱的字典
- 习题 41: 来自 Percal 25 号行星的哥顿人(Gothons)
- 习题 42: 物以类聚
- 习题 43: 你来制作一个游戏
- 习题 44: 给你的游戏打分
- 习题 45: 对象、类、以及从属关系
- 习题 46: 一个项目骨架
- 习题 47: 自动化测试
- 习题 48: 更复杂的用户输入
- 习题 49: 创建句子
- 习题 50: 你的第一个网站
- 习题 51: 从浏览器中获取输入
- 习题 52: 创建你的 web 游戏
- 下一步
- 老程序员的建议