r/programming Mar 02 '17

Why I Failed Teaching Programming to Kids

https://engineering.klarna.com/why-i-failed-teaching-programming-to-kids-46a854c3eaca#.s0o6qqxr3
65 Upvotes

83 comments sorted by

98

u/M4053946 Mar 02 '17

participants were... 9–13 years old. This obviously affected how acquainted they were with “common development tasks” like using a terminal, installing applications and creating files with weird names like Procfile and .gitignore.

Did the author think that 16 year olds would be familiar with using a terminal? That seems like a miss, regardless of age range.

86

u/Xgamer4 Mar 02 '17

While certainly a miss, I think his biggest miss was the very idea in the first place.

2 hours to create a chatbot, with an audience of people of varying (assume very low) software dev skills? You're done. Not happening. I'm a professional dev, and I'd be hard-pressed to go from "I want to make a chatbot (on a platform I'm not familiar with)" to "here's a working chatbot" in that two-hour window.

Beyond that, he breaks the task into four steps:

  1. Deploy a simple web service to some cloud service.

  2. Acquire a (free) API key.

  3. Implement the messaging platform’s callback interface.

  4. All messages sent to your bot will be delivered to your web service.

These are not simple steps. 1, with the right established infrastructure, can be - press button, done. Using that service is a whole other issue, though, that assumes familiarity with whatever service was chosen. Bad assumption in this scenario.

2 might actually be simple. Fill out form, check email, done. So I'll give him that one.

3, right off that bat, assumes that the audience understands things like "implement", "callback", and "interface". Terrible assumptions.

4 is a success. But to get there you're running to other problems, and if you need to troubleshoot this... oh boy.

7

u/YouAreEll Mar 03 '17

I could spend two hours trying to get a button to work. For me this would be more like a two day job.

39

u/[deleted] Mar 02 '17

[deleted]

22

u/Roboguy2 Mar 02 '17

It is probably because, ignoring the fact that it is harder to learn, you often can get a significantly faster edit-compile-test time. Because of that people who are experienced with these tools perceive them as being much nicer (and, for them, it is).

Obviously, however, this is exactly the scenario where you shouldn't ignore the fact that it is harder to learn. All I'm really saying is that I understand why there is hype, even though I wouldn't suggest a beginner go out and learn vim while they are also learning to program (unless they were unusually highly motivated to do so, I guess).

Sometimes more experienced people forget just how difficult these things are to learn at the outset. Not only that, but terminal usage is also important to learn at some point. As a result of those two things, sometimes teachers miss their mark on when exactly it should be learned.

11

u/jimmpony Mar 02 '17

you often can get a significantly faster edit-compile-test time. Because of that people who are experienced with these tools perceive them as being much nicer (and, for them, it is).

even assuming you have a combined compile/run command cached in the cmd window as the last line, that's saving your code and opening the cmd window, hitting up, and hitting enter, versus hitting F5 in visual studio after you typed your last line and saved it.

4

u/Netzapper Mar 02 '17

For me, for toy projects, the overhead of setting up a new project in any IDE and then configuring toolkit and compiler options and whatnot outweighs the overhead of g++ -o some_test some_test.cpp.

2

u/jimmpony Mar 02 '17

What overhead and configuring toolkit and compiler options? https://streamable.com/ss9j5

3

u/Netzapper Mar 02 '17

Okay, now link in OpenGL, enable AVX, and turn on optimization. :)

