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

时间:2008-08-06 05:01:17

标签: python language-agnostic

原始问题

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

我能做些什么来有效地教他?是否有一个逻辑顺序,我可以使用概念按概念运行?我应该避免复杂性直到以后?

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


如何提供帮助

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

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

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


教学初学者

在线资源


教学初学者的

推荐的印刷书籍

86 个答案:

答案 0 :(得分:118)

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

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

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

一些项目:

  • Hello World!
  • 取出生年份,计算出我的年龄(只是(现在 - 然后)没有月份更正)。 (简单的数学,输入,输出)
  • 询问方向(向上,向下,向左,向右),然后告诉用户他们的命运(落入洞中,找到蛋糕等)。 (布尔逻辑)
  • FizzBu​​zz,但每秒钟计算一次。 (循环,计时器和更多逻辑)
  • 根据他们的年龄,有些人非常喜欢一个应用程序,它会在某个时间间隔内随机调用用户。 (循环,数组,计时器和随机,如果你使间隔随机)

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

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

一旦或者如果项目功能正常,您可以使用它来引入重构工具。如果您可以使用一些您从未计划过的简单功能扩展项目,那将是很好的。这通常意味着重构和重要的调试,因为很少有人第一次写出一些不错的代码。

一些项目:

  • Hangman游戏
  • 尝试使用机器人(VexMindstorms是选项)

3)真实项目启动一个可能需要一些时间的实际项目。使用适当的源代码控制,并指出有一个时间表。像一个真实的项目一样运行这个项目,如果没有别的好处,那就不得不处理这些工具。

显然你需要为每个人调整一下。我发现最重要的事情就是让第一个简单的应用程序适用于该人感兴趣的内容。

一些项目:

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

答案 1 :(得分:30)

您可以尝试使用Alice。这是一个专为入门编程课程设计的3D程序。

新程序员面临的两大障碍通常是:

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

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

经验丰富的程序员可能会将Alice视为一个玩具并嘲笑拖放代码行,但research表明这种方法有效。

免责声明:我曾在Alice工作过。

答案 2 :(得分:28)

我推荐使用Logo(也就是乌龟)来获取基本概念。它提供了一个具有即时图形反馈的良好沙箱,您可以演示循环,变量,函数,条件等。This page提供了一个很好的教程。

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

在教授编程时,我必须首先提出EHaskins对简单项目和复杂项目的建议。学习的最佳方式是从明确的结果和可衡量的里程碑开始。它使课程集中,允许学生建立技能,然后以这些技能为基础,并给学生一些向朋友展示的东西。不要低估为某人的工作展示某些东西的力量。

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

XKCD描述了Python的强大功能: "You're flying! How?" "Python!"

之后你可以转移到C#或Java,虽然它们没有提供Python已经没有的东西。这些的好处是它们使用C风格的语法,许多(我敢说最多?)语言使用。您不需要担心内存管理,但您可以习惯从语言解释器中获得更多的自由和更少的操作。 Python强制执行空格和缩进,这在大多数情况下都很好,但并非总是如此。 C#和Java允许您管理自己的空白,同时保持强类型。

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

答案 3 :(得分:15)

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

  

修改[Justin Standard]

     

本课程使用这本免费在线图书:How To Think Like a Computer Scientist
  我肯定觉得它很有用。

答案 4 :(得分:12)

Python包VPython - 普通凡人的3D编程(video tutorial)。

Code example:

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 bouncing ball http://vpython.org/bounce.gif

