教初学者编程的最佳方法?

时间:2020-03-05 18:37:57  来源:igfitidea点击:

原始问题

我目前正在教我的兄弟编程。他是一个初学者,但非常聪明。 (他实际上想学习)。我注意到我们的某些会议在次要细节上陷入了停滞,而且我感觉自己组织得不够好。 (但是这篇文章的答案很有帮助。)

我可以做些什么更好地有效地教他?我可以使用逻辑顺序来逐个概念地进行研究吗?我应该避免复杂到以后吗?

我们正在使用的语言是Python,但是欢迎提供任何语言的建议。

如何帮助

如果我们有好的,请在答案中添加以下内容:

  • 初学者练习和项目构想
  • 教学初学者的资源
  • 截屏视频/博客文章/免费电子书
  • 打印适合初学者的书籍

请通过链接描述资源,以便我看看。我希望每个人都知道我肯定已经使用了其中一些想法。意见将汇总在此帖子中。

面向初学者的在线资源:

  • 使用Python进行编程的简要介绍
  • 如何像计算机科学家一样思考
  • 爱丽丝:面向初学者的3D程序
  • 从头开始(开发编程技能的系统)
  • 如何设计程序
  • 计算机程序的结构和解释
  • 学习编程
  • 罗伯特·雷德(Robert Read)的《如何成为程序员》
  • 微软XNA
  • 孕育下一代黑客
  • 理查德·巴克兰(Richard Buckland)的COMP1917高等计算讲座(需要iTunes)
  • 潜入Python
  • Python Wikibook
  • 欧拉计划-样本问题(大部分是数学问题)
  • pygame-用于创建游戏的简单python库
  • 使用Python发明自己的电脑游戏
  • 超越基础的下一步编程基础。
  • 举例说明
  • 为孩子争吵的蛇(不只是为孩子们准备的!)

推荐给初学者的印刷书籍

  • 加速的C ++
  • 绝对入门的Python编程
  • 查尔斯·彼得佐德(Charles Petzold)编写的代码
  • Python编程:计算机科学概论第二版

解决方案

回答

如果他有兴趣,次要细节不是很好的部分吗?使用python,我们已经将它的GUI切断了,以便消除混乱。为什么不选择一个项目,一个游戏之类的东西并实现它。经典的hi-lo数字猜测游戏可以在命令行中以20-30行代码(取决于语言)简单地实现,并为我们提供变量,条件,循环和用户输入。

回答

首先,像其他所有人一样开始工作:使用Hello World程序。这很简单,使他们对程序的布局有了基本的了解。尝试回想起我们第一次编程的时间,以及其中一些概念开始时的难度。

在Hello World之后,继续创建一些基本变量,算术,然后创建布尔逻辑和if / else语句。如果我们有一本旧的编程教科书,请查看一些早期的示例,并让他复习这些示例。只是不要尝试一次引入太多内容,否则将会使我们不知所措。

回答

我实际上会争辩说要选择一种使用更少指令的简单语言。我在家里亲自学习了BASIC,Jeff也是如此。这样,我们就不必研究更复杂的问题,例如面向对象的编程,甚至不需要的话也可以选择过程。一旦他可以处理简单的控制流程,然后继续进行一些复杂的操作,但仅仅是简单的功能。

也许从非常简单的程序开始,这些程序只加两个数字,然后增长到可能需要分支的对象,然后可能读取输入并对其进行响应,然后进行某种循环,然后将它们全部组合在一起。只需一点点开始,然后逐步向上即可。在他掌握基本知识之前,不要做任何大项目(否则可能会太艰巨,他可能会中途放弃)。一旦他掌握了BASIC或者我们选择的任何内容,就可以继续进行更复杂的事情。

我的$ 0.02

回答

在教兄弟编程时,我们应该注意的一点是,不要太依赖我们。通常,当我发现自己在帮助别人时,他们会开始将我视为所有问题的答案书,而不是尝试寻找答案,他们只是问我。通常最好的老师是实验,每当兄弟有一个问题,例如"如果我在字符串中加2,会发生什么?"。我们应该告诉他尝试一下,亲自看看。我还注意到,当我无法将概念传达给某人时,它有助于查看一些示例代码,在这里我们可以分别查看每个段并逐个进行解释。附带说明一下,刚接触编程的人通常会对面向对象编程的概念感到困惑,他们会说,当我们向他们学习时,他们会理解它,但是直到真正实现它之前,他们才对它有一个清晰的概念。

回答

我们可以尝试使用Alice。这是一个3D程序,旨在用于入门编程课。

新程序员的两个最大障碍通常是:

  • 语法错误
  • 动机(写一些有意义而有趣的东西,而不是做作)

爱丽丝使用拖放界面来构建程序,从而避免了语法错误的可能性。通过Alice,我们可以构建3D世界,并具有代码控制(简单)的3D字符和动画,通常比实现链表更有趣。

经验丰富的程序员可能会视爱丽丝为玩具,嘲笑拖放代码行,但研究表明这种方法行之有效。

免责声明:我在Alice上工作。

回答

麻省理工学院的《使用Python编程的温和介绍》是一门很好的python课程。它全部在线免费提供,我们不必一定要成为麻省理工学院的学生才能了解它。

Edit [Justin Standard]
  
  This course uses this free online book: How To Think Like a Computer Scientist

  I'm definitely finding it quite useful.

回答

我不得不与几个初学者(从未写过任何代码)程序员合作,今年秋天我将与高中生一起进行课后工作坊。这是我最接近文档的内容。这项工作仍在进行中,但希望对我们有所帮助。