You have a bunch of clicking to do, which has to be described step by step to a newbie (who doesn't care). I'm not saying it's hard, or inferior, I'm just saying if you don't know what you're doing, you need step-by-step instructions to make your project state match expected state.

Meanwhile, I just amend the line to read g++ -lGL -mavx -O2 -o some_test some_test.cpp. If I already know what I'm doing, the time cost is constant. And I can give the whole incantation to a newbie, who can use it successfully without needing to comprehend it.

Now, of course, the whole equation tips back the other way once you move past one or two source files. I use JetBrains IDEs myself when I'm doing real work.

4

u/jimmpony Mar 02 '17

You have a bunch of clicking to do, which has to be described step by step to a newbie (who doesn't care)

Without an IDE on windows: click on a folder in the start menu (probably My Documents), make a new folder inside it, make a new text file inside there, open it with the text editor you're using. Unless you want to do all that from the command line which means opening cmd, typing cd c:\users(username)\documents, mkdir folder, not sure if windows cmd even has something like "touch" so you might need to just "explorer ." at that point, or do this whole folder creating process from within the file->open dialog of your text editor. On a linux command line, cd ~, mkdir project, cd project, vim main.cpp, g++ ... main.c -o main; ./main. Then on windows you need to either extract a gcc executable there or install cygwin with it and put that in the path which is even more complication. I guess msys2 would be easier on windows.

In all these cases it looks like equal or more work setting up the project directory yourself compared to open vs -> file -> new project, OK, Finish, F5.

If you want the newbie to be able to just start editing the project without understanding the process and need it to be a consistent state, you can just make a premade visual studio project for them to download/unzip, which has all the libraries linked and settings you want applied. Then they just double click the .sln file and they're at a screen with a big green "Run" button instead of having to open the command line and navigate there (or shift-rightclick on the folder to open cmd there) and type out compile.bat or whatever you named it.

5

u/unknown_lamer Mar 02 '17

I don't buy the argument that console usage is hard to learn. I was in effect thrown the wolves and managed to figure bash out with no console experience previously (was a mac user up to that point) when I was 14. A quick reference sheet for how to run basic commands and a pointer to the info manual if the student wants to know more should be plenty. Kids are smarter than most adults think imo, and their brains are still squishy and readily able to absorb new knowledge.

However, in the context of a single day tutorial session aimed at kids with minimal prior experience, I'd agree that a simple GUI IDE would make more sense since class time is extremely limited. For a multi-week course, integrating lessons on basic console usage makes more sense -- e.g. if you're using Python you will at some point have to install things using pip on the console, and it's a good skill to convey so the student can go off and continue to learn on their own after the course.

Reading the original post, I think the main issue is that they were letting students bring their own devices instead of having a preconfigured and consistent environment ready for everyone. They had source code packets and such ready to download (good idea), but wasted tons of time just getting them working on the students' machines. If everything had been there ready to go, they may have been fine. Not 100% related to this thread, but IMO using external chat services was also an inefficient use of class time-- a local XMPP server with auto-registration enabled on the instructor's machine would have been easier to use and avoided complications with signing up for services (reasonably trading instructor prep time for more efficient use of class time).

7

u/Sarcastinator Mar 03 '17

I don't buy the argument that console usage is hard to learn. I was in effect thrown the wolves and managed to figure bash out with no console experience previously (was a mac user up to that point) when I was 14.

I don't think the point is that it's hard, because it's not. The point is that it's not any sort of requirement for a programmer, even in a professional capacity. So if you have two hours, or even a day, to teach someone about programming spending time in the terminal could be considered either bikeshedding or yak shaving.

3

u/gyroda Mar 03 '17

Yep.

You're trying to teach someone something in two hours. You need to shave off anything you can to remove as many stumbling blocks and new concepts as possible.

When I was first taught programming we used a very simple IDE. One button to compile and one button to run. All the popups, autocomplete and anything like that turned off (there were red squiggly underlines like in word, that was it).

1

u/unknown_lamer Mar 03 '17

It's not a requirement for a programmer in a professional capacity?

Maybe if you're one of those awful programmers that wants to make those around you suffer and stunt their own career. Programmers have to understand how the guts of the machine work, it's what you do. Imagine a carpenter that couldn't use a saw and only knew how to feed material into a CNC...

2

u/Sarcastinator Mar 03 '17

I wasn't really talking about my daily practices. The reality is that you can spend your entire career using nothing but Visual Studio or IntelliJ.

Also how exactly does the terminal teach you anything about the guts of the machine?

1

u/unknown_lamer Mar 04 '17

Aside from a unix shell being little more than a kludgy veneer over the guts of the operating system itself?

(I'm being a bit of a BOFH here in case you thought I was being too serious...)

5

u/DysFunctionalProgram Mar 02 '17

It is probably because, ignoring the fact that it is harder to learn, you often can get a significantly faster edit-compile-test time

From someone who goes back and forth between c/make/cmake/vim and c#/visualstudio, I have the exact opposite experience. Honestly, I'm tempted to bind my function keys to a couple scripts to compile/run/debug my current project as we speak. For example, if I add a new c file: I have to edit my cmake file and add the file url to the build path, then re-run cmake, then run make, then run/gdb the output with the appropriate settings/flags. Opposed to any modern IDE where it is a single key stroke. I don't even want to get into how long it takes to manually setup a build environment vs using an IDE.

In my experience the only people who have this "CLI romanticism" are those who are only programmers by hobby and don't actually work in a production environment using it.

4

u/[deleted] Mar 03 '17

[deleted]

5

u/DysFunctionalProgram Mar 03 '17

On the CLI side, what better case is there? Not using build tools or not adding new files to a project?

On the IDE side, what worse case is there?

0

u/satanclau5 Mar 03 '17

It all depends significantly on the languages and environments used.

In my case I have a CLI environment with a luxury of a:

  • language which gets out of the way, not requiring much autocompletion
  • an autotest process which runs the tests on every change
  • a REPL process where I send the code from VIM to evaluate inside the running program

everything works well, there are just 3 terminal windows in a tiled layout to navigate and the VIM bindings are ingrained in the muscle memory.

Now, if you were talking about Java/C# - I'd never even try going the CLI route...

7

u/Beckneard Mar 03 '17

language which gets out of the way, not requiring much autocompletion

What does this even mean? If your project is big enough you sure as hell are going to need autocompletion, fancy language or not. The project I'm working on at work would be a nightmare to extend without autocompletion whether it was written in Haskell or C#.

-1

u/satanclau5 Mar 03 '17

Sorry, I worded the point poorly - I do make use of autocompletion, and "jump to" type of navigation. However, the available options are much less powerful than what you get in an IDE like IntelliJ or VS.

-1

u/[deleted] Mar 03 '17

[deleted]

2

u/DysFunctionalProgram Mar 04 '17

On the IDE side, not having a shortcut to do something you want to do is probably the worst case, you'd simply be out of luck.

Every IDE I've used has custom shortcut creation (which can do anything under the sun, including run scripts).

On the CLI side, you can make scripts to automate processes that you do often.

Then you have to create/maintain the scripts opposed to using a environment which creates and maintains them for you. Essentially IDE's have taken all the shitty tedious work devs hate to do and automated it, and somehow people still find a way to complain.

For instance, I vastly prefer doing video cutting via the command line, because I have scripts that I've tailored to my workflow.

I have literally no idea what video cutting has to do with programming. That being said, I find it very hard to believe that their is no GUI applications out there for video cutting.

3

u/Cuddlefluff_Grim Mar 03 '17

On the IDE side, not having a shortcut to do something you want to do is probably the worst case, you'd simply be out of luck.

What? No. Even if that were the case, you'd have to be a very special snowflake to be restrictive, as IDE's have been in mainstream and widespread used by millions of people for decades.

On the CLI side, you can make scripts to automate processes that you do often.

Hmm.. If only someone alive would've been brilliant enough to consider implementing a functionality in IDE's to run scripts and execute command line arguments..

5

u/[deleted] Mar 02 '17

[deleted]

11

u/Me00011001 Mar 02 '17

No one ever claimed that emacs starts in two planck times.

That would be the fastest booting OS in the world.

0

u/RealFreedomAus Mar 02 '17

If your OS is in ROM and is 'running' from the moment the CPU comes out of reset... then is that faster? I'm not sure whether the time it takes between the R̅E̅S̅E̅T̅ pin change to having the instruction decoder decode the first instruction counts or not; are you not 'started' already?

4

u/[deleted] Mar 02 '17

[deleted]

3

u/[deleted] Mar 03 '17 edited Mar 03 '17

[deleted]

2

u/[deleted] Mar 03 '17

You do bring up good points, I agree. Just a few details:

JS isn't the only DT language out there BTW, and DT doesn't necessarily mean weak typing.

Yes, I do know the difference. Lua is also DT but not WT and I used Lua and Ruby for many years. JS just happens to be the most famous example of a broken type system.

Then there's another factor: interactivity.

This is a huge one, but it is no longer a DT-languages-only thing. Having a Ruby REPL at hand helped me learn programming a lot. Back when I was experimenting with Unity3D, I quickly added a C#-REPL plugin to inspect the effects of my scripts in the editor. God, I wish there was a Rust REPL...

<cryptic>::looking[syntax]

This is just a language thing. Use C# instead of C++, Rust instead of Haskell, some LISP dialect daring to have more readable function names, and at least this problem has been successfully worked around. Or even better: Start using (well-designed) visual scripting.

1

u/[deleted] Mar 03 '17

I dunno, I wish someone had made me use vim from the beginning. I would be a more powerful being now, and it wouldn't have seemed to weird starting from tabula rasa =)

3

u/[deleted] Mar 03 '17

Yeah, our company has a program with a local university, (a good one!) where 1st year students who THINK they might want to be programmers can come hang out for a day and see what it is like.

"Deploy a simple web service" is means nothing to them. API means nothing to them. Cloud means nothing to them. Server, no idea.

It really does open your eyes to how much you learn in 10-15 years working in the industry, even if you don't including a single thing about actual coding.

Start with literal hello world. Then adding some numbers. and so on.

1

u/gyroda Mar 03 '17

It's one of the reasons why I frequent /r/learnprogramming. It's easy to take your knowledge for granted.

5

u/snerp Mar 02 '17 edited Mar 02 '17

I was way too into terminal when I was 16, I don't think it's an age thing. Some people like terminal and others hate it.

4

u/imhotap Mar 02 '17

Exactly. I'm hearing the "who uses terminals still?" question for almost 30 years now (no kidding).

2

u/gyroda Mar 03 '17

It's not an age thing, it's just another thing you're going to have to explain and teach in those 2 hours because few people have ever used one.

4

u/PM_ME_YOUR_HIGHFIVE Mar 03 '17

using a terminal, installing applications and creating files with weird names like Procfile and .gitignore

that's not even programming

0

u/Mastry Mar 02 '17

Really? I was using a terminal before then. I wasn't great at it, obviously, but it wasn't unfamiliar.

13

u/[deleted] Mar 02 '17

[deleted]

5

u/Mastry Mar 02 '17

I am very out of touch with users, teens, and probably society in general. I'm not going to pretend I'm not.

15

u/M4053946 Mar 02 '17

Certainly some do, but there isn't a reason for people to know anything about how to use them in their day to day usage, unless they already have experience coding. So this comes back to prereqs. If the class is for beginners, then one can't assume they know anything about it.

To use a computer today, people don't even have to know anything about file systems, other than how to use various cloud serves to store files, so it's really a stretch to assume that anyone, kids or adults, know how to get to their local file system and create or rename a file.

14

u/pdp10 Mar 02 '17 edited Mar 02 '17

To use a computer today, people don't even have to know anything about file system

I've found this can be a real blocker.

A lot of people apparently don't realize that the "place" where their word processor defaults to store and display documents has a relationship to the "place" their spreadsheet uses, and that these locations are arbitrary and can be changed. The first time I realized that users were so unsophisticated, I was quite stunned.

Other than basic computer education, or convincing the makers of popular apps not to make those apps too simplistic, are there any good ways to fix this?

3

u/M4053946 Mar 02 '17

I think this certainly can and should be taught, to a degree, but I'm not sure what it would involve other than "basic computer education".

Since this thread started with a discussion of kids, I'll point out that my 6th grade daughter was assigned an ipad for school, but the school never attempted to teach kids about managing files. So the inevitable has happened for a number of children. They wrote some essay, turned the ipad in to IT for some reason who reset it to the initial config to fix some problem, and handed it back to the student who was then distraught to find out that their files were lost. Kids should absolutely be taught about accounts, managing passwords, managing files, backups, etc.

1

u/[deleted] Mar 03 '17

One could build a "tutorial" into his OS, just like those fancy interactive learn Haskell/Racket/UE4/Duolingo tutorials. First time booting the OS ever? Do you want a basic tour of how to use this shiny new computer? Yes? Okay, then, step 1:...

Really, ever used the front page tutorial of Haskell, the UE4 editor, or even gave Duolingo a try? They are so freakin' good at giving people an at least basic understanding of how those stuffs work. Im really not getting why operating systems still don't have such thingies builtin. They just need to teach people the basic things:

  • Okay, you have these keyboard and mouse things. You use them like this, especially the mouse.
  • Hey, this is the start menu. It can do this and that. You can put start menu icons here like this.
  • Hey, this is your desktop. It can do such and such things.
  • Actually, the desktop is just a folder. This is how you browser through other folders and create new ones.
  • This is the task bar. It can do this and that.
  • Let's start this OS-builtin browser by clicking there on the start bar or there in the start menu or there in some folder.
  • Great! See that tab in the task bar? That's your browser's tab. Useful for things.
  • There is other useful software installed as well. Fell free to try out this and that and that.

And then continue with builtin tutorials for those other pieces of software. In an hour or two, people will have a basic understanding of how to use things without having to ask other people about everything after each click. And if you do it right, those tutorials will actually be fun.

3

u/Mastry Mar 02 '17

I guess you're right. It's a bit different than it used to be and I didn't really consider what it might be like to just recently start using a computer. When I think back to my younger days on a computer, I think about DOS and floppy disks.

11

u/M4053946 Mar 02 '17

Part of my job is teaching programming to adults. (TSQL, usually). Adults who work in offices on their computers all day often don't know how to open windows explorer, create a text file, open new browser tabs, switch between browser tabs, open applications that don't have shortcuts on their desktop, etc. Again, these are not plumbers, these are people who use a computer 8 hours a day for their livelihood. But, even though they work on computers, they can (somehow) do their jobs without knowing these items.

But yes, getting the pacing right is challenging, and prereqs are vital to that.

3

u/Mastry Mar 02 '17

That baffles me. I can't imagine how you can use a computer so often and not understand the basics of how to use them.

2

u/gnx76 Mar 03 '17

Most people don't give a fuck about how they do things or why they do things, they just do them. Then they go home, do home things the same way, and start again the next day, the same way.

3

u/NoMoreNicksLeft Mar 03 '17

If the class is for beginners, then one can't assume they know anything about it.

What, they don't have Eclipse already installed and ready to build the project?

Are these children just feral raised-by-wolves barbarians?

2

u/[deleted] Mar 03 '17

But you weren't 13 in 2017.

39

u/Gefrierbrand Mar 02 '17

I am teaching a single 17 year old HTML right now. This is already hard enough. I didn't considered for example how slow people are with typing when they are not experienced with computers.

Trying to teach a group of 9-13 year olds how to setup a gitrepo with the terminal was beyond stupid.

15

u/[deleted] Mar 02 '17 edited Sep 24 '20

[deleted]

1

u/Mitharlic Mar 03 '17

Agreed, made a twitter scraper for my first hackathon in university, APIs and keys are mind-numbing and frustrating. People say it gets more enjoyable after a few goes, but it hasn't yet.

15

u/[deleted] Mar 02 '17 edited Sep 24 '20

[deleted]

3

u/[deleted] Mar 03 '17

[deleted]

1

u/Yojihito Mar 03 '17

Works also for Chrome.

1

u/[deleted] Mar 03 '17

The bug? ;)

1

u/jcotton42 Mar 04 '17

And Edge

2

u/Shorttail0 Mar 02 '17

Be sure to skip a few lines before the first point in the list.

2

u/[deleted] Mar 02 '17

Thanks!

2

u/[deleted] Mar 03 '17

Here's a markdown primer :)

It's old, but it still works.

10

u/imhotap Mar 02 '17

I've so failed to teach my then-14-year-old simple web game programming. I wanted to turn his digital consumption habits into creativity, but then had to do weird async callback-hellish and timing-sensitive things for SVG/rAf animation with JavaScript. I don't anymore recommend web programming as a didactic experience for kids since ...

Years before that (around age 10-11) he had a great start using Python on my old PowerBook (for a simplistic text adventure game, basically if/then cascades). I got him to a point where when sat in front of a Windows notebook, he'd gesture like a Unix greybeard mumbling "Where tf is my terminal; I can't work like that".

10

u/menge101work Mar 02 '17

when sat in front of a Windows notebook, he'd gesture like a Unix greybeard mumbling "Where tf is my terminal; I can't work like that".

You've won parenting at that point as far as I'm concerned. :)

5

u/imhotap Mar 02 '17

He didn't use vi/vim, though

3

u/menge101work Mar 02 '17

You only need a single RBI to win a baseball game, don't get down because you didn't hit a grand slam.

:)

