I was full for this 'teach kids how to code' thingy. But I think we have got this all wrong. Heck we don't have the right kind of tools to teach kids how to code. In fact I have now realized that you can't and should not teach kids how to code. You rather must teach them how to solve problems. Math was supposed to deal with that, but unfortunately that turned out to be complicated symbol manipulation if not for anything else.
My niece here in India is around 12 years old, and she is being taught C programming back in school(She is in 8th standard, or 8th grade as per US terms). No she generally comes and stays with us in the summers. So last time she came over for a month's holiday she bought her laptop with her and wanted me to teach her to program in C.
The net result is disaster. I tried everything possible. Every other trick in the trade. Even tried to start with Python first and not C. But I figured the nature of problems is something else. Kids view programming very similar to the way they see math. They find themselves manipulating things/symbols/stuff without understanding why, for what, or even why its even relevant to them. They struggle to understand where or why should you use an if/else/switch statement, or a for/do/while loop. Its difficult for them to map solution patterns to a code pattern.
Its not their fault. Its ours. Better luck trying to explain a kid why they are being asked to write a program find greatest of three numbers, find factorials, or sort numbers. To them it very clearly looks math in a different language. Its that boring math thing all over again.
Much complication starts when stuff like pointers is pushed down their throat. Or something like bit shifting. Oh and yes, they start asking things about the process of compiling, linking etc. Or why they need to put a #include at the start of a program. You can't honestly explain all that without explaining them some underlying stuff.
Beyond all this it needs to fun, which it very clearly isn't.
What kids need to be taught is how to solve problems, even if it means repairing a mechanical watch. Instead what they are being given is math in a different dose. And trust me at that age, they don't really like doing that.
And oh, by the way. Next year they are about to be taught Java. I can only imagine the horror, the way kids of going to deal with the text walls full of verbosity, API dance and the XML mess. And the last time I heard they don't really use IDE's.
One thing that I'm convinced is, after this episode due to all this trouble and trauma of having to learn this, she clearly doesn't enjoy, she will hate programming and hope she never has to deal with it again.
Because last time I talked to her, she told me she wants to be a journalist. That's how much damage 'Teach kids how to code' has done.
I'm now glad no one ever introduced me to coding when I was a kid.
Parent is clearly missing the forest for the trees.
Lets not talk about cs for a second- say you are a mason and you want your kid in the construction business. He says- so what have you done with masonry?
So you say- I built the house in the next block. I built the bathroom for the petersons...bedroom for the smiths...closet for your mommy...stepstool for your granny... this shit isn't going to fly even though you are 100% honest.
It isn't about what you have done in your particular pathetic life due to circumstances peculiar to your economy. It is about what can be done.
So you should take your kid to the Golden gate bridge. Sears tower. Central station. This was built by masons ! And this!! And this!!! Then you don't need to sell masonry... the kid will be starstruck and learn on his own.
Kamaal chose to dispense with the pomp and ceremony and abandon razzledazzle for brass tacks. Here let me teach you C programming with preprocesser directives and predicates and for loops and pointers- I would have run for the hills! Even though I was as old as his niece, I had written some 5k loc in C purely self taught to make pixels flock...weird infatuation with cgi at that age. Because somebody had told me star wars and tron were made on a computer by people just like me- so I took that literally and ran with it. I was not a genius...just another driven kid who didn't give a flying fuck about hash include stdio and mallocs as long as he could make pixels fly. Inspire, don't preach.
You make a lot of assumptions about how kids have to be taught coding.
> I tried everything possible. Every other trick in the trade. Even tried to start with Python first and not C.
> They struggle to understand where or why should you use an if/else/switch statement, or a for/do/while loop. Its difficult for them to map solution patterns to a code pattern. Its not their fault. Its ours. Better luck trying to explain a kid why they are being asked to write a program find greatest of three numbers, find factorials, or sort numbers. To them it very clearly looks math in a different language. Its that boring math thing all over again.
There are so many other ways to introduce students to programming. This is the main part of the problem. So many people think this is how you have to teach programming. I am in full agreement that you need to teach problem solving, and you can do that with programming.
We start teaching with a simplified language called "karel"--where you have a dog who can only turn left, move, and put down and pick up tennis balls. That's it. There is no overhead of python or C or java. It's just a few commands and a dog. And there is no question on why you should do it.... people do this because it is immediately fun. Printing "hello world" for most people (especially younger kids) is not immediately fun.
I have started thousands of students in person with our karel the dog demo. Everyone can do it. Almost everyone finds it to be really fun. Because karel is a simplified language, it is all about problem solving. How do you get a dog to find the midpoint of his world when he cant store variables, but can only ask questions about the state and put down tennis balls?
I contend that you can teach problem solving to students through programming--but it is so crucial how you make that initial experience feel.
There is no
public static void main(String[] args)
to get started.
Try this out at http://codehs.com. We have schools using it all over the country, and young students can get if/else, and for/while.
> Beyond all this it needs to fun, which it very clearly isn't.
Find a student who didnt like programming, and have them try our karel the dog starter for 10 minutes. Let us know what they say. I bet they think it's fun.
I think both you and the grandparent are making a mistake. He assumes children dislike math. You assume children will like karel. I think the truth is that children have different interests and that you can only bring them to programming by latching on to those interests. Many children like math. Many other children will not like karel.
The result: to engage as many children as possible, you need several introductory tracks: one that uses math, one that uses puzzle solving, one that uses drawing, one for another common interest, etc. Also be aware of the way interests change with age.
Teaching is hard and almost every approach invented seems to rely on yet another silver bullet.
Nobody assumes that children inherently dislike maths. They can't dislike something they don't even know.
The point is that children start to dislike maths once they go to school. And they do - all kids in my class either already knew basic maths before going to school or were completely bored by it.
The same will happen with programming once it will be "taught" in schools as well.
Think of it this way - if you want people equally competent as you to teach your child in school, you have to pay them 1/n of your salary, where n is the number of students in class. If you pay them less, they will find a better paid job elsewhere like you did. And you don't want n to be large since it's hard to pay attention to more that a dozen of kids at a time.
Hence, school must either consume 5% to 10% of your salary per child, or be ran by people less competent than you. It seems that usually the latter is the case.
I appreciate your math, but it is slightly flawed.
You can get a bigger n, not by increasing class sizes alone, but also by letting teachers teach for longer per day than children learn. I.e. use you math per hour taught, not for salary.
What this means in practice is, use teachers for higher value added work, but let computers (or somebody less qualified) oversee other parts of the learning process.
What seems to work fairly well (I remember a study about it), is to let students read material at home, but solve problems in class. That's the opposite of the traditional getting lectured-at in class / exercises as homework approach.
Khan academy is another vector for leveraging teachers. It does not replace a good teacher, but it can augment a teacher.
The problem is that if you tell schools to implement "computer supervised" coding learning, they will tell the students to write a factorial implementation and then they'll test it for bit-perfect match with some "perfect" solution.
This way they will verify correctness, good indentation, meaningful naming of variables and so on. Because somebody in the school/government heard that this is what professionals care about.
IMO launching a media campaign which pushes schools to "teach" every child to program, without any plan prepared by professional teachers and developers and then permanent, ongoing support from such professionals, is asking for disaster. And the grandgrand...parent provided an example of such disaster.
I think this is a good point, but I'll take it a step further. The kid that likes drawing doesn't have to be a programmer, so stop trying to teach it to him and let him draw without the constraints that programming brings. We don't all have to be the same.
The point you make here (and one made by many others) is a straw man/reductio ad absurdum argument.
People who advocate that everyone should learn to code (like myself) to not advocate the absurd conclusions that are used by others to refute this standpoint.
I do think people should learn to code. This does not mean I think:
1. Everyone should be a professional programmer.
2. "Everyone should be the same"
You can make similar arguments to a person who says "everyone should learn to read," but then you misunderstand the spirit of the discussion.
I'm not interested in logical fallacies. I don't think this is a particularly logical subject. When you say "people" should learn to code, do you mean everyone? I posit, completely illogically, that some people will contribute greater good to society without ever having their brain trained to solve a problem via algorithm. Even without contributing any good, maybe they'll just be happy. Of course I'm not against making things more interesting for those who do have an aptitude or drive for it, so please don't misunderstand that.
> I don't think this is a particularly logical subject.
Are you sure advocating a solution that's not based on logic is the right thing to do?
> When you say "people" should learn to code, do you mean everyone?
First we must define what "learning to code" is. I (and, certainly, most others) do not advocate kids should learn Java (or Python). But I think kids should learn how to decompose complicated problems into simpler parts. I also think kids would gain a lot if they could make computers do what they want (going beyond "start WoW", for instance).
As for drawing, you can always draw with a pen and paper. I prefer to do it that way. However, if I decided to draw a fractal curve, I'd probably do a few sketches on paper, to grasp the ideas, then fire Emacs and write code to actually draw it.
> I do think people should learn to code. This does not mean I think: 1. Everyone should be a professional programmer. 2. "Everyone should be the same"
First of all, why we (adult) do programming? to automate something? to make repetitive tasks easier? or just for fun?
and I don't see any good reason, why we teach kids programming. If it's to train their logical thinking, we can make a game for them, give them a basic set of rules, each rules have consequent, with their imagination they can make other rules based of basic rules, with one condition that new rules can't contradict with basic and other rules, I know it sounds like math, but they will get the basic idea of logical thinking, when you do something there is a consequence.
Programming is just a tools or way, if you prefer. Not to mention a new trouble when they have a solution but can't apply it with programming, because the technical barrier they had, even you use easy programming tools like Alice, certainly there will be technical problem for them.
I agree with, why we should learn kids problem-solving skill, because they just need their brain and basic tools like pencil and paper, maybe to scratch something, to visualize what they think.
Meanwhile, the kid who likes programming will probably be drawn to it naturally, as well. I know I was, a long time ago. I can appreciate wanting to lower the barrier to entry for such kids, but I honestly don't think it's excessively high to start with.
Friends of my age who were drawn into programming did so probably because when you turned on the (8bit) computer it was waiting for you to write a program. It was the default action. How would an iPad user be naturally drawn into coding? If you don't have friends around you who do it and serve as an example (or a classroom where you are presented with that possibility), I think few would come up with the idea of writing programs themselves.
It's dated, slow, ugly, and poorly-supported, but in my experience, Alice is the easiest introduction and call to action for a 7-10th grade proto-programmer.
You create 3d animations using an OO syntax. Like Karel, you build up from basic methods, but you get to animate a scene, rather than have a robot/dog pick up and drop stuff.
My students have really enjoyed it, and it let me get to deeper concepts far faster than other instruction.
edit: http://www.alice.org and it looks like development has actually woken up. The blog is active and there's a new version out. Big improvement over last year when I went there.
haha yes, you make a good point. I do think that including several ways to try to connect with beginners is important, and that is what we hope to do. I really like the logo the turtle approach as well.
I think my main concern with the previous comment is that the dominant method for introducing programming is too syntax-heavy, math-heavy, starting with a language with a lot of overhead for beginners, so ours is an alternative.
Not everyone will like our intro, as you note. But I think it has a very different feel than the way many students are introduced to programming in school (see AP Java class).
OT and I don't know if you'll find this useful but http://codehs.com/ looks like an absolute trainwreck to me, layout-wise. I'm using Firefox 19 on Ubuntu.
Thank you Hacker News reader for the very Hacker-News-esque constructive criticism. We are trying to improve our site, so if you have specific constructive feedback for us, we would appreciate it.
Apologies if "absolute trainwreck" came off as harsh or unspecific. My specific, actionable feedback is:
Check how your site looks in multiple common browsers (IE, Firefox, Chrome...) while you develop it.
Check how your site looks on screen sizes smaller than your own, by resizing the browser window.
If it looks fine to you, then maybe the problem is on my end. But there is definitely a problem on my end, as I assume you did not intend for the "Why CodeHS?" text to overrun on top of the photo of the classroom.
I tried in Chromium on Ubuntu, and Firefox and IE on Windows. It looks trainwreck-y on all of them for me.
By the process of elimination, I believe it's because I'm using a T-mobile wireless dongle. The upstream proxy attempts to reduce bandwidth by doing things like coalescing external CSS and JS inline. I've seen this break one other site (LinkedIn profile editing, which seemed to be a bit fast and loose about its use of ajax) but every other site I've used has been fine (even e.g. Asana, which is rather intensive.)
I looked at the source of codehs.com (insofar as I can figure it out, what with all the CSS and JS put inline...) and I'll change my actionable feedback to:
Try to keep it simple.
That seems like far more stuff than you'd actually need on a landing page.
I also noticed that, when loading on IE, it pops up a message saying:
You are using Internet Explorer, an unsupported browser :(
You should download Google Chrome so you can get started!
It's a pity that the site doesn't support the browser with the largest market share -- that's probably something you should work on.
Semi-colons are great for real programming. They help deal with ambiguity when you want to split something over several lines yadda yadda let's not have the debate here.
But I don't see it's utility in something like this. It becomes one of those "just because" answers if someone asks why you need to put a semi-colon at the end of the line.
I could understand it if it was pitched at an "almost ready to write real code", but from what I've seen, and looking over the chapter headings, that doesn't seem to be the case.
I guess really I'm trying to look at the balance between using a DSL in a real language and using a toy DSL with a simple syntax when introducing basic concepts and shaping how people think about problems.
I use "real" to mean anything written outside of the CodeHS playpen.
It looks like there are many, many implementations of Karel the Robot.
I first saw Karel watching the Engineering Anywhere CS106a videos provided by Stanford. That course was in Java but used Karel at the beginning to get students used to writing programs, in this case instructions to the robot. If things like why ; and what is this `public void` had to be introduced before the groundwork for understanding what they were doing, it was done with a 'do this and we'll be able to explain why shortly.' Which to me, is a perfectly valid way of introducing things.
Because the Karel implementation there was Java, controlling the robot was just Java. You learned Java syntax as you played in the sandbox. You used that syntax as you moved out of the sandbox.
FYI the semi-colon at then end of the lines, if I remember correctly, was explained with this is how you tell the computer in this language we're done with a statement. No different then us using periods in English at the end of a sentence, its just the rules of this language.
As an aside, I really liked the Stanford CS106a course videos. I think the instructor did a very good job introducing Java and programing in general.
I have a hard time understanding why on earth anyone would have semicolons and parentheses in a programming language for kids!
A comma, instead of a semicolon, would be much more natural for kids imo and the parentheses are just there to confuse it seems.
Just keep it as simple as possible and have the syntax as close to natural language "rules" as possible then kids might start to understand things better.
I have a very similar experience with "Teach the kids to code". When i was in 5th grade our school bought a couple of computers and started teaching Logo(http://en.wikipedia.org/wiki/Logo_%28programming_language%29). It was simple little language, and all of us were excited cause we could make computer draw something for us.
After that the curriculum for the higher standards moved more towards the MSOffice, Lotus123 stuff which really bored me out, so i moved my interest to physics.
Incidentally i was drawn back to computers for playing games(not programming), students exchange lot of pirated games. My curiosity with the computer was back when one of the games was not working on my dads PC. I had to learn about exe, dll(apparently games needed many of these strange little files), Direct X, opengl, screen resolution, and lot more stuff.
Before i knew it, many of friends needed my help to troubleshoot their PCs, which game me lot of PCs to do my hardware/software experiments with :). And i gradually moved myself to programming again.
My final year CS projects was a warehouse management system using RFID and Java. From Logo to Java it took me 10 years, it may be a slow growth according to HN standards, but teaching kids the wrong stuff will really turn them away.
I have a similar background, with my earliest programming experience in Logo, drawing fun shapes. I then got into PC games, dealing with batch files, config.sys, and HIMEM to extract extra KBs of conventional memory.
I got back into programming when a friend and I built a flash card program to help us study vocabulary and memorize Chemistry equations. Programming is fun when it has a purpose!
I think this is the real key. It's one thing to teach kids programming, but you cannot teach them why its useful in the same way many engineers discovered why it was useful.
I cannot agree more. Too many students find the subjects they are studying "pointless." Who will take the time to learn something they think (quite possibly rightfully so) is pointless.
Same here.. We had logo and a sheet of commands to help us draw shapes. I got into trouble because within 5 minutes I'd binned the paper and was writing my name. I was amazed by the keyboard and the interaction. I was making "Something" happen and I could see it. Straight away. Really got me hooked. Never looked back, I do programming for career / hobby. Just so happy really I had access to that sort of thing as from what I read, it isn't that common!
> I'm now glad no one ever introduced me to coding when I was a kid.
I wouldn't throw out the "learn to code" baby with the "poor rote education" bathwater. Clearly that's a bad approach and is pervasive throughout schools around the world, and we need to stop it. There are many ways to learn how to code, and we're constantly developing better ways to educate millions of kids (I hope). But asking programmers today the best way is survivor bias -- many/most of us are self-motivated and had to learn large portions of what we know on our own.
I wouldn't give up on your niece, either. Different people are motivated differently, and timing matters, too. She needs to find the right itch, and she'll soon learn to scratch it.
> There are many ways to learn how to code, and we're constantly developing better ways to educate millions of kids
Making it a compulsory part of education does not seem to be a "better" way to do it. Let's not push things that will be useless to most kids until they develop some interest for it, or for solving problems in general. Then you can bring programming as one tool to help solve issues, in a better/faster/cheaper fashion. Programming for the sake of programming has no meaning, just like we are being taught Math for the sake of Math. Education needs to be way more tangible and down-to-earth, at least for younger children.
> Programming for the sake of programming has no meaning, just like we are being taught Math for the sake of Math. Education needs to be way more tangible and down-to-earth, at least for younger children.
I think we're agreeing. I don't think it's useful to teach computer science at early ages, but rather using programming as a practical application of critical thinking, logic, problem solving, and mathematics. Completely agree that it needs to be tangible, with instant, visible results that they can relate to. I think the MIT Scratch project is a great approach (code.org features this).
If @kamaal's niece is drowning in pointers, they're doing it wrong. But I don't think that programming should be universally excised from the curriculum as a result.
> If @kamaal's niece is drowning in pointers, they're doing it wrong. But I don't think that programming should be universally excised from the curriculum as a result.
Teachers cannot be expected to teach everything well. I was also part of the 80s experiment in my country to have mandatory computer training as soon as primary school, using BASIC and the crappiest hardware available at the time (Thomson's !). The assignments were stupid, the teachers incompetent, and the students bored by what they were asked to do. If you want to teach programming to young children, you will find most of them have geniuine interest in video games and would probably enjoy learning how to program one from scratch, but no, Education is a top-down thing in most countries and the programs are elaborated by people who have no understanding of computing, of education in general and no interest to serve the students but rather show off how "progressive" they are vs other countries or other governments. How could positive results come out of it ?
I am rather for the accessibility and the awareness of good materials to learn how to code online, made to demonstrate how to build actual projects with it that can be useful in some way. In the garage programming days of the 80s what was missing the most is the ability to meet other folks like you who loved programming and to learn from them. Now, with the internet, that boundary is more or less gone and the sharing of up-to-date, re-usable, practical information does more good that all the training you can implement in schools, training which will go obsolete in a matter of years.
Agree completely about Scratch. We have a love/hate relationship with it--it gets about 80% right but it isn't pretty and onboarding is a struggle. Scratch 2.0 will be coming soon with some improvements but still in Flash (!!)
The great thing about visual programming languages is that kids can focus more on the concepts and less on bugs due to syntax/typo errors. We're working on one for the iPad called Hopscotch - gethopscotch.com.
Its not that we don't have the right tools to teach kids how to code, its that (as usual) we don't have the right teachers. I taught myself/was taught by my brother when I was in 6th grade. In high school, I took the compSci AP (and spent about half the time taking a nap). The year after that, I took the 1 programming class my school offered, which was a project based intro to programming (with an awesome teacher who made sure I got something out of the class).
What struck me about the class was the way it was taught. We used Java (actually, Processing [1]). In most of the early lectures (which there weren't many of), he would say 'for now, this is just syntax, it will make sense later' instead of explaining the more advanced concepts needed to understand why we write certain things. The main flow of the course was (I am inventing the details):
Calling a function tells the computer to do something. Here is a bunch of drawing functions, make a picture.
Then, using that he would ask students to make minor changes, like shift the entire thing 5 pixels.
Then he would introduce variables and assignments.
Using that, he would ask them to draw parallel lines.
Then, he would introduce loops.
Then he had them make a bouncing ball simulator (just 2 balls)
Then he introduced objects
Every time a new concept was introduced, its use and benefit was clear because people had already seen the code duplication that it solves. After the initial lessons (which only took about a month), the class was pretty much entirely project based, where we were given (loose) guidelines and had to design and code a program.
Most of the time spent in that class was problem solving. Because math is an incredibly powerful problem solving tool, much of that time was spent doing math. But it was spent using math as a tool to solve a larger problem.
After (and during) that class, many of the other students (whom had never coded prior to taking the class) asked me for advice on programs they were writing that were completely unrelated to the class.
So, it is quiet possible to teach kids how to code without scaring them off. It generally helps if you don't show them pointers, or bit shifting, or linking, ETC until they are ready.
This is a very valuable point of view. Everyone understands that coding is only going to become more relevant to the world as a whole, and those who understand coding remember how empowered they felt when they first began to think about solving problems from the point of view of a program. It seems obvious that we should teach programming skills as early as possible to capitalize on the "magic capacity for learning" that kids have. We know this works for language. But does it work for abstract thinking?
No one remembers how they learned things at an elementary school age. I think the reality is our understanding of concepts was very muddy at that age. Thinking about abstract concepts still requires a lot of context that kids don't have. I'm not sure kids can really grok the importance of the abstract concepts in programming, and I'm not sure that importance can be taught directly. I think the ability to grok those concepts comes from a bank of general world knowledge that must be slowly built up to in adolescence.
Teaching programming early on may give kids a few worthwhile mental tools, but I'm not sure we can expect kids to get any magic "fluency" benefits the way we can with language. The risk of turning kids off programming by forcing them into it early may outweigh the benefits.
Math was supposed to do everything that you talk about. Yet it hasn't. Despite people seeing some influence of math in Physics. Except that Math hasn't and probably never will.
If I tell you I'm going to teach how to play the piano, you may love it. I can also probably teach you some boring music theory along the way. But if I teach music theory for the next 10 years, without ever making you hear the sound of a note you are likely to end up hating music. Even later if you see or hear some playing the piano you will live with a assumption that music is all about boring stuff so will never develop a liking for it.
We don't force feed anything, and everything is motivated because it's fun. We teach problem solving through coding, but it's really simple at the beginning, so you don't get intimidated.
It's motivated by teaching you that programming a computer is like teaching a dog how to do tricks, which kids can identify with.
Seriously, actually try out CodeHS because it's not what you think it is. It's actually fun, and I bet you'd wish you learned it when you were a kid.
And if you don't want to try it out, that's fine. Just know that when people say we should teach kids to code, we don't mean symbol manipulation or boring math. It can be fun, and we're doing that.
> And oh, by the way. Next year they are about to be taught Java. I can only imagine the horror, the way kids of going to deal with the text walls full of verbosity, API dance and the XML mess. And the last time I heard they don't really use IDE's.
> One thing that I'm convinced is, after this episode due to all this trouble and trauma of having to learn this, she clearly doesn't enjoy, she will hate programming and hope she never has to deal with it again.
School sucks.
It's ironic how people passionate about some subject immediately want this subject to be taught in schools, even though most of them likely learned this subject outside of school and they should know better that compulsory schooling doesn't work.
> My niece here in India is around 12 years old, and she is being taught C programming back in school(She is in 8th standard, or 8th grade as per US terms).
I have been in those Indian schools, and it's not what you think at all.
Did you check the portion/syllabus that is to be covered in 8th standard?
In my experience (7 - 8 years ago): Max they'd go is loops, preprocessing directives. I doubt they'd even write a function (not complex ones that return stuff anyway, forget call-by-value, call-by-reference)
> And oh, by the way. Next year they are about to be taught Java. I can only imagine the horror, the way kids of going to deal with the text walls full of verbosity, API dance and the XML mess. And the last time I heard they don't really use IDE's.
Teachers here are fans of "do it in text editor, so that you don't have autocomplete to guide you" (where normally text editor is Notepad (Windows)). I can assure you they aren't going to deal with anything like APIs, XML.
Java courses in India are a lot like "Rewriting this piece of code we wrote in C++ last sem in Java".
Also, computers in schools (state boards at least) are not a marking subject where you score out of 100 or 50. It's a graded subject (falls in the domain of physical education, crafts: generally ignored academically).
Indian education system has bigger problems anyway. Be assured this course is not what these guys at code.org are talking about.
EDIT: I am not being negative, but you'd rather take opinions of a person schooled in India (Mumbai, not Delhi, but more-or-less the same thing leaving out subtle differences) than an uncle of a student who only knows the name of the subject (analogous to courses in college).
The real issue here is that they are trying to teach a subject which is by itself already very abstract, with poor tools. C may be a fine language for doing low level work, but in this case low level is exactly what you should be striving to avoid.
I started programming at age 8 - and didn't know that it had a name. All I had was a Basic manual, then assumed that's how the computer was supposed to be used (no graphical interfaces at the time).
By age 11, I had moved from Basic to Turbo Pascal and was writing my own 'units' in Z80 Assembly.
However, despite several attempts, I could never grasp C for some reason, until university. And then it just clicked. It is as if some very important part of my brain was not ready yet for it.
I am not too fond of logo-like languages, except to teach the very young. I believe it is best to get them an environment which is already bootstrapped and ready to work, but that won't hold them back if they decide to do some exploring on their own, so it should be a 'real' language. But a simple one, such as Python or Lua.
The fact that they are starting out with C is borderline criminal and will backfire.
I'm fourteen. And I code C++ and understand everything flawlessly.
If somebody isn't learning how to code (or how to do anything, really), it's either because of one of two reasons:
a) they don't want to learn how to code
b) they're unintelligent
I'd say ~90% of kids fall into the former group. Coding is not something that you can just pick up a book and learn; it's something that takes time. It takes a hell of a lot of dedication, practice, and failure to master. Compare it to learning a spoken language; conventions of that language are likely different from English or whatever the learner's first language is, but the structure of the sentences, unless you're learning Hebrew or Yiddish, is more or less the same.
With coding, it's a mess. Nobody knows how to relate block structures to anything they've learned previously. It drives you insane for a while, but you warm up to it. It took me 3 years to finally understand many concepts that were presented to me in the many books, manuals, and docs that I perused throughout my learning experience.
And even then, I'm not done. New things are constantly to be learned, and everything I've learned I have to constantly apply to something else. If I want to learn to write GTK+ programs, I'll have to go back to a reference guide to see what several function calls actually mean.
Coding isn't impossible for kids to learn. While it is hard, it's not impossible. Start out with something like FBC or Scratch, and then give them more control through Python, which will guide them towards more complex languages like C/C++/Java. Anyone who starts teaching an 8th-grader how to code C/C++ with no prior experience, is frankly an idiot. Interest in coding is never ephemeral iff the learner is introduced to it properly.
No Khan Academy resources are not going to help. Let me tell you why.
If you try hard, you can teach some one 'how to code' but no matter how hard you try its not possible to teach some one 'what to code'. Or in other words, 'what problems to solve using coding' else everyone would be a Nikola Tesla.
Its easy for us to solve problems like 'Parse this XML and do X', for kids its impossible to even understand this, or why this should be done. The other stuff like sorting, factorials etc math stuff is the least they are interested in. What else, 'make this cat go around the well 5 times' kind of problem that MIT scratch deals with is a little interesting to small kids, beyond this age- teenagers or kids around who are trying to prove to the world they are not kids find it intellectually insulting to even look at it.
But there are problems kids like to solve. Consider things like Lego, or Origami. Or building an amateur radio by assembling stuff. Or learning to repair a device X. Kids see adventure in such things and a very visible physical product they are working with or towards. There they see a problem, and method follows thereby. In coding you focus on the method and not the problem itself.
As programmers we think our profession is the greatest(Just like every one else). The fact is you could say the same about nearly every job out there.
I don't think the issue is either explaining to kids "how" to code, or "what" to code, but rather "why" to code. We all know why, because it's super awesome and rewarding. The problem is that it's also extremely frustrating, and maybe not everyone is a natural born programmer, that's ok.
I think the reason I always loved programming is because I love computers, a lot. I think kids these days are growing up with technology at their finger tips, computers are second nature to them, and they like technology because it's cool, and yea you can play games on computers. I wonder, how many people in this thread got into programming because they wanted to make a computer game?
When I was a kid I hated math, it felt like nothing more than an exercise in taking orders and doing something for no reason. Every year I would ask my math teacher, "why are we learning this" and no one had a good answer. I really wish someone had been there when I was younger to show me how amazing math can be if you have the right attitude about it; and when I was teaching I always tried to be that person for my students. I know I was able to get through to a few of them at least.
Computer science classes literally make people hate computers, and that makes me sad. I mean why on earth do they make you learn java in school, are you kidding me!!? It's like not enough to ruin math for generation after generation, now they are ruining computers too. What a shame.
When I was teaching physics I used to tell my students "look, you like south park right, well imagine if 200 years from now you had to study south park in school, but instead of watching the episodes and laughing your ass off, you had to memorize a list of every characters name and random facts about them, and then you had to take a test that quized you on how well you had memorized those random facts, and if you didn't do well you got punished by your parents. Well that is exactly what has happened with math and physics."
We don't need kids who know "what to code", we need kids to want to because they think it's interesting and fun. Lots of kids these days already love computers and technology, it's up to us not to let the way programming is taught ruin that for them.
Khan academy for sure can help, if the video's are done right.
I really agree with what you are saying. Not every person will have inclinations to do programming for a career or have it be their passion.
I would say that the goal of any of these initiatives should be to expose the kids at a young age and let them see that it is out there.
I fully starting engaging in software development in University. I know that if I had been exposed to learning programming in a more fun way earlier, it would have been something that I would have really enjoyed and continued.
If a young child has the inclination for it, it would be such a privilege to have them start their journey of learning at a younger age. These are the kids that I want these initiatives to catch. For others, it would be great to have them exposed to it right away too and realize its not for them. There is tremendous benefit in knowing what you don't want to do so you can quit and try something else.
I think your misconstruing the purpose of these initiatives.
The purpose is not to turn the kids into programmers at a young age. The purpose is to EXPOSE them to the world of programming.
You're not going to make coders out of them in elementary or middle school. But you might make them more INTERESTED in pursuing further programming education in say high school. Mission accomplished.
Agreed. The fact that I could be a programmer clicked for me only because I made pretty complex TI-89 calculator programs and games in HS. I thought I was just dicking around, but later I was like "wait, this is programming? I've done this before!"
Kids don't need to learn C or parsing XML. In fact nobody needs to learn to parse XML because either put that data in JSON or GTFO.
But seriously, no it's not concepts like that that matter. That's syntax and strategy. It's "here's how to talk to computers, and here's some aspect of problem solving".
Teaching kids to solve problems and how to think is part of every single subject in school. 100% of them. Coding should have this as a part, history should, english REALLY should, etc. But the primary function is to introduce how to talk to computers to kids, the secondary is how to talk to computers to solve problems.
Kids view programming very similar to the way they see math. They find themselves manipulating things/symbols/stuff without understanding why, for what, or even why its even relevant to them.
Indeed if young people have that kind of mathematics education, then they are likely to find programming boring and off-putting. But some young people learn math as something to play with, all along asking themselves why the math "rules of the game" are the way they are. Such experiences in math help young people learn and enjoy programming at a younger age. It's all problem solving--that is, it's reaching a higher level in a game. For some people that is a lot of fun. I've seen this kind of educational progression in someone who first started learning serious programming in a C course
Do you think a simplified assembly language would be better? I think a high-level language is generally good for teenagers or older. But maybe starting with assembly is better. It's actually a really simple language to learn (if you focus on a small subset) when you just want to do simple things. And it removes a lot of the magic that higher level languages have which could confuse things for kids.
This is one of the reasons I'm interested in http://0x10c.com/ , when it ever comes out. The assembly language for the game's DCPU-16 is fairly simple. Currently it does take a bit too much to get output on the screen, but with better tooling it could be a viable first language.
When I was your niece's age, RPG Maker, FKiSS and LEGO Mindstorms were all plenty of fun, and very accessible. I think a big part of the problem is that many adults aren't aware of all the options, or they turn up their noses at certain kinds of programming. Like it's somehow less valuable if the language learned is domain-specific or visual.
Has anyone tried starting a kid with vim-adventures?
I remember playing zelda and mario with harder problem solving (including some injected just to make you call the nintendo hotline). Vim-adventures is fun, it would teach abstracting and building combinations, and it would provide a useful skill that gives them a 'magic power' in other people's eyes.
I was full for this 'teach kids how to code' thingy. But I think we have got this all wrong. Heck we don't have the right kind of tools to teach kids how to code. In fact I have now realized that you can't and should not teach kids how to code. You rather must teach them how to solve problems. Math was supposed to deal with that, but unfortunately that turned out to be complicated symbol manipulation if not for anything else.
My niece here in India is around 12 years old, and she is being taught C programming back in school(She is in 8th standard, or 8th grade as per US terms). No she generally comes and stays with us in the summers. So last time she came over for a month's holiday she bought her laptop with her and wanted me to teach her to program in C.
The net result is disaster. I tried everything possible. Every other trick in the trade. Even tried to start with Python first and not C. But I figured the nature of problems is something else. Kids view programming very similar to the way they see math. They find themselves manipulating things/symbols/stuff without understanding why, for what, or even why its even relevant to them. They struggle to understand where or why should you use an if/else/switch statement, or a for/do/while loop. Its difficult for them to map solution patterns to a code pattern.
Its not their fault. Its ours. Better luck trying to explain a kid why they are being asked to write a program find greatest of three numbers, find factorials, or sort numbers. To them it very clearly looks math in a different language. Its that boring math thing all over again.
Much complication starts when stuff like pointers is pushed down their throat. Or something like bit shifting. Oh and yes, they start asking things about the process of compiling, linking etc. Or why they need to put a #include at the start of a program. You can't honestly explain all that without explaining them some underlying stuff.
Beyond all this it needs to fun, which it very clearly isn't.
What kids need to be taught is how to solve problems, even if it means repairing a mechanical watch. Instead what they are being given is math in a different dose. And trust me at that age, they don't really like doing that.
And oh, by the way. Next year they are about to be taught Java. I can only imagine the horror, the way kids of going to deal with the text walls full of verbosity, API dance and the XML mess. And the last time I heard they don't really use IDE's.
One thing that I'm convinced is, after this episode due to all this trouble and trauma of having to learn this, she clearly doesn't enjoy, she will hate programming and hope she never has to deal with it again.
Because last time I talked to her, she told me she wants to be a journalist. That's how much damage 'Teach kids how to code' has done.
I'm now glad no one ever introduced me to coding when I was a kid.