324

原始问题

我目前正在教我的兄弟编程。他是一个完全的初学者,但非常聪明。(他实际上想学习)。我注意到我们的一些会议在一些小细节上陷入了困境,而且我觉得我的组织不够有序。(但这篇文章的答案有很大帮助。

我能做些什么来更好地教他?是否有一个逻辑顺序可以用来逐个概念地运行?有没有我应该在以后避免的复杂性?

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


如何帮助

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

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

请用链接描述该资源,以便我查看。我想让每个人都知道,我肯定一直在使用其中的一些想法。您提交的内容将汇总在此帖子中。


面向初学者的在线资源:


推荐给初学者的印刷书籍

4

86 回答 86

118

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

1)嘶嘶声。从命令行程序开始。您可以非常快速地编写一些有趣的游戏或工具,并且您可以非常快速地学习所有语言功能,而无需先学习 GUI 工具。这些早期的应用程序应该足够简单,以至于您不需要使用任何真正的调试工具来使它们工作。

如果没有别的东西像 FizzBu​​zz 是好的项目。您的前几个应用程序不必处理数据库、文件系统、配置等。这些概念只会让大多数人感到困惑,当您只是学习语法和基本框架功能时,您真的不需要更多复杂性。

一些项目:

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

2)简单的项目一旦他们很好地掌握了语言特性,就可以开始一个项目(简单,有趣的游戏很好用。)。你应该尽量让第一个项目能够在 6-12 小时内完成。不要花时间尽早构建它。让他们设计它,即使它很糟糕。如果它分崩离析,请谈谈发生了什么以及失败的原因,然后选择另一个主题并重新开始。

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

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

一些项目:

3)真实项目开始一个可能需要一些时间的真实项目。使用适当的源代码控制,并明确制定时间表。像真正的项目一样运行这个项目,如果没有别的,它必须处理工具的良好体验。

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

一些项目:

  • 俄罗斯方块
  • 基于文本文件的博客引擎
  • 更先进的机器人工作
于 2008-08-06T06:00:28.740 回答
30

您可以尝试使用Alice。这是一个 3D 程序,设计用于介绍性编程课程。

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

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

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

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

免责声明:我为爱丽丝工作。

于 2008-08-06T05:29:49.240 回答
28

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

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

在教授编程时,我必须先考虑 EHaskins 关于简单项目的建议,然后才是复杂项目。最好的学习方式是从确定的结果和可衡量的里程碑开始。它使课程保持专注,允许学生建立技能,然后在这些技能上建立,并为学生提供一些可以向朋友炫耀的东西。不要低估为自己的工作展示一些东西的力量。

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

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

之后您可以迁移到 C# 或 Java,尽管它们没有提供 Python 所没有的太多功能。这样做的好处是它们使用许多(我敢说最多?)语言使用的 C 样式语法。您还不需要担心内存管理,但是您可以习惯于从语言解释器那里获得更多的自由和更少的牵手。Python 强制使用空格和缩进,这在大多数情况下都很好,但并非总是如此。C# 和 Java 允许您在保持强类型的同时管理自己的空格。

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

于 2008-08-20T21:09:00.913 回答
15

一个好的 Python 课程是 MIT 的A Gentle Introduction to Programming Using Python。这一切都是在线免费的,你不必成为麻省理工学院的超级学生就能理解它。

编辑 [贾斯汀标准]

本课程使用这本免费的在线书籍:如何像计算机科学家一样思考
我肯定发现它非常有用。

于 2008-08-06T05:47:05.553 回答
12

从 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

在尝试完成最后两个任务时,他们会有很多失败的尝试,但是这些失败会在视觉上很有趣,并且他们会在试图弄清楚为什么它没有画出他们期望的那样时快速学习。

于 2009-02-25T21:00:08.037 回答
12

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

于 2008-09-08T18:26:28.447 回答
11

关键是相关人员需要有一些他们想要解决的问题。如果您没有想要编写的程序(以及一些明智且定义明确的程序,而不是“我想编写下一个 Quake!”),那么您就无法学习编程,因为您没有任何东西可以激励您. 我的意思是,您可以阅读一本书并对一门语言的语法和语义有一个粗略的了解,但是在您拥有一个您想要编写的程序之前,您永远不会抓住荨麻。

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