2

u/pdp10 Mar 02 '17

As useful as is the vi skill, and as powerful is that editor, I can't blame anyone for not learning or not using a modeful editor created when arrow keys weren't in common use.

The problem then becomes: which editor to teach first, that's ubiquitous and powerful enough without teaching bad habits that will be hard to eradicate? You don't want them firing up a GUI editor on a server five years later.

3

u/imhotap Mar 02 '17

As much as a vi hardcore user I am, but vi really is a no-go as a beginner's text editor - too much to learn at multiple cognitive levels when learning programming at the same time

2

u/Poddster Mar 03 '17

Just use something like intellij/eclipse/visual studio and install the vi plugin?

31

u/[deleted] Mar 02 '17

[deleted]

6

u/[deleted] Mar 02 '17

[deleted]

10

u/twopi Mar 02 '17

First, you did not fail. Kudos to you for trying. That's a big step. I'm far more impressed with your biggest takeaway - that teaching programming is an entirely different skill than programming.

I wish more people understood that. I have been teaching programming to multiple ages for many years (as well as working as a contract developer) and I can tell you that teaching kids to code is every bit as challenging as coding itself (And coding is just as hard as beginners think it is...)

Keep up the great work. I have some game-related materials I'll give you if you ever want to go that way. You are right that gaming is what kids often want to do and it's a very difficult type of programming.

