教初学者编程的最好方法是什么?

最初的问题

我目前正在教我弟弟编程。他完全是个初学者,但很聪明。(他真的很想学)。我注意到我们的一些会议陷入了一些小细节,我觉得我不是很有条理。(但这篇文章的答案帮助很大。)

我怎样才能更好地有效地教他?是否有一个逻辑顺序,我可以用一个概念一个概念地运行?是否有什么复杂的问题我应该在以后再讨论?

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


如何提供帮助

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

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

请描述资源加上一个链接,以便我可以查看。我想让每个人都知道,我确实在使用其中的一些想法。你提交的内容将在这篇文章中汇总。


在线资源用于初学者教学:


推荐纸质书的教学初学者

147853 次浏览

如果他感兴趣,那些小细节不就是好地方吗?使用python时,您已经切断了GUI,这样就不会有困惑了。为什么不选择一个项目,一款游戏或其他东西,然后执行它呢?经典的高低数字猜谜游戏可以简单地从命令行中用20-30行代码(当然取决于语言)实现,并为您提供变量、条件、循环和用户输入。

首先,像其他人一样开始:使用你好世界程序。这很简单,它让他们对程序的布局有了基本的感觉。试着回想一下你第一次编程的时候,以及一些概念有多么困难——从简单开始。

在Hello World之后,继续创建一些基本变量、算术,然后是布尔逻辑和if/else语句。如果你有一本旧的编程教科书,可以查看一些早期的例子,并让他浏览一下。只是不要一下子介绍太多,否则会让人不知所措。

实际上,我认为应该选择一种指令更少、更简单的语言。我个人在家里学习BASIC语言,如是杰夫。这样,您就不必深入研究更复杂的问题,如面向对象编程,甚至如果您不想深入研究过程的话。一旦他能够处理简单的控制流,就可以转向一些更复杂的东西,但只有简单的功能。

也许从两个数字相加的简单程序开始,然后发展到可能需要一个分支的程序,然后可能读取输入并对其做出响应,然后是某种循环,并开始将它们组合在一起。只要从小事开始,然后慢慢做。不要做任何大的项目,直到他掌握了基本知识(否则它可能太令人生畏,他可能会中途放弃)。一旦他掌握了BASIC或者你选择的任何东西,就转向更复杂的东西。

只有我的0.02美元

当你教你的兄弟编程时,你应该非常注意让他不要太依赖你。通常,当我发现自己在帮助别人时,他们会开始把我看作是他们所有问题的答案本,而不是去尝试寻找答案,他们只是简单地问我。通常最好的老师是实验,每次你的兄弟有类似“如果我给一个字符串加2会发生什么?”这样的问题时,你应该告诉他自己试试。我还注意到,当我不能让别人理解一个概念时,看看一些示例代码会有帮助,我们可以单独地查看每个部分,并逐条解释它。作为旁注,刚接触编程的人通常对面向对象编程的思想有困难,当你教他们时,他们会说他们理解它,但直到实际实现它才会有一个清晰的概念。

你可以尝试使用爱丽丝。这是一个为编程入门课程设计的3D程序。

对于新程序员来说,最大的两个障碍通常是:

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

Alice使用拖放界面来构造程序,避免了语法错误的可能性。Alice允许你构建3D世界,让你的代码控制(简单的)3D角色和动画,这通常比实现链表有趣得多。

有经验的程序员可能会把Alice当作玩具,嘲笑拖放代码行,但是研究表明这种方法是有效的。

免责声明:我为Alice工作过。

一个好的python课程是麻省理工学院的使用Python编程的简单介绍。网上都是免费的,你不必是麻省理工的超级学生也能理解它。

编辑(贾斯汀标准)

本课程使用这个免费的在线书籍:如何像计算机科学家一样思考

我不得不与几个初学者(从未写过一行代码)程序员一起工作,今年秋天我将与高中生一起参加一个课后研讨会。这是我找到的最接近文件的东西了。这项工作仍在进行中,但我希望它能有所帮助。

1) FizzBuzz。从命令行程序开始。你可以很快地编写一些有趣的游戏或工具,而且你可以很快地学习所有的语言特性,而不必先学习GUI工具。这些早期的应用程序应该足够简单,你不需要使用任何真正的调试工具来让它们工作。

至少像FizzBuzz这样的项目都是很好的项目。最初的几个应用程序不应该处理db、文件系统、配置等。这些概念只是让大多数人感到困惑,当你只是学习语法和基本的框架特性时,你真的不需要更多的复杂性。