答案 5 :(得分: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

在尝试完成最后两项任务时,他们将尝试许多失败,但失败将在视觉上有趣,他们会在他们试图弄清楚为什么没有得出他们所期望的内容时快速学习。 p>

答案 6 :(得分:11)

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

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

答案 7 :(得分:8)

我不知道是否有人在此提及此问题,但您可能想查看Zed ShawLearn Python the Hard Way

希望这有助于

答案 8 :(得分:7)

http://tryruby.hobix.com/“&gt;尝试使用Ruby(在浏览器中)

答案 9 :(得分:7)

答案 10 :(得分:5)

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

http://pine.fm/LearnToProgram/

当然,最重要的是在完成本书后立即开始实时,有用的某种程序。

答案 11 :(得分:4)

我只是让他写了很多代码。让他开车去做你们所做的一切,然后回答问题。

信不信由你,经过几个月的蹩脚代码编写后,他将开始理解并开始编写更好的程序。那时,你可能陷入细节(记忆等),并谈论一般设计原则。

我听说伟大的艺术家和平庸的艺术家之间的区别在于,每当他们练习时,无论多么小,他们都会改进。让你的兄弟练习,每次坐在键盘上他都会有所提高。

  

编辑:[贾斯汀标准]

     

Esteban,这让我想起最近的coding horror post,我认为你是对的。但我认为找到指导他的实践的方法仍然是值得的。毫无疑问,我希望他编写尽可能多的代码,因为他知道该怎么做。这就是我要求样品项目的一个原因。

答案 12 :(得分:4)

如果他感兴趣,那么好的部分不是细节吗?使用python,你已经切断了它的GUI,以免混淆。为什么不选择项目,游戏或其他东西,并实施它。经典的hi-lo数字猜测游戏可以简单地在20-30行代码中从命令行实现(当然取决于语言),并为您提供变量,条件,循环和用户输入。

答案 13 :(得分:2)

我认为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学习时获得的,它对我来说非常棒。祝你好运!

答案 14 :(得分:2)

首先,像其他人一样开始:使用Hello World程序。它很简单,它给了他们对程序布局的基本感觉。试着回想一下你第一次编程时的情况,以及一些概念的难度 - 从简单开始。

在Hello World之后,继续创建一些基本变量,算术,然后是布尔逻辑和if / else语句。如果你有一本旧的编程教科书,请查看一些早期的例子并让他仔细阅读。只是不要试图一次性引入太多,否则会让人感到压力和混乱。

答案 15 :(得分:2)

让它变得有趣!

如果你尝试Kojo

,Scala可能是最简单的

答案 16 :(得分:2)

如果你的兄弟喜欢谜题,我会推荐Python Challenge。我不会在一对一教程中将它用作正式的教学工具,但是当你不在一起挑战自己并享受一些乐趣时,他可以做些什么。

答案 17 :(得分:2)

答案 18 :(得分:2)

答案 19 :(得分:2)

有一个wikibook that is pretty good for learning python

我不知道wikibooks是如何用于其他语言的,但我个人从2007年2月的wikibook中学习了python。

ps - 如果您不熟悉wikibooks,它基本上是维基百科版本的书籍创作。这有点难以描述,但如果你查看那里的一些书,你会看到它是如何工作的

答案 20 :(得分:2)

经过一些免费的电子书,我发现最好的学习编程书是O'Reily Press出版的Head First Programming。它使用Python作为语言,并从一开始就为您提供程序。他们更有趣的是'Hello World'。 这是值得我花在它上面的钱,因为它已经出了一点,你可能能够在Ebay或亚马逊上找到更便宜的二手副本。

答案 21 :(得分:2)

如果您的兄弟可以访问iTunes,他可以下载由Richard Buckland在新南威尔士大学举办的计算机科学入门课程的视频讲座。他是一位精力充沛的讲师,涵盖了计算和C语言的基础知识。如果不出意外,请告诉你的兄弟在背景中播放视频,并且一些概念可能会通过渗透作用沉入其中。 :)

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

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

主页 - &gt; iTunes U - &gt;工程 - &gt; COMP1917高等计算 - 2008年第1节

答案 22 :(得分:2)

在教你的兄弟编程时你应该非常注意的一点是他不要过分依赖你。通常当我发现自己在帮助他人时,他们会开始把我当作他们所有问题的答案书,而不是试图找到答案,他们只是问我。通常最好的老师是实验,每次你的兄弟都有一个问题,如果“如果我在字符串中加2,会发生什么?”你应该告诉他试一试,亲眼看看。另外我注意到,当我无法将某个概念传达给某人时,有助于查看一些示例代码,我们可以单独查看每个段并逐个解释。作为旁注,编程新手常常遇到面向对象编程思想的问题,他们会说当他们教给他们时他们理解它,但在实际实现它之前不会得到明确的概念。