1)FizzBu​​zz。从命令行程序开始。我们可以非常快速地编写一些有趣的游戏或者工具,并且无需首先学习GUI工具即可非常快速地学习所有语言功能。这些早期的应用程序应该足够简单,以至于我们无需使用任何真正的调试工具即可使其运行。

如果没有别的,像FizzBu​​zz这样的项目都是好项目。前几个应用程序不必处理数据库,文件系统,配置等。这些概念使大多数人感到困惑,而当我们仅学习语法和基本框架功能时,我们实际上并不需要更多的复杂性。

一些项目:

  • 你好,世界!
  • 以我的出生年份,并计算我的年龄(仅(现在-然后)没有月份修正)。 (简单的数学,输入,输出)
  • 询问方向(上,下,左,右),然后告诉用户他们的命运(掉进洞里,找到蛋糕,等等)。 (布尔逻辑)
  • FizzBu​​zz,但每秒计数一次。 (循环,计时器和更多逻辑)
  • 根据他们的年龄,有些人真的很喜欢某个应用程序,该应用程序会在一定间隔内对用户进行随机侮辱。 (如果将间隔设为随机,则循环,数组,计时器和随机)

2)简单项目一旦他们掌握了语言功能,就可以开始一个项目(简单,有趣的游戏效果很好。)。我们应该尝试使第一个项目能够在6到12个小时内完成。不要花时间来架构它。让他们设计它,即使它很烂。如果失败了,请谈论发生的事情以及失败的原因,然后选择另一个主题并重新开始。

从这里开始介绍工具的调试功能。即使我们通过阅读代码可以看到问题,也应该教他们如何使用工具,然后向他们展示如何看到它。这具有教调试工具和教如何在没有工具的情况下识别错误的双重目的。

一旦该项目开始运行,或者如果该项目开始运行,则可以使用它来引入重构工具。如果我们随后可以使用一些我们从未计划过的简单功能来扩展项目,那就很好了。这通常意味着重构和大量的调试,因为很少有人会在第一次编写甚至一半的体面代码。

一些项目:

  • 子手游戏
  • 实验机器人(Vex和Mindstorms是可选的)

3)实际项目启动一个实际项目可能需要一些时间。使用适当的源代码控制,并制定时间表。像实际项目一样运行此项目,如果没有其他必要的经验,则必须使用这些工具。

显然,我们需要针对每个人进行调整。我发现最重要的事情是,即使第一个简单的应用程序也可以应用于人们感兴趣的内容。

一些项目:

  • 俄罗斯方块
  • 基于文本文件的博客引擎
  • 更先进的机器人工作

回答

我曾经教编程,与我们想学习的大多数学生相比,兄弟有一个主要优势:)

如果我们决定和C一起去,那么一个朋友的站点会提供一些程序,这些程序可以使用较早的一代记住的基本键入程序。他们中较复杂的人使用ncurses,这在某种程度上抵消了它们作为教学辅助工具的使用,但其中一些是很小的小东西,我们无需学习即可学习负载。

我个人认为Python和Ruby将成为出色的第一语言。

编辑:
一夜之间出现的初学者编程任务列表可能正是我们想要的。

回答

我认为"人群的智慧"在这里起作用。大多数人是如何学习编程的?许多人声称这样做是通过复制其他人的程序来实现的,通常是他们想在BASIC中玩的游戏。

也许那条路线也会对他有用吗?

回答

如果我们想教编程的基础知识,而不是特定于语言的话,那么可以在MIT中创建一个名为Scratch的应用程序。它旨在帮助人们发展编程技能。当用户创建Scratch项目时,他们会学习创建条件,循环等。还有一个Scratch项目社区,可以通过这种形式下载项目,以便我们可以浏览其他人的程序并查看其构建方式。

回答

这确实取决于我们兄弟的学习风格。许多人会变得肮脏,只有动手就可以学得更快,在不断发展和积累知识的过程中,可以使概念和全局更加清晰。

我,我更喜欢从大局开始,深入研究细节。我想知道的第一件事是它们如何融合在一起,然后是所有面向对象的蠢事,然后是类和实例等等。在学习语法之前,我喜欢了解基本概念和一些理论。我有一个优势,因为20年前我用BASIC编写了一些游戏,但此后没什么。

在实际编写代码之前,先从总体任务说明,计划和/或者流程图开始,然后细化为一些伪代码(倾向于最终使用的语法),以掩盖生产过程,这可能是有用的。

这里的黄金法则是保持学生的学习风格。

回答

http://tryruby.hobix.com/">尝试使用Ruby(在浏览器中)

回答

我同意Leac。如果我很无聊,我有时会和Scratch一起玩。这是查看代码的一种非常有趣的视觉方式。

它是如何工作的,它们为我们提供了一堆可以堆叠的"积木"(看起来就像乐高积木)。通过堆叠这些块并与画布进行交互(在其中放置精灵,图形),我们可以创建游戏,电影,幻灯片放映……这真的很有趣。

完成后,我们可以将其直接上传到Scratch网站,这是Scratch应用程序的YouTube门户。不仅如此,我们还可以在网站上下载任何提交的内容,并从其他Scratch应用程序中学习或者扩展。

回答

这是一本很棒的书,我的小兄弟曾经学习过:

http://pine.fm/LearnToProgram/

当然,最重要的是在读完本书后立即开始一个真正有用的某种程序。