于 2008-08-22T10:35:35.553 回答
8

我不知道是否有人在这里提到过这个,但是你可能想看看Zed ShawLearn Python the Hard Way

希望这可以帮助

于 2010-10-19T00:42:21.437 回答
7

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

于 2008-08-06T16:37:38.703 回答
7

如何设计程序

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

于 2008-08-07T10:04:27.560 回答
5

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

http://pine.fm/LearnToProgram/

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

于 2008-08-07T05:33:05.440 回答
4

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

于 2008-08-06T05:08:37.020 回答
4

我只是让他写大量的代码。让他参与你们所做的一切,并随时回答问题。

信不信由你,在写了几个月的蹩脚代码之后,他会开始明白这个想法并开始编写更好的程序。那时,您可能会陷入细节(内存等)的困境,并且还会谈论一般设计原则。

我听说伟大的艺术家与平庸的艺术家的区别在于,每次他们练习时,他们都会改进一些东西,无论多么小。让你哥哥练习,每次坐在键盘前他都会进步。

编辑:[贾斯汀标准]

Esteban,这让我想起了最近的一篇编码恐怖帖子,我认为你是对的。但我觉得还是值得寻找方法来指导他的修行。毫无疑问,我希望他尽可能多地编写代码。这就是我要求提供示例项目的原因之一。

于 2008-08-09T01:37:07.920 回答
2

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

在 Hello World 之后,继续创建一些基本变量、算术,然后是布尔逻辑和 if/else 语句。如果您有一本旧的编程教科书,请查看一些早期的示例并让他阅读这些示例。只是不要试图一次介绍太多,否则会让人不知所措和混乱。

于 2008-08-06T05:13:15.763 回答
2

在教你的兄弟编程时,你应该非常注意的是,他不要过于依赖你。通常当我发现自己在帮助别人时,他们会开始认为我是他们所有问题的答案,而不是尝试寻找答案,他们只是问我。最好的老师通常是实验,每次你的兄弟有一个问题,比如“如果我在一个字符串上加 2 会发生什么?” 你应该告诉他自己试试看。我还注意到,当我无法将概念传达给某人时,查看一些示例代码会有所帮助,我们可以在其中单独查看每个部分并逐段解释。作为旁注,刚接触编程的人经常对面向对象编程的想法感到困惑,

于 2008-08-06T05:18:46.657 回答
2

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

如果你决定使用 C 语言,朋友的网站上有一些老一代人记得的基本类型的程序。它们中更复杂的使用 ncurses,这在某种程度上否定了它们作为教具的使用,但其中一些是很小的东西,你可以在不被教导的情况下学习负载。

就我个人而言,我认为 Python 和 Ruby 会成为很好的第一语言。

编辑: 一夜之间出现的初学者编程作业列表可能正是您正在寻找的。

于 2008-08-06T06:07:51.003 回答
2

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

我不知道 wikibooks 对其他语言的影响如何,但我个人从 wikibook 中学习了 python,就像 2007 年 2 月一样

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

于 2008-08-26T03:39:08.407 回答
2

蟒蛇挑战

于 2010-12-08T16:58:37.297 回答
2

这真的取决于你兄弟的学习方式。许多人通过亲自动手并开始学习,在进步和积累知识的过程中明确概念和全局,从而学得更快。

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

在实际编写代码之前,先从总体使命陈述开始,然后是计划和/或流程图,然后详细说明一些伪代码(倾向于您最终将使用的语法),来跟踪生产过程也许是有用的。

这里的黄金法则是确定学生的学习风格。

于 2008-08-06T10:44:54.297 回答
2

如果您的兄弟可以访问 iTunes,他可以下载新南威尔士大学 Richard Buckland 提供的计算机科学入门课程的视频讲座。他是一位引人入胜的讲师,涵盖了计算和 C 语言的基础知识。如果不出意外,请告诉你的兄弟在后台播放视频,一些概念可能会通过渗透而深入人心。:)

COMP1917 高等计算 - 2008 年第 1 节 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

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

