Teach Yourself Programming in Ten Years
Peter Norvig
Why is everyone in such a rush?
Walk into any bookstore, and you'll see how to Teach Yourself Java in 24 Hours alongside endless variations offering to teach C, SQL, Ruby, Algorithms, and so on in a few days or hours. The Amazon advanced search for [title: teach, yourself, hours, since: 2000 and found 512 such books. Of the top ten, nine are programming books (the other is about bookkeeping). Similar results come from replacing "teach yourself" with "learn" or "hours" with "days."
The conclusion is that either people are in a big rush to learn about programming, or that programming is somehow fabulously easier to learn than anything else. Felleisen et al. give a nod to this trend in their book How to Design Programs, when they say "Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies." The Abtruse Goose comic also had their take.
Let's analyze what a title like Teach Yourself C++ in 24 Hours could mean:
Teach Yourself: In 24 hours you won't have time to write several significant programs, and learn from your successes and failures with them. You won't have time to work with an experienced programmer and understand what it is like to live in a C++ environment. In short, you won't have time to learn much. So the book can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.
C++: In 24 hours you might be able to learn some of the syntax of C++ (if you already know another language), but you couldn't learn much about how to use the language. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using C++ syntax, but you couldn't learn what C++ is actually good (and bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing". One possible point is that you have to learn a tiny bit of C++ (or more likely, something like JavaScript or Processing) because you need to interface with an existing tool to accomplish a specific task. But then you're not learning how to program; you're learning to accomplish that task.
in 24 Hours: Unfortunately, this is not enough, as the next section shows.
Teach Yourself Programming in Ten Years
Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967.
Malcolm Gladwell has popularized the idea, although he concentrates on 10,000 hours, not 10 years. Henri Cartier-Bresson (1908-2004) had another metric: "Your first 10,000 photographs are your worst." (He didn't anticipate that with digital cameras, some people can reach that mark in a week.) True expertise may take a lifetime: Samuel Johnson (1709-1784) said "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer (1340-1400) complained "the lyf so short, the craft so long to lerne." Hippocrates (c. 400BC) is known for the excerpt "ars longa, vita brevis", which is part of the longer quotation "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", which in English renders as "Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult." Of course, no single number can be the final answer: it doesn't seem reasonable to assume that all skills (e.g., programming, chess playing, checkers playing, and music playing) could all require exactly the same amount of time to master, nor that all people will take exactly the same amount of time. As Prof. K. Anders Ericsson puts it, "In most domains it's remarkable how much time even the most talented individuals need in order to reach the highest levels of performance. The 10,000 hour number just gives you a sense that we're talking years of 10 to 20 hours a week which those who some people would argue are the most innately talented individuals still need to get to the highest level."
So You Want to be a Programmer
Here's my recipe for programming success:
Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.
Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
Talk with other programmers; read other programs. This is more important than any book or training course.
If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on your own or on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.
Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).
Work on projects after other programmers. Understand a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain them after you.
Learn at least a half dozen programming languages. Include one language that emphasizes class abstractions (like Java or C++), one that emphasizes functional abstraction (like Lisp or ML or Haskell), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), and one that emphasizes parallelism (like Clojure or Go).
Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)
Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.
Have the good sense to get off the language standardization effort as quickly as possible.
With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.
Fred Brooks, in his essay No Silver Bullet identified a three-part plan for finding great software designers:
Systematically identify top designers as early as possible.
Assign a career mentor to be responsible for the development of the prospect and carefully keep a career file.
Provide opportunities for growing designers to interact and stimulate each other.
This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers". Perlis is saying that the greats have some internal quality that transcends their training. But where does the quality come from? Is it innate? Or do they develop it through diligence? As Auguste Gusteau (the fictional chef in Ratatouille) puts it, "anyone can cook, but only the fearless can be great." I think of it more as willingness to devote a large portion of one's life to deliberative practice. But maybe fearless is a way to summarize that. Or, as Gusteau's critic, Anton Ego, says: "Not everyone can become a great artist, but a great artist can come from anywhere."
So go ahead and buy that Java/Ruby/Javascript/PHP book; you'll probably get some use out of it. But you won't change your life, or your real overall expertise as a programmer in 24 hours or 21 days. How about working hard to continually improve over 24 months? Well, now you're starting to get somewhere...
References
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
AnswersApproximate timing for various operations on a typical PC:
execute typical instruction1/1,000,000,000 sec = 1 nanosec
fetch from L1 cache memory0.5 nanosec
branch misprediction5 nanosec
fetch from L2 cache memory7 nanosec
Mutex lock/unlock25 nanosec
fetch from main memory100 nanosec
send 2K bytes over 1Gbps network20,000 nanosec
read 1MB sequentially from memory250,000 nanosec
fetch from new disk location (seek)8,000,000 nanosec
read 1MB sequentially from disk20,000,000 nanosec
send packet US to Europe and back150 milliseconds = 150,000,000 nanosec
Appendix: Language Choice
Several people have asked what programming language they should learn first. There is no one answer, but consider these points:
Use your friends. When asked "what operating system should I use, Windows, Unix, or Mac?", my answer is usually: "use whatever your friends use." The advantage you get from learning from your friends will offset any intrinsic difference between OS, or between programming languages. Also consider your future friends: the community of programmers that you will be a part of if you continue. Does your chosen language have a large growing community or a small dying one? Are there books, web sites, and online forums to get answers from? Do you like the people in those forums?
Keep it simple. Programming languages such as C++ and Java are designed for professional development by large teams of experienced programmers who are concerned about the run-time efficiency of their code. As a result, these languages have complicated parts designed for these circumstances. You're concerned with learning to program. You don't need that complication. You want a language that was designed to be easy to learn and remember by a single new programmer.
Play. Which way would you rather learn to play the piano: the normal, interactive way, in which you hear each note as soon as you hit a key, or "batch" mode, in which you only hear the notes after you finish a whole song? Clearly, interactive mode makes learning easier for the piano, and also for programming. Insist on a language with an interactive mode and use it.
Given these criteria, my recommendations for a first programming language would be Python or Scheme. Another choice is Javascript, not because it is perfectly well-designed for beginners, but because there are so many online tutorials for it, such as Khan Academy's tutorial. But your circumstances may vary, and there are other good choices. If your age is a single-digit, you might prefer Alice or Squeak or Blockly (older learners might also enjoy these). The important thing is that you choose and get started.
Appendix: Books and Other Resources
Several people have asked what books and web pages they should learn from. I repeat that "book learning alone won't be enough" but I can recommend the following:
Scheme: Structure and Interpretation of Computer Programs (Abelson & Sussman) is probably the best introduction to computer science, and it does teach programming as a way of understanding the computer science. You can see online videos of lectures on this book, as well as the complete text online. The book is challenging and will weed out some people who perhaps could be successful with another approach.
Scheme: How to Design Programs (Felleisen et al.) is one of the best books on how to actually design programs in an elegant and functional way.
Python: Python Programming: An Intro to CS (Zelle) is a good introduction using Python.
Python: Several online tutorials are available at Python.org.
Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi) is seen by some as the modern-day successor to Abelson & Sussman. It is a tour through the big ideas of programming, covering a wider range than Abelson & Sussman while being perhaps easier to read and follow. It uses a language, Oz, that is not widely known but serves as a basis for learning other languages. <
Notes
T. Capey points out that the Complete Problem Solver page on Amazon now has the "Teach Yourself Bengali in 21 days" and "Teach Yourself Grammar and Style" books under the "Customers who shopped for this item also shopped for these items" section. I guess that a large portion of the people who look at that book are coming from this page. Thanks to Ross Cohen for help with Hippocrates.
十年内自学编程
Peter Norvig
为什么大家都这么着急?
走进任何一家书店,你都会知道怎么做在24小时内自学Java除此之外,在几天或几个小时内,还提供了各种各样的课程,包括C语言、\nSQL、Ruby、算法等等。\n亚马逊高级搜索[标题:教,教自己,小时,从2000年开始找到了512本这样的书。在前十本书中,九本是编程书(另一本是关于簿记的)。把“自学”换成“学习”,把“小时”换成“天”,也会得到类似的结果。
结论是,要么人们急于学习编程,要么编程比其他任何东西都要容易得多。\ nFelleisenet al.在他们的书中肯定了这一趋势如何设计程序,当他们说“糟糕的编程很容易。”白痴可以在21天,即使他们是假人Abtruse Goose漫画也有他们把.
让我们来分析一下标题是什么样子的在24小时内自学c++可能意味着:
自学:在24小时内,你将没有时间去写一些不重要的程序,并从你的成功和失败中学习。你不会有时间和一个有经验的程序员一起工作,也不会了解在c++环境中生活是什么样子的。简而言之,你没有时间学太多东西。所以这本书只能讲一些肤浅的熟悉,而不是深刻的理解。正如亚历山大·蒲柏所说,无知是件危险的事。
C++:在24小时内,您可能能够学习一些\nC++的语法(如果您已经掌握了另一种语言),但您无法学到很多关于如何使用这门语言的知识。简而言之,如果你是一个\nBasic程序员,你可以学习用c++语法编写\nBasic风格的程序,但是你不能学习c++到底有什么好处(和坏处)。那么重点是什么呢?Alan\nPerlis曾经说过:“一门不影响你对编程的思考方式的语言不值得你去了解”。一个可能的观点是,你必须学习一点c++(或者更有可能是像JavaScript或处理之类的东西),因为你需要与现有的工具接口来完成特定的任务。但你并不是在学习如何编程;你正在学习如何完成这项任务。
24小时内:不幸的是,这还不够,如下一个\nsection所示。
十年内自学编程
研究人员(Bloom\n(1985),Bryan & Harter (1899),Hayes\n(1989),Simmon & Chase (1973))已经表明,它花了大约10年的时间在各种各样的领域发展专长,包括下棋、作曲、电报操作、绘画、钢琴演奏、游泳、网球,以及神经心理学和拓扑学的研究。关键是协商练习:不只是一遍又一遍地重复,而是挑战自己,做一个超出你能力范围的任务,尝试,在做的时候和之后分析自己的表现,改正任何错误。然后重复。并再次重复。似乎没有捷径可走:即使是4岁的音乐天才莫扎特,也花了13年多的时间才开始创作出世界级的音乐作品。在另一种音乐流派中,甲壳虫乐队似乎以一系列热门单曲和1964年在埃德·沙利文秀上亮相而突然走红。但自1957年以来,他们就一直在利物浦和汉堡的小俱乐部演出,虽然他们早期有广泛的吸引力,但他们的第一个巨大成功,中士辣椒该片于1967年上映。
马尔科姆\ nGladwell普及了这个想法,尽管他专注于1万个小时,而不是10年。nHenri Cartier-Bresson(1908-2004)有另一个衡量标准:“你的前一万张照片是你最差的。”(他没有预料到有了数码相机,有些人可以在一周内达到那个目标)真正的专业知识可能需要一生的时间:塞缪尔·约翰逊(1709-1784)说过:“任何部门的卓越成就都只能用一生的努力获得;不能以低价购买。乔叟(1340-1400)抱怨道:“路太短,到勒内的航船太长。”希波克拉底(约公元前400年)以摘录“ars longa, nvita brevis”而著名,这是较长的引文“ars longa, vita nbrevis,偶尔praeceps, experimentum pericullosum, iudicium\ndifficile”的一部分,英文翻译为“生命短暂,工艺短暂,机会稍息,实验不稳定,判断困难”。当然,没有一个数字可以最终答案:这似乎不合理而\假设所有技能(如编程,国际象棋,跳棋,和播放音乐)\ ncould都需要完全相同的时间掌握,也不是所有人\ nwill采取完全相同的时间。作为\ nProf。k·安德斯·爱立信他说:“在大多数领域,即使是最有才华的人也需要多少时间才能达到最高水平,这是值得注意的。一万个小时这个数字只是给你一种感觉,我们在谈论的是每周10到20个小时的时间,那些被一些人认为是最有天赋的人仍然需要达到最高水平。”
所以你想成为一名程序员
以下是我的编程成功秘诀:
得到感兴趣在编程方面,做一些因为它是有趣的。确保你的简历始终充满乐趣,你才愿意为此投入十年或一万个小时。
程序。最好的学习方式是学习\ nby做。更专业地说,“在给定领域中,个人的最大绩效水平不是作为扩展经验的功能自动获得的,但即使是经验丰富的个人,也可以通过故意努力提高绩效水平。”(p. 366)而最有效的学习需要一个明确定义的任务,对特定的人来说有不合适的难度,有丰富的反馈,有机会重复和改正错误。(20-21页)这本书 实践中的认知:日常生活中的心智、数学和文化是这个观点的一个有趣的参考。
跟其他程序员;阅读其他程序。这比任何书本或培训课程都重要。
如果你愿意,在a读四年大学(或者在研究生院更多)。这会让你获得一些需要证书的工作,也会让你对这个领域有更深的了解。但是如果你不喜欢学校,你可以(通过一些努力)在自己或工作中获得类似的经验。在任何情况下,光靠书本知识是不够的。“计算机科学教育不能使任何人成为专业程序员,就像学习画笔和颜料不能使某人成为专业画家一样”,《计算机科学教育不能使任何人成为专业程序员,就像学习画笔和颜料不能使某人成为专业画家一样”新\ nHacker的字典。我雇佣过的最好的程序员之一不仅只有高中学历;他制作了很多伟大的 软件,有自己的新闻集团他通过股票期权赚了足够的钱买了自己的股票夜总会.
工作项目其他程序员。在某些项目上做最好的程序员;在另一些人身上做最差的。当你是最优秀的,你可以测试自己领导一个项目的能力,以及用你的愿景激励他人的能力。当你是最差的时候,你会了解到老板做什么,也会了解到他们不喜欢做什么(因为他们让你帮他们做)。
工作项目后其他程序员。理解别人写的程序。当最初的程序员不在时,看看如何理解和修复它。考虑一下如何设计你的程序,让那些在你之后维护它们的人更容易维护它们。
至少学半打编程语言。包括一种强调类抽象的nlanguage(如Java或c++),一种强调函数抽象的nlanguage(如Lisp或ML或Haskell),一种支持语法抽象的nlanguage(如Lisp),一种支持声明性规范的nlanguage(如Prolog或c++ ntemplates),以及一种不强调并行性的nlanguage(如Clojure或Go)。
记住有个\"电脑在“计算机科学”中。知道你的计算机执行一条指令,从内存中读取一个\nword(有或没有缓存丢失),从磁盘中读取连续的单词,并寻找到磁盘上的新位置需要多长时间。(答案在这里。)
参与一门语言标准化努力。它可能是ANSI c++委员会,或者它可能决定你的本地编码风格将有2或4个空格缩进级别。无论哪种方式,你都能了解到别人在语言中喜欢什么,他们对这种语言的感觉有多深,甚至可能了解一点他们为什么会有这种感觉。
有什么好见识吗下车尽可能快地进行语言标准化工作。
考虑到所有这些,仅仅通过书本学习你能走多远是值得怀疑的。在我第一个孩子出生之前,我读了所有的而如何\读书时,仍然觉得自己像个无知的新手。30个月后,当我的第二个孩子即将出生时,我是否又去看书复习了一遍?不。相反,我依靠的是我的个人经验,这比专家写的成千上万页书对我更有用,更让我安心。
弗雷德·布鲁克斯在他的文章中写道没有银弹找出优秀的软件设计师的三部分计划:
尽早系统地确定顶级设计师。
指派一名职业导师,负责发展未来客户,并仔细保存职业档案。
为成长中的设计师提供相互交流和激励的机会。
这假设有些人已经具备成为伟大设计师所必需的品质;要做的就是好好地哄着它们。Alan\nPerlis更简洁地说:“每个人都可以被教雕刻:米开朗基罗必须被教如何不去雕刻。”伟大的程序员也是如此。佩利斯说伟人的内在品质超出了他们所受的训练。但质量差从何而来?是天生的吗?还是通过勤奋而发展?奥古斯特·古斯特(Auguste Gusteau)饰演炖菜书中写道,“人人都会做饭,但只有无所畏惧的人才能变得伟大。”我认为这更像是一种愿意把生命中很大一部分时间用于深思熟虑的修行。但也许无所畏惧的可以这样总结。或者,正如食神的评论家南东•伊戈所说:“不是每个人都能成为伟大的艺术家,但伟大的艺术家可能来自任何地方。”
所以去买一本Java/Ruby/Javascript/PHP的书吧;你可能不会有什么用的。但在24小时或21天内,你不会改变你的生活,或你真正的程序员专长。在过去的24个月里努力工作,不断提高,怎么样?嗯,现在你开始有进展了……
参考文献
布鲁姆,本杰明(ed)。培养年轻人的才能百龄坛,1985。
布鲁克斯,弗雷德,没有银子弹, IEEE计算机,第20卷,第1期,第2页。1987年4月,第10-19页。
电报语言的研究:习惯层次的习得。心理学的评估,\n1899, 8, 345-375
海斯、约翰·R。完全解决问题Lawrence Erlbaum, 1989.
蔡斯,威廉G. &西蒙,赫伯特A.。\“象棋\感知” 认知心理学, 1973, 4, 55-81.
Lave, Jean,实践中的认知:日常生活中的心智、数学和文化,剑桥大学出版社,1988年。
答案
在典型PC上的各种操作的近似时间:
执行典型的指令1/ 10亿秒= 1纳秒
从L1缓存中获取数据0.5 nanosec
转移的错误预测5 nanosec
从L2缓存内存中获取7 nanosec
Mutex lock/unlock25 nanosec
从主存中获取100 nanosec
通过1Gbps网络发送2K字节20000年nanosec
从内存中顺序读取1MB250000年nanosec
从新的磁盘位置获取(寻道)8000000年nanosec
从磁盘顺序读取1MB20000000年nanosec
把包裹寄到欧洲再寄回来150毫秒= 1.5亿纳秒
附录:语言选择
有几个人问他们应该首先学习哪种编程语言。没有唯一的答案,但考虑以下几点:
使用你的朋友。当被问到“我应该使用什么操作系统,Windows, Unix还是Mac?”,我的回答通常是:“随便你朋友用什么就用什么。”你从你的朋友那里获得的优势将抵消OS之间或编程语言之间的内在差异。也要考虑你未来的朋友:如果你继续下去,你将成为其中一员的程序员社区。你所选择的语言是否有一个正在成长的大社区,还是一个正在消亡的小社区?有书籍、网站和在线论坛可以得到答案吗?你喜欢那些论坛里的人吗?
保持简单。像c++和Java这样的编程语言是专为专业开发而设计的,这些专业开发团队都是有经验的程序员,他们关心代码的运行时效率。因此,这些语言都有为这些环境设计的复杂部分。你关心的是学习编程。你不需要那么复杂。你想要一种语言被设计成一个新程序员容易学习和记忆。
玩了。你更愿意用哪种方式来学习弹钢琴:不正常的、互动的方式,你一键就能听到每个音符,还是“批量”模式,你只有在听完一整首歌之后才能听到这些音符?显然,交互模式可以让学习钢琴更容易,也可以让编程更容易。坚持使用具有交互模式的语言并使用它。
考虑到这些标准,我对第一种编程语言的建议是Python或计划。另一个选择是Javascript,不是因为它为初学者设计得很好,而是因为有很多关于它的在线教程,比如可汗学院的教程但是你的情况可能会有所不同,还有其他好的选择。如果你的\位是个位数,你可能更喜欢爱丽丝或吱吱声或块(年长的学习者可能也喜欢这些)。重要的是你的选择和开始。
附录:书籍和其他资源
有几个人问他们应该从哪些书和网页中学习。我重申,“单靠书本学习是不够的”,但我可以推荐以下内容:
方案: 计算机程序的结构与解释(Abelson & Sussman)可能是最好的计算机科学入门,它把编程作为一种理解计算机科学的方式来教。\ nYou可以看到在线讲座视频在这本书,以及完成文本在线。这本书具有挑战性,它将淘汰掉一些用另一种方法可能不会成功的人。
方案: 如何设计程序(Felleisenet al.)是关于如何以优雅和实用的方式设计程序的最好的书之一。
Python: Python编程:\nAn CS入门(Zelle)是使用Python的一个很好的入门。
Python:几个\ nonline教程可用在
Python.org.
奥兹: 计算机编程的概念、技术和模型(Van Roy & Haridi)被一些人视为Abelson & Sussman的现代接班人。nIt是一个大的编程思想的旅行,涵盖比Abelson & Sussman更广泛的范围,同时可能更容易阅读和理解。它使用一种语言,Oz,不广为人知,但作为学习其他语言的基础。
笔记
T. Capey指出完成\ n问题解决者亚马逊的网页上现在有“21天自学孟加拉语”和“自学语法和风格”两本书,买过这款产品的顾客也买过这些产品。我猜大部分看那本书的人都来自这一页。感谢罗斯·科恩对希波克拉底的帮助。
翻译
Thanks to the\nfollowing authors,\ntranslations of \nthis page are\navailable in:
阿拉伯语
(Mohamed A. Yahya)
保加利亚
(Boyko Bantchev)
中国人
(Xiaogang Guo)
克罗地亚
(Tvrtko Bedekovic)
Esperanto
(Federico Gobbo)
法国
(Etienne Beauchesne)
德国
(Stefan Ram)
希伯来语
(Eric麦凯恩)
Hindi
(Vikash Tiwari)
匈牙利
(Marton Mestyan)
印尼
(Tridjito Santoso)
意大利
(Fabio Z. Tessitore)
日本
(yomoyomo)
韩国\ n(约翰·黄)
波斯
(Mehdi Asgari)
波兰的
(Kuba Nowak)
葡萄牙语
(Augusto Radtke)
罗马尼亚
(Ştefan Lazăr)
俄罗斯
(Konstantin Ptitsyn)
塞尔维亚
(Lazar Kovacevic)
西班牙语
(Carlos Rueda)
斯洛伐克语
(Jan Waclawek)
土耳其
(Çağıl Uluşahin)
Ukranian
(Oleksii Molchanovskyi)
Peter Norvig(Copyright 2001—2014)