回答

我建议从C / C ++开始。我发现这为几乎所有其他语言奠定了良好的基础。而且,BASIC的不同版本充其量可能是相当狡猾的,并且与实际编程没有真正的关联。

回答

我认为因为要学习编程而学习编程永远不会比因为想做某事而学习编程要好。如果我们发现兄弟对某个工作感兴趣,因为他想使它工作,那么我们可以将他留给Google,他会做。他会带我们到处检查他的路线是否正确。

我认为抽象地讲授程序设计的最大问题之一是,它没有一个可以使学习者动情投入的现实世界。程序设计很困难,必须付出一些实际的回报才能使之值得努力做到这一点。以我为例,我在uni大学完成了计算机科学,在那之前学习了Pascal和COBOL,然后在家里学习了BASIC,但是直到90年代我成为一名自雇的网页设计师,客户需要在其网站上提供功能,并且愿意为功能支付比设计多10倍的费用。把食物放在桌子上是一个动力!

所以我学习了Perl,然后学习了ASP / VBScript,然后学习了JavaScript,然后学习了Flash / ActionScript,然后学习了PHP,以便制作自己想要的东西。

回答

如何设计程序

计算机程序的结构与解释。在http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/上的视频讲座

回答

我认为,一旦他掌握了基础知识(变量,循环等),就应该尝试帮助他找到他感兴趣的特定事物,并帮助他学习实现它的必要性。我知道,如果我感兴趣的话,我会更倾向于做某事。另外,确保让他为一些棘手的问题而奋斗,没有什么比自己解决这个问题更令人满意的了。

回答

我只是让他写大量的代码。让他开车去做你们所做的一切,并且随时可以回答问题。

信不信由你,经过几个月的编写大量笨拙的代码之后,他将开始明白这个想法,并开始编写更好的程序。到那时,我们可以陷入细节(内存等)的泥潭,还可以讨论一般的设计原则。

我听说,伟大的艺术家与平庸的艺术家之间的区别是,每一次练习,无论大小,他们都会有所进步。让兄弟练习一下,他每次坐在键盘上都会使他得到改善。

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.

回答

通过学习如何使用流程图和PDL(程序设计语言)以语言不可知的方式解决问题,从而教会了我。几周后,我学会了将编写的PDL转换为语言。我很高兴能学到这种方式,因为我花了大部分时间来编程,解决了问题,而又不受语言的束缚。我使用的语言一直是实现细节,而不是设计的一部分。

必须通过将问题分解为基本步骤来解决问题是一项关键技能。我认为这是将那些可以编程的人与那些不能编程的人分开的事情之一。

就如何处理语言的概念顺序而言,我认为最简单的方法是决定要考虑一个项目并根据需要解决这些概念。这样,我们就可以根据需要将它们应用到我们感兴趣的事情上。学习语言时,最好记住几个简单的项目,而一些项目要具有渐进的复杂性。确定这些内容将确定所需的概念及其顺序。

回答

首先,我认为已经有了一些不错的答案,因此,我将尽量避免重复。

  • 让他们写很多代码,让他们问问题,以保持头脑畅通。
  • 我要说的是,不要迷住真正的详细信息,直到他们或者了解它们的含义,或者他们问。

我认为我要确保的最大观点之一是,他们了解框架的核心概念。我知道我们正在使用Python工作(对此我一无所知),但是例如,使用ASP.NET可以使人们了解模型背后的页面/代码可能是一个真正的挑战,但对于他们理解这一点至关重要。例如,我最近在一个论坛上遇到一个问题,即"我将数据访问代码放在" cs"文件或者" aspx"文件中的位置"。

因此,我想说的是,在大多数情况下,让他们指导自己的道路,只是在需要的地方为他们提供支持,并提出更多问题以保持兴趣。只要确保他们的基础已经下降,并且在走路之前不要让它们跑步即可。

祝你好运!

回答

我也建议我们观看一些截屏视频,它们通常是在特定技术而非语言的背景下创建的,尽管如果显示Python代码,那会做的:)。关键是它们是由一些优秀的程序员创建的,并且看着优秀的程序员编程是一件好事。我们和兄弟也可以进行一些对等编程,这可能是一个更好的主意。只是别忘了解释为什么我们要以这种方式而不是那样的方式做事。
我认为学习编程的最好方法是从好的例子中去,甚至不要去看坏的例子。

回答

罗伯特·雷德(Robert Read)撰写了一份有用的指南,《如何成为一名程序员》,涵盖了初学者认为有帮助的广泛编程问题。

回答

已经有了很多不错的答案,但是对于一个绝对的初学者,我会全力推荐Hackety Hack。它是由不合理的多产的why_the_lucky_stiff创建的,专门为新程序员提供一个类似于BASIC / LOGO / Pascal的环境,供他们尝试使用。它本质上是一个光滑的Ruby IDE,具有一些很棒的库(闪存,IM,Web服务器)和交互式课程。它选择了一些有趣且有用的课程,因此非常适合编程。 "世界,我们好"可能不会立即给人留下深刻的印象,但是在20分钟内创建一个自定义IM客户端可以激励某人继续学习。玩得开心!

回答

逐行复制一些简单的代码,并让他们在阅读过程中继续阅读和解释。他们很快就会解决。我开始使用Acorn杂志的代码片段在Acorn Electron上进行编程。我6岁时不知道编程,我曾经用来复制文本,但是后来我逐渐了解了不同单词的含义。

回答