一些项目:

  • 你好世界!
  • 取我出生的年份,计算我的年龄(只是(现在-那时)没有月份的修正)。(简单的数学,输入,输出)
  • 询问方向(上,下,左,右),然后告诉用户他们的命运(掉进洞里,找到蛋糕等)。(布尔逻辑)
  • FizzBuzz,但是每秒钟数一次。(循环、计时器和更多逻辑)
  • 根据他们的年龄,有些人真的很喜欢在一段时间内随机侮辱用户的应用程序。(循环,数组,定时器,随机,如果你让间隔随机)

2) 简单的项目一旦他们很好地掌握了语言功能,你可以开始一个项目(简单,有趣的游戏工作很好。)你应该尽量让第一个项目能够在6-12小时内完成。不要过早地花时间去构建它。让他们去设计,即使它很糟糕。如果它失败了,谈谈发生了什么,为什么失败,然后选择另一个话题,重新开始。

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

一旦项目开始运作,您就可以使用它来引入重构工具。如果你能用一些你从未计划过的简单功能扩展项目,那就太好了。这通常意味着重构和重要的调试,因为很少有人第一次就能写出像样的代码。

一些项目:

3) 真实的项目开始一个真正的项目,可能需要一些时间。使用适当的源代码控制,并强调有一个时间表。像真正的项目一样运行这个项目,如果没有其他的话,它是处理工具的很好的经验。

显然,你需要为每个人调整这一点。我发现最重要的一点是,即使是第一个简单的应用程序也要适用于用户感兴趣的内容。

一些项目:

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

我曾经教过编程,你哥哥有一个主要的优势,他比我的大多数学生都想学:)

如果你决定使用C 一个朋友有一个网站,它有那种从老一代使用的程序,被称为基本类型输入。其中更复杂的使用ncurses,这在某种程度上否定了它们作为教学辅助的作用,但其中一些是很小的东西,你可以在没有教的情况下学到很多东西。

我个人认为Python和Ruby会是很棒的第一语言。

< p >编辑: 初学者编程作业清单可能就是你要找的

我认为“群体智慧”在这里起作用。大多数人是如何学习编程的?许多人声称他们是通过复制别人的程序来做到这一点的,通常是他们想用BASIC语言玩的游戏。

也许这条路对他也有用?

如果你想教授编程的基础知识,而不是特定于语言,有一个名为刮伤的应用程序是在麻省理工学院创建的。它旨在帮助人们培养编程技能。当用户创建Scratch项目时,他们学会了创建条件、循环等。还有一个scratch项目社区,可以从那里下载项目——这样你就可以探索其他人的程序,看看他们是如何构建的。

这完全取决于你哥哥的学习风格。许多人通过亲自动手学得更快。只要进入其中,在他们进步和建立知识的过程中,明确概念和大局。

对我来说,我更喜欢从大局出发,深入到细节。我想知道的第一件事是它是如何组合在一起的,然后是面向对象的官样文章,然后是关于类的。实例等等。在我学习语法之前,我喜欢了解基本的概念和一点理论。我有一点优势,因为我在20年前用BASIC写过一些游戏,但之后就没有什么了。

也许在实际编写代码之前,先从总体任务陈述开始,然后是计划和/或流程图,然后细化成一些伪代码(倾向于您最终将使用的语法),这是很有用的。

这里的黄金法则就是弄清楚你学生的学习风格。

http://tryruby.hobix.com/">试试Ruby(在你的浏览器)

我同意Leac的观点。如果我无聊的话,我有时会玩刮伤。这是一种非常有趣的查看代码的可视化方式。

它的工作原理是,他们给你一堆“积木”(这些看起来像乐高积木),你可以叠起来。通过堆叠这些块,并与画布(游戏邦注:你可以在此放置精灵和图像)进行交互,你便能够创造游戏,电影,幻灯片等等。这真的很有趣。

当它完成时,你可以直接上传到Scratch网站,这是一个类似youtube的Scratch应用程序门户。不仅如此,您还可以从网站上下载任何提交的内容,并从其他Scratch应用程序中学习或扩展。

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

< a href = " http://pine。fm/LearnToProgram/" rel="nofollow noreferrer">http://pine.fm/LearnToProgram/ .fm/LearnToProgram/ " rel="nofollow noreferrer">http://pine.fm/LearnToProgram/

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

我建议从C/ c++开始。我发现它是几乎所有其他语言的良好基础。此外,不同版本的BASIC语言最多也会很不可靠,而且与实际的编程没有真正的关联。

我认为,因为你想学习编程而学习编程,永远比不上因为你想做某事而学习编程。如果你能找到一些你弟弟感兴趣的东西,因为他想让它起作用,你可以把谷歌留给他,他会做的。他会让你在他身边检查他是否走对了路。