答案 23 :(得分:2)

这真的取决于你兄弟的学习方式。很多人通过弄脏手来学得更快。进入它,在他们进步和建立他们的知识时,明确概念和大局。

我,我更喜欢从全局开始,深入研究细节。我想知道的第一件事是它是如何将所有面向对象的gobbledygook,然后是关于类和&amp;实例等等。在学习语法之前,我想知道基本概念和一些理论。我有一点优势,因为我在20年前在BASIC写了一些游戏,但后来没有多少。

在实际编写代码之前,通过从总体任务声明开始,然后是计划和/或流程图,然后详细说明一些伪代码(倾向于最终使用的语法),可能会影响生产过程。

这里的黄金法则是要求你学生的学习风格。

答案 24 :(得分:2)

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

如果您决定使用C a friend has a site,那些具有某种程序的程序,那些旧代的程序会记住作为基本类型输入。他们中较为复杂的人使用的是ncurses,它们在某种程度上否定了他们作为教学辅助工具的用处,但其中一些是微不足道的小东西,你可以在没有被教导的情况下学习负荷。

我个人认为Python和Ruby会成为第一语言。

编辑: list of beginner programming assignments一夜之间出现可能正是您所寻找的。

答案 25 :(得分:1)

我可以推荐我的项目PythonTurtle

要点:

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

看起来像这样:

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

答案 26 :(得分:1)

Project Euler有许多有趣的数学问题,可以为初学程序员提供很好的材料。这些问题很容易开始,难度也增加,网络为full of sample solutions in various programming languages

答案 27 :(得分:1)

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

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

当我第一次学习编程的时候,我当然希望它能存在!

答案 28 :(得分:1)

我认为,一旦他掌握了基础知识(变量,循环等),你应该尝试帮助他找到他感兴趣的具体内容,并帮助他学习实现这一目标的必要性。我知道如果我感兴趣的话,我会更倾向于并且有动力做某事。此外,确保让他在遇到一些更棘手的问题时感到挣扎,没有什么比你自己解决这个问题更令人满意了。

答案 29 :(得分:1)

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

我的叔叔推荐python,因为他当时对它很感兴趣,但我推荐它,现在相当知识渊博,因为它易于学习,直观(或者像编程语言一样直观),并且简单(但肯定)不简单)。

我个人发现基本的编程只是为了学习当时令人讨厌的编程,但随着时间的推移,我获得了相当大的热情。我真的很想学习东西,而不仅仅是为了学习它。

答案 30 :(得分:1)

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

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

原因是:

  1. 如果他对结果感兴趣,他可能会比你让他算上Fibonacci的兔子更有动力。
  2. 如果他得到他喜欢的结果,他可能会想到你创造的活动的变化。
  3. 如果你在教他,那他就不是在追求一个严肃的职业生涯了。总是有时间改用“工业强度”语言。

答案 31 :(得分:1)

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

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

答案 32 :(得分:1)

尝试在线查找Why's (Poignant) Guide to Ruby的副本。原始网站处于脱机状态,但我确信那里有几个镜像。这不是典型的编程指南;它为学习一种可能适合你朋友的新语言带来了独特(和有趣)的旋转。更不用说,Ruby是一门很好的学习语言。

答案 33 :(得分:1)

已经有很多很棒的答案,但对于绝对的初学者,我会全心全意地推荐Hackety Hack。它是由不合理的多产why_the_lucky_stiff创建的,专门为新程序员提供实验所需的BASIC / LOGO / Pascal环境。它本质上是一个灵活的Ruby IDE,带有一些很棒的库(flash视频,IM,web服务器)和互动课程。它为编程做了很好的准备,因为它选择了有趣,有用的课程。 “Hello,world”可能不会立刻给人留下深刻的印象,但是在20分钟内创建一个自定义IM客户端可以激发某人继续学习。玩得开心!