主页 -> iTunes U --> 工程 --> COMP1917 Higher Computing - 2008 Session 1

于 2008-08-20T21:54:17.840 回答
2

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

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

  • 硬币翻转模拟器。让用户输入所需的掷硬币试验次数。执行它并显示结果以及正面或反面的百分比。

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

    这是具有相同想法的扩展转换器的示例:http: //pastebin.org/6541

  • 制作一个程序,接受数字输入并显示它将转换为的字母等级。它将最终根据 if 和 elif 语句评估输入以找到适合的位置。

  • 做一个简单的测验,包括多项选择题或填空题。最后,它将显示用户的操作方式。他可以选择任何他想问的问题。

  • 输入一些(可能很大)便士并将其转换为更大的面额。例如,149 便士 = 1 美元、1 夸特、2 美分和 4 便士。

  • 创建一个简单的列表管理器。能够添加/删除列表以及在这些列表中添加/删除条目。这是圣诞节列表管理器的示例:http: //pastebin.org/6543

  • 创建一个程序,该程序将构建然后测试输入的数字是否形成幻方(带有二维数组)。这是一些示例代码,但它应该在每个步骤中真正打印出正方形,以显示用户在构建正方形方面的位置:http: //pastebin.org/6544

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

于 2009-08-04T22:20:23.637 回答
2

让它变得有趣!

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

于 2010-03-19T13:44:53.010 回答
2

如果您的兄弟喜欢拼图,我会推荐Python Challenge。我不会将它用作 1 对 1 教程中的正式教学工具,但当你不在一起挑战自己并获得乐趣时,这是他可以做的事情。

于 2010-04-07T00:35:21.363 回答
2

在浏览了几本免费的电子书后,我发现学习编程的最佳书籍是 O'Reily Press 出版的 Head First Programming。它使用 Python 作为语言,并为您提供从一开始就可以使用的程序。它们都比“Hello World”更有趣。我花在它上面的钱物有所值,而且由于它已经发售了一段时间,您也许可以在 Ebay 或 Amazon 上找到更便宜的二手副本。

于 2011-01-03T01:54:43.940 回答
1

Python 对于新开发人员来说很容易学习。您不会纠结于内存管理和类型定义的细节。Dive Into Python是一本很好的 Python 编程初学者指南。当我姐姐想学习编程时,我指给她看“Head Start”系列的书,她觉得这些书很容易阅读和理解。我发现刚开始教别人很难,因为你没有词典可以和他们一起使用。首先让他读几本书或教程,然后问你问题。从那里您可以分配项目并对其进行评分。我发现教编程很困难,因为我是在近 15 年的修修补补中学会的。

于 2008-08-22T14:09:28.643 回答
1

如果他有兴趣,我就不会担心专注于游戏或诸如此类的事情。我只是抓住你要扔的那本初学者“自学x”的书,给他,让他挣扎。也许以后再谈,然后再做一个又一个。之后我会和他结对编程,这样他就可以知道他读的那些书是多么肤浅和蹩脚。然后我会开始让他为自己编写一些代码。一个跟踪垒球统计数据或任何能吸引他的网站。对我来说,它是当时的葡萄酒数据库。

之后,我会开始研究真正的书籍、领域设计等。

于 2008-09-08T17:40:52.427 回答
1

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

于 2008-08-09T16:28:05.737 回答
1

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

于 2008-08-06T07:15:53.953 回答
1

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

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

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

解决问题后,您可以访问一个不错的论坛来讨论您的代码并查看其他人创建的内容。

于 2009-07-08T09:57:21.460 回答
1

There is a book called Code. I can't remember who wrote it, but it goes through the basics of a lot of stuff that we (programmers) know and take for granted that people we talk to know also. Everything from how do you count binary to how processors work. It doesn't have anything dealing with programming languages in it (well from what I remember), but it is a pretty good primer. I will admit that I am also of the school that believes you have to know how the computer works to be able to effectively program things for it.

于 2008-08-19T14:52:48.043 回答
1