我认为抽象编程教学的最大问题之一是,它没有真实的环境,让学习者能够投入情感。编程是很难的,必须有一些真正的回报,让你的努力值得去做。以我为例,我在大学里学过计算机科学,在那里学过Pascal和COBOL,在那之前在家里学过BASIC,但直到我在90年代成为一名自雇的网页设计师,我的客户在他们的网站上需要功能,并且愿意为功能支付比设计多10倍的钱,我才真正在这方面有所成就。把食物放在桌子上是一个地狱的动力!

所以我学习了Perl,然后是ASP/VBScript,然后是JavaScript,然后是Flash/ActionScript,然后是PHP——所有这些都是为了让我想要的东西发生。

我认为一旦他掌握了基本知识(变量,循环等),你应该试着帮助他找到他感兴趣的具体内容,并帮助他学习实现这一目标的必要条件。我知道如果我对某件事感兴趣,我会更倾向于去做,也更有动力去做。同时,确保让他在一些更棘手的问题上挣扎,没有什么比你自己解决问题的那一刻更令人满足的了。

我会让他写大量的代码。你们做什么事都让他插手,随时回答问题就好。

信不信由你,在写了几个月的烂代码之后,他会开始明白这个想法,并开始写更好的程序。在这一点上,你可以陷入细节(内存等),也可以谈论一般的设计原则。

我听说伟大的艺术家和平庸的艺术家的区别在于,他们每次练习都会在某些方面有所改进,不管这些改进有多小。让你弟弟练习,他每次坐在键盘前都会进步。

编辑:[Justin Standard]

埃斯特班,这让我想起了最近的编码恐怖帖子,我认为你是对的。但是我认为仍然值得找到方法来指南他的实践。毫无疑问,我希望他能写尽可能多的代码。这是我要求样本项目的原因之一。

我通过学习如何使用流程图和PDL(程序设计语言)以语言无关的方式解决问题。几周之后,我学会了把我写的PDL转换成一种语言。我很高兴我学会了这种方法,因为我大部分时间都在编程,解决问题,而不依赖于语言。我使用什么语言一直是实现细节,而不是设计的一部分。

通过将问题分解为基本步骤来解决问题是一项关键技能。我认为这是区分那些会编程和不会编程的人的一个因素。

至于如何处理语言概念的顺序,我认为最简单的方法是在脑海中有一个项目,并根据需要处理这些概念。这让你可以在你感兴趣的事情上应用它们。在学习一门语言的时候,最好在脑海中有几个简单的计划,还有几个逐步复杂的计划。决定这些将帮助你规划出需要的概念和它们的顺序。

首先,我认为已经有了一些很好的答案,所以我会尽量不欺骗太多。

  • 让他们写大量的代码,让他们不停地问问题,让他们的大脑保持流动。
  • 我会说不要陷入真的的详细信息,直到他们遇到他们的含义,或者他们问。

我认为我要确保的最重要的一点是他们理解框架的核心概念。我知道你正在使用Python(我对此一无所知),但例如,使用ASP。NET让人们理解模型背后的页面/代码可能是一个真正的挑战,但他们理解它的至关重要的。举个例子,我最近在一个论坛上有一个关于“我把我的数据访问代码放在哪里,在'cs'文件还是'aspx'文件”的问题。

所以我想说,在大多数情况下,让他们指引方向,在他们需要的地方支持他们,并提出更多的问题来保持兴趣。只要确保他们有基本的基础,不要让他们在会走之前就跑。

好运!

我建议你也看一些截屏——它们通常是在特定技术而不是语言的上下文中创建的,尽管如果显示了Python代码,那就可以了:)。关键是——它们是由一些优秀的程序员创建的,看优秀的程序员如何编程是一件好事。你和你哥哥也可以做一些对等编程,这可能是一个更好的主意。只是别忘了解释你为什么这样做而不是那样做。 我认为学习编程的最好方法就是从好的例子中学习,而不要去看那些不好的例子

Robert Read写了一个有用的指南如何成为一名程序员,它涵盖了一个初学者会发现很有帮助的编程问题的广泛领域。

已经有很多很棒的答案了,但对于一个绝对的初学者,我会全心全意地推荐Hackety黑客。它是由极其多产的why_the_lucky_stiff创建的,专门为新程序员提供一个BASIC/LOGO/类似pascal的环境来进行实验。它本质上是一个漂亮的Ruby IDE,带有一些很棒的库(flash视频、IM、web服务器)和交互式课程。它为编程做了一个很好的宣传,因为它选择了做有趣、有用的事情的课程。“你好,世界”可能不会马上给人留下深刻印象,但在20分钟内创建一个自定义的即时通讯客户端可以激励人们继续学习。玩得开心!

一行一行地复制一些简单的代码,让他们一边读一边理解。他们很快就会解决的。我开始用Acorn杂志上的代码片段在Acorn Electron上编程。在我6岁的时候,我对编程一无所知,我习惯抄写文本,但渐渐地我学会了不同单词的意思。