答案 34 :(得分:1)

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

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

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

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

答案 35 :(得分:1)

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

答案 36 :(得分:1)

如果他感兴趣,我不会担心专注于游戏或诸如此类的东西。我只是抓住那些初学者“教你自己x”的书,你要扔掉并给予他,并让他挣扎。也许在之后谈论它然后做另一个和另一个。在那之后,我会与他结对,这样他就可以了解他所阅读的书籍有多浅薄和蹩脚。然后我开始让他为自己编写代码。一个跟踪垒球统计数据的网站或任何与他有关的网站。对我来说,这是当天的葡萄酒数据库。

之后我会从真正的书籍,域名设计等开始。

答案 37 :(得分:1)

书:Java Programming for Kids, Parents and Grandparents(PDF)

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

答案 38 :(得分:1)

我浏览了评论,看起来没人在Foundations of Programming提及www.CodeBetter.com。虽然它需要一些基础,但它肯定是学习过程的下一步。

答案 39 :(得分:1)

一旦掌握了基础知识,我建议将Tower of Hanoi作为一项很好的练习。 如果你有木制玩具,我建议先从木制玩具开始;让他试着自己解决问题,并系统地描述他的方法。告诉他递归发挥作用的地方。解释他的移动次数取决于磁盘的数量。 然后让他编写一个程序,以您选择的语言打印移动序列。

答案 40 :(得分:1)

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

Programming Methodology

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

答案 41 :(得分:1)

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

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

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

答案 42 :(得分:1)

逐行复制一些简单的代码,让它们随着时间的推移阅读和解释。他们很快就会解决这个问题。我开始使用Acorn杂志的代码片段在Acorn Electron上编程。我6岁的时候不知道编程,我曾经复制过文本,但逐渐地我学会了不同的词语。

答案 43 :(得分:1)

罗伯特·雷德写了一篇有用的指南How to be a Programmer,其中涵盖了初学者会发现有用的广泛的编程问题。

答案 44 :(得分:1)

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

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

你绝对可以帮助提出前两个建议,但最后一个是你的主要角色。

答案 45 :(得分:1)

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

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

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

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

我希望我得到了一些帮助。 :)

答案 46 :(得分:1)

很多事情在开始时绊倒了我,但仅仅是简单的机制。概念,我立刻采取了。但是错过了一个闭合支撑?在一个非平凡的程序中很容易做到,而且通常很难调试。

所以,我谦虚的建议是:不要低估基础知识(比如打字好)。这听起来很有道理,甚至是愚蠢的,但是在我学习过程的早期,当我偶然发现了输入代码结构的完整“骨架”然后填写它的简单技术时,它给我带来了太多的悲伤。

对于Python中的“if”语句,请从:

开始
if  :

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

if () 
{

}

在Pascal / Delphi中:

If () Then
Begin

End

然后,在开始和结束令牌之间键入。一旦这成为一个坚实的习惯,所以你不假思索地做到这一点,更多的大脑被释放来做有趣的事情。我承认,并不是一篇非常华而不实的建议,但我亲眼看到的建议做得很好!

  

修改:[Justin Standard]

     

感谢您的贡献,Wing。与你所说的相关,我试图帮助我的兄弟记住python范围的语法之一,就是每当有一个冒号时,他需要缩进下一行,并且任何时候他认为他应该缩进,最好是结束前一行的冒号。

答案 47 :(得分:1)

这是怎么回事:Nat Torkington的Spawning the next generation of hackers

答案 48 :(得分:1)

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

  • 麻省理工学院 - 计算机科学与编程简介 - Python
  • 斯坦福大学 - 计算机科学I:编程方法论 - Java
  • 哈佛 - 计算机科学概论I - C(主要焦点), 与其他几个人一起洒 好的措施(例如,SQL,PHP,LISP, 汇编等。)
  • 伯克利 - LISP语言的方言

答案 49 :(得分:1)