There have already been a bunch of great answers, but for an absolute beginner, I would wholeheartedly recommend Hackety Hack. It was created by the unreasonably prolific why_the_lucky_stiff specifically to provide a BASIC/LOGO/Pascal-like environment for new programmers to experiment in. It's essentially a slick Ruby IDE with some great libraries (flash video, IM, web server) and interactive lessons. It makes a good pitch for programming, as it chose lessons that do fun, useful things. "Hello, world" may not impress right off the bat, but creating a custom IM client in 20 minutes can inspire someone to keep learning. Have fun!

于 2008-08-11T04:30:31.143 回答
1

Copy some simple code line by line and get them to read and interpret it as they go along. They will soon work it out. I started programming on an Acorn Electron with snippets of code from Acorn magazines. I had no idea about programming when I was 6, I used to copy the text, but gradually I learnt what the different words meant.

于 2008-08-11T12:23:24.247 回答
1

我推荐 Charles Petzold 的书Code - The Hidden Language of Computer Hardware and Software作为对计算机工作原理的一般性介绍。

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

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

于 2008-08-23T18:14:19.297 回答
1

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

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

于 2008-09-01T13:21:44.107 回答
1

Try to find a copy of Why's (Poignant) Guide to Ruby online. The original site is offline but I'm sure there are a few mirrors out there. It's not your typical programming guide; it puts a unique (and funny) spin on learning a new language that might suit your friend. Not to mention, Ruby is a great language to learn with.

于 2009-08-26T15:22:35.967 回答
1

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

我叔叔推荐 python 是因为他当时对它很感兴趣,但我推荐它,现在知识渊博,因为它易于学习、直观(或与编程语言一样直观)和简单(但肯定不简单) .

当时我个人觉得基础编程只是为了学习编程而枯燥无味,但随着我的学习,我获得了相当大的热情。我真的很想学习是为了创造一些东西,而不仅仅是为了学习它。

于 2008-08-26T19:12:37.413 回答
1

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

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

您绝对可以为前两个提供建议,但最后一个是您的主要角色。

于 2008-08-13T06:10:25.183 回答
1

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

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

至于如何处理语言概念的顺序,我认为最简单的方法是确定一个项目并在需要时处理这些概念。这使您可以根据需要将它们应用于您有兴趣做的事情。在学习一门语言时,最好记住几个简单的项目和一些具有渐进复杂性的项目。决定这些将帮助您绘制出所需的概念及其顺序。

于 2008-08-09T02:23:54.160 回答
1

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

于 2008-08-09T08:17:05.883 回答
1

首先问他这个问题:“你想用你的电脑做什么样的事情?

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

原因是:

  1. 如果他对结果感兴趣,他可能会比你让他数斐波那契的兔子更有动力。
  2. 如果他得到了他喜欢的结果,他可能会想出你创建的活动的变化。
  3. 如果你在教他,他(还)不是在追求严肃的职业;以后总有时间切换到“工业实力”语言。
于 2008-08-28T23:59:23.527 回答
1

一开始有很多事情让我绊倒,但最简单的就是简单的机制。概念,我立刻接受了。但是错过了一个右括号?在一个不平凡的程序中容易做到,但通常很难调试。

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

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

if  :

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

if () 
{

}

在帕斯卡/德尔福:

If () Then
Begin

End

然后,在开始和结束标记之间键入。一旦这成为一个坚实的习惯,所以你不假思索地去做,更多的大脑被释放出来做有趣的事情。我承认,发布的建议不是很华而不实,但我亲眼目睹的建议有很多好处!

编辑:[贾斯汀标准]

谢谢你的贡献,翼。与你所说的相关,我试图帮助我的兄弟记住python 作用域的语法的一件事是,每次有冒号时,他都需要缩进下一行,并且任何时候他认为他应该缩进,最好有一个冒号结束上一行。

于 2008-08-16T00:46:31.483 回答
1

我建议采用类似于本书Accelerated C++的方法,其中涵盖了通常对制作简单程序有用的 C++ 部分。对于任何刚接触编程的人来说,我认为通过一些努力来展示一些东西是让他们保持兴趣的好方法。一旦你掌握了 Python 的基础知识,你就应该坐下来让他体验一下这门语言。