我建议首先教授几乎所有语言都使用的基本知识,但不需要语言。概述所有的基本概念If-Else If-Else,循环,类,变量类型,结构等。这是大多数语言的基础。然后转向真正理解布尔、比较和复杂的and或语句,以了解更复杂语句的结果。

通过这样做,他将理解编程的概念,并更容易地进入语言,从那里它只是学习语言的复杂细节,它的功能和语法。

我最喜欢的“开始学习编码”项目是游戏特隆,因为它允许你开始缓慢(变量存储当前的“蠕虫位置”,数组存储蠕虫位置,如果蠕虫比一个“piece”长,循环使蠕虫移动,如果/switch允许用户改变蠕虫的方向,……)。从长远来看,它还允许在项目中包含越来越多的东西,例如面向对象编程(一个蠕虫是一个对象,同时有机会有两个蠕虫)和继承(从“蛇”到“创”或相反,蠕虫会稍微改变行为)。

我建议你使用微软的XNA开始。根据我的经验,如果你能在屏幕上看到一些东西,开始编程就会有趣得多,而XNA使得在屏幕上移动一些东西变得非常容易。做一些小的改变并获得另一种看法是很容易的,例如通过改变颜色,这样他就可以看到他的行动有效果->成功的印象。成功是有趣的,这是不断学习的巨大动力。

这可能听起来很傻,但你为什么要教你的兄弟编程呢?

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

你当然可以为前两项提供建议,但最后一项才是你的主要角色。

我建议采用类似于本书加速c++的方法,其中涵盖了c++中通常对编写简单程序有用的部分。对于编程新手来说,我认为花点功夫就能展示一些东西是保持他们兴趣的好方法。一旦你掌握了Python的基础知识,那么你就应该坐下来,让他来实验这门语言。

在我这学期的一门大学课程中,他们采用了一种名为“基于问题的学习”(PBL)的方法,即通过讲座来激励学生使用不同的方法来解决问题。既然你哥哥很热心,你也应该采取类似的方法。让他做一些小项目,让他自己想办法。一旦他完成了,你可以通过他的方法,并与不同的方法进行比较和对比。

如果你能给他适当的帮助,引导他在正确的方向,那么他应该没事。为他提供一些好的网站和书籍也是一个好主意。

我还建议在开始阶段远离IDE。使用命令行和文本编辑器将使他更好地理解编译/汇编代码所涉及的过程。

希望我能帮上忙。:)

这个线程是非常有用的我作为一个初学者(>100行代码)程序员。

基于我所经历的,一旦我完成了“Hello World”,并移动到变量和“if/else”语句,我得到了太多的语法;不知道该拿他们怎么办。

因此,通过一个有趣的简单项目,我可能会重新燃起我的兴趣。这里有很多项目建议。

我能问个问题吗?

是不是先学习像Autohotkey这样的脚本语言更好?

编辑:[Justin Standard]

我认为学习一些基于宏的东西,比如Autohotkey,只会有最低限度的帮助。试着先学习一门“真正的”编程语言。最容易开始的(根据大多数人的说法)是pythonruby。我更喜欢python,但两者都很简单。 还有一个完整的stackoverflow post,它回答了从哪种语言开始的问题

起初,我对不同的程序是如何工作的很感兴趣,所以我从查看源代码开始。然后,当我开始了解程序的工作原理时,我会改变某些参数,看看会发生什么。所以基本上我在学会写字之前就学会了阅读。巧合的是,大多数人都是这样学英语的。

所以如果我想教别人如何编程,我会给他们一个小程序,让他们试着阅读和理解它是如何工作的,让他们只是玩玩源代码。

只有这样,我才会给他们布置“任务”去完成。

现在,如果他们有一个特别的原因想要学习如何编程,那么从他们想要完成的事情开始肯定是一个好主意。例如,如果他们想要精通像搅拌机这样的应用程序,那么从爱丽丝开始肯定是一个好主意。

我绝对建议坚持使用具有垃圾收集功能的语言,如DPerl,或一些解释性语言,如javascript。在Perl 6接近完成之前远离Perl可能是一个好主意,因为它修复了阅读和理解Perl的一些困难。

一开始我遇到了很多困难,但最简单的便是简单的机制。概念,我立刻接受了。但错过了结尾处的大括号?在一个非平凡的程序中,这很容易做到,但通常很难调试。

所以,我的建议是:不要低估基础(比如良好的打字)。这听起来像是补救,甚至有些愚蠢,但当我在学习过程的早期偶然发现输入代码结构的完整“骨架”然后填充它的简单技术时,它为我省去了很多痛苦。

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

if  :

在C / c++ / c# / Java:

if ()
{


}

