Code.org – Dedicated to growing computer programming education
code.org
code.org
The altruism of it all stinks. The meme is being pushed by parties (non-profit or not) looking to gain from teaching people to program (after convincing them that they absolutely should). While it's true that learning to code is beneficial to some (I don't doubt that) no one talks about how these friendly, helpful, code tutors might be exaggerating the demand for reasons of their own. While you might be trying to help people out, you're also trying to push your startup or non-profit.
I like the idea of better aligning education with job demand; something I don't think higher education institutions are particularly concerned with. That's practical and I wish we did more of it. Similar to these learn-to-code websites, colleges could care less what you do with yourself after you've paid your tuition.
What I liked about the code.org celeb video were the recollections of first programs. Like a first kiss, you never forget your first program. No matter how simple it is, that feeling is awesome. And if you're made for it, you want to do more, you want to make it better. That's the spark that, if you have it, puts you on the unending journey to being and becoming a coder.
Would certainly be nice if others similarly inclined can experience it, but the whole "literacy" meme is simply annoying at this point.
I believe Douglas Rushkoff was pushing it at least a year before any such parties existed, in his book Program or Be Programmed: http://books.google.com/books?id=SB474JCHewcC
We're focusing on making it really fun and accessible to learn to make really cool programs really quickly while learning the fundamentals and getting a strong programming foundation.
One of the keys to our site is that tutors look at and give feedback on all the code thats's submitted by students, so if you're interested in helping kids out, it would be awesome if you wanted to help tutor.
We're currently testing out and building lots more tutor features, so your feedback and ideas would be greatly appreciated. Go to http://codehs.com/tutors/ to sign up if that interests you at all.
One thing we are planning to do (in addition to just paying cash) is to give students credits to continue learning and getting help from tutors when they help students who are further behind than they are. That way, students can help each other.
Giving credits for getting more advanced help sounds like a good idea, though.
Many times, they can't even form their question any better than "My code is broken. What do I do?"
Having someone human there both gives them the answer much better than they can find themselves and gives them the knowledge that someone is there to help them, so they don't give up.
Yes, some people will be able to figure things out themselves, but having someone to help the rest of the people can be invaluable.
I've taught intro CS for three years at Stanford, and even there, most students get stuck and need help to get through the intro class. The reason they have been able to (the intro CS class is the most popular class at the school. About 90% of all students take it) is that there is an extensive support network of student TAs that are there to help them.
We're replicating this online for all the "normal" kids who can't just "figure it out" themselves without any direction.
Yes. Even if the human doesn't actually give you the direct solution to your problem, but just reassures you that you are on the right path and with a bit more thinkingn you will overcome the current obstacle. (Or points out to you when you are blatantly wrong.)
Having confidence that there is a solution is often half the battle to finding one.
Don't underestimate the utility of a teacher.
Later I had been on the other side, too, having acted as a mentor for some learners. There is value added in connecting people. Just instilling the right values, and culture, and giving people pointer to the right resources. (E.g. friends don't let friends start off with PHP.)
What do you think about the Khan Academy CS stuff?
It is a tricky business you are in, but could work out very well if you can harness the power of community. You should focus on this idea "give students credits when they help students who are further behind than they are".
I would suggest a slight change in the term "credits" to distance yourself from the money=knowledge associations. Think more "pay it forward" economy where you earn points by helping others. Seeding the economy with a bunch of paid Tutors could get the economy started. Tutors will just earn "help points" in the system like all other students but they will sell them to you.
To get an exchange economy going you will probably need to move away from the crippleware approach(http://codehs.com/pricing). You should offer the real service (answering questions when you are stuck), and after users use up their free points ask them to help others.
In terms of the Khan CS stuff, I think their editor is really really cool. They have a lot of cool real time features and number scrubbers and color pickers. I think it's just a very different approach to teaching than we have, where theirs is very much based on tinkering, which I, personally, don't think is as good. Definitely a really cool tool though. We've gotten a lot of ideas from it for how to improve our editor.
I contacted the principal at my kids elementary school and offered to use my expertise to help any way I could. We get so caught up in what we're doing, it's easy to forget that just a small bit of effort can have a significant impact on peoples lives.
I like this initiative. For some reason it brings up a lot of cynical responses, but if you really think about it, it's a pretty good thing to encourage young students to learn at least some coding.
So I'm in support of the idea fully, though like barbs I think the video is fluff marketing bullshit that paints an inaccurate picture of most software development.
When I was a student, there was a similar push for teachers (a field also having a shortage of people at the time). The result is that I have several friends who are fully qualified to be teachers that haven't been able to find work in the industry for many years now.
I agree that simply having programming in school isn't going to see everyone becoming programmers. Programming has been offered in the schools here since at least my father's time – though there does seem to be a disproportionate number of programmers come from my region, for what it is worth. However, code.org specifically does seem to come with the purpose of trying to bring more people into the industry.
As elitist as it sounds, there are lots of people who simply just can't program [1], and promoting programming as this lucrative, creative endeavour that doesn't require much skill might misguide people into career paths that don't suit their skill set. Not to mention introducing a bunch of terrible programmers into the workforce.
[1] http://www.codinghorror.com/blog/2006/07/separating-programm...
For as many people that might be brought into programming who can't actually do the work, the goal should be to bring in just as many if not more people who never realized they could do the work and enjoy it.
The software platform could be open sourced. Maybe even written in the programming language that students work in so students could modify it and submit patches, but also to mess with their little minds and get them thinking about self-hosting compilers.
And how much would this cost if done correctly? It's probably a terribly small figure per student over the course of their education. It may even save some money on textbooks if it's a tablet device to double as an e-reader. Maybe even more if those textbooks were open sourced and not sold at laughable prices... It's amazing how far we are behind at present.
My fear is that people assume (good or bad) that every student will come out a programmer, which is just missing the point. EE/CS degrees would be worth even more in such a world.
Newtonian physics (generalized from projectile motion): Using with these 3 obvious facts (maybe a historic tangent on how they are not obvious), we construct new rules that describe the way things work. Don't believe the results? You agree with these 3 assumptions right? Is their any flaw in your work? Then your result is correct, is their a way we can go about testing it?
Good job working with Newtonian physics. Now, say that their is wind blowing 5 mph east, how does this effect our results? Well, the coefisiant of wind resistence for sufficiently slow speeds are _. Wait, we already know how to do this, this is just another force, moving on...
If you take a code first approach, you routinely miss the good stuff.
Most of this "math is too boring for anyone to want to learn" stuff is a cultural issue anyway. It also might be a mass education issue. Either way, programming is not some special snowflake subject to solve such issues.
England lacks proper financial education too, it wasn't until I was 18 that I found out how taxes worked, up until 18 I thought the taxes paid were flat rate (eg: 20% on everything or 40% on everything, vs. 20% on the first x...). Recently the company I work for offered me a pension plan, after talking to a financial advisor I discovered just how valuable starting a pension young is, up until that day I thought a pension shouldn't be a consideration when young. Super simple and super important things, completely ignored by education.
Thankfully for England there is a really great consumer rights person called Martin Lewis that does a bunch of consumer finance things and recently he's been pressuring the government to introduced compulsory financial education to schools and it very recently was confirmed there will now be compulsory financial education in British schools: http://www.moneysavingexpert.com/news/family/2013/02/financi...
I do hope more young Americans realize the magnitude of obligations that they commit themselves into though. I've heard many stories of students enrolling in an expensive arts degree and then dropping out later as they realized just how much they would owe at the end of 4 years.
Or at least they'd be looking at different ways of financing college that didn't leave you with an incredible debt burden that prevents you from establishing a reasonable rate of savings.
Great universities are a tiny minority, and you're right -- they'll likely be fine. Likewise the local community colleges that focus on teaching and job skills.
The Southeast Directional States, on the other hand, are in big trouble.
(Yes, that's Senator Elizabeth Warren.)
The Balanced Money Formula they present in the book is the most realistic and least gimmicky financial management system I've ever encountered. The book is a quick read -- I finished in a few hours -- and when I was done I had a very clear picture of what things were putting my finances out-of-balance and what I needed to do about it.
For me, the answer was to pursue better paid work in a more affordable city. I have since achieved those goals, and as of last October I am pretty well in balance -- I still have some debt, but there is enough room in my monthly budget to both pay it down and save for the future, while at the same time having enough money for my must-have expenditures and a healthy budget for "wants". IMO the wants budget is one of the best parts of the Balanced Money Formula -- Warren and Tyagi assert that financial asceticism is counterproductive and that everyone deserves to have a wants budget, no matter their income.
There are a handful of books I've read that I consider to have changed my life, this one is ranked #2 or #3 in that list.
What needs to be taught is delayed gratification, not needing everything and anything that will just get discarded or disregarded five seconds later. That, that right there, is corporate America's nightmare, Americans that stop squandering their money on inconsequential things. Could you imagine what would happen if Americans even started..... dare I say it.... save money.
Not everyone needs to learn to code. I agree that exposure to it and a basic understanding of it is good, just like other disciplines. But this is already happening! I learnt LOGO in primary school and then mindstorms, VB and HTML in high school. And so did everyone else, they weren't electives.
Second, learning to program doesn't have to be the same as learning to be a software engineer. It's vaguely akin to basic repair skills. Knowing how to automate aspects of your work on a computer is extremely useful. Programming is applicable to almost every remotely technical career path.
Also in the 7-10 high school syllabus there are options for projects that include: AI simulation and modelling, multimedia authoring, database design, website development, networking, robotics and software development and programming. http://www.boardofstudies.nsw.edu.au/syllabus_sc/pdf_doc/inf...
In years 7-10 I found myself helping other students in the class just like yourself. Even though our teacher had formerly held a programming position. That doesn't validate the need for it though. That just shows that it is a very alien topic to most people and that you can't have a single teacher give personalised help to a class of 30 kids.
It's just not the same. There is no base subject to springboard into the rest of the subject like other subjects do.
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.
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.
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.
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.
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 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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
You might also be interested in Core War, a game where you create assembly language programs and battle them with other programs.
corewar.co.uk
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.
> 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.
Try our demo on the code.org page http://www.code.org/learn/codehs
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.
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.
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).
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.
Careful. That may make you vulnerable to them.
> 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.
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.
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.
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.
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.
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.
Thanks! :)
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.
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.Off topic, but curious: why does the language have semi-colons?
Also, significant whitespace is a pain in the ass.
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.
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.
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.
We can do better! Why not just `move`, `turnLeft`, `putBall`, and `takeBall`?
Better yet, camelCase is kind of weird. Why not `turn left`, `put ball`, and `take ball`?
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
http://epgy.stanford.edu/courses/cs/
at about eighth grade age. It can be done.
> 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.
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).
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.
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 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.
Every single person on their advisory board (http://www.code.org/about) has a vested interest in there being more programmers competing for jobs.
I feel like they are misrepresenting the nature of most programming jobs to the general public.
They prey upon people's fear of unemployment and cite numbers about there being fewer programmers than jobs. Nearly every single person in that video has explicitly said they only hire the very best. My guess is that we'd still end up with legions of unemployed people that happen to be mediocre-to-awful at programming.
I think it's much more likely exactly what you see - they want more people to code because they believe everyone should code, and many people will like it once exposed to it.
FWIW I'd expect many of the featured people to be thinking much further ahead than 12 years.
Probably true. For all the hype around the job market today, generally speaking only talented developers find employment.
The rest tend to end up in other fields or unemployed. I can only imagine what the market will look like when the talent pool expands.
There are always going to be those that are not interested in coding. Forcing anyone to learn something they aren't interested in is just a waste of everyone's time.
If you give kids the resources they need to get started and a good environment to experiment in they will take care of the rest.
However, I'm concerned that this isn't the goal. Lots of the video refers to a great need for programmers. It sounds like lots of the interested people are more interested in preparing students for a career in software engineering,
That could be the case. Programmers are expensive because there isn't enough to meet demand. If you can get a lot more people interested and entering into the market, the cost will go down. I would imagine an employer would prefer programmer's salary to be more in line with what a typical employee's salary is. If there is an end goal, it would probably be to make programming an expected skill set in addition to a specialty, rather than a specialty in of its own.
Because schools suck at teaching (because they feel like glorified prisons and lack resources due to ignorance and bureaucracy) we must fix/replace schools before “teaching” kids to code, otherwise we will fail.
Also, this illusion that low-level languages like C are any less suitable for introduction than other languages is yet another barrier, I learned in assembly, and I would probably prefer to learn in C, since it's very simple, clear-cut, and consistent. No namespacing, very little context, very little syntax.
The best way to teach any skill, is to provide resources and motivation for the completion of real, practical tasks. In software we have the unique opportunity not to break anything real when we build something equally-so.
Codecademy and Khan both do a great job, but neither has any/proper support for Processing or Java, which is what the courses at my university revolves around (there's a bit of drawing on Khan, but in no way enough to make me anything close to comfortable with the language).
In short, what really prevents me from speeding up my learning is content. The will is there, and I believe it is for a lot of other people as well.
(btw, yes, i can look up double arrys on processing.org but trust me, it can very difficult to implement their content when it does not relate to your own project. That's why guides are so good. This is not good: http://docs.oracle.com/javase/tutorial/getStarted/intro/defi...)
Google search and PHP.net documentation have done more for growing computer programming education than any project like this.
We need more great documentation resources, and less "let me hold your hand" tutorials.
I'd like to see more things like this happen in schools, but it's hard to find the time and money for ~10 mindstorms kits in every classroom.
If they are young, its the optimum time for language acquisition. So, it may be easier (and have more side benefits) to teach them English and then programming rather than creating a customized programming environment catering to their native language to use to teach them programming.
I just wish someone had edited Will.i.am's quote though... I think he thinks 'reading code' is like reading music or something...
“Here we are, 2013, we ALL depend on technology to communicate, to bank, and none of us know how to read and write code. It's important for these kids, right now, starting at 8 years old, to read and write code.“
WAT
That is, probably not text-based.
I feel that.
As others have pointed out in this thread, the incentives behind folks pushing the "learn to code" idea are varied: some people want more engineers to hire and some people want to sell to those learning to code. These seem like reasonable criticisms, but I think they miss the point.
Many of you, if not most, are in the software industry. You try to solve interesting problems every day, or, at least, you'd like to. Every industry and every field has the need to solve them, at least with my definition of 'interesting'.
Solving such a problem is difficult. It requires knowing very clearly about the rules of engagement, and mapping out strategies for tackling the issue. It requires an understanding of the lay of the land, but also the capacity to think outside the box. In short, it is exactly what all of you would expect from a 'good' programmer - the ability to think actively.
You'll notice that I make no claims of this sort about physicians. The best doctors may do these things, but most doctors don't. And at the very least, doctors certainly are not trained in ways of solving problems effectively. Instead, we are mostly trained in pattern recognition.
So what? Do I think a doctor would benefit from learning to program? Yes. Because figuring out how to writing a complex program is not so different from doing a complex surgery. Understanding algorithms is not so different from producing a good differential diagnosis. Most importantly, if we want to solve big problems we can't always rely on an engineer from the outside looking in and solving it for us.
Programming forces you to explain your understanding to something that is very stupid (in a way). If you don't understand what you're doing, your program doesn't work. That basic check doesn't exist for doctors. Ask your doctor what a graph of y = 1/x looks like. Then ask him to graph alveolar CO2 vs ventilation. You should be really afraid of how many doctors only know the latter. I would guess some of them even wouldn't know that! (but they probably know what to do with a patient who's hyperventilating, because they'd memorized it)
Programming is the means to the end, not the end. All this talk of APIs and IDEs and C vs Python vs Javascript really seem to miss the bigger picture here. The best way we have of teaching thinking is with programming (IMHO) and there has to be a way of teaching programming by getting all of the annoying crap out of the way. And we desperately do need more people who have the capacity to think and solve problems. Maybe not will.i.am or Chris Bosh or even software junkies in the valley, but definitely in every other industry.
EDIT: small grammar edit, no content change.
[0]https://github.com/AltIvan/programando.la (MIT License)