下周,我被自愿坐下来与15岁的工作经验的学生讨论开发人员的生活和工作。
抓住的是
- 我只有半个小时了,
- 我将只是与她交谈的人之一-其他在业务中扮演不同角色的人也将整天与她一起工作。
我应该涵盖什么?我希望在半小时内教给她什么?
我认为她可能没有开发或编程经验。
下周,我被自愿坐下来与15岁的工作经验的学生讨论开发人员的生活和工作。
抓住的是
我应该涵盖什么?我希望在半小时内教给她什么?
我认为她可能没有开发或编程经验。
Answers:
我经常和高中生互动,所以我经常回答这个问题。请记住,与50岁的孩子相比,15岁的孩子比50岁的孩子更容易解释编程-因此,您无需笨拙或使用牵强的类比。
我通常从示例程序开始:
在那之后,我通常会继续解释说,我们使用计算机可以识别的正式语言来编写程序,经常使用诸如记事本之类的简单程序来键入程序。这些语言看起来像是数学和英语之间的十字架,描述概念并提供公式和说明供计算机遵循。
然后他们通常会问我是否一直在使用计算机,这就是为什么我一直在使用Facebook,以及为什么我的眼睛还没有变坏。男人问我是否知道如何“骇客”,女孩问这是否是一笔好钱,或者计算机科学课上有多少女孩。
之后,如果他们仍然感兴趣,他们通常会开始问一些更容易回答(或至少对Wiki来说)的特定问题:诸如您将如何制作游戏,Windows Messenger如何工作等之类的问题。
如果周围有计算机,则可以显示并讲述一些代码-会产生明显影响的代码,例如Firefox中的设置对话框中的按钮单击处理程序,游戏引擎中的主循环或物理代码,来自网站等的JavaScript来源。
我向我五岁的孩子解释了以下内容:
我:“您知道人们在故事中如何讲神奇的话并改变世界吗?”
她:“是吗?”
我:“这就是计算机编程。”
她(安静地):“哇。”
15至30分钟还不足以解释任何真实的东西,而解释其潜在的复杂性则是确保它们尖叫的肯定方法。您每天都在工作,却忘了它是多么酷。世界上没有其他职业可以凭空创造出功能性的东西……在某些时候,其他所有人都必须进入肉类世界,并开始用锤子殴打事物。这是他们将自己的想法付诸实践的唯一途径。
不是我们。
15岁的人可以理解任何概念。我本人从14岁开始编程(很多年前在学校)
30分钟就足够演示了。用与浏览器一样广泛的内容向她展示编程的魔力。
作为一个将近15岁的年轻人,我可以自信地告诉您,您应该有一个出色的起点。
说明您的制作方法。
10101010
一天都不输入。告诉他们你甚至都不知道该怎么做。(撒谎。您确实知道这10101010
是什么意思,对吧?;))告诉他们那是几年前的事。向他们展示一些伪代码的样本。使其易于理解:
Display Window
Display "I like cheese!"
Display OK button
If user clicks OK button, close Window
逐步进行该操作。告诉他们这不是代码的样子。代码看起来像English + Math
。但是学习您所说的“语言”(阅读:语法)并不难。
这次向他们展示更多“数学”的例子。
User inputs A
User inputs B
C = A + B
Display C
说明该代码将两个数字相加,就像计算器一样。向他们显示“真实”代码。(确保将大部分UI和其他内容放在单独的文件中,并使显示的文件简短而简单。)将它们更改为减法程序(通过将符号从更改+
为-
)就在他们眼前。
说明他们进行编程需要了解的知识。(在各个级别。)
x + 1 = 2
,then x = 1
。我们比您想象的要了解得多。
是的,我们仍然需要一些说明。
10101010
。我们中有些人知道这些东西,但是无论如何请不要说出来。
如果您开始谈论诸如流程,模式,需求之类的事情,那么她将立即关闭。今天的孩子具有图形和视觉动机,因此我会带一些东西来促进这些类型的刺激。在网络上向她展示一些时髦的内容,然后高水平地向她描述是什么使那件事发生了。我什至建议您拿起开发笔记本电脑,在屏幕上进行一些“酷”的操作-更改她前面的代码,然后在屏幕上观看它的更改。在那个时代,他们非常聪明,任何视觉效果都会激发人们的兴趣。
举例说明您使用的软件。您有一个公开使用您的软件的客户吗?您是否开发了可以向她展示的内部应用程序?向她展示您工作的最终结果,以及最终用户看到和使用的内容。
然后,说明您帮助编写了它。遍历您编写的部分。如果可以,显示一些代码。概述这些代码行如何使应用程序的某些部分起作用。
谈论看到人们使用您的代码会给您带来多大的乐趣。
无论如何,这就是我向我的14岁堂兄解释的方式。他印象深刻,决定下学期参加编程班。
您是否熟悉棋盘游戏Robo Rally?
我发现这是编程的完美乐趣类比。基本上,您是在使用简单的命令(主要是箭头)对机器人进行编程,以使其到达游戏板上的某个位置,然后再到达其他位置。
老兄,我希望我还有BigTrak ...
显示一些简单但有用的东西。我认为一个很好的例子如下:
我喜欢这种方法的原因是:
您也许可以想到更好的示例,但是我认为该样式对于“首次介绍”很有帮助。
首先,您需要进行揭穿比赛。
电影,流行文化甚至是该领域的人们(以及这个问题)都试图将编程(以及整个计算机科学领域)描绘成某种魔术。这不是魔术。
编程只是描述任务,然后将这些任务组合起来以解决问题。如果要查找并行项,请使用数学。计算机就像数学老师一样,要求您展示自己的全部工作。
从物理角度来看,计算机不是智能的,它们只了解我们所知道的信息。因此,当计算机程序员想要创建一个程序(例如播放CD上的音乐)时,他们“简单地”需要告诉计算机如何读取CD上存储的数据,然后如何将这些数据转换为声波,最后,如何从扬声器输出那些声波。
将这一思想带入新的高度,您可以继续进行编程如何在彼此之上构建任务。就像他/她必须学习算术才能在数学上学习代数一样,在告诉他们如何执行更复杂的任务之前,还需要告诉计算机如何“做基础”。多年以来,计算机科学家和程序员已经能够“教”计算机足够的基础知识,以至于我们可以开始与计算机“对话”,更接近我们彼此之间的对话方式。
回到现实生活中,您的数学老师可能会告诉您解决“ 15乘以3的幂”的问题,但是您只知道该怎么做,因为以前您被告知“ X乘以Y的幂”分解为“乘X的X,并做到这一点Ÿ时报” [技术上Ÿ -1倍,但诶。]
就像你的数学课,程序员已经建立的“已知”任务的基础,所以我们并不需要把重点放在这个小东西的详细资料,并把我们的时间来解决实际的问题,与其说是如何执行的基本任务-我们现在可以假设计算机了解如何执行基本操作。
我会做那些让我在9岁左右就着迷的事情。将C64拿出阁楼,然后做:
10 PRINT "YOU SMELL"
20 GOTO 10
(感谢爸爸)。
然后,当它的乐趣结束时。我给她看这个猜数字游戏。是的,全部使用BASIC。迫切需要现代语言来显示计算机接受指令。
从高层次开始。也许可以解释说计算机编程是关于解决问题的:提出问题并设计解决方案,将其写成一堆机器可以使用和理解的指令。
困难的部分可能是想出一个例子,即一个15岁的女孩会觉得有趣和相关。从来没有遇到过这种情况并且不认识她,所以我不确定该向您推荐什么...避免使用代码示例,直到接近尾声为止,除非是非常简单或有趣的情况,例如“ Hello world”程序或简单而图形化的东西(在窗口中绘制一些形状,跟踪鼠标等)。
在几次失败和几次不错的尝试之后,这是我的看法:
编程是解决问题的方法。
首先从他们每天都会使用的编程的具体东西开始-Internet浏览器(facebook),手机,收银机等。让他们给您很多示例。确定所有这些东西中都装有一台计算机。计算机的心脏是处理器。
处理器就像一个非常快速但非常笨拙的工人。如果您给它一些说明,它将按照您说的做。它不会做任何额外的事情,也不会告诉您您执行的操作是否有误。不过,此处理器可以完成所有操作-如果您确切地告诉它如何执行操作,它可以拨打电话或将图片放入电子邮件中。
问她如何告诉一个非常快但很笨的工人从一台苏打水机买一罐苏打水。当她开始描述步骤时(“将钱放入机器中并按下按钮。”)开始像程序一样解剖它(“什么是钱?我如何将其放入机器中?当我将钱放入机器中并按时同时按下按钮,什么也没有发生。”)。如果您有白板,请从左侧开始阅读她的第一组说明。当她修改它们时,将新的较大列表放在右侧。当您有一套很好的说明时,请开始进行概括(“从口袋中取出钱,从托盘中取出苏打水,听起来类似-哪些部分相同/不同?”)进行概括并将其放在中间并划掉它们现在包含的部分。最终尝试将各个部分绑起来,使其与她的原始指令(例如函数调用)相匹配。其他好的练习:邮寄一封信,穿过一扇门,画一个圆圈/正方形/三角形。
因此,编程就是解决问题的方法:将问题分解成多个部分,识别出常见的部分,然后将这些部分重新组合起来以解决问题。很快,您发现某些零件在许多问题中是通用的,然后开始将零件放在一起以解决您甚至不知道的问题。
好的,到此为止她可能已经明白了,但她可能很无聊。接下来是一组很酷的编程示例。着色器和相关的可视代码易于演示-您可以放置图片,并通过很小的代码更改就可以对其进行更改。如果她对Facebook表示感兴趣,请炫耀通过REST与Facebook交谈以查看朋友的朋友(她的6度)数据。如果她喜欢视频游戏,请展示几个开源游戏演示以及一些代码片段,以及它们如何帮助游戏运行。通过展示一些她可以在家进行调查的免费工具和资源来完成此工作。(Python,C#等)
我的失败尝试:尝试解释pi计算(他们在问),C-Jump棋盘游戏http://c-jump.com/(他们没有理解并且指令有错误),并实时编码2d游戏(无论我在演示之间走了多么小的步伐,都无法引起兴趣)。
祝好运!
编写一个简单的程序。不,不是“ Hello World!”
我要说的是,有很多类型的编程语言-制作游戏的语言,控制机器人的语言-但是您要使用的是HTML。
创建一个没有任何内容的网页,然后添加一个表单,该表单将向其电子邮件地址发送电子邮件。大概她有一部能够通知所有者他们有新电子邮件的手机,因此您可以告诉她,这是她的朋友和家人与她联系的一种好方法。如果她将来拥有自己的网站,则可以告诉她可以将表格放在她的网站上,从而允许她的客户和业务伙伴与她联系。
另外,如果她有点调皮,我会告诉你是什么让我对编程感兴趣:黑客。当时,我制定了有史以来最出色的程序,可以在AOL上玩耍(14到15岁的时候,这是我做过的几十件事中唯一一项比我的表现要好)。在白帽子方面,我还制作了第一个垃圾邮件清除程序(1995年)。我能够使我的在线体验变得更加愉快,我们将继续保留它。我想在计算机上做的所有事情都是我必须弄清楚的冒险或难题,而我想在计算机上做的事情无穷无尽。当然,让它正常工作有时让人头疼,但是编写一个程序可以比任何人都更快更好地完成工作,或做一些普通民众根本无法做的事情,就像在制造一台让人感到自豪的精密机器。现在,您可能会避开任何严重的问题,但是在Visual Basic中制作可以在启动时启动的东西(坐在屏幕或系统托盘的侧面)并从那里开始,这将是非常容易的,您可以使它启动她喜欢的网站,她喜欢的程序等。您可以向她介绍启动exe和网站所需的命令,然后只要求她做出一些按钮,然后将代码添加到这些按钮中。 ,放入她喜欢的网站(facebook,twitter等)和程序(iTunes,文字处理器等)。如果她的计算机在她的房间里,您也可以在上面扔一个闹钟以增加功能。当然,30分钟太短了,无法带领她完成,因此您必须已经完成了。最后,您会通过电子邮件将2-3页的用户手册,代码和.exe发送给她...,然后给她一点推销:起初并不容易,但是一旦获得它并没有那么糟糕,将在生活中非常有用,并将有助于发展她的分析思维。
我曾经教过18岁的大学生,我想15岁的大学生差不多。没有练习就不要期望成功。我上第一堂课花了几周时间才能“闯进来”。
我要学习的最大的事情是,我的想法是如此简单明了,以至于我担心自己无法填补时间,这对学生来说根本就不是这样。我了解到您必须一步一步走-否则,这只是“ geh whiz”的魔法。
我不确定如何在30分钟内适应这个问题,但我要做的第一件事是向他们展示我所制造的一台小型家用计算机,该计算机被编程为可以通过单击扬声器来调小调。我解释说,它可以通过减少计数器的数量来发出音符,以作为两次单击之间的延迟。我只是在菜板上写了伪代码,就像食谱一样。然后,有一个小电容器可以挂在电线下,使整个设备运行慢大约1000倍。然后他们可以听到咔嗒声-等待-咔嗒声-等待...然后,当我解开电容器时,它的音调很小。
这样做的目的是使计算机只能做简单的事情,并且一次只能做一件事情。在上一步完成之前,它们不会开始每个步骤。(是的,是的,我知道-流水线以及所有这些,但我们正在与新手交谈。)只有电子化的速度使他们似乎可以一次完成所有工作,这就是新手倾向于假定的事情(以及读书的目的) 。那是真正的基本概念之一,没有这些概念,您将无法开始理解编程和计算机。对我们来说,这是如此的复杂,以至于我们甚至都没有意识到我们知道它,但是初学者却不知道。
这不仅仅是我个人的经验,而不是简单的“答案”。
我为什么感兴趣? 我的父母于1984年购买了IBM PC XT(我出生于1984年)。它具有640kb RAM和20MB HDD和一个5英寸FDD并运行MS-DOS v3.2。直到我达到第5级标准,我才被允许触摸它;当我最终被允许使用它时,我倾尽了全部的岁月。对它的好奇心
另一方面,我的姐姐在需要时可以使用同一台PC和一个Quadra 610 mackintosh,并且她要与支付在摆放的桌子上一样多的注意。
教姐姐... 我试图用BASIC教姐姐计算机编程。从启动计算机到键入程序并执行它,我使她做到了一切。这是线路计划。
10 PRINT "CAT"
20 END
这花了半个小时。当她最终执行该命令时,它印有“ CAT”字样,她感到非常愤怒。她原本希望看到猫的照片出现。她冲出了房间,那永远是编程的终点!
道德:产出最好与他们投入的时间和精力成正比。
教高中生Labview和Lego NXT 我曾担任FIRST Robotics的导师一年,不得不指导孩子们在NI Labview中对机器人编程。坦白说,所需的编程技能远高于高中生的水平。但是比赛的目的是让孩子们对工程感到兴奋,并提高他们应对挑战的能力。只要程序只有一个if语句和一个循环,一切就可以了。人们看到我为上一年建造的机器人创建的代码图时,就退出了机器人的编程部分。
人们说15岁的孩子可以做复杂的事情,并且注意力可以集中在几个小时上,我发现他们奇怪地缺乏动力。他们想做一些简单的事情,这些事情不会费劲。他们比在程序上更喜欢在车床上进行CAD和铣削零件。
我认为在进行演示之前,先简要介绍一下CS在世界上的地位会有所帮助。我喜欢Hal Abelson对CS相对于数学的描述:虽然数学可以帮助您用法律来描述世界,但是CS可以帮助您描述做事的方式。他的例子是平方根函数:数学将定义它,但对于任何给定的输入都不会帮助您找到它。CS会的。在较低的层次上,电气工程和物理为启用Internet的硬件奠定了基础,但未解决如何使人们使用Internet的问题。
然后是一个程序员的问题。吸引我的是,它比其他任何技术领域都可以更快地进行尝试,测试,修复。这是不间断的解决问题的方法,而在其他领域,单个循环的周转时间可能是数月。它对几乎所有其他技术领域也很有用,远远超出了其他大多数技术领域。因此,如果您不知道自己想做什么(很可能),那么尽早做好是一件好事。在大学里,除了能够编写实验代码外,很少有什么事情对更多教授更有用。
然后,当然,不要忘记演示。例如,获得一份地震(开源)副本并进行一些单行更改(例如,更改重力强度)并重新编译可能会很酷。也让她看一下代码。让她放心,她不应该期望了解太多,现在看起来似乎很乱,但是话又说回来,她还没有学过的外语报纸也是如此。您可以说,尽管如此,她仍然可以看到事物已分配给事物,对象被告知要做什么,这是我们设置重力的地方,等等。
我从14岁起就开始编程。虽然大多数(注册的50名学生中的47名)要么在年中辍学,要么只是决定不参加明年的高级课程,但我坚持了下来,并学到了一些非常重要的知识:
编程使您能够从零开始创建某些东西。您可以将文字变成满足您需求的有用工具,为您和您的朋友提供的娱乐活动,或者只是您可以向朋友展示并说“看我做了什么”的东西。
我们从一开始就被教导“ Hello World”,但是直到让我的代码与用户交互时,我才感兴趣。从开始教我们阅读“ cin”输入内容的那一刻起,我便着手制作一个可以在课堂上玩的Mad-Lib程序。我的第一个障碍是读取包含空格的输入,然后格式化输出。后来我希望能够将这些故事保存到文件中,因此我需要学习文件IO。克服障碍来实现自己的目标是让我参与进来的原因。
在这一年的晚些时候,我们发现网络管理员正在记录我们在计算机上课期间用于通信的“网络发送”和Novell SendMessage客户端的使用记录,他们在学生使用它作弊后将其禁用。因此,我写了一个聊天室来代替管理员禁用的聊天室。这是我创造的第一个真正有用的东西。我以Battle.Net的聊天系统为模型,其中包括用户注册,主持人,甚至是基本的加密和影子文件系统,以防止用户篡改(所有文件都必须驻留在共享的网络驱动器上,以便学生进行操作)访问和使用该程序)。这些不是我已经意识到的概念,而是我自己想出的解决问题的方法。对我来说,那是编程的乐趣。
因此,要正确回答这个问题,除了讨论开发软件的意义之外,交互式演示可能是一个好主意。最好能解决她遇到的问题,例如自动调整相机中所有大图片的大小。虽然稍微复杂一点,但她可能会通过一个简单的留言页面与自己的朋友共享而开心。每当有新消息发布时,您都可以通过电子邮件将其发送给他人,并让她编辑代码以将其发送给她的电子邮件而不是您的电子邮件。另外,让页面显示最后X条评论,并让她也调整评论数,然后查看结果。
我不确定这是一个传奇还是真实的故事,但我正在阅读为什么幸运的一天变得如此僵硬。故事的一部分是他如何向在火车上遇到的孩子(甚至是孩子)展示编程。
如您中某些人所知,_why是一个Ruby人(而且Ruby对普通人非常友好)。他正在用Ruby开发游戏,而一个小孩走近他去看看他在做什么。他首先向他们展示了结果 -工作中的游戏。然后,他向孩子展示了如何修改代码中的内容以更改结果。然后,他让孩子玩代码并查看修改后的结果。
我认为那应该是您的一般工作流程-结果,修改,播放。您应该以人类友好的语言找到一些项目(游戏将是最佳选择)并将其展示给孩子。
令我难过的是,我不知道这个故事是否真实。还是很酷的。
另外,还有一件事。我记得我最初的编程经验- MessageBox
在Delphi中。太酷了,因为我可以让计算机做我想做的事并立即看到结果。
然后,出现了微控制器。它们甚至更好,因为我的代码可以改变现实世界。我的意思是,为变量分配一些值不再过于抽象,因为它导致输出端口上出现电压,然后导致引擎运动。这很酷。您可能想要选择这种方式-向孩子展示类似Arduino的东西。
您看,我认为这全是关于更改和查看结果。
我最喜欢的编程类比是巫术(哈利·波特风格),例如Satanicpuppy。我在非技术性的同龄人和孩子中都使用了它,它看起来工作得很好,并且肯定传达了计算机给我们的力量。
电脑是我们的魔杖。考虑到正确的手腕和咒语,它们可以使我们演奏魔术。作为程序员,我们可以访问由我们的前辈编写和完善的拼写书籍(库)。我们可以创建新的咒语和咒语,也可以使用现有咒语和咒语。有些很容易,有些需要更多的练习才能真正有效地使用,常常要权衡利弊,并且有许多不同的方法可以解决相同的问题(我应该使用好药水还是咒语?)。
这个扩展的隐喻确实可以很好地延伸,并且通常使我能够以一种领域外的人可以访问的方式来表达我对编程的热情。
了解孩子的最好方法是先成为孩子。小时候,我讨厌做作业,拼版等。因此,有些入口点可以吸引他们的注意力。在30分钟的时间里,尽管我们无法解释所有内容,但我们可以尝试给他们一种曝光,感兴趣的孩子会从中获得启发。从他们的相关主题开始,例如家庭作业等,告诉他们计算机如何在短短几秒钟内完成拼版等。
祝你一切顺利.. !做得好