我会建议先教几乎所有语言都使用过的非常基础的知识,但要在没有语言的情况下这样做。概述所有基本概念If-Else,If-Else,循环,类,变量类型,结构等。一切都是大多数语言的基础。然后深入了解布尔值,比较和复杂的AND OR语句,以了解更复杂的语句的结果。

通过这种方式,他将了解编程的概念,并更轻松地踏入语言,从那里开始学习语言,功能和语法的复杂细节。

回答

我最喜欢的"开始学习编码"项目是Game Snakes或者Tron,因为它可以让我们缓慢启动(变量用于存储当前的"蠕虫位置",如果蠕虫的长度大于一个"片段",则可以使用数组来存储蠕虫位置,循环以使蠕虫移动(如果/切换以允许用户更改蠕虫的方向,...)。从长远来看,它还允许将越来越多的东西包含到项目中,例如面向对象的程序设计(一个蠕虫是一个对象,同时可能有两个蠕虫)具有继承性(从" Snakes"到" Tron",或者相反,蠕虫会稍微改变行为)。

我建议我们使用Microsoft的XNA来启动。以我的经验,如果我们可以在屏幕上看到某些内容,则开始编程会更加有趣,并且XNA确实很容易在屏幕上移动某些内容。进行一些小的更改并获得另一种外观是很容易的,例如通过改变颜色,他可以看到自己的举动有效果->对成功的印象。成功很有趣,这是不断学习的巨大动力。

回答

这听起来可能很愚蠢,但是我们为什么要教兄弟编程?

最好的学习环境通常由一个敏锐的初学者可以实现的目标(一个示例程序),充足的资源(谷歌/教程/书籍)以及知识渊博的建议源,可以在需要时提供指导。

我们绝对可以为前两个建议提供帮助,但最后一个是主要角色。

回答

我建议采取一种与本书"加速的C ++"类似的方法,其中涵盖了通常对制作简单程序有用的C ++部分。对于任何刚接触编程的人,我认为只要花点力气就可以使他们感兴趣,这是使他们保持兴趣的好方法。一旦我们了解了Python的基础知识,就应该坐下来,让他尝试使用该语言。

在本学期我大学的一门课程中,他们采用了一种称为"基于问题的学习"(PBL)的方法,在该方法中,他们使用讲座来激发学生关于解决问题的不同方法的知识。由于兄弟很热衷,因此我们应该采取类似的方法。为他安排一些小项目,让他自己解决。然后,一旦他完成,我们就可以遍历他的方法,并用不同的方法进行比较和对比。

如果我们能给他适量的帮助,使他朝正确的方向发展,那么他应该可以。为他提供一些良好的网站和书籍也是一个好主意。

我还建议在开始阶段不要使用IDE。使用命令行和文本编辑器将使他对编译/汇编代码所涉及的过程有更深入的了解。

希望我能有所帮助。 :)

回答