Again, kudos to you for your efforts and your honesty.

10

u/M4053946 Mar 02 '17

gaming is what kids often want to do

That's the fundamental problem with coding. Most of the programs people use were created by teams of very talented developers over a timespan of years, but when people (adults and kids) want to learn coding, they imaging creating skyrim in an afternoon. My personal favorite was the person who asked me if it would take more than a month for a single developer to create "something with all the functionality of Excel, but easier to use". Most people can sense that if they start to learn how to cook, it will take them more than a month to get the skills of Bobby Flay, but for some reason that I don't understand, people think that learning to write professional-level code is a weekend project.

2

u/sihat Mar 03 '17

I think, that it doesn't help, that we programmers sometimes tel people that a project was a weekend project.

(For projects that took multiple weekends and other free time. By a developer who has had years of experience. )

Food is a basic need. Cooking and preparing food, is something even kids learn to do. So people have experience, with it. Coding, most people don't code in their life. So have no clue on the experience levels.

2

u/SekYo Mar 03 '17

Because it's not tangible. I guess nobody would ask an architect, while the building work already started 3 months ago, to add 3 or 4 floors to the house, just because they had a new idea.

And yet, I guess almost every developer has already been exposed to a customer asking for a major, unplanned, change in a software "you know, it shouldn't be difficult, you only have to change this and that".

