最初的问题
我目前正在教我弟弟编程。他完全是个初学者,但很聪明。(他确实想学习)。我注意到,我们的一些会议陷入了一些小细节,我觉得我没有很好地组织。(但这篇文章的答案帮了大忙。)
我怎样才能更好地有效地教他呢?有没有一个逻辑顺序,我可以用它来一个概念一个概念地运行?有什么复杂的事情我应该避免到以后再做吗?
我们使用的语言是Python,但是任何语言的建议都是受欢迎的。
如何帮助
如果你有好的答案,请在你的答案中添加以下内容:
初学者练习和项目想法初学者教学资源视频/博客文章/免费电子书印刷适合初学者的书籍请描述资源和它的链接,以便我可以看看。我想让每个人都知道,我确实一直在使用其中的一些想法。你的意见将在这篇文章中汇总。
在线资源教学初学者:
对使用Python编程的温和介绍如何像计算机科学家一样思考爱丽丝:为初学者准备的3d程序Scratch(开发编程技能的系统)如何设计程序计算机程序的结构和解释学习计划罗伯特阅读了《如何成为一名程序员》微软XNA孕育下一代黑客Richard Buckland编写的COMP1917高级计算课程(需要iTunes)深入PythonPython维基教科书欧拉项目-样本问题(主要是数学问题)pygame -一个用于创建游戏的简单python库用Python开发自己的电脑游戏编程基础的下一步超越基础。Squeak以身作则为孩子们争吵的蛇(不仅仅是为孩子们!)为初学者推荐印刷书籍
加速c++Python编程的绝对初学者作者:Charles PetzoldPython编程:计算机科学导论第二版我曾经和几个初学者(从来没有写过一行代码)一起工作过,今年秋天我将在课后和高中生一起参加一个研讨会。这是我得到的最接近文档的东西。这项工作仍在进行中,但我希望它能有所帮助。
1)FizzBuzz。从命令行程序开始。您可以非常快速地编写一些有趣的游戏或工具,并且无需首先学习GUI工具就可以非常快速地学习所有的语言特性。这些早期的应用程序应该足够简单,您不需要使用任何真正的调试工具来使它们工作。
如果没有其他的东西像FizzBuzz是好项目的话。您的前几个应用程序不应该处理DBs、文件系统、配置等。这些概念只会让大多数人感到困惑,当您只学习语法和基本框架特性时,实际上并不需要更多的复杂性。
一些项目:
你好世界!以我的出生年份为例,计算我的年龄(只是(偶尔)没有月份修正)。(简单的数学,输入,输出)询问方向(上,下,左,右),然后告诉用户他们的命运(掉进洞里,找到蛋糕,等等)。(布尔逻辑)嘶嘶作响,但每秒钟数一次。(循环、定时器和更多逻辑)根据他们的年龄,有些人真的很喜欢一个应用程序,它会在某个时间间隔随机地辱骂用户。(循环,数组,定时器,如果你让间隔随机)一旦他们很好地掌握了语言的特点,你就可以开始一个项目(简单,有趣的游戏工作得很好)。你应该试着让第一个项目能够在6-12小时内完成。不要花时间早早地设计它。让他们设计它,即使它很烂。如果失败了,谈谈发生了什么以及失败的原因,然后换一个话题重新开始。
从这里开始介绍工具的调试功能。即使你能通过阅读代码发现问题,你也应该教他们如何使用这些工具,然后向他们展示你是如何发现问题的。这样做的双重目的是教授调试工具和如何在没有工具的情况下识别错误。
一旦或者如果项目开始运行,您就可以使用它来引入重构工具。如果您可以使用一些您从未计划过的简单特性来扩展项目,那就太好了。这通常意味着重构和重要的调试,因为很少有人第一次就能写出一半像样的代码。
一些项目:
刽子手的游戏用机器人做实验(Vex和Mindstorms是选项)开始一个可能需要一些时间的真正的项目。使用适当的源代码控制,并制定一个时间表。运行这个项目就像一个真正的项目一样,如果没有其他的话,这是一个很好的处理工具的经验。
显然你需要为每个人调整这个。我发现的最重要的事情是,即使是第一个简单的应用程序也能应用到人们感兴趣的东西上。
一些项目:
俄罗斯方块基于文本文件的博客引擎更先进的机器人技术你可以试着用爱丽丝。这是一个三维程序设计用于入门编程类。
对于新程序员来说,最大的两个障碍通常是:
语法错误动机(写一些有意义和有趣的东西,而不是做作的)Alice使用拖放界面来构建程序,避免了语法错误的可能性。Alice允许您构建3D世界,并拥有您的代码控制(简单)3D角色和动画,这通常比实现链表有趣得多。
经验丰富的程序员可能会将Alice视为玩具,并嘲笑拖放代码行,但研究表明这种方法是有效的。
免责声明:我研究过爱丽丝。
我推荐Logo(又名the turtle)来帮助你理解基本概念。它提供了一个很好的沙箱,具有即时的图形反馈,您可以演示循环、变量、函数、条件等等。这个页面提供了一个很好的教程。
在Logo之后,切换到Python或Ruby。我推荐Python,因为它是以ABC为基础的,ABC是为了教授编程而发明的。
在教授编程时,我必须支持EHaskins关于简单项目和复杂项目的建议。最好的学习方法是从一个明确的结果和一个可衡量的里程碑开始。它使课程集中,让学生建立技能,然后建立在这些技能上,并给学生一些东西向朋友炫耀。不要低估为自己的工作展示一些东西的力量。
理论上,您可以继续使用Python,因为Python几乎可以做任何事情。它是教授面向对象编程和(大多数)算法的好工具。您可以像命令行那样以交互模式运行Python,以了解它是如何工作的,或者一次性运行整个脚本。您可以运行动态解释的脚本,或者将它们编译成二进制文件。有数千个模块可以扩展该功能。您可以制作一个图形计算器,就像与Windows捆绑在一起的那样,或者您可以制作一个IRC客户机,或者其他任何东西。
XKCD更好地描述了Python的功能:
您可以在那之后迁移到c#或Java,尽管它们没有提供Python所没有的很多功能。这样做的好处是它们使用c风格的语法,很多(我敢说大多数)语言都使用c风格的语法。您还不需要担心内存管理,但是您可以习惯拥有更多的自由和更少的语言解释器支持。Python强制使用空格和缩进,这在大多数情况下都很好,但并不总是这样。c#和Java允许您在保持强类型的同时管理自己的空格。
从这里开始,标准就是C或c++。这些语言中的自由几乎是存在的。您现在负责自己的内存管理。没有垃圾收集来帮助您。在这里,您将教授真正高级的算法(如归并排序和快速排序)。这就是为什么"分割错误"是一个诅咒词。在这里,您可以下载Linux内核的源代码并深入了解它。首先编写一个循环缓冲区和一个用于字符串操作的堆栈。然后努力向上。
一个好的python课程是麻省理工学院关于使用python编程的温和介绍。这些都是免费的在线服务,你不需要是麻省理工的uberstudent就能理解。
Edit [Justin Standard]
This course uses this free online book: How To Think Like a Computer Scientist
I'm definitely finding it quite useful.
从Python中的海龟图形开始。
我将使用Python标准附带的turtle图形。它直观、简单,在深入语法之前,您可以使用这个环境引入许多编程概念,比如迭代和过程调用。考虑以下python中的交互会话:
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 30 31 32 33 34 35 36 37 38 39 40 41 | >>> from turtle import * >>> setup() >>> title("turtle test") >>> clear() >>> >>> #DRAW A SQUARE >>> down() #pen down >>> forward(50) #move forward 50 units >>> right(90) #turn right 90 degrees >>> forward(50) >>> right(90) >>> forward(50) >>> right(90) >>> forward(50) >>> >>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE >>> clear() >>> for i in range(4): forward(50) right(90) >>> >>> #INTRODUCE PROCEDURES >>> def square(length): down() for i in range(4): forward(length) right(90) >>> >>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW >>> for i in range(50): up() left(90) forward(25) square(i) >>> >>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW >>> #A SQUARE 'TUNNEL' (I.E. CONCENTRIC SQUARES >>> #GETTING SMALLER AND SMALLER). >>> >>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING >>> #EACH SUCCESSIVE SQUARE TILTED |
在尝试完成最后两项任务时,他们会有很多失败的尝试,但是失败在视觉上会很有趣,当他们试图弄清楚为什么没有画出他们所期望的东西时,他们会很快学会。
Python包VPython——凡人3D编程(视频教程)。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from visual import * floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue) ball = sphere (pos=(0,4,0), radius=1, color=color.red) ball.velocity = vector(0,-1,0) dt = 0.01 while 1: rate (100) ball.pos = ball.pos + ball.velocity*dt if ball.y < ball.radius: ball.velocity.y = -ball.velocity.y else: ball.velocity.y = ball.velocity.y - 9.8*dt |
VPython弹跳球http://vpython.org/bounce.gif
关键是这个人需要解决一些他们想要解决的问题。如果你没有一个你想写的程序(而且是一些合理的、定义明确的东西,而不是"我想写下一个地震!"),那么你就无法学习编程,因为你没有任何动力。我的意思是,你可以读一本书,对一门语言的语法和语义有一个大致的了解,但是,除非你有一个你想写的程序,否则你永远也不会迎难而入。
如果这种动力存在,那么其他一切都只是小细节。
我不知道是否有人在这里提到过,但是您可能想看看Zed Shaw的《艰难地学习Python》
希望这有助于
http://tryruby.hobix.com/"在浏览器中尝试Ruby"
如何设计程序
计算机程序的结构和解释。视频讲座在http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/
这是一本奇妙的书,我的弟弟们曾经学习过:
http://pine.fm/LearnToProgram/
当然,最重要的是在读完这本书之后马上开始一个真正有用的程序。
我会让他写很多代码。让他把你们做的每一件事都讲给他听,让他有时间回答问题。
信不信由你,在写了几个月的大量蹩脚代码之后,他将开始有了这个想法,并开始编写更好的程序。在这一点上,您可能会陷入细节(内存等),并且还会讨论一般的设计原则。
我听说伟大的艺术家和平庸的艺术家的区别在于,每次他们练习的时候,他们都会在一些东西上有所提高,不管这些东西有多小。让你弟弟练习,他每次坐在键盘前都会进步。
Edit: [Justin Standard]
Esteban, this reminds me of a recent coding horror post, and I do think you are right. But I think its still worthwhile to find methods to guide his practice. No question, I want him writing as much code as he knows how to do. Thats one reason I'm asking for sample projects.
如果他感兴趣,小细节不是好的部分吗?使用python,您已经将GUI从其中删除,这样就不会产生混淆。为什么不选择一个项目,一个游戏或其他东西,并实施它。经典的hi-lo数字猜谜游戏可以简单地从命令行用20-30行代码实现(当然这取决于语言),并提供变量、条件、循环和用户输入。
如果你的兄弟可以使用iTunes,他可以下载新南威尔士大学(University of New South Wales)理查德?巴克兰(Richard Buckland)教授的计算机科学入门课程的视频讲座。他是一位令人着迷的讲师,讲授计算机基础知识和C语言。如果没有其他事情,告诉你的兄弟在后台播放视频,一些概念可能会通过渗透渗透。:)
COMP1917高级计算- 2008年第1期http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444
如果链接不工作,这里有一个路径:
Home -> iTunes U -> Engineering -> COMP1917高级计算- 2008第1节
Python编程的绝对初学者
Python编程绝对初学者封面http://safari.oreilly.com/images/1592000738/1592000738_xs.jpg
有一个wikibook非常适合学习python。
我不知道wikibook对于其他语言有什么用,但是我个人从wikibook中学到了python,就像2007年2月一样
ps -如果你不熟悉维基百科,它基本上是维基百科版本的书籍创作。这很难描述,但是如果你看看上面的几本书,你就会知道它是如何工作的
这完全取决于你弟弟的学习风格。许多人通过把手弄脏学得更快。只是进入其中,在他们进步和建立知识的过程中,将概念和大局具体化。
对我来说,我更喜欢从大局出发,深入了解细节。我想知道的第一件事是它是如何组合在一起的,然后是面向对象的官样文章,然后是关于类的;实例和等等。在学习语法之前,我想先了解一些基本概念和理论。我有一点优势,因为我在20年前写了一些BASIC游戏,但之后就没什么了。
在实际编写代码之前,先从总体任务声明开始,然后是计划和/或流程图,然后再详细说明一些伪代码(倾向于最终使用的语法),这样做可能对跟踪生产过程很有用。
这里的黄金法则是找出学生的学习风格。
我曾经教过编程,你哥哥和我的大多数学生相比有一个主要的优势,他想学:
如果你决定使用C语言,你的一个朋友有一个网站,上面的程序和老一辈人使用的程序一样,都是基本的类型输入。它们中比较复杂的使用ncurses,这在某种程度上否定了它们作为教学辅助的作用,但有些是很小的东西,你可以在不学习的情况下学习很多东西。
我个人认为Python和Ruby会成为很棒的第一语言。
编辑:一夜之间出现的初学者编程任务列表可能正是您需要的。
我认为Python是个好主意。我会给他一些基本的任务,让他自己去做,并告诉他,他遇到的任何死胡同都可以通过谷歌之旅来解决。至少对我来说,独自解决一个问题总是比别人告诉我解决方案更容易坚持。
一些可能的项目(顺序不分先后):
抛硬币模拟器。让用户输入投掷硬币所需的试验次数。执行它并显示结果以及正面或反面的百分比。
制作一个带有菜单的温度转换器,该菜单接受用户输入,以选择用户想要进行的转换类型。选择转换并执行后,应该返回到主菜单。
下面是一个具有相同思想的扩展转换器示例:http://pastebin.org/6541
编写一个程序,接受一个数字输入,并显示它要转换成的字母级别。最后,它将根据if和elif语句对输入进行评估,以找到适合它的位置。
做一个包含多项选择的简单测验,或者填空。最后,它将显示用户是如何做的。他可以选择任何他想问的问题。
输入一些硬币(大概很大),把它转换成更大的面值。例如,149便士= 1美元、1 / 4、2角和4便士。
创建一个简单的列表管理器。能够添加/删除列表以及在这些列表中添加/删除条目。下面是一个圣诞列表管理器的例子:http://pastebin.org/6543
创建一个程序,该程序将构建并测试输入的数字是否构成一个魔术方块(使用2D数组)。下面是一些示例代码,但是它应该在每个步骤中打印出正方形,以便显示用户在构建正方形方面的位置:http://pastebin.org/6544
我还建议用xTurtle或其他图形模块做一些事情,把事情混在一起,以免他变得无聊。当然,这是非常多的实践编程,而不是很多人真正使用python的脚本,但是我给出的例子都是直接从我通过python学习的时候开始的,这对我来说非常有用。好运!
让它变得有趣!
令人惊讶的是,如果您尝试Kojo, Scala可能是最简单的
如果你弟弟喜欢拼图游戏,我建议你参加Python Challenge。我不会把它作为一对一教学的正式教学工具,但是当你们不在一起的时候,他可以做一些事情来挑战自己,享受一些乐趣。
当你教你的兄弟编程时,你应该非常注意的一件事是不要让他过于依赖你。通常,当我发现自己在帮助别人时,他们会开始把我当作他们所有问题的答案,而不是去尝试找到一个简单的答案。通常,最好的老师是实验,每次你的兄弟有这样的问题,"如果我给一个字符串加上2会发生什么?"我还注意到,当我不能让某人理解一个概念时,查看一些示例代码会有所帮助,在这些代码中,我们可以逐个查看每个片段并逐段解释它。作为一个补充说明,刚接触编程的人经常对面向对象编程的概念有困难,他们会说,当你教他们时,他们理解它,但直到实际实现它时,他们才会对它有一个清晰的概念。
Python的挑战
在浏览了几本免费的电子书后,我发现学习编程最好的书是由O'Reily Press出版的《Head First Programming》。它使用Python作为语言,并从一开始就为您提供程序。他们都比"你好世界"更有趣。它很值得我花这么多钱买它,因为它已经卖出去一段时间了,你可以在Ebay或亚马逊上找到更便宜的二手书。
首先,像其他人一样开始:使用Hello World程序。它很简单,让他们对程序的布局有一个基本的感觉。试着回想一下当你第一次编程的时候,其中的一些概念是多么的困难——从简单开始。
Hello World之后,继续创建一些基本变量、算术,然后是布尔逻辑和if/else语句。如果你有一本旧的编程教科书,可以看看早期的一些例子,让他把这些都看一遍。只是不要试图一次介绍太多,否则会让人眼花缭乱。
这样如何:纳特·托金顿(Nat Torkington)的《孕育下一代黑客》(spawing the next generation of hacker)。
Python对于新开发人员来说很容易学习。您不必纠结于内存管理和类型定义的细节。《深入了解Python》是一本很好的Python编程入门指南。当我妹妹想学习编程时,我把她指给她看"Head Start"系列的书,她发现这些书很容易读懂。我发现刚开始教一个人很难,因为你没有和他们一起使用的词汇。首先让他读一些书或教程,然后问你一些问题。从那里你可以分配项目并给它们打分。我发现教编程很难,因为我花了将近15年的时间来摸索。
有一本书叫《密码》。我不记得是谁写的,但是它包含了我们(程序员)所知道的许多基本知识,并且我们认为与之交谈的人也应该知道这些知识。从二进制数到处理器的工作方式。它没有任何关于编程语言的内容(根据我的记忆),但是它是一个很好的入门读物。我承认,我也是那种认为你必须知道计算机如何工作才能有效地为它编写程序的人。
我推荐Charles Petzold的书Code - The Hidden Langauge of Computer Hardware and Software作为一本介绍计算机工作原理的优秀入门书。
这本书有很多信息(382页),它可能需要一个绝对的初学者一些时间来阅读,但它是非常值得的。佩佐德成功地解释了计算机和编程的许多核心概念,从简单的代码、继电器、内存、cpu到操作系统。以一种非常清晰和愉快的方式使用gui。它将为任何读者提供一个良好的感觉,什么是实际发生在幕后,当他们编写代码。
我当然希望它在我第一次学习编程的时候就出现了!
一开始我遇到了很多问题,但都是简单的机械故障。概念,我立刻接受了。但是错过了一个右括号?在一个非平凡的程序中,这很容易做到,但通常很难调试。
所以,我的建议是:不要低估基本的东西(比如打字)。这听起来是一种补救,甚至是愚蠢的,但是当我在学习过程的早期偶然发现了一种简单的技术,即键入一个代码结构的完整"骨架",然后将其填入其中时,它为我省去了很多痛苦。
对于Python中的"if"语句,请以:
1 | if : |
在C / c++ / c# / Java:
1 2 3 4 | if () { } |
在Pascal /德尔菲:
1 2 3 4 | If () Then Begin End |
然后,在开始和结束标记之间键入。一旦这成为一种固定的习惯,你就会不加思索地去做,更多的大脑就会被释放出来去做有趣的事情。我承认,这并不是一个很浮华的建议,但我个人看到的一个建议却有很多好处!
Edit: [Justin Standard]
Thanks for your contribution, Wing. Related to what you said, one of the things I've tried to help my brother remember the syntax for python scoping, is that every time there's a colon, he needs to indent the next line, and any time he thinks he should indent, there better be a colon ending the previous line.
我建议采用一种与本书类似的方法,即加速c++,其中涵盖了c++中通常对编写简单程序有用的部分。对于任何刚接触编程的人来说,我认为花点功夫就能展示一些东西是让他们保持兴趣的好方法。一旦你掌握了Python的基本知识,你就应该坐下来让他体验一下这种语言。
在我这学期的一门大学课程中,他们采用了一种叫做"基于问题的学习"(PBL)的方法,他们利用讲座来激发学生对不同的问题解决方法的兴趣。既然你哥哥很热心,你也应该采取类似的方法。给他安排一些小项目,让他自己去做。然后,一旦他完成了,你可以通过他的方法,并与不同的方法进行比较和对比。
如果你能给他适当的帮助,引导他走向正确的方向,那么他应该会没事的。给他提供一些好的网站和书籍也是一个好主意。
我还建议在开始阶段远离IDE。使用命令行和文本编辑器将使他更好地理解编译/汇编代码所涉及的过程。
我希望我能帮上忙。:)
这听起来可能有点傻,但你为什么要教你哥哥编程呢?
通常,最好的学习环境由一个热心的初学者可以实现的目标(一个示例程序)、充足的资源(谷歌/教程/书籍)和一个在需要时可以提供指导的知识丰富的建议源组成。
你当然可以为前两个建议提供帮助,但最后一个是你的主要角色。
逐行复制一些简单的代码,让他们边读边解释。他们很快就会解决的。我开始用Acorn杂志上的代码片段在Acorn电子上编程。当我6岁的时候,我对编程一无所知,我经常抄课文,但渐渐地我学会了不同的单词的意思。
已经有很多很棒的答案了,但是对于一个绝对的初学者,我完全推荐Hackety Hack。它是由不合理的多产的why_the_lucky_stiff创建的,专门为新程序员提供一个基本的/LOGO/ pascal样的环境来进行实验。它本质上是一个光滑的Ruby IDE,有一些很棒的库(flash video、IM、web服务器)和交互式教程。它为编程做了一个很好的宣传,因为它选择了做有趣、有用的事情的课程。"Hello, world"可能不会马上给人留下深刻印象,但是在20分钟内创建一个定制的IM客户端可以激励一个人继续学习。玩得开心!
Robert Read写了一本有用的指南《如何成为一名程序员》,其中涵盖了初学者会发现有用的编程问题的广泛领域。
我还建议您观看一些屏幕截图——它们通常是在特定技术的上下文中创建的,而不是在语言的上下文中创建的,不过如果显示了Python代码,就可以:)。重点是——它们是由一些优秀的程序员创建的,并且观察优秀的程序员如何编写程序是一件好事。你和你哥哥也可以做一些对等编程,这可能是一个更好的主意。只是别忘了解释你为什么这样做而不是那样做。我认为学习编程最好的方法是从好的例子中学习,尽量不要看到不好的例子。
我不确定什么对你哥哥最好,但我知道我是从python开始的。我从很小的时候就开始玩各种各样的游戏,并想创造自己的游戏,所以我的叔叔用pygame库向我介绍了python。它有很多教程,使一切都很容易(在我看来比openGL容易得多)。它仅限于2d,但无论如何你都应该从简单的开始。
我叔叔推荐python,因为他当时对它很感兴趣,但我推荐它,因为它很容易学习、直观(或者像编程语言一样直观)、简单(但肯定不是过于简单),现在它的知识已经相当丰富了。
我个人认为,学习basic编程只是为了学习编程,这在当时是非常无聊的,但随着时间的推移,我的热情越来越高。我真的想通过学习来创造一些东西,而不仅仅是学习。
我认为,一旦他掌握了基本知识(变量、循环等),你应该试着帮助他找到他感兴趣的具体内容,并帮助他学习实现目标的必要条件。我知道如果我对某件事感兴趣,我会更倾向于去做,也更有动力去做。另外,一定要让他努力克服一些更困难的问题,没有什么比你自己解决问题的那一刻更令人满意的了。
如果你想教授编程的基础知识,而不是特定于语言,有一个叫做Scratch的应用程序是在MIT创建的。它的目的是帮助人们发展编程技能。当用户创建Scratch项目时,他们学习创建条件、循环等等。还有一个scratch项目社区,可以从这里下载项目——这样你就可以浏览其他人的程序,看看他们是如何构建的。
通过学习如何使用流程图和PDL(程序设计语言)以一种与语言无关的方式解决问题,我学到了很多。几周后,我学会了把我写的PDL转换成一种语言。我很高兴我学会了这种方法,因为我花了我的大部分时间编程,解决问题而不被束缚在一种语言。我使用的语言一直是实现细节,而不是设计的一部分。
必须通过将问题分解为基本步骤来解决问题,这是一项关键技能。我认为这是区分能编程和不能编程的东西之一。
至于你如何处理一门语言概念的顺序,我认为最简单的方法是在脑海中有一个项目,然后根据需要处理这些概念。这允许您在您感兴趣的事情上应用它们。在学习一门语言的时候,最好在头脑中有几个简单的项目,以及一些具有渐进式复杂性的项目。决定这些将帮助您绘制出所需的概念及其顺序。
我浏览了一下评论,似乎没有人提到www.CodeBetter.com上的编程基础。虽然这需要一点基础,但它肯定是学习过程中的下一步。
Project Euler有许多有趣的数学问题,这些问题可以为初学者提供很好的学习材料。这些问题一开始很容易,但难度越来越大,而且web上充满了各种编程语言的示例解决方案。
一旦他有了基本的知识,我建议把河内塔作为一个很好的练习。如果你有木制玩具,我建议你从木制玩具开始;让他试着自己解决问题,系统地描述他的方法。告诉他递归在哪里起作用。向他解释移动的数量如何依赖于磁盘的数量。然后让他写一个程序,用你选择的语言打印出动作的顺序。
一旦你教他们如何编程,他们可能会想要学习如何开发软件。因此,我认为Greg Wilson的软件木工课程非常棒。它还使用Python作为学生的语言。
非常好的斯坦福大学视频导论课程(不需要先验知识):
程序设计方法学
将教你每个程序员都应该知道的好的"方法"和一些Java编程。
如果他感兴趣,我就不会担心专注于游戏之类的事情。我就拿起你正要扔的那本初学者的《自学x》(teach yourself x)书,交给他,让他费力读完。也许以后再谈,然后再做一个又一个。在那之后,我会和他配对编程,这样他就能知道他读的那些书是多么肤浅和蹩脚。然后我会让他为自己编一些代码。一个跟踪垒球数据或任何能吸引他的东西的网站。对我来说,那是一个葡萄酒数据库。
在那之后,我将开始真正的书籍,领域设计等。
我认为Python是一种非常好的语言,以:)开头
我建议您试试http://www.pythonchallenge.com/
它就像一个小冒险,每一个解决方案都把你和一个新的好问题联系起来。
在解决了这个问题之后,您可以访问一个不错的论坛,讨论您的代码,并查看其他人创建了什么。
我可以推荐我的项目,PythonTurtle。
简介:
PythonTurtle努力提供学习Python的最低门槛。学生们命令一个交互式Python shell(类似于空闲开发环境),并使用Python函数移动屏幕上显示的乌龟。一个带插图的帮助屏幕向学生介绍了Python编程的基础知识,同时演示了如何移动乌龟。
它是这样的:
alt文本http://www.pythonturtle.com/screenshot.gif
首先问他这个问题:"你想用你的电脑做什么?"
然后选择一组符合他答案的活动,并选择一种允许这些事情发生的语言。如果是一个简单的(或可简化的)脚本环境(例如Applescript、Ruby、任何shell (Ksh、Bash,甚至.bat文件)就更好了。
的原因是:
如果他对结果感兴趣,他可能会比你让他数斐波那契数数兔子更有动力。如果他得到了他喜欢的结果,他可能会想出各种各样的你创造的活动。如果你教他,他(还)没有追求一份严肃的职业;以后总是有时间切换到"工业优势"语言。学术地球提供顶级大学免费计算机科学课程的链接。他们有一个面向计算机科学入门的部分。课程开始时教授的语言各不相同:
麻省理工学院-计算机科学和编程入门- Python斯坦福-计算机科学I:编程方法论- Java哈佛大学计算机科学导论I - C(重点)还有一些其他的好的度量标准(例如,SQL, PHP, LISP,汇编程序等)伯克利- LISP语言的一种方言一个很好的教育年轻人的资源是免费电子书"用Python发明你自己的游戏":
http://pythonbook.coffeeghost.net/book1/IYOCGwP_book1.pdf
试着在网上找到一本关于Ruby的(令人心酸的)指南。最初的网站是离线的,但我肯定有一些镜像。它不是典型的编程指南;它为学习一门可能适合你朋友的新语言提供了独特的(有趣的)视角。更不用说Ruby是一门很好的语言。
本书:面向儿童、父母和祖父母的Java编程(PDF)
我个人没有使用这本书学习的经验,但它看起来很好,因为它很快就能产生一些可见的东西,而不是花太多时间在语法上的琐碎细节。这里有人试过用那本书吗?
我同意Leac的观点。如果我觉得无聊,我有时会玩Scratch。这是一种非常有趣的可视化代码查看方式。
它的工作原理是,他们给你一堆"积木"(这些看起来像乐高积木),你可以把它们堆起来。通过堆叠这些模块,并与画布交互(在画布上放置精灵、图形),您可以创建游戏、电影、幻灯片……它真的很有趣。
当它完成后,你可以把它直接上传到Scratch网站,这是一个youtube式的Scratch应用程序门户。不仅如此,您还可以下载网站上的任何提交,并学习或扩展其他Scratch应用程序。
+1到斯坦福大学演讲。http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111
他们简单,高质量,我可以担保他们有能力教初学者(我就是其中之一)。
我建议将"不插电的计算机科学"作为补充教材。
问问你的兄弟是否有什么他想做的程序或发明一个你认为他会感兴趣的项目。
他可以知道输出应该是什么,并指向与项目相关的材料(在线或打印)。如果他进入python或编程"冷"要有耐心,他的作品通过了解最基本的语法等错误,范围和准备下台,让他运行和犯自己的错误,当你开始看到灯泡继续在他的头上。
"谁害怕c++"由海勒
也许值得一试
我认为因为你想学习编程而学习编程永远不会比因为你想做某事而学习编程好。如果你能找到你哥哥感兴趣的东西,因为他想让它工作,你可以把谷歌留给他,他会做的。他会让你去检查他是否走对了路。
我认为抽象编程教学中最大的问题之一是,它没有一个能让学习者投入情感的真实环境。编程是很困难的,而且必须要有一些实际的回报,才能让它值得你去做。就我而言,我做大学计算机科学,学习Pascal和COBOL,和学习基本在家之前,但是我从来没有得到任何地方,直到我成为一个自由职业者网页设计师早在90年代,我的客户需要功能在其网站上,并愿意支付约10倍比设计的功能。把食物放在桌子上是一个极大的动力!
所以我学习了Perl,然后是ASP/VBScript,然后是JavaScript,然后是Flash/ActionScript,最后是PHP——所有这些都是为了实现我想要的东西。
Microsoft Small Basic是一个基于. net的免费编程环境,旨在为初学者提供一个"有趣"的学习环境。该语言是VB的一个子集。NET甚至包含了一个熟悉的"Turtle"对象标识语言。该网站包含一个循序渐进的教程。
我同意上面所说的superjoe30,但是我还没有足够的声誉来发表评论。
我当了4年的理科教授。语言是Basic,然后是Pascal,但语言是什么并不重要。
作为一名新教授,我学到的最大教训是,无论我认为一个概念有多简单,对一个新手来说都不简单。永远不要比你的学生走得快。我再怎么强调也不为过。慢慢来。
我将从非常简单的东西开始,阅读和打印,也许是一个简单的计算,只是为了让学生习惯输入和输出一些东西。如果语句。然后是非常简单的FOR循环,总是关于学生可以写的东西和一些有趣的东西。
然后我会花大约3周的时间教一种非常简单的机器语言,是一种叫做SIMPL的伪十进制机器,你可以一步完成。这样做的原因是,学生可以看到"橡胶遇到道路"的地方,计算机一步一步地做事情,它会改变事情发生的顺序。没有这个,学生们倾向于认为计算机可以读懂他们的思想,同时做所有的事情。
然后回到基础。在数组上花几周时间,因为这是一个很大的减速带。然后是顺序文件,这是另一个减速带。我所说的"减速带"指的是学生可以很自信地一路航行,然后你用数组之类的概念打击他们,他们又完全迷失了,直到你让他们轻松地通过。
然后,有了这些技能,我会让他们选择一个学期项目,因为这是编程有趣的地方。没有使用它,它真的很无聊。我会建议各种各样的项目,如游戏、会计、科学等。看到它们被打开真是太棒了。他们经常向我寻求帮助,这很好,因为你知道他们在学习。
在他们进行项目的同时,我们将继续介绍更高级的编程技术——搜索、排序、合并,以及如何创建一个简单的数据库等等。
祝你好运。教学是艰苦的工作,但当你看到学生成长时,你会感到满足。
无论他们写什么,让他们在第一次运行时逐行调试器中逐行调试。让他们自己看看计算机在做什么。这样可以消除很多神秘感,减少恐吓("哦,每一行都很简单!"),帮助他们学习调试技巧,并认识到为什么常见错误是常见的(以及为什么它们是错误)
实际上,我认为应该用更少的指令选择更简单的语言。我个人在家学习BASIC语言,杰夫也是。这样,您就不必钻研更复杂的问题,比如面向对象编程,或者甚至是您不想研究的过程。一旦他能够处理简单的控制流,然后转向更复杂一些的东西,但只是简单的功能。
可能从非常简单的程序开始,只添加两个数字,然后增长到可能需要一个分支的东西,然后可能读取输入并响应它,然后进行某种循环,然后开始将它们组合在一起。从小事做起,慢慢来。在他掌握基本知识之前不要做任何大项目(否则很可能会让人望而生畏,他可能中途放弃)。一旦他掌握了基础知识或你选择的任何东西,就转向更复杂的东西。
只是我的0.02美元
我认为"群体的智慧"在这里起作用。大多数人是如何学习编程的?许多人声称他们是通过复制别人的程序来做到这一点的,这些程序通常是他们想在BASIC中玩的游戏。
也许这条路线对他也有用?
使用真实世界的类比和想象的字符来教他们编程。比如我教人们变量和控制语句等。
通常我从计算器的例子开始。假设你有一个盒子,里面有10张卡片,上面印着数字0 - 9。比方说,这个盒子可以一次装一块硬纸板,并以类似的方式解释编程元素是如何工作的
并强调每个操作员是如何工作的。像简单的'='运算符一样,总是先将右侧计算为一个值。然后将该值放入名为"num_1"的框中(即变量名)
这是非常非常有效的,因为他们能够非常快速地想象流动。
我建议从C/ c++开始。我发现它是所有其他语言的基础。另外,BASIC的不同版本可能非常不可靠,充其量,与实际编程没有真正的关联。
作为一名非程序员,我发现实用程序员写的《如何编程》一书从基本的角度非常有用。它平易近人,对初学者来说很容易阅读。它不会把你从初学者变成专家,但它会让你为你一旦选择了一门语言,并拿起你的第一本"学习编程(在这里的语言)"的书后要做的事情做好准备。
我强烈推荐John Zelle编写的Python编程:计算机科学导论第二版。它面向初学者,处理编程的语义。阅读之后,由于Zelle的语义和语法方法,您将能够更快地学习其他语言。点击这里查看详情!
需要考虑……不是每个人都能编程:
有些人就是过不去,比如:
一个= 1
B = 2
A = B
(这些人仍然认为A = 1)
杰夫也谈过这个。事实上,我的示例在链接中(并在引导时进行了解释)。
这听起来可能有点奇怪,但我在前一份工作中通过自动化任务和数据分析开始编写代码。这是通过记录然后研究生成的Excel宏的代码来实现的。当然,这种方法假设您可以通过VB学习。
一些额外的信息,有人可以附加到贾森普拉特关于爱丽丝的早期帖子…具体来说,是爱丽丝讲故事的变体。
尽管这项研究的对象是中学生,但你可能会发现凯特琳·凯莱赫(Caitlin Kelleher)撰写的白皮书很有趣。
对我来说,在IDE中进行探索和试验帮助我学习了Java和Visual Basic,但是我通过艰苦的方式学习了编程的基础知识:Perl 5。当时没有免费的IDE,所以这意味着在记事本中键入代码,保存它,然后运行perl解释器。
我想说ide使学习编程基础变得更容易。首先尝试一下控制结构和变量。在Java中说:
1 2 3 4 5 | int a = 5; for (int i = 0; i < a; i++) { System.out.println("i is now" + i); } |
基本上,只要学习控制结构和变量,初学者就可以开始编写有趣的代码了。
我和孩子们用的是CEEBot。它不是python,但它在一个有趣的机器人编程类游戏中教授C / Java风格的编程。它的目标受众是10-15岁的孩子,但它真的很不错。
拥有小的、可实现的目标是学习任何技能的最好方法之一。编程也不例外。Python是一种很棒的语言,因为它易于学习、干净而且仍然可以做高级的事情。Python只受您的想象力的限制。
真正让别人感兴趣的一个方法是给他们一小时左右的时间做一些小项目。当我最初开始学习python时,我打代码高尔夫。他们有许多小的挑战,这将有助于教授编程的基础知识。我建议每天尝试解决其中一个挑战,然后运用所学的概念。你必须让学习编程变得有趣,否则很快就会失去兴趣。
无论您选择何种语言和环境,如果学生出于专业原因想要学习,或者想要做"真正的"编程(无论那是什么),让他们先在纸上编写他们的入门程序1 >,然后带着它们运行。返回输出和/或错误结果,并让他们在纸上解决问题。
一开始,这并不比在屏幕上完成并点击运行更难,但是当他们开始发现bug的奇妙世界时,这将使事情变得容易得多。
简而言之,"你好,世界!"类型的程序仍然有一些逻辑和/或计算,这样做,直到一些程序可能有错误
我的个人经验开始于初级阶段使用Logo Writer(某种程度上已经演变成Scratch),虽然我还是个小孩子,电脑也不像现在这么棒,但当时它把我带到了我从未去过的地方……我想这就是我是怎么迷上这一行的……我可以说,正是这些基于简单和冷静的第一印象,让这些美好的东西永远留在我的脑海中。这就是教授编程基础的方法……一个渴望魔法的简单过程。
回到我第一次CS 101年,我开始与观念的一种算法是通过构建一个龙舌兰日出(一个循序渐进的过程,随时可能被重复正确的成分,这将导致相同的输出),从那里我们继续基本数学函数使用计划(比如EHaskins说……从小的开始,然后建立),从那里到循环的概念,布尔逻辑,结构,然后建立到对象的概念和一些模拟执行…
这种方法的好处之一是,语言不是目标,而是学习编程概念和基础过程中的工具(就像数学中的运算符、函数和其他东西一样)。
IMHO学习编程的基本知识,并创建一个基础可能是最好的事情你可以教给你哥哥,一旦目标覆盖u可以移动到一个更普遍的使用语言像python和教他们更高的概念架构和设计模式(在此过程中让他们自然所以他会使用良好的实践从早期阶段,他们将作为流程的一部分)……我们远没有重新发明温暖的水,但我们总是要从生火开始。
从那里开始,天空就是极限!
首先,我认为已经有一些很好的答案了,所以我会试着不要被骗太多。
让他们写很多代码,让他们不停地问问题,让他们的大脑保持活力。我想说的是,不要被那些非常详细的信息所困扰,除非他们遇到了其中的含义,或者他们提出了要求。我认为我要确保他们理解框架的核心概念。我知道您正在使用Python(我对此一无所知),但是,例如,使用ASP。NET让人们理解模型背后的页面/代码可能是一个真正的挑战,但关键是让他们理解它。例如,我最近在一个论坛上提出了一个问题,关于"在‘cs’文件或‘aspx’文件中,我应该把我的数据访问代码放在哪里"。
所以,我想说的是,在很大程度上,让他们带路,只要在需要的地方支持他们,并提出更多的问题来保持兴趣。只要确保他们掌握了基本知识,不要让他们在学会走路之前就跑。
好运!
起初,我对不同的程序是如何工作的很感兴趣,所以我从查看源代码开始。当我开始理解程序是如何工作的时候,我就会改变某些参数,看看会发生什么。所以基本上我在学会写作之前就学会了阅读。这恰好是大多数人学习英语的方式。
所以,如果我想教某人如何编程,我会给他们一个小程序,让他们阅读并理解它是如何工作的,让他们只是摆弄源代码。
只有这样,我才会给他们"任务"去完成。
现在,如果他们有一个特别的原因想要学习如何编程,那么从他们想要完成的事情开始肯定是一个好主意。例如,如果他们想精通blender这样的应用程序,从Alice开始肯定是个好主意。
我绝对建议坚持使用具有垃圾收集的语言,如D、Perl或一些解释语言,如javascript。在Perl 6接近完成之前,最好远离Perl,因为它解决了阅读和理解Perl的一些困难。
作为一个初学者(>100行代码),这个线程对我非常有用。
根据我所经历的,一旦我完成了"Hello World",并移动到变量和"if/else"语句,我就被太多的语法搞糊涂了;不知道该怎么处理它们。
所以,通过一个有趣的简单项目,我可能会再次提高我的兴趣。这里有很多项目建议。
我能问个问题吗?
首先学习Autohotkey这样的脚本语言是否更好?
Edit: [Justin Standard]
I think learning something macro-based like Autohotkey will only help minimally. Try learning a"real" programming language first. The easiest to get started with (according to most people) are python and ruby. I favor python, but both are pretty simple.
There is also a full stackoverflow post that answers the question of which language to start with.
其他几个启动平台:
一个好的可编程计算器(这是我在70年代学到的),然后是HP25,然后是HP41,现在是TI69,等等。像《Inform 7》这样的互动小说平台提供了另一个视角Flash / ActionScript所有这些都是不同的,引人入胜的,其中任何一个都可能激发初学者对跑步的兴趣。
激光弯曲
我推荐使用Python。
我最喜欢的"开始学习代码"项目是游戏蛇或特隆,因为它允许您开始缓慢(变量来存储当前"蠕虫"位置,数组来存储蠕虫职位如果蠕虫是超过一个"块",循环使蠕虫移动,如果/开关允许用户改变蛔虫的方向,…)。它还允许向项目包括越来越多的东西从长远来看,如面向对象编程(一个蠕虫是一个对象的机会有两个同时蠕虫)与继承(从"蛇"到"特隆"或者反过来,蠕虫稍有变化)。
我建议你从微软的XNA开始。根据我的经验,如果你能在屏幕上看到一些东西,那么开始编程就会变得有趣得多,而XNA让你可以很容易地让屏幕上的东西动起来。做一些小的改变很容易得到另一个样子,例如通过改变颜色,所以他可以看到他的行为有一个效果->印象成功。成功是有趣的,这是继续学习的动力。
我建议首先教授几乎所有语言都使用的基础知识,但不要使用任何语言。概述If-Else、循环、类、变量类型、结构等所有基本概念。所有这些都是大多数语言的基础。然后,真正理解布尔值、比较和复杂的and或OR语句,从而对更复杂的语句的结果有所了解。
通过这样做,他将理解编程的概念,并有一个更容易的时间进入语言,从那里它只是学习语言的复杂细节,它的功能,和语法。
学习任何东西最好的方法是从基础开始。你可以找到任何一本好的教科书来解释什么是编程,内存,算法。
下一步选择语言,这只是取决于老师知道什么或为什么学生想要学习。
然后就是代码,代码,代码。编写书中的每个例子。然后稍微改变一下,做另一个动作。学习编程是一个主动的过程,而不是被动的过程。你不能仅仅阅读c++如何通过Dietal来编程,然后期望在阅读时没有主动地编写c++代码。
即使你是一个经验丰富的程序员,在书中编写代码来学习新东西也是有帮助的。
你的问题很大程度上取决于你哥哥的年龄和教育程度,但如果他是一个孩子/青少年,我建议他先做一些GUI编程或图形编程(使用Canvas等)。它看起来很好,你马上就会有效果。算法对年轻人(比如15岁之前的人)来说太枯燥、太抽象。
当我开始在ZX Spectrum上编程时(那时我大概12岁),我喜欢在屏幕上画各种各样的东西,这仍然很有趣。我大概18岁的时候才开始学习真正的算法技术。不要误认为这种"简单"的编程是一个错误的开始;学习兴趣是其中最重要的部分。
因此,我将研究PyKDE、PyGTK、PyQt或Python + OpenGL(网上当然有一些教程,我知道一些捷克教程,但这对您没有帮助:))。
当然,如果你的哥哥比你大,并且受过接近数学的教育,你可以直接去学习算法之类的。
在我的偏见中,C是最好的起点。语言很小,高级功能无处不在,低级功能让你学习机器。
我发现C Primer Plus,第5版对于一个几乎没有编程经验的初级程序员来说非常有用。它假设没有编程经验,阅读起来很有趣,并且深入介绍了C(包括最新的C99标准)。