有一本名为 Code 的书。我不记得是谁编写的,但是它经历了我们(程序员)知道的许多东西的基础知识,并认为我们交谈的人也知道。从如何计算二进制到处理器如何工作的一切。它没有任何涉及编程语言的东西(从我记得的东西),但它是一个非常好的入门。我承认我也是学校的一员,他们相信你必须知道计算机是如何运作才能有效地为它编程的。

答案 50 :(得分:1)

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

答案 51 :(得分:1)

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

答案 52 :(得分:1)

新开发人员可以轻松学习Python。您不必纠结于内存管理和类型定义的细节。 Dive Into Python是python编程的初学者指南。当我的妹妹想要学习编程时,我将她指向了“Head Start”系列书籍,她发现这些书很容易阅读和理解。我发现很难开始教别人,因为你没有与它们一起使用的词典。首先请他阅读一些书籍或教程,并向您提问。从那里,您可以分配项目并对其进行评分。我发现很难教授编程,因为我在近15年的修补过程中学到了它。

答案 53 :(得分:0)

我实际上会争辩用较少的指令选择一种更简单的语言。我个人在家里的BASIC上学习did Jeff。这样,您就不必深入研究更复杂的问题,如面向对象编程,甚至是您不想要的过程。一旦他能够处理简单的控制流程,那么就转向更复杂的东西,但只有简单的功能。

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

只需我0.02美元

答案 54 :(得分:0)

使用真实世界的类比和虚构字符来教他们编程。就像我教人们关于变量和控制语句等。

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

强调每个操作符的工作方式......就像简单的'='操作符一样,总是首先将右侧计算为一个值。并将该值放入名为“num_1”(可变名称)的框中

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

答案 55 :(得分:0)

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

也许这条路线也适合他?

答案 56 :(得分:0)

我同意Leac的观点。如果我感到无聊,我实际上有时会玩Scratch。这是一种非常有趣的视觉查看方式。

它是如何工作的,它们会给你一堆“块”(这些看起来像是legos),你可以堆叠它们。通过堆叠这些块,并与画布(您放置精灵,图形)进行交互,您可以创建游戏,电影,幻灯片...这真的很有趣。

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

答案 57 :(得分:0)

问你的兄弟他是否有什么想做一个程序的事情,或者为他创造一个你认为会让他感兴趣的项目。

他可以知道输出应该是什么的东西,并指出他与项目相关的材料(在线或印刷)。如果他进入python或编程'冷'是有耐心的,因为他通过理解语法,错误,范围等基础知识,并准备退出并让他跑,并在你开始看到光时犯下自己的错误灯泡在他头上继续。

答案 58 :(得分:0)

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

我是C.S.教授4年了。这些语言是Basic,然后是Pascal,但语言是什么并不重要。

作为一名新教授,我学到的最大教训是,无论我认为概念多么简单,对新手来说都不简单。永远不要超过你的学生可以去的速度。我不能强调这一点。真的,真的很慢。

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

然后我会花大约3个星期的时间教一种非常简单的机器语言,用于称为SIMPL的虚假十进制机器,你可以单步执行。这样做的原因是学生可以看到“橡胶遇到路”的地方,计算机一步一步地做事情,并且它会改变事情发生的顺序。没有它,学生倾向于认为计算机可以有点读他们的想法并一次做所有事情。

然后回到Basic。阵列上几周,因为这是一个很大的减速带。顺序文件,这是另一个减速带。我所说的“减速带”是指学生可以在航行中感觉非常自信,然后你用阵列这样的概念击中它们,它们再次完全迷失,直到你通过它来缓解它们。

然后,凭借这些技能,我会让他们选择一个学期项目,因为这是让编程变得有趣的原因。没有用它,它真的很无聊。我会建议各种各样的项目,比如游戏,会计程序,科学计划等等。看到它们开启真的很棒。通常他们会向我求助,这很好,因为你知道他们正在学习。

在他们开展项目的同时,我们将继续介绍更高级的编程技术 - 搜索,排序,合并,如何创建简单的数据库等。

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

答案 59 :(得分:0)

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

答案 60 :(得分:0)

“谁害怕C ++” 通过海勒