在Pascal /德尔菲:

If () Then
Begin


End

然后,在开始和结束标记之间输入。一旦这成为一个牢固的习惯,你就会不假思索地去做,更多的大脑就会被释放出来做有趣的事情。我承认,这不是一个非常浮夸的建议,但我个人认为它有很多好处!

编辑(贾斯汀标准):

谢谢你的贡献,Wing。与你说的相关,我试图帮助我哥哥记住python作用域的语法的一件事是,每当有冒号时,他需要缩进下一行,而每当他认为应该缩进时,最好有一个冒号结束前一行。

我的个人经历始于小学时使用Logo Writer(在某种程度上演变为Scratch),当然我还是个孩子,电脑不像现在这么棒,但暂时它带我去了我以前没有去过的地方……我想这就是我如何迷上这个行业的原因。可以说,正是这些基于简单和冷静的第一印象,让这些商品在我的脑海中留下了一生。这就是编程教学中应该教授的基础知识……一个渴望魔法的简单过程。

回到我的第一个CS 101,我从构建Tequila Sunrise(一个可以在任何时候使用正确的成分重复的一步一步的过程,将产生相同的输出)开始,从那里我们转向使用Scheme的基本数学函数(就像EHaskins说的那样……)从小的开始,然后逐渐增加),然后是循环、布尔逻辑、结构的概念,然后是对象的概念和一些模拟执行……

这种方法的一个好处是,在学习编程概念和基础知识的过程中,语言不是一个目标,而只是一个工具(就像运算符、函数和其他东西在数学中的作用一样)。

在我看来,学习编程的基础知识和创建基础可能是你能教给你兄弟的最好的事情,一旦目标被覆盖,你就可以转向更通用的语言,比如python,教他们更高的概念,比如架构和设计模式(在这个过程中让他们变得自然,这样他就会从早期阶段就习惯好的实践,并将它们视为过程的一部分)……我们离重新发明温水还很远,但我们总是要从造火开始。

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

这个怎么样:Nat Torkington的催生了下一代黑客

在我的偏见看来,C是最好的起点。语言很小,它的高级功能无处不在,低级功能让你学习机器。

我发现C Primer Plus,第5版对于一个几乎没有编程经验的初学者非常有用。它假定没有编程经验,读起来很有趣,并深入介绍了C语言(包括最新的C99标准)。

有一本书叫代码。我不记得是谁写的了,但它贯穿了很多我们(程序员)知道的基础知识,并且理所当然地认为与我们交谈的人也知道。从如何计算二进制到处理器如何工作。它没有任何涉及编程语言的内容(从我的记忆来看),但它是一本相当好的入门书。我承认我也属于那种认为你必须知道计算机如何工作才能有效地为它编程的学校。

我推荐Logo(又名乌龟)来了解基本概念。它提供了一个很好的沙盒,带有即时的图形反馈,你可以演示循环、变量、函数、条件等。这个页面提供了一个很好的教程。

在Logo之后,移动到Python或Ruby。我推荐Python,因为它基于ABC,而ABC是为了教授编程而发明的。

在教授编程时,我必须赞同EHaskins关于先简单项目再复杂项目的建议。最好的学习方法是从一个明确的结果和一个可衡量的里程碑开始。它使课程集中,允许学生建立技能,然后在这些技能的基础上继续发展,并给学生一些可以向朋友炫耀的东西。不要低估工作成果的力量。

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

XKCD更好地描述了Python的强大功能: < / p >

在此之后,您可以转向c#或Java,尽管它们并没有提供Python所没有的很多功能。这样做的好处是它们使用c风格的语法,许多(我敢说大多数)语言都使用这种语法。您还不需要担心内存管理,但是您可以习惯语言解释器提供更多的自由和更少的帮助。Python强制使用空格和缩进,这在大多数情况下都很好,但并不总是如此。c#和Java允许您在保持强类型的同时管理自己的空白。

从那里开始,标准是C或c++。这些语言的自由几乎是存在的。您现在负责自己的内存管理。没有垃圾收集可以帮助您。这是你教授真正高级算法(如归并排序和快速排序)的地方。这就是为什么“分割错误”是一个诅咒词的地方。在这里,您可以下载Linux内核的源代码并查看深渊。首先编写一个循环缓冲区和一个用于字符串操作的堆栈。然后按你的方式工作。

如果你的兄弟有iTunes,他可以下载新南威尔士大学理查德·巴克兰教授的计算机科学入门课程的视频。他是一个有吸引力的讲师,涵盖了计算和C语言的基础知识。如果不出意外的话,让你的兄弟把视频作为背景播放,一些概念可能会通过潜移默化的作用慢慢地吸收进去。:)

COMP1917高级计算- 2008会话1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444 < / p >