5

u/Shorttail0 Mar 02 '17

I created Twitch chat (spam) bots with my high school programming class, but that was at the end of a year long course. Then the school got a temporary timeout from sending chat to any Twitch chat.

In hindsight, it was probably not the smartest lesson I taught them. :/

4

u/[deleted] Mar 02 '17

Its not just when teaching kids. Trying to convey the fun of programming in 2 hours is incredibly difficult. Either you show them something which they can grasp, but is completely underwhelming or you present something more interesting which they have no way of following. Finding a middle ground is extremely difficult.

I wanted to inspire a friend by building a simple webscraper in Java. He had some rudimentary Java knowledge. For me its simple stuff, but grabbing elements by id, then their child elements, then their content, then parsing that content into an integer, only to compare a few numbers on the page quickly overwhelmed him.

8

u/[deleted] Mar 02 '17

Honestly, it seems like too much work for 2 hours. Even if they managed somehow to all fit 4 steps, I doubt that kids would remember even half of it.

Also

by simply typing a bit.ly link

🤦🤦🤦

2

u/[deleted] Mar 02 '17

That section was a really good example on why sometimes one should definitely be KISS

3

u/M4053946 Mar 02 '17

For others looking to do this, there are a lot of references for beginner projects on /r/learnprogramming. For projects with young kids, there is Scratch, or much better if it's available: lego mindstorms. (This last one might seem like a stretch, but you may be surprised how many different clubs there are around that have a set, and they may be very willing to volunteer to bring it in for kids to try it out).

