首页 文章

教初学者编程的最佳方法是什么? [关闭]

提问于
浏览
324

Original Question

我目前正在教我的兄弟去编程 . 他是一个初学者,但非常聪明 . (而他实际上想学习) . 我感觉自己很有条理 . (但这篇文章的答案帮了很多 . )

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

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


How to Help

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

  • 初学者练习和项目创意

  • 教学初学者的资源

  • 截屏视频/博文/免费电子书

  • 打印适合初学者的书籍

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


Online Resources 适合初学者教学:


Recommended Print Books 适合初学者教学

30 回答

  • 2

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

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

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

    一些项目:

    • Hello World!

    • 拿我出生的年份,计算我的年龄(只是(现在 - 然后)没有月份更正) . (简单的数学,输入,输出)

    • 要求方向(向上,向下,向左,向右),然后告诉用户他们的命运(落入洞中,找到蛋糕等) . (布尔逻辑)

    • FizzBuzz,但每秒计算一次 . (循环,定时器和更多逻辑)

    • 根据他们的年龄,有些人非常喜欢一个应用程序,它会在某个时间间隔内随机调用用户 . (循环,数组,定时器和随机,如果你使间隔随机)

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

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

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

    一些项目:

    3) Real Project 开始一个可能需要一些时间的实际项目 . 使用适当的源代码控制,并指出有一个时间表 . 像一个真实的项目一样运行这个项目,如果没有别的,那么它必须处理这些工具 .

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

    一些项目:

    • 俄罗斯方块

    • 基于文本文件的博客引擎

    • 更先进的机器人工作

  • 28

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

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

    • 语法错误

    • 动机(写出有意义且有趣的东西而不是做作)

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

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

    免责声明:我在Alice工作 .

  • 2

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

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

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

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

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

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

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

  • 11

    一个好的python课程是麻省理工学院的A Gentle Introduction to Programming Using Python . 它必须是麻省理工学院的学生才能理解它 .

    编辑[贾斯汀标准]本课程使用这本免费的在线书籍:如何像计算机科学家一样思考我肯定发现它非常有用 .

  • 2

    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

  • 2

    Begin with Turtle graphics in Python.

    我会使用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
    

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

  • 2

    关键是有问题的人需要解决他们想解决的问题 . 如果你没有学会编程,因为你没有什么可以激励你的 . 我的意思是,你可以阅读一本书并对语言的语法和语义有一个粗略的理解,但是在你有一个你想写的程序之前,你永远不会掌握荨麻 .

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

  • 4

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

    希望这可以帮助

  • 2

    http://tryruby.hobix.com/“>试试Ruby(在浏览器中)

  • 30

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

    http://pine.fm/LearnToProgram/

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

  • 15

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

  • 118

    我只是让他写出大量的代码 . 让他驾驶你们所做的一切,并且可以回答问题 .

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

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

    编辑:[贾斯汀标准]埃斯特班,这让我想起最近的编码恐怖帖子,我认为你是对的 . 但我认为找到指导他练习的方法仍然是值得的 . 毫无疑问,我希望他编写尽可能多的代码,因为他知道该怎么做 . 这就是我要求样品项目的一个原因 .

  • 2

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

    在Hello World之后,继续创建一些基本变量,算术,然后是布尔逻辑和if / else语句 . 如果您有一本旧的编程教科书,请查看一些早期的示例并让他对其进行操作 . 只是不要试图一次性引入太多,否则它将是压倒性的和令人困惑的 .

  • 1

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

  • 2

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

    如果您决定使用C a friend has a site,那些具有某种程序的程序,那些旧代使用的程序会记住作为基本类型输入 . 更复杂的使用ncurses,这有点否定了它们作为教学辅助的用处,但其中一些是微小的东西,你可以学习负载而不需要教 .

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

    编辑:list of beginner programming assignments一夜之间出现可能就是你想要的 .

  • 7

    这真的取决于你兄弟的学习风格 . 许多人通过亲自动手并进入其中来更快地学习,在他们进步和 Build 知识时明确概念和大局 .

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

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

    这里的黄金法则是要求你学生的倾向风格 .

  • 8

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

    COMP1917 Higher Computing - 2008 Session 1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444

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

    首页 - > iTunes U - >工程 - > COMP1917高等计算 - 2008年第1期

  • 2

    有一个wikibook that is pretty good for learning python .

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

    ps - 如果你不熟悉的话wikibooks,它有点难以描述,但如果你查看那里的一些书,你会看到它是如何工作的

  • 7

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

  • 2

    只是让它变得有趣!

    如果你尝试Kojo,Scala可能是最简单的

  • 2

    如果你的兄弟喜欢拼图,我会推荐Python Challenge . 当你不在一起挑战自己并享受一些乐趣时,我不会做他能做的事情 .

  • 12
  • 1

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

  • 12

    如果您想教授编程的基础知识,而不是特定于语言,那么在MIT中创建了一个名为Scratch的应用程序 . 它's designed to help people develop programming skills. As users create Scratch projects, they learn to create conditions, loops, etc. There is a also a community of scratch projects, form which projects can be downloaded - that way you can explore other people'的程序,看看它们是如何构建的 .

  • 4

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

  • 1

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

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

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

  • 1

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

  • 1

    Robert Read写了一篇有用的指南,How to be a Programmer,它涵盖了初学者会发现有用的广泛的编程问题 .

相关问题