如果链接不起作用,这里有一个路径:

Home -> iTunes U ->工程-> COMP1917高级计算- 2008会话1

对我来说,在IDE中探索和实验帮助我学习了Java和Visual Basic,但我学习编程的基础是艰苦的:Perl 5。那时候还没有一个免费的IDE,所以这意味着在记事本中输入代码,保存它,然后运行perl解释器。

我想说ide使学习编程基础更容易。先试试控制结构和变量。用Java说:

int a = 5;


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

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

关键的是,这个人需要有一些他们想要解决的问题。如果你没有一个你想要编写的程序(并且是一些合理且定义明确的东西,而不是“我想要编写下一个Quake!”),那么你就无法学习编程,因为你没有任何激励你的东西。我的意思是,你可以读一本书,对一种语言的语法和语义有一个粗略的理解,但直到你有你想要编写的程序,你永远不会迎难而上。

如果这种推动力存在,那么其他一切都只是次要细节。

Python对于新开发人员来说很容易学习。您不会被内存管理和类型定义的细节所困扰。深入了解Python是一个很好的python编程初学者指南。当我妹妹想学习编程时,我给她看了“领先”系列的书,她发现这些书很容易阅读和理解。我发现刚开始教一个人是很难的,因为你没有和他们一起使用的词汇。首先让他读一些书或教程,然后问你一些问题。从那里你可以分配项目和评分。我发现教编程很难,因为我是在将近15年的摸索中学会的。

Project Euler有许多有趣的数学问题,可以为初学者提供很好的材料。问题开始很简单,随着难度的增加,网站是各种编程语言的示例解决方案

我推荐Charles Petzold的书代码-计算机硬件和软件的隐藏语言,这本书很好地介绍了计算机的工作原理。

书中有很多的信息(382页),它可能需要一个绝对的初学者一些时间来阅读,但它是非常值得的。佩佐德成功地解释了计算机和编程的许多核心概念,从简单的代码、继电器、内存、cpu到操作系统等。gui以一种非常清晰和令人愉快的方式呈现。它将为任何读者提供一个很好的感觉,当他们编写代码时,在幕后实际发生了什么。

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

有一个维基百科对学习python很有帮助

我不知道其他语言的维基百科是怎样的,但我个人是从2007年2月的维基百科上学习python的

ps -如果你不熟悉维基教科书,它基本上是维基百科版本的书籍创作。这有点难以描述,但如果你看了几本书你就会明白它是如何工作的

我不知道什么对你弟弟来说是最好的,但我知道我是从python开始的。我从很小的时候就开始玩各种各样的游戏,想要制作自己的游戏,所以我叔叔用pygame库向我介绍了python。它有很多教程,让一切都很简单(在我看来比openGL简单多了)。 它限制到2d,但你应该从简单开始

我的叔叔推荐python,因为他当时对它很感兴趣,但我推荐它,现在已经相当有知识了,因为它很容易学,直观(或像编程语言一样直观),而且简单(但肯定不简单)。

当时我个人觉得简单地学习编程非常无聊,但随着学习的深入,我又有了相当大的热情。我真的很想学习是为了创造一些东西,而不仅仅是学习。

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

下一步选择语言,这取决于老师知道什么或者学生为什么想学。

然后就是代码,代码,代码。对书中的每个例子进行编码。然后稍微改变它来做另一个动作。学习编程是一个主动的过程,而不是被动的过程。你不能只读了Dietal写的c++如何编程,然后就指望在阅读时不主动地编写c++代码。

即使你是一个有经验的程序员,写书中的代码来学习一些新东西也会有帮助。

首先问他这个问题:"你想用你的电脑做什么?"

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

原因如下:

  1. 如果他对结果感兴趣,他可能会比你让他数斐波那契兔子更有动力。
  2. 如果他得到了他喜欢的结果,他可能会想出你创造的活动的变化。
  3. 如果你在教他,他(目前)还没有追求一份正经的职业;以后总是有时间切换到“行业实力”语言的。

免费电子书《用Python发明你自己的游戏》是一个很好的教育年轻人的资源:

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

需要考虑的事情……不是每个人都能编程:

有些人就是忘不了下面这些事情:

A = 1

B = 2

A = b

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

杰夫也谈到过这个问题。事实上,我的例子在链接中(并解释了,引导)。

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

一些额外的信息,有人可以附加到Jason Pratt早前在爱丽丝上的帖子…具体地说,是爱丽丝的故事的变体。

虽然研究对象是中学女生,但你可能会发现凯莱赫凯特琳写的白皮书很有趣。

我对我的孩子使用的是CEEBot。它不是python,但它在一个有趣的机器人编程游戏中教授C / Java风格的编程。它的目标受众是10-15岁的孩子,但它真的很好。