作为一名初学者(> 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.

回答

最初,我对不同程序的工作方式很感兴趣,因此我从查看源代码开始。然后,当我开始了解程序的工作原理时,我将更改某些参数以查看会发生什么。所以基本上我在学会写之前就学会了阅读。巧合的是大多数人学习英语的方式。

因此,如果我要教别人如何编程,我会给他们一个小程序,以尝试阅读和理解它的工作原理,并让他们随便看看源代码。

只有到那时,我才给他们"任务"来尝试完成。

现在,如果他们有特定的原因想学习编程,那么从他们想要完成的事情开始做某事肯定是个好主意。例如,如果他们想精通Blender之类的应用程序,那么从Alice开始肯定是个好主意。

我绝对建议我们使用具有垃圾回收的语言,例如D,Perl或者某些解释性语言(例如javascript)。最好远离Perl,直到Perl 6接近完成为止,因为这解决了阅读和理解Perl的一些困难。

回答

一开始,很多事情使我感到震惊,但无非就是简单的机制。概念上,我立即采取了行动。但是想念一个大括号吗?在一个简单的程序中易于执行,并且通常很难调试。

因此,我的卑鄙建议是:不要低估基础知识(例如良好的打字)。这听起来很补救,甚至很愚蠢,但是当我偶然发现一种简单的技术,即键入代码结构的完整"骨架"然后再将其填充时,它在学习过程中为我免了很多痛苦。

对于Python中的" if"语句,请从以下内容开始:

if  :

在C / C ++ / C#/ Java中:

if () 
{

}

在Pascal / Delphi中:

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.

回答

我的个人经历开始于使用Logo Writer(在某种程度上演变为Scratch)的基础知识,因为我当时很小,而且电脑现在不像今天那么出色,但是暂时却把我带到了我以前没有的地方以前...我认为这就是我迷上该行业的原因...我可以说,正是基于这种简单性和凉爽性的这些第一印象才使商品扎根于我的生命。这就是应该如何教授编程知识的基础……一个令人着迷的简单过程。

回到我的第一个CS 101,我首先从那里开始构想龙舌兰日出(Tequila Sunrise)的算法概念(逐步过程可以用正确的成分随时重复,将得到相同的输出)。我们继续使用Scheme进行基本的数学功能(如EHaskins所说的……从小处开始,然后建立起来),然后从那里开始循环,布尔逻辑,结构的概念,然后构建到对象的概念和一些模拟执行中。 。

这种方法的优点之一是,语言不是学习编程概念和基础的过程中的目标,而只是一种工具(就像运算符,函数一样,在数学中也是如此)。

恕我直言,学习编程的基础知识和创建基础可能是我们可以教给兄弟的最好的事情,一旦实现了目标,我们就可以进入更通用的语言(如python),并教给他们更高的概念,如体系结构和设计模式(使它们在过程中变得自然,因此他将在早期阶段就习惯于良好做法,并将其视为过程的一部分)……我们远未重塑温水,但我们始终必须从制造火开始。

从那里开始,天空是极限!

回答

怎么样:催生Nat Torkington的下一代黑客。

回答

在我看来,C是最好的起点。语言很小,它的高级功能无处不在,而低级功能则可以让我们学习机器。

我发现C Primer Plus,第5版作为几乎没有编程经验的入门程序员非常有帮助。它假定没有任何以前的编程经验,并且阅读很有趣,并且深入介绍了C(包括最新的C99标准)。

回答

有一本书叫做代码。我不记得是谁写的,但是它贯穿了我们(程序员)知道的很多东西的基础,并且理所当然地认为我们也要交谈的人也知道。从如何计算二进制数到处理器如何工作,应有尽有。它没有任何处理编程语言的内容(据我所记得),但这是一个很好的入门。我承认,我也是那所学校的一员,认为我们必须知道计算机的工作方式才能有效地对其进行编程。

回答

我建议使用徽标(又名乌龟)来掌握基本概念。它提供了具有即时图形反馈的良好沙箱,并且我们可以演示循环,变量,函数,条件等。此页面提供了出色的教程。

徽标后,移至Python或者Ruby。我推荐Python,因为它基于ABC,它是为教学编程而发明的。

在教授编程时,我必须赞同EHaskins关于简单项目然后是复杂项目的建议。最好的学习方法是从确定的结果和可衡量的里程碑入手。它使课程保持重点,允许学生建立技能,然后再利用这些技能,并给学生一些向朋友炫耀的东西。不要低估了为自己的工作展示某些东西的力量。

从理论上讲,我们可以坚持使用Python,因为Python几乎可以完成任何事情。这是教授面向对象的程序设计和(大多数)算法的好工具。我们可以像命令行一样在交互模式下运行Python,以了解其工作方式,或者一次运行整个脚本。我们可以动态运行解释的脚本,也可以将它们编译为二进制文件。有成千上万的模块可以扩展功能。我们可以制作与Windows捆绑在一起的图形计算器一样的图形计算器,也可以制作IRC客户端或者其他任何东西。

XKCD更好地描述了Python的功能:

之后,我们可以迁移到Cor Java,尽管它们所提供的功能不是Python所没有的。这些方法的好处是它们使用C语言风格的语法,许多(我敢说最多吗?)语言都使用C语言风格。我们无需担心内存管理,但是我们可以习惯使用语言解释器来获得更多的自由和更少的掌握。 Python强制使用空格和缩进,这在大多数情况下是很好的,但并非总是如此。 Cand Java使我们可以管理自己的空格,同时保持强类型。

从那里开始,标准就是C或者C ++。这些语言的自由几乎是存在的。现在,我们将负责自己的内存管理。没有垃圾收集可以。在这里,我们可以教授真正的高级算法(例如mergesort和quicksort)。在这里,我们可以了解为什么"细分错误"是一个诅咒词。在这里,我们可以下载Linux内核的源代码并凝视Abyss。首先编写一个循环缓冲区和一个用于字符串操作的堆栈。然后继续前进。

回答

如果兄弟可以使用iTunes,则可以下载新南威尔士大学的Richard Buckland开设的计算机科学入门课程的视频讲座。他是一位引人入胜的讲师,涵盖了计算和C语言的基础知识。如果没有其他要求,请告诉兄弟在后台播放视频,某些概念可能会因渗透而沉入其中。 :)

COMP1917高等计算2008单元1
http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

如果链接不起作用,请使用以下路径:

主页-> iTunes U->工程-> COMP1917高等计算2008第1节

回答

对我来说,在IDE本身中进行探索和试验有助于我学习Java和Visual Basic,但是我通过艰辛的方式学习了编程的基础知识:Perl5. 当时没有免费的IDE,所以这意味着在记事本中键入代码。 ,保存它,然后运行perl解释器。

我想说,IDE使学习编程的基础变得更加容易。尝试先尝试控制结构和变量。用Java说:

int a = 5;

for (int i = 0; i < a; i++) {
     System.out.println("i is now " + i);
}

基本上,简单地学习控制结构和变量将使初学者已经可以开始编写有趣的东西了。

回答

关键是有问题的人需要解决一些问题。如果我们没有想要编写的程序(以及一些明智且定义明确的程序,而不是"我想编写下一部Quake!"),那么我们将无法学习编程,因为我们没有动力去激励自己。 。我的意思是,我们可以读一本书,并对语言的语法和语义有一个大概的了解,但是,除非我们拥有要编写的程序,否则我们将永远无法理解。

如果存在这种推动力,那么其他所有内容都只是次要的细节。

回答

新开发人员很容易学习Python。我们不会纠缠于内存管理和类型定义的细节。 Dive Into Python是python编程的一个很好的初学者指南。当我姐姐想学习编程时,我把她指向了" Head Start"一书,她发现这些书非常容易阅读和理解。我发现很难开始教一个人,因为我们没有可与他们一起使用的词典。首先让他读一些书或者教程,然后问我们一些问题。在这里,我们可以分配项目并对其评分。我发现很难教编程,因为我经过近15年的摸索才学会了编程。

回答