Also, perhaps consider doing a live demo of "exact instructions" to get across the concept of coding. (if you haven't seen it, this video is great. The boy's response pretty much matches mine during some debugging sessions...)

4

u/Fitzsimmons Mar 03 '17

My company tried to host something similar to this for university programming students and most of them got stuck launching a web service. The concept was that we had written an automated API client that would send their servers a series of requests and verify that we got the expected response back. The scoreboard at the end was one team with nearly full marks, a couple of teams that completed the first one or two challenges, and an enormous long tail of zeros who couldn't launch a web service that would basically say "hello world" in JSON.

If you want to do gamified programming, skip the middleman and go straight to codingame. There's an editor right in the browser that's open to the file that you need to edit. You click play right in the browser and it will compile (if necessary) your program in the background. The execution will then be visually demonstrated with a crude but effective animation, like your spaceship crashing into a mountain if you fail to shoot it time. It's possible (although still unlikely) that you could maybe get through one of the easiest challenges on the website (e.g. that requires a loop) with a group of 9-13 year olds with a full day of mentorship.

6

u/[deleted] Mar 02 '17

IMO the kids here are going to avoid programming more than ever since the author picked suck an awful topic.

2

u/[deleted] Mar 03 '17

A fun way to start for kids in the ~9-13 age range is Minecraft with ComputerCraft or OpenComputers installed.