可能值得一试

答案 61 :(得分:0)

我建议将“Computer Science Unplugged”作为补充教学材料。

答案 62 :(得分:0)

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

答案 63 :(得分:0)

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

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

答案 64 :(得分:0)

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

答案 65 :(得分:0)

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

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

答案 66 :(得分:0)

我最喜欢的“开始学习编码”项目是Game Snakes Tron 因为它允许你开始慢(变量来存储当前的“蠕虫位置”,如果蠕虫长于一个“块”,则存储蠕虫位置的数组,循环以使蠕虫移动,如果/切换以允许用户改变蠕虫的方向,......)。从长远来看,它还允许在项目中包含越来越多的东西,例如:面向对象编程(一个蠕虫是一个有可能同时拥有两个蠕虫的对象)具有继承(从“Snakes”到“Tron”或反过来,蠕虫稍微改变了行为)。

我建议您使用Microsoft's XNA开始。根据我的经验,如果您可以在屏幕上看到某些内容,那么开始编程会更有趣,而XNA可以让您轻松地在屏幕上移动内容。很容易做一点改变并再看看,例如通过改变颜色,他可以看出他的行为有效 - &gt;印象深刻的成功。成功很有趣,这是继续学习的一个很好的动力。

答案 67 :(得分:0)

这个帖子对我来说对初学者(&gt; 100行代码)程序员非常有用。

基于我所经历的,一旦我完成了“Hello World”并转向变量和“if / else”语句,我的语法太多了;不知道该怎么做。

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

我可以在这里提问吗?

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

  

编辑:[贾斯汀标准]

     

我认为学习像Autohotkey这样基于宏的东西只能帮助最低限度。首先尝试学习“真正的”编程语言。最简单的开始(根据大多数人)是pythonruby。我喜欢python,但两者都很简单。   还有一个full stackoverflow post可以回答开始使用哪种语言的问题。

答案 68 :(得分:0)

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

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

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

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

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

答案 69 :(得分:0)

我的个人经历从使用Logo Writer(在某种程度上已经演变为Scratch)开始了,我认为我是一个小孩和计算机,它们不像现在这样令人敬畏,但暂时它让我占据了一席之地我以前没有去过......我认为这就是我对业务的迷恋......我可以说,正是基于这种简单和冷静的第一印象使得这些商品终生难忘。这就是如何教授编程教学的基础知识......这是一个渴望魔术的简单过程。

回到我的第一个CS 101,我从构建龙舌兰日出(一步一步的过程,可以随时使用正确的成分重复,将导致相同的输出)开始了解算法的概念。从那里我们转向使用Scheme的基本数学函数(就像EHaskins说的那样......从小开始然后构建),从那里到循环,布尔逻辑,结构的概念,然后构建成对象的概念和一些模拟处决...

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

恕我直言学习编程和创建基础的基础知识可能是你可以教给你的兄弟最好的东西,一旦目标被覆盖,那么你可以继续使用像python这样更通用的语言,并教他们更高的概念,如架构和设计模式(在过程中使它们变得自然,因此他将从早期阶段开始使用良好实践,并将其视为过程的一部分)......我们远不是重塑温水,但我们始终必须从创造开始火。

从那里起天空是极限!

答案 70 :(得分:0)

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

我发现C Primer Plus, 5th Edition作为初学程序员非常有用,几乎没有编程经验。它假设没有先前的编程经验,阅读的乐趣和深度涵盖C(包括最新的C99标准)。

答案 71 :(得分:0)

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

  • 让他们写出大量代码,让他们提出问题以保持脑力流畅。
  • 我想说不要陷入真正的详细信息,直到他们遇到他们的影响,或者他们问。

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

所以我想说,在大多数情况下,让他们指导方向,只是在需要的地方支持他们,并提出更多问题以保持兴趣。只要确保他们的基础知识有所下降,就不要让他们跑步才能行走。

祝你好运!

答案 72 :(得分: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);
}

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

答案 73 :(得分:0)

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

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