欧拉计划(Project Euler)有许多有趣的数学问题,这些问题可能为入门的程序员提供很多帮助。问题开始容易,难度增加,并且网络上充满了各种编程语言的示例解决方案。

回答

我建议查尔斯·彼得佐德(Charles Petzold)的书《计算机硬件和软件的隐藏的语言》作为计算机工作原理的出色综合介绍。

本书中有很多信息(382页),这可能是一个绝对的初学者,需要一些时间来阅读,但这是值得的。 Petzold设法以非常清晰和令人愉悦的方式解释了计算机和编程的许多核心概念,从简单的代码,继电器,内存,CPU到操作系统和GUI。它将使任何读者在编写代码时都能很好地了解幕后实际发生的情况。

我当然希望我第一次学习编程时就在身边!

回答

有一本非常适合学习python的Wikibook。

我不知道其他语言的Wikibooks如何使用,但是我个人从Wikibook中学习了python,就像2007年2月一样

ps:如果我们不熟悉Wikibook,则基本上是书籍创作的Wikipedia版本。这很难描述,但是如果我们查看那里的几本书,就会知道它是如何工作的

回答

我不确定对兄弟来说最好的是什么,但是我知道我是从python开始的。我从很小的时候就开始玩各种游戏,并且想自己制作游戏,所以我叔叔通过pygame库向我介绍了python。它有很多教程,使一切变得容易(在我看来,这比openGL容易)。
它仅限于2d,但是无论如何我们都应该从简单开始。

我叔叔推荐python是因为他当时对它很感兴趣,但我还是推荐它,因为它易于学习,直观(或者像编程语言所能达到的那样直观),简单(但肯定不是简单),所以现在已经非常有知识了。 。

我个人发现基本编程只是为了学习当时很无聊的编程,但是随着我的前进,我获得了极大的热情。我真的很想学习以构建一些东西,而不仅仅是学习它。

回答

学习任何东西的最好方法是从基础开始。我们可以找到任何好的教科书来解释什么是编程,内存,算法。

下一步,选择仅取决于老师所知道的语言或者学生为什么要学习的语言。

然后就是代码,代码,代码。直接编写本书中的每个示例代码。然后稍微更改它以执行其他操作。学习编程是一个主动的过程,而不是被动的过程。我们不能只阅读Dietal编写的C ++ How to Program,然后期望在阅读时没有积极进行C ++编写代码。

即使我们是经验丰富的编码人员,也可以在书中编写代码以学习新知识。

回答

首先问他一个问题:"我们想用计算机做什么事情?"

然后选择适合他的答案的一组活动,并选择一种允许完成这些操作的语言。如果这是一个简单(或者可简化)的脚本环境(例如Applescript,Ruby,任何shell(Ksh,Bash甚至是.bat文件)),那就更好了。

原因如下:

  • 如果他对结果感兴趣,那么比起让他数数斐波那契的兔子,他可能会更有动力。
  • 如果他得到自己喜欢的结果,他可能会考虑我们创建的活动的变化。
  • 如果我们在教他,那么他还没有从事认真的职业(还);以后总有时间切换到"工业实力"语言。

回答

免费的电子书"使用Python发明自己的游戏"是教年轻人的好资源:

http://pythonbook.coffeeghost.net/book1/IYOCGwP_book1.pdf

回答

需要考虑的事情...并非每个人都有能力进行编程:

有些人无法摆脱过去的事情:

A = 1

B = 2

A = B

(这些人仍然会认为A = 1)

杰夫也谈到了这一点。实际上,我的示例在链接中(并进行了介绍,以进行引导)。

回答

看起来很奇怪,但是我开始通过在上一份工作中自动化任务和数据分析来编写代码。这是通过记录然后研究生成的Excel宏的代码来完成的。当然,这种方法假定我们可以通过VB学习。

回答

有人可以添加到杰森·普拉特(Jason Pratt)先前关于爱丽丝(Alice)的文章中的一些其他信息,特别是讲故事爱丽丝(Alice)的故事。

尽管该研究针对的是初中女生,但我们可能会发现Caitlin Kelleher撰写的白皮书很有趣。

回答

我和孩子们一起使用的一种是CEEBot。它不是python,而是在一种有趣的,机器人编程的游戏中教授C / Java风格的编程。它针对10至15岁的孩子,但这确实是一个不错的选择。

回答

拥有小而可实现的目标是学习任何技能的最大方法之一。编程没有什么不同。 Python是一门很棒的语言,因为它易于学习,干净并且仍然可以做高级的事情。 Python仅受想象力限制。

真正引起某人兴趣的一种方法是给他们一个小时左右就能完成的小项目。当我最初开始学习python时,我正在玩Code Golf。他们面临许多小挑战,将有助于教授编程的基础知识。我建议仅尝试每天解决其中一个挑战,然后再尝试所学的概念。我们必须使编程学习变得有趣,否则很快就会失去兴趣。

回答

如果他感兴趣,那么我就不必担心专注于游戏或者其他什么。我只是想抓住那些初学者"教自己x"的书,你将要把它扔给他,让他在这本书中挣扎。也许以后再谈论它,然后再做另一个。之后,我将和他配对编程,这样他就可以了解他读过的那些书有多肤浅和la脚。然后,我将开始让他为自己编写一些代码。一个跟踪垒球统计信息或者吸引他的东西的网站。对我来说,那是过去的葡萄酒数据库。

在那之后,我将开始研究真实的书籍,领域设计等。

回答

绝对的Python初学者

