作译者简介
“笨办法”学Ruby(第3版)
作者简介
Zed Shaw是一名狂热的吉他手、程序员和编程书作家。他的书教世界各地的人如何写软件。他的《“笨办法”学Python》在全球有数百万的读者。他写的软件大大小小的公司都在使用。他的文章经常被众多极客圈里的人阅读和引用。他是一名活跃且有趣的作家,他会让你大笑,也会让你思考。
译者简介
王巍巍是一名受软件和编程的吸引中途转行的软件从业人员。写代码和翻译是他的两大爱好,他还喜欢在网上撰写和翻译一些文章。如果读者对书中的内容有疑问,或者发现了书中的错误,再或者只是想随便聊聊,请通过微博(http://weibo.com/gastlygem)或者电子邮件(wangweiwei@outlook.com)与他联系。
本书特色
Zed Shaw完善了堪称世界上最好的Ruby学习系统。只要跟着学习,你就会和迄今为止数十万Zed教过的初学者一样获得成功!你只要有纪律、有恒心地去学习,承诺决不放弃就可以了,其他的就让作者来完成吧。
在这本书中,你将通过完成52个精心设计的习题来学习Ruby。阅读这些习题,精确地输入代码(不许复制和粘贴),修正你的错误,观察程序的运行。在这个过程中,你将了解软件是如何工作的,好的程序看起来是什么样子的,怎样阅读、编写和思考代码,以及如何使用专业程序员的技巧来找出并修正程序中的错误。最重要的是,你将学到下面这些编写优秀的Ruby软件必需的初始技能。
万事开头难,不过很快你就会弄懂,并且享受其中的乐趣!
这本书会让你的每一分钟投入都有回报。Ruby是世界上最强大、最受欢迎的编程语言之一,很快你就会成为一名Ruby程序员。
你还可以看Zed的讲课视频!本书附赠5个多小时充满激情和动力的教学视频(扫右侧二维码下载):一部完整的Ruby视频教程!
内容提要
本书是一本Ruby入门书籍,是《“笨办法”学Python》的姊妹篇。本书适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。
本书结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数3个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测试及项目的实现等。每一章的格式基本相同,以代码习题开始,按照说明编写代码,运行并检查结果,然后再做巩固练习。
版权声明
Authorized translation from the English language edition, entitled Learn Ruby the Hard Way, Third Edition, 9780321884992 by Zed A. Shaw, published by Pearson Education, Inc., publishing as Addison-Wesley, Copyright 2015 by Pearson Education, Inc.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.
CHINESE SIMPLIFIED language edition published by PEARSON EDUCATION ASIA LTD. and POSTS & TELECOM PRESS Copyright 2015.
本书中文简体字版由Pearson Education Asia Ltd.授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。
本书封面贴有Pearson Education(培生教育出版集团)激光防伪标签,无标签者不得销售。
版权所有,侵权必究。
译者序
“笨办法”学Ruby(第3版)
本书是《“笨办法”学Python》的姊妹篇。如果你的编程基础为零,正打算通过Ruby学习编程,那么这本书就非常适合你。本书的结构和难度与《“笨办法”学Python》相似,最大的不同是将编程语言由Python换成了Ruby。所以,如果你看过了《“笨办法”学Python》,就没必要看这本书了。
Ruby是一门影响深远且易于入门的编程语言。本书作者是Ruby圈子里的明星人物,他之所以出名,一方面是因为他在开源软件方面的贡献,另一方面是因为他对一些开源项目的尖刻批评。由此可见他是一个典型的水平高、脾气大的人。不过,在写入门书籍的时候,他还是很平易近人的。
作者将“Learn X the Hard Way”(“笨办法”学编程)系列书籍全部直接发布到了网上,通过http://learnrubythehardway.org/可以阅读到本书的大部分内容,只不过是英文版的。截至目前,本书已经发布到了第3版。第1版只是基本的编程入门,第2版重写了若干章节,并加入了面向对象以及Web应用开发等相关的内容,第3版中作者根据学生的反馈,在各章中添加了“常见问题回答”,并再次修订了后面的若干重点章节,进一步加强了面向对象编程的部分。
如果你对本书有些看法,或者有问题要问,欢迎通过新浪微博@王joel或者邮件wangweiwei@outlook.com与我联系。
感谢
感谢来自台湾的xdite网友,他曾经翻译过本书的第1版。
感谢人民邮电出版社勤劳而又专业的编辑们对本书的审稿和校对。
前言
这本书的目的是让你起步编程。虽然书名说是用“笨办法”(Hard Way)学习写代码,但其实并非如此。所谓的“笨办法”指的是本书的教学方式,也就是所谓的“指令式”教学。在这个过程中,我会让你完成一系列习题,使你通过重复练习来学到技能,这些习题也是专为重复练习而设计的。对于一无所知的初学者来说,在能理解更复杂的话题之前,这种教授方式效果是很好的。你可以在各种场合看到这种教授方式,从武术到音乐不一而足,甚至在学习基本的数学和阅读技能时也会看到这种教学方式。
这本书通过练习和记忆的方式,教你逐渐掌握Ruby的技能,然后由浅入深,让你将这些技能应用到各种问题上。读完本书以后,你将有能力接触更为复杂的编程主题。我喜欢告诉别人,我的这本书能给你一个“编程黑带”。意思就是说,你已经打好了基础,可以真正开始学习编程了。
如果你肯努力,并投入一些时间,学会了这些技能,你将学会如何编写代码。
致谢
首先我要感谢在本书前两版中帮过我的Angela,没有她的话我有可能就不会费工夫完成这本书了。她帮我修订了第1版书稿,而且在我写书的过程中给了我极大的支持。
我还要感谢Rob Sobers,他建议我基于Python的书再做一个Ruby版,并且做了由Python到Ruby的初始转换工作。
我还要感谢Greg Newman为前两版提供的封面设计,Brian Shumate在早期网站设计方面的帮助,以及所有读过前两版并且提出反馈和勘误的读者。
谢谢你们。
笨办法
在这本书的帮助下,你将通过完成下面这些非常简单的事情来学会一门编程语言,这也是每个程序员的必经之路。
1.从头到尾完成每一个习题。
2.一字不差地录入每一段程序。
3.让程序运行起来。
就是这样了。刚开始这对你来说会非常难,但你需要坚持下去。如果你通读了这本书,每晚花一两个小时做做习题,你就可以为自己读下一本编程书打下良好的基础。通过这本书,你学到的可能不是真正的“编程”技术,但你会学到学习一门编程语言的基本技能。
这本书的目的是教会你编程新手所需的3种最重要的技能:读和写、注重细节以及发现不同。
读和写
很显然,如果你连打字都成问题的话,那你学习编程也会有问题。尤其是,如果你连程序源代码中的那些奇怪字符都打不出来的话,就更别提编程了。如果没有这些基本技能,你将连最基本的软件工作原理都难以学会。
手动录入代码范例并让它们运行起来的过程,会让你知道各种符号的名称,熟悉它们的用处,最终读懂这门编程语言。
注重细节
区分好程序员和差程序员的最重要的一个方面就是对于细节的重视程度。事实上,这是任何行业区分好坏的标准。如果缺乏对工作中每一个微小细节的注意,你的工作成果将不可避免地出现各种关键缺陷。从编程这一行来讲,你得到的结果将会是毛病多多而且难以使用的软件。
通读这本书并一字不差地录入书中的每个例子,会训练你把精力集中到正在做的事情的细节上。
发现不同
程序员长年累月的工作会培养出一种重要的技能,那就是观察事物间不同点的能力。有经验的程序员拿着两份仅有细微不同的程序,立即就可以指出里边的不同点来。程序员甚至制造出工具来让这件事更加容易,不过我们不会用到这些工具。你要先用笨办法训练自己,然后才可以使用这些工具。
在做这些习题并且录入代码的时候,你一定会写错东西,这是不可避免的,即使有经验的程序员也会偶尔出错。你的任务是把自己写的东西和正确答案对比,把所有的不同点都修正过来。这样的过程可以让你对程序里的错误、bug以及其他问题更加敏感。
不要复制粘贴
你必须手动将每个习题录进去。复制粘贴会让这些习题变得毫无意义。这些习题的目的是训练你的双手、大脑和思维,让你有能力读代码、写代码和观察代码。如果你复制粘贴的话,就是在欺骗自己,而且这些习题的效果也会大打折扣。
使用附带的视频
本书附带了5小时以上的视频教程1,用来帮助你学完这本书。每个习题都有一个对应的视频,其中要么是对于习题的演示,要么是教你一些完成习题的小技巧。使用视频最好的方法就是,当你在书里边遇到困难或者完成习题后复习时去看看。这样会让你逐渐摆脱对视频教程的依赖,并培养出直接通过书籍学习的能力。只要坚持这样做,慢慢你就不需要视频教程了,不管是本书的视频还是别的视频,学编程时你都不需要了。你会具备直接通过阅读获取信息的能力。
关于坚持练习的一点提示
你通过这本书学编程时,我正在学弹吉他。我每天至少训练2小时,至少花1小时练习音阶、和弦、琶音,剩下的时间用来学习音乐理论和乐曲演奏、训练听力等。有时我一天会花8小时来学习吉他和音乐,因为我觉得这是一件有趣的事情。对我来说,要学习一样东西,最自然、最根本的方法就是去反复地练习。我知道,要学好一种技能,每日的练习是必不可少的,就算哪天的练习没啥进展(对我来说是常事),或者说学习内容实在太难,你也不必介意。只要坚持尝试,总有一天困难会变得容易,枯燥也会变得有趣。
在我写《“笨办法”学Python》和《“笨办法”学Ruby》这两本书之间的时间内,我对绘画产生了兴趣。在39岁的时候喜欢上了视觉艺术,然后就跟以前学习吉他、音乐、编程的时候一样,每天学习绘画。我搜集了诸多入门教材,照着书上的去做,每天都画一些东西出来,并且享受着学习的过程。我离“艺术家”还差得远,甚至连“画得好”都谈不上,不过现在我可以说我是“会画画”的了。在学习艺术的过程中,我用的就是这本书教编程的方法。只要将问题拆分成小的练习和课程,你就可以学会任何东西。只要集中精力慢慢提高,享受学习的过程,不管最终学到什么程度,你都会从中获益的。
通过这本书学习编程的过程中要记住一点,就是所谓的“万事开头难”,对于有价值的事情尤其如此。也许你是一个害怕失败的人,一遇到困难就想放弃;也许你是一直没学会自律,一遇到“无聊”的事情就不想上手;也许因为有人夸你“有天分”而让你自视甚高,不愿意做这些看上去很笨拙的事情,怕有负你“天才”的称号;也许你太过激进,把自己跟像我这样有20多年经验的编程老手相比,让自己失去了信心。
不管是什么原因,你一定要坚持下去。如果遇到做不出来的巩固练习,或者遇到一个看不懂的习题,你可以暂时跳过去,过一阵子回来再看。编程中有一件经常发生的怪事就是,一开始你什么都不懂,这会让你感觉很不舒服,就像学习人类的语言一样,你会发现很难记住一些词和特殊符号的用法,而且会经常感到很迷茫,直到有一天,你会觉得豁然开朗,以前不明白的东西忽然就明白了。如果你坚持完成并努力理解这些习题,你最终会学会这些东西的。也许你不会成为一位编程大师,但你至少会明白编程的原理。
如果你放弃的话,你会失去达到这个程度的机会。如果你坚持尝试,坚持录入习题,坚持弄懂习题的话,你最终一定会明白里边的内容的。如果你通读了这本书,却还是不懂怎样写代码,你的努力也不会白费。你可以说你已经尽力了,虽然成效不佳,至少你尝试过了。这也是一件值得骄傲的事情。
给“小聪明”们的警告
有些学过编程的人读到这本书可能会有一种被贬低的感觉。其实本书没有任何要居高临下地贬低任何人的意思,只不过我比我面向的读者群知道的更多而已。如果你觉得自己比我聪明,觉得我在居高临下,那我也没办法,因为你根本就不是我的目标读者。
如果你觉得这本书里到处都在贬低你的智商,那我对你有以下3个建议。
1.别读这本书了。我这本书不是写给你的,而是写给那些不是什么都懂的人看的。
2.放下架子好好学。如果你认为你什么都懂,那就很难从比自己强的人身上学到什么了。
3.学Lisp去。我听说什么都懂的人特喜欢Lisp。
对于其他抱着学习的目的而来的人,你们读的时候就想着我在微笑就可以了,而且我的眼睛里还带点儿恶作剧的闪光。
1本书附带视频请在www.epubit.com.cn的本书页面上下载。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
目录
前言
习题0 准备工作
习题1 第一个程序
习题2 注释和#号
习题3 数字和数学计算
习题4 变量和命名
习题5 更多的变量和打印
习题6 字符串和文本
习题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 学习面向对象术语
习题42 对象、类及从属关系
习题43 基本的面向对象分析和设计
习题44 继承与合成
习题45 你来制作一个游戏
习题46 项目骨架
习题47 自动化测试
习题48 进阶用户输入
习题49 创建句子
习题50 你的第一个网站
习题51 从浏览器中获取输入
习题52 创建Web游戏
接下来的路
老程序员的建议
附录 命令行快速入门