在我本学期的一个大学科目中,他们采用了一种称为基于问题的学习(PBL)的方法,在这种方法中,他们使用讲座来激发学生对不同问题的处理方法。既然你的兄弟很热心,你应该采取类似的方法。让他做一些小项目,让他自己解决。然后,一旦他完成了,您就可以通过他的方法并与不同的方法进行比较和对比。

如果你能给他适量的帮助来引导他朝着正确的方向前进,那么他应该没问题。为他提供一些好的网站和书籍也是一个好主意。

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

我希望我能有所帮助。:)

于 2008-08-13T09:29:29.290 回答
1

这个怎么样:由 Nat Torkington产生下一代黑客。

于 2008-08-18T15:24:16.577 回答
1

Project Euler有许多有趣的数学问题,可以为初学者提供很好的学习材料。问题开始很容易,难度增加,网络上充满了各种编程语言的示例解决方案

于 2008-08-22T20:27:05.803 回答
1

I think that once he has the basics (variables, loops, etc) down you should try to help him find something specific that he is interested in and help him learn the necessities to make it happen. I know that I am much more inclined and motivated to do something if it's of interest to me. Also, make sure to let him struggle though some of the tougher problems, nothing is more satisfying than the moment you figure it out on your own.

于 2008-08-07T22:12:54.220 回答
1

我浏览了评论,似乎没有人从www.CodeBetter.com提到编程基础。虽然它需要一些基础,但它肯定可以成为学习过程的下一步。

于 2008-09-10T00:29:18.847 回答
1

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

于 2008-09-19T11:43:53.803 回答
1

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

编程方法论

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

于 2008-09-20T22:23:18.907 回答
1

书籍:面向儿童、父母和祖父母的 Java 编程(PDF)

我没有使用这本书学习的个人经验,但它似乎很好,因为它很快就会产生一些可见的东西,并且不会花太多时间在语法上的小细节上。这里有人试过用那本书吗?

于 2009-02-14T13:47:20.020 回答
1

一旦你教他们如何编程,他们可能想学习如何开发软件。我认为 Greg Wilson 的软件木工课程很棒。它还使用 Python 作为学生的语言。

于 2009-03-18T14:51:51.170 回答
1

我可以推荐我的项目PythonTurtle

概括:

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

它看起来像这样:

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

于 2009-08-04T21:42:17.317 回答
1

Academic Earth提供指向顶尖大学的免费计算机科学课程的链接。他们有一个面向初级计算机科学的部分。初级课程中教授的语言各不相同:

  • 麻省理工学院- 计算机科学和编程导论 - Python
  • 斯坦福- 计算机科学 I:编程方法论 - Java
  • 哈佛- 计算机科学概论 I - C (主要重点),以及其他一些很好的措施(例如,SQL、PHP、LISP、汇编程序等)
  • 伯克利- LISP 语言的一种方言
于 2010-04-17T12:33:32.757 回答
0

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

下一步选择语言,这取决于老师知道什么或学生想学习的原因。

然后它只是代码,代码,代码。对书中的每个示例进行编码。然后稍微改变它来做另一个动作。学习编程是一个主动的过程,而不是被动的过程。您不能只阅读 Dietal 的 C++ How to Program ,然后期望在阅读时没有主动完成 C++ 编码。

即使您是一位经验丰富的程序员,在书中编写代码也有助于学习新知识。

于 2008-08-27T15:25:04.833 回答
0

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

因此,如果我试图教某人如何编程,我会给他们一个小程序来尝试阅读和理解它的工作原理,让他们只是玩弄源代码。

只有这样,我才会给他们“任务”以尝试完成。

现在,如果他们有特定的理由想要学习如何编程,那么从他们想要完成的事情开始肯定是一个好主意。例如,如果他们想精通搅拌机之类的应用程序,那么从Alice开始无疑是一个好主意。

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

于 2008-08-14T16:23:14.240 回答
0

我同意莱克的观点。如果我觉得无聊,我有时会玩Scratch 。这是查看代码的一种非常有趣的视觉方式。

它的工作原理是,它们给你一堆“积木”(这些看起来像乐高积木),你可以堆叠它们。通过堆叠这些块,并与画布(放置精灵、图形的地方)进行交互,您可以创建游戏、电影、幻灯片……这真的很有趣。