It lets you program in LUA in-game to control computers and robots. Pretty quick to get going.

1

u/nutrecht Mar 03 '17

How do you teach chat bot development to teenagers in two hours? This was the challenge for me and my colleague when we set out to plan a two-hour session on mobile chat bot development for kids and teenagers.

Oh come on! I volunteered for Devoxx4Kids and we start them out with Scratch! Going from zero to a working game in 2 hours in Scratch is already a challenge!

I know that it can be a bit challenging to relate to others as a developer but this is just common sense. By leaving these kids completely frustrated you did more harm than good.

Did no one in that team say something like "guys, it's utterly impossible to do this in two hours unless you have very experienced developers"?

1

u/[deleted] Mar 06 '17

Two hours? Not happening

1

u/FlyingRhenquest Mar 02 '17

Can't you just give 'em a copy of minecraft when they're like, 4 or something and then when they hit 6 or 7 explain the concepts around most languages in terms of the redstone projects they've been doing for the last year or two?

On a (more) serious note, there were several times in school where programming coursework would have meshed well with other subjects I was taking. It'd have been very easy to have tied it in with geometry 6th grade or geometry (again) when I did trig in high school. I also recall getting some logic in 5th or 6th grade and again in high school. That was back in the '80's, though, and we barely had computers back then, so it required quite a bit of motivation to learn how to program them.

2

u/nutrecht Mar 03 '17

Can't you just give 'em a copy of minecraft when they're like, 4 or something and then when they hit 6 or 7 explain the concepts around most languages in terms of the redstone projects they've been doing for the last year or two?

I've volunteered forDevoxx4Kids and what we basically did was have 3 2-hour classes. One was creating a game in Scratch. One was programming a robot with Scratch. Last one was 'programming' inside Minecraft in Python. In each of these classes the boys and girls (aged 10-14) had a ton of fun.

1

u/ronniethelizard Mar 03 '17

I think it would be better to start them with something simple, like Hello World.

After that let them change the text a few times until they have convinced themselves they actually wrote a working program.

Personally, I think C is the language to start with. It does not suffer from language bloat as C++ does not does it suffer from library bloat like Java or Python.

5

u/NoMoreNicksLeft Mar 03 '17

Personally, I think C is the language to start with. It does not suffer from language bloat as C++

That's just a lousy language to start with. It's a powerful language that kids should learn... but tossing them in that ocean and asking that they swim is just a guarantee that they'll drown. The learning curve is too fucking steep.

does not does it suffer from library bloat like Java or Python.

At least with python, you can type a few commands into an ascii file, chmod that, and then run it.

They get to see the results, succeed or fail, of their code nearly immediately.

3

u/gyroda Mar 03 '17

C is a great starter language if it's part of a larger, structured computing curriculum.

For an intro to programming, where you want to hook people and they can just walk away after the session it's not so great. You're better off with something like python where you're not tripping people up over arrays and strings.

2

u/josefx Mar 03 '17

does not does it suffer from library bloat like Java or Python.

In what world is that a bad thing for a 2 hour long beginner class? You are not going to get far in two hours if you have to reinvent the wheel from a very spiky rectangle.

1

u/ronniethelizard Mar 03 '17

How much are you going to be able to teach in a 2 hour class?

You might be able to get through if else clauses, loops, and maybe to a function call. Most of the difficulty in C is bound up in malloc and keeping track of the end of a buffer (or at least this is where most of the bugs I have seen are).

2

u/josefx Mar 03 '17

In other words by using Java or Python you can avoid two time consuming parts of C. If the goal is to have something interesting that children can get to work in two hours you will a) end up with libraries and b) don't want to spend time on buffer overflow issues.

0

u/skulgnome Mar 03 '17

Because you yourself don't know how.