绝对入门的Python编程http://safari.oreilly.com/images/1592000738/1592000738_xs.jpg

回答

适用于普通凡人的Python软件包VPython -3D编程(视频教程)。

代码示例:

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

回答

我浏览了所有评论,似乎没有人提到来自www.CodeBetter.com的编程基础。尽管它需要一些基础,但可以肯定是学习过程的下一步。

回答

我本人是非程序员,从基本的角度来看,我发现实用程序员的《如何编程》一书非常有帮助。对于初学者来说,它是平易近人且易于阅读的。它不会使我们从初学者变成专家,但是一旦我们选择一种语言并拿起第一本"学习编程(此处为语言)"书,它就会为我们做准备。

回答

其他两个启动平台:

  • 一个好的可编程计算器(这是我在70年代学到的),然后是HP25,然后是HP41,现在是TI69,等等。
  • 交互式小说平台,例如" Inform 7",提供了另一种视角
  • Flash / ActionScript

所有这些都是不同的,引人入胜的,并且其中任何一个都可能激发初学者并开始运作所需要的那种兴趣。

血脑屏障

回答

我建议使用Think Python。

回答

一旦他掌握了基础知识,我建议将河内塔作为一个很好的练习。
如果我们有木制玩具,我建议从木制玩具开始。让他尝试自己解决问题,并系统地描述他的方法。告诉他递归在哪里起作用。向他解释移动的数量如何取决于磁盘的数量。
然后让他编写一个程序,以我们选择的语言打印动作顺序。

回答

问题完全取决于我们兄弟的年龄和学历,但是如果他是一个孩子/少年,我建议我们首先进行一些GUI编程或者图形编程(使用Canvas等)。看起来不错,我们会立即得到结果。算法很无聊,而且对于年轻人(比如说15岁之前)来说太抽象了。

当我开始使用ZX Spectrum编程时(当时我才12岁),我喜欢在屏幕上绘制各种东西,但仍然很有趣。直到我18岁时,我才开始学习真正的算法技术。学习它的人的兴趣是其中最重要的部分。

因此,我将研究PyKDE,PyGTK,PyQt或者Python + OpenGL(网络上肯定有一些教程,我知道一些捷克语,但这对我们没有帮助:))。

当然,如果哥哥年龄较大并且受过数学方面的教育,那么我们可以直接使用算法等。

回答

斯坦福大学非常出色的视频介绍课程(不需要任何先验知识):

编程方法

将教我们每个程序员都应该知道的良好"方法"以及一些Java编程。

回答

无论我们选择哪种语言和环境,如果学生出于专业原因想要学习或者进行"真实的"编程(无论是哪种语言),请让他们通过在纸上编写入门程序1并带走运行来开始学习。返回输出和/或者错误结果,并让它们在纸上解决问题。

刚开始时,这并不比在屏幕上进行击中要难,但是当他们开始发现bug的奇妙世界时,它将使事情变得容易得多。

1)简短的" Hello,World!"类型的程序仍然具有一些逻辑和/或者计算,最多可以执行几个可能有错误的程序

回答

无论他们写什么,都让他们在第一次运行时逐行通过调试器逐步执行。让他们自己看看计算机在做什么。这消除了很多谜团,减少了恐吓("哦,每行真的很简单!"),并帮助他们学习调试技能并认识到为什么常见错误是常见的(以及为什么是错误)。

回答

+1前往斯坦福大学讲课。 http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111

他们简单,高质量,我可以保证他们教初学者的能力(我就是其中之一)。

回答

我建议将"计算机科学不插电"作为补充性教学材料。

回答

"谁害怕C ++"
海勒

可能值得一试

回答

Microsoft Small Basic是免费的基于.NET的编程环境,旨在成为初学者的"有趣"学习环境。该语言是VB.NET的子集,甚至包含徽标语言所熟悉的" Turtle"对象。该网站包含分步教程。

回答

我同意上面的superjoe30,但我没有足够的声誉来发表评论。

我当过4年的C.S.教授。语言是基础语言,然后是Pascal,但是语言到底是什么并不重要。

作为一名新教授,我学到的最大的教训是,无论我认为一个概念多么简单,对于新手来说都不是那么简单。永远不要比学生走得快。我不能强调那么多。走真的,真的很慢。

我将以非常简单的东西开始,阅读和打印,也许是一个简单的计算,只是为了让学生习惯于放入和取出东西。然后是IF语句。然后是真正简单的FOR循环,总是根据学生可以编写并乐在其中的东西进行。

然后,我将花大约3周的时间为一种叫做SIMPL的假十进制机器教授一种非常简单的机器语言,我们可以单步执行。这样做的原因是,学生可以看到"橡胶与路的交汇处",计算机可以一步一步地做事,并且可以改变事物发生的顺序。没有这些,学生倾向于认为计算机可以读他们的思想,一次做所有的事。

然后回到基本。在阵列上运行几个星期,因为这是一个很大的减速。然后是顺序文件,这是另一个减速。我所说的"减速带"是指学生可以在充满自信的情况下航行,然后我们用数组之类的概念击中它们,然后它们又完全迷失了,直到我们通过它放松为止。

然后,借助他们的技能,我会让他们选择一个学期项目,因为这使编程变得有趣。如果没有用,那真的很无聊。我会建议各种项目,例如游戏,会计程序,科学程序等。很高兴看到它们被启用。他们经常会向我寻求帮助,这很棒,因为我们知道他们正在学习。