完成后,您可以将其直接上传到 Scratch 网站,这是一个用于 Scratch 应用程序的 youtube 式门户。不仅如此,您还可以下载网站上的任何提交,并学习或扩展其他 Scratch 应用程序。

于 2008-08-06T17:32:33.680 回答
0

我的个人经历始于小学时使用 Logo Writer(在某种程度上已经演变为 Scratch),当然我还是个小孩,电脑不像现在那么棒,但暂时它把我带到了我没有的地方以前没有……我想这就是我迷上这个行业的原因……我可以说,正是这些基于如此简单和酷炫的第一印象,才使我终生难忘。这就是教授编程基础知识的方式……一个渴望魔法的简单过程。

回到我的第一个 CS 101,我从构建 Tequila Sunrise 开始了解算法是什么(一个逐步的过程,可以随时使用正确的成分重复,这将产生相同的输出),从那里我们继续使用 Scheme 的基本数学函数(就像 EHaskins 所说的......从小处着手,然后构建),从那里到循环、布尔逻辑、结构的概念,然后构建到对象的概念和一些模拟执行...... .

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

恕我直言,学习编程基础知识和创建基础可能是您可以教给您兄弟的最好的东西,一旦达到目标,您就可以继续使用更通用的语言,例如 python,并教他们更高的概念,例如架构和设计模式(在这个过程中让它们自然,这样他就会从早期阶段开始习惯良好的做法,并将它们视为过程的一部分)......我们远未重新发明温水,但我们总是必须从生火开始。

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

于 2008-08-16T15:56:38.293 回答
0

我会推荐Think Python

于 2008-09-16T10:31:42.343 回答
0

一些其他信息可以附加到 Jason Pratt 早期关于Alice的帖子中……特别是讲故事的 Alice变体。

尽管该研究针对的是中学生,但您可能会发现凯特琳·凯莱赫 ( Caitlin Kelleher ) 撰写的白皮书很有趣。

于 2008-09-06T15:30:16.827 回答
0

我和孩子一起使用的是CEEBot。它不是 python,但它在一个有趣的机器人编程游戏中教授 C / Java 风格的编程。它针对的是 10-15 岁的孩子,但它确实非常好。

于 2008-09-06T16:42:22.583 回答
0

我实际上会争辩选择一种更简单、指令更少的语言。我和Jeff一样在家里亲自学习了 BASIC 。这样,您就不必深入研究更复杂的问题,例如面向对象编程,甚至不需要研究过程。一旦他可以处理简单的控制流,然后再转向更复杂的东西,但只有简单的功能。

也许从非常简单的程序开始,只需添加 2 个数字,然后发展到可能需要分支的东西,然后可能读取输入并响应它,然后是某种循环,然后开始将它们组合在一起。只需从小处着手,然后一路向上。在他掌握基本原理之前不要做任何大项目(否则可能太令人生畏,他可能会中途放弃)。一旦他掌握了 BASIC 或任何你选择的东西,就继续做更复杂的事情。

只是我的 0.02 美元

于 2008-08-06T05:16:25.757 回答
0

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

也许这条路线也适用于他?

于 2008-08-06T06:20:28.077 回答
0

I would recommend in first teaching the very basics that are used in almost every language, but doing so without a language. Outline all the basic concepts If-Else If-Else, Loops, Classes, Variable Types, Structures, etc. Everything that is the foundation of most languages. Then move onto really understanding Boolean, comparisons and complex AND OR statements, to get the feeling on what the outcomes are for more complex statements.

By doing it this way he will understand the concepts of programming and have a much easier time stepping into languages, from there its just learning the intricate details of the languages, its functions, and syntax.

于 2008-08-11T12:30:33.997 回答
0