有一个小的,可实现的目标是学习任何技能的最好方法之一。编程也不例外。Python是一种很好的入门语言,因为它容易学习,简洁,仍然可以做高级的事情。Python只受限于你的想象力。

真正让别人感兴趣的一个方法是给他们一些他们可以在一个小时左右完成的小项目。当我最初开始学习python时,我玩代码高尔夫。他们有许多有助于教授编程基础知识的小挑战。我建议每天尝试解决一个挑战,然后运用所学到的概念。你必须让学习编程充满乐趣,否则你很快就会失去兴趣。

如果他感兴趣,我就不会担心专注于游戏或其他事情。我会抓起你准备扔给他的那本“自学x”入门书,让他自己摸索着读完。也许之后再讨论一下,然后再做一次又一次。在那之后,我会和他结对编程,这样他就能知道他读的那些书是多么浅薄和蹩脚。然后我会让他自己写代码。一个追踪垒球数据的网站或任何能吸引他的东西。对我来说,这是一个过去的葡萄酒数据库。

在那之后,我会开始真正的书籍,领域设计等。

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。虽然它需要一些基础知识,但它肯定是学习过程中的下一步。

作为一个非程序员,我发现Pragmatic Programmers的《如何编程》这本书从基本的角度来说非常有帮助。对于初学者来说,这本书平易近人,易于阅读。它不会让你从初学者变成专家,但它会让你在选择一门语言并拿起你的第一本“学习用(语言)编程”书时做好准备。

其他几个起步平台:

  • 一个好的可编程计算器(这是我在70年代学到的),HP25, HP41,现在TI69等等。
  • 像“Inform 7”这样的互动小说平台提供了另一种视角
  • Flash / ActionScript

所有这些都是不同的,引人入胜的,其中任何一个都可能激发一种兴趣,这是跑步初学者所必需的。

激光弯曲

我推荐认为Python

一旦他有了基础,我建议河内塔作为一个很好的练习。 如果你有木制玩具,我建议你从木质玩具开始;让他试着自己解决这个问题,并系统地描述他的方法。告诉他递归在哪里发挥作用。给他解释一下,棋局的多少取决于棋牌的多少。 然后让他写一个程序,用你选择的语言打印动作序列

你的问题取决于你兄弟的年龄和教育程度,但如果他是一个孩子/青少年,我建议你先做一些GUI编程或图形编程(使用Canvas等)。看起来不错,而且效果立竿见影。算法很无聊,对年轻人(比如说15岁之前)来说太抽象了。

当我开始在ZX Spectrum上编程时(我大概12岁),我喜欢在屏幕上画各种各样的东西,这仍然很有趣。我直到18岁才真正了解算法技术。不要被这种“简单”的编程是错误的开始所误导;学习它的人的兴趣是它最重要的部分。

所以,我会研究PyKDE, PyGTK, PyQt或Python + OpenGL(网上当然有一些教程,我知道一些捷克语,但这对你没有帮助:))。

当然,如果你的哥哥比你大,并且接受过数学方面的教育,你可以直接学习算法等。

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

程序设计方法 .

将教你每个程序员都应该知道的好“方法”和一些Java编程。

无论你选择哪种语言和环境,如果学生想要学习专业原因或做“真正的”编程(不管那是什么),让他们从在纸上写下他们的初始程序__abc0开始,然后把它们带出去运行。返回输出和/或错误结果,并让他们在纸上修复错误。

刚开始,这并不比在屏幕上执行并点击运行更难,但当他们开始发现bug的奇妙世界时,事情会变得容易得多。

1)简短地说:“你好,世界!”-type仍然有一些逻辑和/或计算的程序,对一些可能有bug的程序这样做

不管他们写什么,让他们在第一次运行时在调试器中逐行逐行地检查。让他们自己看计算机在做什么。这消除了许多神秘感,减少了恐惧(“哦,每一行真的都那么简单!”),并帮助他们学习调试技能,并认识到为什么常见错误是常见的(以及为什么它们是错误)。

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

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

我建议“脱离计算机科学”作为补充的教学材料。

“谁怕c++ ?” 由海勒< / p >

也许值得一试

Microsoft Small Basic是一个基于。net的免费编程环境,旨在为初学者提供一个“有趣”的学习环境。该语言是VB的一个子集。NET,甚至包含一个Logo语言中熟悉的“Turtle”对象。该网站包含一个循序渐进的教程。

我同意上面的superjoe30,但我还没有足够的声誉来留下评论。

我做了四年的计算机科学教授。语言是Basic,然后是Pascal,但语言是什么并不重要。

作为一名新教授,我学到的最大的一课是,无论我认为一个概念有多简单,它对新手来说都不简单。不要比你的学生快。我怎么强调都不为过。非常非常慢。