在他们进行项目时,我们将继续涵盖更高级的编程技术,包括搜索,排序,合并,如何创建简单的数据库等。

祝你好运。教学是一项艰苦的工作,但是当我们看到学生成长时就很满意。

回答

书籍:面向孩子,父母和祖父母的Java编程(PDF)

我没有关于使用该书的学习经验,但是它看起来不错,因为它很快就可以产生可见的东西,并且不会花太多时间在语法上的琐碎细节上。这里有人试过用那本书吗?

回答

从Python中的Turtle图形开始。

我会使用Python标配的turtle图形。它是直观,简单的,我们可以在不深入语法的情况下使用此环境引入许多编程概念,例如迭代和过程调用。考虑以下python中的交互式会话:

>>> 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

在尝试完成最后两个任务时,他们将进行许多失败的尝试,但是这些失败在视觉上将是有趣的,并且他们将很快学会,因为他们试图弄清为什么它没有达到他们的期望。

回答

一旦我们教过他们如何编程,他们可能想学习如何开发软件。
为此,我认为格雷格·威尔逊(Greg Wilson)的软件木工课程很棒。它还使用Python作为学生的语言。

回答

我认为Python是一门非常出色的语言::-)

我建议我们尝试http://www.pythonchallenge.com/

它的构建就像一个小冒险,每个解决方案都将我们链接到一个新的不错的问题。

解决问题后,我们可以访问一个不错的论坛来讨论代码,并看看其他人创建了什么。

回答

我可以推荐我的项目PythonTurtle。

概括:

PythonTurtle致力于提供最低阈值的学习Python的方法。学生命令一个交互式Python外壳程序(类似于IDLE开发环境),并使用Python函数移动屏幕上显示的乌龟。图示的帮助屏幕向学生介绍了Python编程的基础知识,同时演示了如何移动乌龟。

看起来像这样:

替代文字http://www.pythonturtle.com/screenshot.gif

回答

我认为Python是个好主意。我会给他一些基本的任务,让他自己做,并告诉他,他遇到的任何死胡同都可以通过去Google来解决。至少对我来说,独自解决一个问题总是比别人告诉我解决方案更好。

一些可能的项目(无特定顺序):

  • 硬币翻转模拟器。让用户输入所需的硬币投掷次数。执行它并显示结果以及正面或者反面的百分比。
  • 用菜单制作温度转换器,该菜单需要用户输入以选择用户要执行的转换类型。选择转换并完成转换后,应返回主菜单。这是具有相同概念的扩展转换器的示例:http://pastebin.org/6541
  • 编写一个使用数字输入并显示要转换为的字母等级的程序。最终将根据if和elif语句评估输入,以找到适合的位置。
  • 进行一次简单的测验,以进行多项选择或者填写空白问题。最后,它将显示用户的操作方式。他可以选择任何想要的问题。
  • 输入一些(可能很大)的便士,然后将其转换为更大的面额。例如,149个便士= 1美元,1个季度,2个角钱和4个便士。
  • 创建一个简单的列表管理器。能够添加/删除列表以及在这些列表中添加/删除条目。这是圣诞节清单管理器的示例:http://pastebin.org/6543
  • 创建一个将生成的程序,然后测试输入的数字是否形成一个魔方(带有2D数组)。这是一些示例代码,但实际上应该在每个步骤中打印出正方形,以显示用户在正方形上的位置:http://pastebin.org/6544

我还建议使用xTurtle或者其他图形模块做一些事情,以使事情变得混乱,并避免他变得无聊。当然,这是非常实际的编程,而不是很多人真正会使用python的脚本,但是我给出的示例几乎直接取自于我通过python学习时,并且对我来说非常有用。祝你好运!

回答

尝试在线查找"为什么(辛辣)Ruby指南"的副本。原始站点处于脱机状态,但我确定那里有一些镜像。这不是我们典型的编程指南;在学习一种可能适合朋友的新语言时,它会带来独特(有趣)的旋转。更不用说,Ruby是一种很棒的学习语言。

回答

使用现实世界的类比和虚构人物来教他们编程。就像我教人们有关变量和控制语句等的时候一样。

通常我从计算器示例开始。我说想象一下,每个变量都有一个盒子,并且有10个卡板上印有数字0 9的纸板。说盒子可以一次装一个纸板,并用类似的方式解释编程元素的工作方式

并强调每个运算符的工作方式..像简单的" ="运算符一样,总是首先将右侧计算为一个值。并将该值放入名为" num_1"的框(即变量名)

这非常有效,因为他们能够非常快速地想象流程。

回答

只是取笑!

令人惊讶的是,如果我们尝试Kojo,Scala可能是最简单的

回答

如果兄弟喜欢拼图,我会推荐Python挑战。在一对一的教程中,我不会将其用作正式的教学工具,但是当我们不在一起挑战自己并找乐时,他可以做这件事。

回答

"学术地球"提供了来自顶尖大学的免费计算机科学课程的链接。他们有专门针对入门计算机科学的部分。入门课程中教授的语言有所不同:

  • 麻省理工学院-计算机科学与编程导论-Python
  • 斯坦福大学-计算机科学I:编程方法-Java
  • 哈佛大学-计算机科学概论I-C(主要重点),另外还充斥了一些其他内容(例如SQL,PHP,LISP,汇编器等)
  • 伯克利-LISP语言的方言

回答

我不知道是否有人在这里提到过这一点,但是我们可能想看看Zed Shaw的"学习Python的艰难方法"

希望这可以帮助

回答

Python挑战