然后它只是代码,代码,代码。从书中编写每个例子。然后稍微改变它以做另一个动作。学习编程是一个积极的过程,而不是被动的过程。你不能只阅读C ++如何通过Dietal编程,然后期望在阅读时没有积极地完成它而编写C ++代码。

即使你是一位经验丰富的编码员,也可以在书中编写代码来学习新的东西。

答案 74 :(得分:0)

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

有些人无法接受以下事情:

A = 1

B = 2

A = B

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

Jeff has talked about this too.实际上,我的例子是在链接中(并解释为引导)。

答案 75 :(得分:0)

无论他们写什么,让他们在第一次运行时逐行调试。让他们亲眼看看计算机正在做什么。这需要很多神秘的东西,减少恐吓(“哦,每一行真的很简单!”),并帮助他们学习调试技巧,并认识到常见错误的常见原因(以及为什么他们出错)

答案 76 :(得分:0)

有些人可以附加给Jason Pratt先前关于Alice的帖子的其他信息...具体来说,是Storytelling Alice变种。

尽管该研究针对的是中学女生,但您可能会发现white paper写的Caitlin Kelleher很有趣。

答案 77 :(得分:0)

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

答案 78 :(得分:0)

拥有小的,可获得的目标是学习任何技能的最佳方式之一。编程也不例外。 Python是一个很好的语言,因为它易于学习,清理并且仍然可以做高级的事情。 Python只受你想象力的限制。

真正让某人感兴趣的一种方法是给他们一小时左右的小项目。当我最初开始学习python时,我正在玩Code Golf。他们有许多小挑战,有助于教授编程的基础知识。我建议只是尝试解决一天的挑战之一,然后玩弄所学的概念。你必须学习编程乐趣,否则兴趣会很快消失。

答案 79 :(得分:0)

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

我认为抽象编程教学的一个最大问题是学习者没有真实世界的背景,学习者可以在情感上投入。编程很难,必须有一些真正的回报来实现它。值得努力。在我的情况下,我在大学做过计算机科学,在那里学过Pascal和COBOL,之前在家里学过BASIC,但是在我90年代成为一名自雇网页设计师之后我才真正得到任何东西。客户需要在他们的网站上使用功能,并且愿意为功能而不是设计支付大约10倍的费用。把食物放在桌子上是一个充满激情的地狱!

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

答案 80 :(得分:0)

我建议用C / C ++启动它们。我发现这是几乎所有其他语言的良好基础。此外,不同版本的BASIC最多也可能非常狡猾,并且与实际编程没有真正的相关性。

答案 81 :(得分:0)

作为一名非程序员,我从语用程序员那里找到了“如何编程”这本书,从初步的角度来看非常有用。对于初学者来说,它易于阅读且易于阅读。它不会让你从初学者到专家,但是一旦你选择一门语言并拿起你的第一本“学习编程(这里的语言)”一书,它将为你做好准备。

答案 82 :(得分:0)

其他几个起始平台:

  • 一个好的可编程计算器(这是我在70年代学到的),HP25,然后是HP41,现在是TI69等。
  • 互动小说平台,如“Inform 7”,为整个事物提供了另一个角度
  • 闪光/ ActionScript中

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

LBB

答案 83 :(得分:0)

我建议Think Python

答案 84 :(得分:0)

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

当我开始使用ZX Spectrum进行编程时(我就像12岁),我喜欢在屏幕上绘制各种内容,但它仍然很有趣。在我18岁之前,我没有学习真正的算法技术。不要误导这种“简单”的编程是错误的开始;学习它的人的兴趣是其中最重要的部分。

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

当然,如果你的兄弟年纪大了,接受过数学教育,你可以直接学习算法等。

答案 85 :(得分:0)

无论您选择何种语言和环境,如果学生想要出于职业原因学习或进行“真正的”编程(无论是什么),请先让他们在纸上写下他们的入门课程 1 并带走他们跑。返回输出和/或错误结果,让它们在纸上修复。

一开始并不是特别难以在屏幕上进行操作,但是当它们开始发现奇妙的错误世界时,它会让事情变得更加容易。

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