我会从非常简单的东西开始,阅读和打印,也许是一个简单的计算,只是为了让学生习惯输入和输出一些东西。然后是IF语句。然后是非常简单的FOR循环,总是根据学生可以编写的内容,并从中获得乐趣。

然后我会花3个星期的时间教授一种非常简单的机器语言,用于一台叫做SIMPL的伪十进制机器,你可以一步完成。这样做的原因是为了让学生看到“橡胶遇见道路”的地方,计算机一步一步地做事情,事情发生的顺序是不同的。如果没有这一点,学生们倾向于认为计算机可以读懂他们的思想,并一次性完成所有事情。

然后回到基本。几周的阵列,因为那是一个很大的减速带。然后是顺序文件,这是另一个减速带。我所说的“减速带”是指学生可以很自信地前进,然后你给他们一个像数组这样的概念,他们又完全迷失了,直到你让他们放松下来。

然后,有了这些技能,我会让他们选择一个学期项目,因为这让编程变得有趣。没有用处,真的很无聊。我会建议各种各样的项目,比如游戏、会计课程、科学课程等等。看到它们被打开真是太好了。他们经常会向我寻求帮助,这很好,因为你知道他们在学习。

当他们在做他们的项目时,我们将继续介绍更高级的编程技术——搜索、排序、合并,以及如何创建一个简单的数据库等等。

祝你好运。教书是一项艰苦的工作,但当你看到学生的成长时,你会感到满足。

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

我没有使用那本书学习的个人经验,但它看起来很不错,因为它很快就能产生一些可见的东西,而且没有在语法细节上花费太多时间。有人试过用那本书吗?

从Python中的Turtle图形开始。

我会使用Python标准自带的海龟图形。它是可视化的,简单的,你可以使用这个环境来引入许多编程概念,比如迭代和过程调用,然后再深入语法。考虑下面的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作为学生的语言。< / p >

我认为Python是一种非常好的开始语言::-)

我建议你试试http://www.pythonchallenge.com/

它就像一个小冒险,每个解决方案都将你链接到一个新的好问题。

解决问题后,你可以进入一个不错的论坛,讨论你的代码,并看到其他人创建了什么。

我可以推荐我的项目,PythonTurtle

简介:

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

它是这样的:

alt text http://www.pythonturtle.com/screenshot.gif

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

一些可能的项目(排名不分先后):

  • 抛硬币模拟器。让用户输入想要的掷硬币次数。执行它并显示结果以及正面或反面的百分比。

  • 制作一个带有菜单的温度转换器,该菜单接受用户输入来选择用户想要进行哪种类型的转换。选择转换并进行转换后,应返回主菜单。

    下面是一个具有相同思想的扩展转换器的示例: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(变量名)的框中

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

让它变得有趣就好!

令人惊讶的是,如果你尝试科乔, Scala可能是最简单的

如果你哥哥喜欢拼图,我推荐Python的挑战。我不会把它作为1对1教程的正式教学工具,但当你们不在一起时,他可以这样做,挑战自己,找点乐子。

学术地球提供顶尖大学的免费计算机科学课程链接。他们有一个部分是针对初级计算机科学的。初级课程所教授的语言各不相同:

  • 麻省理工学院 -计算机科学与编程入门- Python
  • 斯坦福大学 -计算机科学I:编程方法学- Java
  • 哈佛大学 -计算机科学概论I - C(主要焦点), 还有一些是为了 良好的度量(例如,SQL, PHP, LISP, 李汇编等)< / >
  • 加州大学伯克利分校 - LISP语言的一种方言

我不知道是否有人在这里提到过这个,但是你可能想要检查Zed Shaw用艰难的方式学习Python

希望这能有所帮助

在浏览了几本免费电子书之后,我发现最适合学习编程的书是O'Reily出版社出版的《Head First Programming》。它使用Python作为语言,并从一开始就为您提供程序。它们都比“Hello World”更有趣。 我花在这本书上的钱是非常值得的,因为它已经发布了一段时间,你可能会在Ebay或亚马逊上找到更便宜的二手书。< / p >

问问你的兄弟,他是否想为他做一些你认为他会感兴趣的程序或发明一个项目。

他可以知道输出应该是什么,并向他指出与项目相关的材料(在线或印刷)。如果他刚开始接触python或编程,你要有耐心,因为他在理解语法、错误、范围等基础知识的过程中,要准备好让位,让他自己跑,让他自己犯错误,当你开始看到他的头脑中出现了电灯泡。

我强烈推荐Python编程:计算机科学介绍第二版 by 约翰Zelle。它面向初学者,并处理编程的语义。阅读后,您将能够更快地学习其他语言,因为Zelle的语义vs.语法方法。点击这里查看详情!