My favourite "start learning to code" project is the Game Snakes or Tron because it allows you to start slow (variables to store the current "worm position", arrays to store the worm positions if the worm is longer than one "piece", loops to make the worm move, if/switch to allow the user to change the worm's direction, ...). It also allows to include more and more stuff into the project in the long run, e.g. object oriented programming (one worm is one object with the chance to have two worms at the same time) with inheritance (go from "Snakes" to "Tron" or the other way around, where the worm slightly changes behavior).

I'd suggest that you use Microsoft's XNA to start. In my experience starting to program is much more fun if you can see something on your screen, and XNA makes it really easy to get something moving on the screen. It's quite easy to do little changes and get another look, e.g. by changing colors, so he can see that his actions have an effect -> Impression of success. Success is fun, which is a great motivation to keep on learning.

于 2008-08-11T12:59:16.687 回答
0

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

于 2008-09-05T02:20:10.700 回答
0

无论您选择哪种语言和环境,如果学生出于专业原因想要学习或进行“真正的”编程(无论是什么),请让他们首先在纸上编写他们的入门程序1并带他们去运行。带着输出和/或错误结果回来,让他们在纸上解决问题。

一开始这并不比在屏幕上运行并点击运行更难,但是当他们开始发现美妙的错误世界时,它会让事情变得容易得多。

1) 简短的“Hello, World!”类型的程序仍然有一些逻辑和/或计算,对一些可能有错误的程序执行此操作

于 2008-09-21T22:27:48.920 回答
0

无论他们写什么,让他们在第一次运行时在调试器中逐行执行。让他们自己看看电脑在做什么。这消除了很多神秘感,减少了恐吓(“哦,每一行真的很简单!”),并帮助他们学习调试技能并认识到常见错误的常见原因(以及为什么它们是错误)

于 2008-09-21T22:30:01.580 回答
0

海勒的《谁害怕 C++》

可能值得一试

于 2008-10-30T04:38:26.657 回答
0

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

根据我所经历的,一旦我完成了“Hello World”并转到变量和“if/else”语句,我就被太多的语法所困扰;不知道该怎么处理他们。

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

我可以在这里问一个问题吗?

首先学习像Autohotkey这样的脚本语言会更好吗?

编辑:[贾斯汀标准]

我认为学习像 Autohotkey 这样的基于宏的东西只会有最小的帮助。首先尝试学习一门“真正的”编程语言。最容易上手(根据大多数人)是pythonruby​​ 。我喜欢python,但两者都很简单。还有一个完整的 stackoverflow 帖子回答了从哪种语言开始的问题。

于 2008-08-14T01:30:02.410 回答
0

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

  • 让他们编写大量代码,让他们不断提问以保持脑汁畅通。
  • 我想说,在他们了解它们的含义或询问之前,不要被真正详细的信息所困扰。

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

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

祝你好运!

于 2008-08-09T06:52:29.203 回答
0

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

我发现C Primer Plus,第 5 版对于几乎没有编程经验的初级程序员非常有帮助。它假定没有任何编程经验,阅读起来很有趣,并且深入涵盖了 C(包括最新的 C99 标准)。

于 2008-08-19T08:37:58.660 回答
0

我建议从 C/C++ 开始。我发现它是几乎所有其他语言的良好基础。此外,不同版本的 BASIC 充其量是相当狡猾的,并且与实际编程没有真正的相关性。

于 2008-08-07T05:35:26.933 回答
0

我认为因为你想学习编程而学习编程永远不会像因为你想做某事而学习编程一样好。如果你能找到你兄弟感兴趣的东西,因为他想让它发挥作用,你可以把他留给谷歌,他会做的。他会让你检查他是否走在正确的道路上。

我认为抽象地教授编程的最大问题之一是它没有一个让学习者可以投入情感的真实世界环境。编程很难,必须有一些真正的回报才能让它值得付出努力做它。就我而言,我在 uni 完成了计算机科学,在那里学习了 Pascal 和 COBOL,在那之前在家里学习了 BASIC,但直到 90 年代我成为一名自雇网页设计师和我的客户需要他们网站上的功能,并且愿意为功能支付大约 10 倍于设计的费用。把食物放在桌子上是一种激励!

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

于 2008-08-07T07:47:41.363 回答
0

对我来说,在 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);
}

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

于 2008-08-22T10:32:23.047 回答
0

Microsoft Small Basic是一个基于 .NET 的免费编程环境,旨在为初学者提供一个“有趣”的学习环境。该语言是 VB.NET 的一个子集,甚至包含一个与 Logo 语言相似的“Turtle”对象。该网站包含一个分步教程。

于 2008-11-18T01:40:35.640 回答
0

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

有些人就是无法克服以下问题:

A = 1

B = 2

A = B

(这些人还是会认为 A = 1)

杰夫也谈到了这一点。 事实上,我的例子是在链接中(并解释,引导)。

于 2008-09-04T20:23:36.097 回答
0

拥有可实现的小目标是学习任何技能的最佳方式之一。编程也不例外。Python 是一门很棒的语言,因为它易于学习、干净并且仍然可以做高级的事情。Python 只受限于你的想象力。

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

于 2008-09-07T20:25:02.913 回答
0

作为一名非程序员,我发现 Pragmatic Programmers 的“如何编程”一书从基本的角度来看非常有帮助。对于初学者来说,它平易近人且易于阅读。它不会将您从初学者变成专家,但它会为您在选择一种语言并拿起您的第一本“Learn to Program in (language here)”书后的准备工作做好准备。

于 2008-09-12T20:51:18.440 回答
0

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

我当了 4 年的 CS 教授。语言是 Basic,然后是 Pascal,但语言是什么并不重要。

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

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

然后我会花大约 3 周的时间为一种名为 SIMPL 的假十进制机器教授一种非常简单的机器语言,你可以单步执行。这样做的原因是让学生可以看到“橡胶与道路的交汇点”,计算机一步一步地做事情,事情发生的顺序会有所不同。否则,学生倾向于认为计算机可以有点读懂他们的想法,一次做所有的事情。

然后回到基本。几个星期的阵列,因为这是一个很大的减速带。然后是顺序文件,这是另一个减速带。我所说的“减速带”是指学生可以非常自信地航行,然后你用数组之类的概念打击他们,他们又完全迷失了,直到你让他们轻松通过它。

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

在他们做项目的同时,我们将继续介绍更高级的编程技术——搜索、排序、合并、如何制作简单的数据库等。

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

于 2008-11-18T02:06:58.130 回答
0

其他几个起始平台:

  • 一个好的可编程计算器(这是我在 70 年代学到的),然后是 HP25,然后是 HP41,现在是 TI69,等等。
  • 互动小说平台,如“通知 7”,为整个事情提供了另一个角度
  • Flash/动作脚本

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

体重秤

于 2008-09-16T06:51:29.003 回答
0

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

于 2008-10-11T23:32:32.673 回答
0

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

当我开始在 ZX Spectrum 上编程的时候(我大概 12 岁),我喜欢在屏幕上画各种东西,它仍然很有趣。我大概 18 岁时才学习真正的算法技术。不要误以为这种“简单”的编程是一个错误的开始。学习它的人的兴趣是其中最重要的部分。

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

当然,如果你哥哥年纪大一些,并且受过接近数学的教育,你可以直接上算法之类的。

于 2008-09-19T12:08:42.763 回答
0

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

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

于 2008-10-03T11:38:45.040 回答
0

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

通常我从计算器示例开始。我说假设你有一个用于每个变量的盒子,你有 10 个卡片板,上面印有数字 0 - 9。说这个盒子一次可以装一张纸板,并用类似的方式来解释编程元素的工作原理

并强调每个运算符的工作原理.. 就像简单的 '=' 运算符总是首先将右侧计算为一个值。并将该值放入名为“num_1”的框中(这是变量名)

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

于 2009-12-18T14:59:54.703 回答
0

我强烈推荐John ZellePython Programming: An Introduction to Computer Science 2nd Edition。它面向初学者,处理编程的语义。阅读后,由于 Zelle 的语义与句法方法,您将能够更快地学习其他语言。一探究竟!

于 2011-05-29T03:05:52.660 回答
0

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

他可以知道输出应该是什么,并将他指向与项目相关的材料(在线或印刷)。如果他开始接触 Python 或编程“冷”,请耐心等待他通过理解语法、错误、范围界定等基础知识来工作,并准备好让他跑到一边,当你开始看到光明时让他自己犯错误灯泡继续在他的头上。

于 2011-05-12T13:28:55.367 回答