My office gets involved with the "First Robotics" competitions and one thing that lingers year to year is the students typically have no preparation for doing even simple programming as part of the public schools system. While the science classes provide some basic grasp of mechanical and electrical concepts, by in large computer programming gets no coverage from the curriculum. (This my be different in other areas of the country/world.) What makes it worse is there is only a short period of time you have to prepare the student's and help them design the robot.

Talking to some professors from local colleges, it's a problem because you can't assume even the most basic understanding for freshman CS majors. Languages like Python, Lua and BASIC are simple enough for at least high school level students, if not younger.


So how do you get public schools to support a programming, at least to the level of "Try it in BASIC" examples that used to be at the end of a chapter in my Algebra book?

At least enough to prepare them for event's such as the FIRST Robotic competitions. Which the primary objectives are to teach problem solving and team work, and to possible foster an interest in Math, Science and Engineering in general. (Not force feed to them, as some people her seem to be implying.)

Edit: Why teach kids: (Since 2000 CS enrollment in US colleges has decreased by 70% while college enrollment has increased, this is a PROBLEM.)

Saying there is no value in teaching someone programming in Jr./High school because they might think "they know programming." Is like saying there's no value in teaching High school science and physics, because they might decide they "know physics." Leading to abuse like: "I passed a high school physics class, I'm going to develop a Unified Quantum Gravitational Theory."

Better Prepared students are better students.

Instead it would allows college programs to raise the bar on the entry level courses, allowing students to be weeded out based on their understanding of more advanced material. Plus people who did poorly in that in topic in High school aren't as likely to say "I think there's money in computer's so I'll computer science." Plus if people take it in high school and decide THEN that it's not for them, it's better than them wasting their money to PAY a college to figure that out. The result is that people who take the degree are more likely to succeed and be there for the RIGHT reasons. (i.e. It's what they REALLY want to do. And that's REALLY the key to being good at anything.)

Programming is like anything else, the more practice and genuine interest you have the better you get. If you start them later, they get less practice. The earlier give them the opportunity to start, the more practice they will get. All other things equal, the more practice the better the programmer.

+18  A: 

...won't these guys be competing with me for my job in 10 years? Let's teach them COBOL.

+1 for comedic value
I honestly can't wait for the day when I get to be that old timer sitting in the best office in the building because I'm one of the few left who knows how to write .Net code. I'll scoff at all the young kids and their fancy functional languages. "In our day we had to manage threads!" I'll say.
Spencer Ruport
@Spencer: "Kids these days... never even heard of a 'socket'." *grumble*
ummmmmmmm yeah, Milton, we need this space so I'm going to have to ask you to move to the basement.
Raj More
Sad but true, darn whippersnappers!
Ugh, it's kind of tiresome when these comedic answers get put at the top.
Yes, they will be competing for your job. So keep your skills current and make it a real competition.
Jeff Barger
I know, comedy is soooo dumb.
@imagist I do find it somewhat annoying that my attempts to give actual advice rank a 3 or less 90% of the time, while my answers with a high snark quotient do substantially better. But I hate neither the playa nor the game... people just enjoy being amused, I suppose.
+5  A: 

I got involved via a passionate teacher. Which I guess is how it always goes, regardless of the subject.

At some point though, it is the responsibility of the student. There are free seminars at local libraries, there are free online courses. The barriers to entry are pretty low. It takes only a little interest and initiative on the part of the kid to get going.

EDIT: I guess if you wanted to generate some interest in your own community, you yourself could organize and lead a free seminar at the local library. You could also lobby the local high-schools, or Junior high schools, to introduce programming curriculum. In some areas, electives or optional courses can be taught by volunteers. It's almost like a club. The elective might entail 1-2 hours of instruction per week, either before or after core hours in the school. Then as interest builds, you could move the elective into the official curriculum.

If you wanted to generalize this, you could build a network of like-minded interested people, each of whom would be responsible doing similar things in their own town or city.

If you find a passionate teacher, then definitely latch on to this. Sometimes that's all it takes to get interest pushed further up the chain.
Jason Mock
There was no CS or programming in my high school, until a teacher with a CS degree proposed and introduced a programming elective. I took it instead of Home Economics. We had TRS-80's the first year, and we moved to Apple ][ the next. With the Apple's we used UCSD Pascal, and talked about p-code and virtual machines. This would have been in '87 and '88. It was all driven by one passionate and smart individual teacher.

One definite area is to improve overall interest in Computer Science and Software Engineering as a whole. Sometimes it starts with nothing more than building a club (I.E. when I built rockets in elementary school), which then goes out and makes some cool examples of what you can do with those skills. Hopefully this would then spark interest in the students around them and hopefully faculty (I.E. those defining curricula).

Another area would be to improve the relationship with the College Board, which administers the Advanced Placement (AP) program. A recent article published by 'Communications of ACM' titled 'Why Computer Science Doesn't Matter' reports that because of a lack of interest in computer science, it has been dropped to the same level of importance as Latin. This article (which I will try to find the URL later if I can) covers what ACM has tried to do up to this point to provide data showing the importance of such a skill and what could be done to improve the situation.

Overall I think the main issue comes down to sparking interest and improving subject matter knowledge for both the students and the educators.

Jason Mock
+18  A: 

Honestly I don't think we need to or even want to.

Hear me out. In the past few years there has been a serious increase of people running around with computer science degrees who have no business working as developers. Most decent developers will tell you that 90% of their working knowledge came from a $5 book they found on a clearance rack and a few thousand hours of taking on random projects for fun while the other 10% came from listening to/reading materials offered by real professionals. Those of us who have a passion for this line of work have not been hindered by the fact that our high schools didn't offer any classes on the subject. All it would do is further inflate CS degrees and we'd have more people thinking "I know programming! I got an A in that class."


Perhaps my experience has not been shared but I've seen some really bad code out there. The people who know nothing about coding are never responsible for this kind of thing. It's always the people who know somewhere between nothing and not enough. If everyone is required to learn some amount of programming that's exactly where everyone will be. It's a strange phenomenon that people who recognize they aren't passionate enough about tiling to redo their bathroom cannot recognize they are not passionate enough about development to write their company's web billing system. If you're recommending the basics of programming be taught to everyone, by the same token everyone should be shown how to glue tiles to a wall.

This isn't elitism. I'm merely recognizing these skills demand far larger time commitments than can be required by any class. For those who have no interest in pursing application development the time spent in these classes will be wasted or worse detrimental. For those who do wish to become developers the time would have been better spent tinkering around on their own. I see no benefit here.

In Conclusion

You don't want someone who got an A in highschool "Surgery 101" to attempt a surgery on you, nor do you want someone who got an A in highschool "Programming 101" to attempt to write your billing system. Teach them how though and people will try.

Spencer Ruport
cannot agree more. No need to crucify kids in high schools with programming knowing that it gives no effect.Only those who want to learn it, will take something out of it but consndering that they are interested, they will know much more that you can ever squeeze into the high school class. Everyone else will hate everyone for having that class and will learn a huge donut hole.
We don't wait til college to teach addition and subtraction to math majors. Part of the problem with the quality of students be generated by the college system is they are too far behind by the time they start, so we dumb down the classes so they can still pass the majority of students. Starting at a earlier age, would increase the "low-water" mark in the expections for entry into the major.
Plus if they start in Jr. High they can buy that $5 book then, and put in the thousands of hours of random projects before they even start college.
I almost hate to admit it, but I agree. While I do wish there was more programming and computer use in the high school curriculum - if for no other reason than to have less clueless users around - I have to agree that real, true programming knowledge isn't really gained in a classroom, but by doing. What is mostly taught in a college classroom is how to teach one's self. And the other subjects could teach kids that. A very basic computer programming and use class, just to lower the level of cluelessness, would be nice though.
Daniel Bingham
I never agreed with the "too far behind when they start" idea. The fact is, if you are passionate about a thing, you'll spend time on it. In college, I spent 80% of my time faffing around and chasing girls. It's not a matter of time. It's a matter of attitude and desire on the part of the students. Who, at 19 years old, wants to be an expert in structured programming or algorithms? It's a rare person. Most 19 yr olds just wanna have fun. Starting them earlier (at say, 15 yrs) will only convince them how unfun programming is, compared to riding skateboards or "hanging out."
@Cheeso: By "too far behind when they start" I don't mean they still can't learn it, but from talking to local professor's they definitely dumb down the classes rather than flunking out those who can't cut it. I was reading "Compute" magizine while I was Jr. High, and by the time I was in High School I knew 6502 assembly language, binary, and what hardware registers were and how they worked. Pointer's were easy for me when I took data structures where other people struggled to understand how arrays worked.
I completely disagree. There are idiots in every field and profession. The point is that kids who have a natural talent for logical thinking may never apply that talent to programming unless introduced to it by someone else.
Lucas Oman
@Lucas: Anyone who has a natural talent for logical thinking will be introduced to programming at some point.
Spencer Ruport
The unfortunate side effect of this idea is that, in college, you spend 4 (5, 6, ...) years surrounded by people who are way smarter than you are, but are there to help you. Unfortunately, most people don't know the questions they should be asking until after they've graduated, and at that point, the best you can hope for is to go back to school (not always feasible) or learn from the experience of those around you (not a bad option, necessarily, just sucks for those who want to dig even deeper).
Apply this thinking to any other topic of study. How about Reading? or basic arithmetic? "There are waaaay too many people who are bad at figuring percentages. I say we just stop teaching them these things completely, and leave the percentages to the experts!" This is elitist rubbish. As for local professors who "dumb down" their classes - could we not also describe that as meeting their students' needs? Why is it bad to design a course that is approachable? It seems to me the professor has unreasonable expectations, if he uses the words "dumb down". CS101 is CS101.
@phoenix, I totally agree. It seems a better approach is to go out in the world at 18-20, go to a Kibbutz or Americorps or something, instead of spending $50k/year on university tuition. Come back to school when you are ready to ask the right questions.
Talk about missing the point! Programming is becoming a basic part of literacy - many people, beyond those who become programmers, will use it as a small but essential part of their job. The more folks who do, the more cool, innovative stuff will happen, which is good for everyone. Basic programming in python or ruby is easy enough these days that yes, liberal arts majors can pick it up, and they should.
Sarah Mei
Updated my answer.
Spencer Ruport
If you think programming is as important to daily life as language and mathematics, you are out of touch with reality. Programming is not a core skill. It's useful, but so is surgery, and we don't teach people how to stitch themselves up in high school. +1 to Spencer.
Steve S
I probably wouldn't be a programmer today if I hadn't had a VB6 class in high school. And yes, I wrote horrible code at first, but I put in the time and I got better. And I'll be even better tomorrow because I keep working on it. I think good hiring practices will keep out those who "know just enough to be dangerous".
Adam Neal
Saying there is no value in teaching someone programming in Jr./Highschool because they might think "they know programming." Is like saying there's no value in teaching Highschool science and physics, because they might decide they "know physics." Leading to abuse like: "I passed a high school physics class, I'm going to develop a Unified Quantum Gravitational Theory."
Instead it would allows college programs to raise the bar on the entry level courses, allowing students to be weeded out based on thier understanding of more advanced material. Plus people who did poorly in that in topic in Highschool aren't as likely to say "I think there's money in computer's so I'll computer science." Plus if people take it in high school and decide THEN that it's not for them, it's better than them wasting thier money to PAY a college to figure that out. The result is that people who take the degree are more likely to succeed and be there for the RIGHT reasons.
@Spencer: "Anyone who has a natural talent for logical thinking will be introduced to programming at some point." That is absolutely wrong to assume that people will be introduced to programming. School is made to learn some basic stuff for sure but it is also there to try certain fields of study. @Steve S: What is Biology if not an introduction in a way to surgery? What about Chemistry, Physics, Arts, Maths, etc.?
We teach basic biology and health in Highschool. And people don't assume they can do brain surgery after getting an A in either of those courses. There are no analogs to health and biology in the school system for programming. Teaching basics of control structures such as "if,else, while, for, and until" and guidelines such as don't use globals (as a general rule, until they know when to use them) and to break up anything roughly bigger than a screen of text into multiple functions is not brain surgery. And those simple rules could make better programmers than many current graduates.
There is really bad code written by CS graduates, and personally know a Master's Grad who asked me "what's wrong with this compiler?" because he couldn't get a simple array declearation to work. You will never eliminate bad programmers, but can you fix the education system such that someone with a degree is going to be at least qualified to write software, which is not a garentee of the current system. BECAUSE they are learning elementry school level CS equivalants when they start CS.
+1 Sarah Mei. Computer technology is everywhere, yet it seems like the computer literacy focus actually decayed after the 80's with very few schools teaching ANYTHING what so ever.
@Partial: I would say that Math is the equivalent introduction to programming. That is, it's related, and it's foundational, but it's not the same thing.
Steve S
@NoMoreZealots: Computer literacy and programming are not the same thing. I am strongly in favor of teaching computer literacy in public schools -- typing should be a required elementary course, and useful/common/popular software should be introduced and used early. I still think programming is an advanced topic that is beyond the scope of standard primary/secondary education as it exists today.
Steve S
@Steve S: Math and Computer Science are two completely different fields of study. The science of computers teaches what a computer is composed of: hardware (CPU, hard disk, etc.) and software (OS, programming, etc.). Math has nothing related to that. Its like saying Math and Physics are the same thing. Perhaps one of them contains certain thing of the other but in the end the content of each course is totally different and their goals are completely different.
@Partial: I agree, they are different fields. So are Biology and Surgery. That was my point.Your comparison of ComSci versus Math is backwards: Math is the foundation, so of course it doesn't have anything like the higher level ComSci stuff. ComSci is loaded with stuff based on Math though (check this out: http://en.wikipedia.org/wiki/Graph_theory). In fact, you can't really understand ComSci without a thorough understanding of basic Math. That's why we teach math in primary/secondary school but often wait until post-secondary to provide formal training in ComSci.
Steve S
The premise that "really bad code" will be eliminated by waiting till college to teach a student is madness at best. MADNESS! MADNESS!!!!! (I need a lighting strike in the background, and eerie music to really drive that point home. Perhaps some cackling laughter as well.)
@Steve S: Biology has a lot more in common with Surgery than Maths has with Computer Science. Do not forget that Computer Science is not only programming.
+4  A: 

It's interesting that you mentioned programming exercises in your algebra textbook. As I was reading your post, I was thinking that the easiest way to "sneak" programming into schools is through their math classes.

The problem is that if you start a programming class, none of the students will sign up. They don't know what it is, they think it's geeky, or they think it's too hard.

If they find that they're able to learn programming while studying another subject, it may actually give them the confidence to and interest in signing up for a real programming course later.

Lucas Oman
+9  A: 

I was taught programming in high school. So were quite a few others - however - for every three people who know programming in my intro college class, one of them was a habitual GOTO user. Teaching high school teachers enough about programming to give a good intro class is tricky - keeping these same high school teachers from leaving teaching to the greener pastures of professional programming once you've trained them is twice as tricky. In the absense of that, is it really better to teach them badly than not teach them? This is very much a "be careful what you wish for" scenario.

I saw a link on Metafilter to a graphical programming language for kids where it is impossible to generate a syntax error - you drag and drop "statements" to make programs that manipulate sprites. Fun toy, and a good exploration activity, but I can't remember the name right now.

This is a very sad note. Luckily, I had some CS teachers in high school who actually liked teaching, and liked working with kids.Yeah, they might have earned more writing some banking software or something, but they didn't, and I would like to think that the good teachers out there aren't teaching because they have no other choice, but because they love what they do.
You can't rely on the existance of such people in sufficient quantity to build policy around them.
It worked for my school. It's amazing how much good stuff I remember about my high school CS teachers :). Read my comment below - almost all schools here give students the option to study some CS basics.
Were you thinking of scratch? http://scratch.mit.edu/ or Alice? http://www.alice.org/?
@Kaushik Scratch is the one I was thinking of.
I taught myself to code. Certainly the teachers at my secondary school weren't up to teaching people how to code properly. We did a bit of VB, but only enough to get through the A Level Computing course. And those that only learnt at school produced horiffic solutions (But then is there such a thing as a nice VB solution??? (8-p)
+1  A: 

I've always thought that basic computer science should be required at the middle school level and again at the high school level. Of course, not every student will take an interest, and there's no avoiding that, but it doesn't take a lot of education just to make a student, even a disinclined student, comfortable with the basic principles of computing.

The objective should not be to teach a useful language or even useful programming -- if a student is actually interested, learning more is easy. The main idea should be that computers while immensely complex, are nothing more than machines that do what they're told. Teach them Logo or something; leave "real" programming for an elective.

Thom Smith
It would beat the heck out of the mandatory ecological sciences course we have here.
David Thornley
Required? No. Computer usage, yes. But not computer programming. It is way too specialized to be mandatory. 99.99% of people will never program a computer. **Computer usage** should be "baked in" to other courses, the way computers act in real life. Use computers as a tool in spelling class, writing class, etc. And anyway, what would you drop from the curriculum to accomodate Logo? Fractions? Adverbs? Spelling?
Why are computers special? This thinking sounds strange when applied to any other area of study. Can you imagine requiring telegraph and telephone science classes in middle school in 1910? So that, uh, people would have some idea of the basic principles of telephony? That course would be 100% useless, to 3 decimal digits. Most of us today have no idea how the telephone switching network works, but we still manage to operate telephones and benefit from them. This is what computers ought to be. When the computer is invisible for the user, is when the programmer and designer have succeeded.
What do most people know about bridge design? Moments of inertia? Stress versus strain? Stress transmission for various truss geometries? The advantages of trusses versus arches? People never learned the basic principles of bridges, and yet, somehow, people manage to utilize bridges every day.
@Cheeso: A computer is a lot mot complicated than a telephony, telegraphs, and bridges combined. Why, you might ask? Because a computer can be used for all of those fields in some way. Simply look at the everyday things you use and tell where you don't see a computer. Do you have a microwave, a mp3, a car, etc.? All of those are in a way a computer or contains a computer. Even if you only have an ordinary computer with, for say, Windows installed on it... All the things you can do with it: it is a tool, an entertainment system, a way to communicate with others. A simple course could help alot!
+5  A: 

Offer to be a guest speaker at a computer, business, or other job related course. Offering your services after school would help if they lack an instructor.

Jeff O
+3  A: 

In my daughter's public school in New York, 8 year olds are given the option to participate in a Lego Mindstorms afterschool club. That is the perfect age to give anyone who has interest in anything constructive to get experience at a young enough age to at least ignite curiosity, if not inspire the programmer of tomorrow.

Note that public schools in NYC are the cultural opposite of their namesakes in the UK. Here 'public' carries all of the connotation of 'state funded' without the prestige of 'accreditation.'

+4  A: 

I have no other experience than my own. Here, in the beginning of the 10th grade you can choose what to study in the last 3 years of school. There are some compulsory subjects (i.e. English, math, history, etc.), but others are a matter of choice. So I chose to study computers and physics. We had a whole class who chose computers. So all of us studied Pascal, Visual Basic, Assembler, and some basic data structures / algorithms. I don't know how it is like in schools in other countries, but giving a choice is a good option - the kids interested in this kind of things will go on and study CS.

May I ask, "Where is here?"
+3  A: 

To the average kid programming is just one of a million different things they could be learning (or working towards a career in). Working in the software industry, we all regard programming as a highly important skill, but to someone outside our field there is really nothing that makes programming stand out as something critical/interesting to learn.

For me I think it brings up a broader question about the effectiveness of our current education system. Instead of having kids spend 12 years learning general knowledge content, why not let them try out a bunch of different interests that they might pursue as jobs in the future.

To tie this in with the original question, I think it's difficult to generally get kids interested in programming, because being a good programmer is hard work. But if we could identify kids that were truly interested in programming (by letting them choose it as one of many options in an internship/coop program) then we could just focus on raising more competent programmers, because we would already have identified the kids who at least have the possibility of being dedicated to it.

Mark Kanof
While programming is not as important to the average person as it is to us, the ability to do basic programming IS a fairly useful skill. Automating and creating Macros to do things can save a lot of people in ordinary jobs time, and I know I certainly automate whatever I can get away with using a small script for.
Sector Corrupt
+1 to Sector corrupt's comment, he's dead on. As for Mark's answer, about the having kids try out a bunch of different interests that are relevant to future careers. It rather depends on the assumption that the purpose of school is to build a future employee, rather than generally enriching the lives and future potential of the children. There's more to life than your job, you know. Sadly not everyone sees the function of school in this way.
+7  A: 

I taught myself QBASIC and HTML when I was 12 by reading books my dad bought me from Barnes & Noble. Fortunately, that initial interest was cultivated and grown by a very passionate, knowledgeable teacher over three years of High School computer science classes. We also had an active Student Technology Leadership Program where we would work on various projects with peers and compete with other schools in our state and throughout the nation. It got me hooked, and the instruction was so good that I didn't really learn anything new until I started getting into the 300 level classes in college -everything in the 200 level C++ classes was a rather boring review for me even after testing out of the first semester. FYI, in high school we learned QBASIC, Pascal, Visual Basic, HTML/CSS, and C++ in that order.

As a result, I can't recommend programming classes in high school highly enough, BUT the recommendation does come with a few big caveats:

  1. Only hire CS high school teachers who know what they are doing -preferably from actually working in the industry for a few years.
  2. Enforce strict grading standards and policies -make sure your students actually learn the stuff.
  3. Encourage a collaborative environment where students can optionally work on interesting projects that push them beyond the limits of the class.
Mark Hammonds
+3  A: 

I can't imagine how the public schools systems (I assume you mean US) would be able to find teachers able to teach programming. They have a hard enough time with math and english.

There is an ACSL (a "computer" club of sorts) and I suspect that some group of interested students and maybe a volunteer/advisor could help the kids, but formalizing it more than that would be a disaster IMO.

+2  A: 

I was involved in FIRST for 7 years, 4 years as a student and 3 years as a mentor. I was the lead implementor of both the electrical and programming systems of my team's robot for a couple years when I was a student, and my final year as a student they were unable to find a mentor for the programming team, so I filled that roll (which is not counted in my 3 years as a mentor above, which were when I was in college). I understand your pain. I was self-taught since middle school, but the rest of the students on my team were grossly unprepared for programming tasks, especially as they relate to robotics (some had web dev experience as hobbyists), which is something of a different animal than most development.

You say you only have a short period of time to prepare the students. This is simply untrue. School starts in late August or early September. FIRST doesn't begin its season until early January. What are you doing in the interim? I'd hope you're teaching the students! Not just programming, but machining, electronics, pneumatics, mechanical engineering. Your team can't just form up in late December and decide to build a robot. Go purchase some robot kits like the Vex robots (or, even better, design and build your own small robots from scratch -- gets the non-programmers involved!) and have the students build simple line-following robots and wall-avoiding robots etc. You can use many of the same sensors and development environments as the full-fledged FIRST competition. The best way to prepare them for that they need to do during the season is by doing the same things as practice.

Above all else, I'd say you should teach them the same programming language the robot uses. It's what they need to be familiar with. If you start them on some higher-level language and then expect them to code in an embedded environment, you're setting them up for a lot of frustration.

+17  A: 

I am actually donating my time to teach C# Programming at Boys and Girls Club.

  • I do that because I believe in planting a seed in kid, help them start up with their programming skills, if they are passionate they can learn more by themselves.

  • Help kids build self-esteem. Programming provides instant gratification of creating something out of nothing.

Emre Aydinceren
Now that C# is FREE, that's a good platform for kids. (Free is good for anyone who's just learning.) Although I tend to think I would prefer a kinder, gentler environment for beginner's as opposed to VS. Donating time is a fantastic though. I don't think the instant gradification can't be understated.
You can get tons of free software for students with Microsoft DreamSpark!
+2  A: 

There is no easy way to accomplish this task. Until government and schools believe that Computer Science is important, there will be little or no CS courses available in High Schools. Most schools are losing budgeting for Library's, Art, Music, and Gym. It isn't like they are going to want to add courses and teachers. With the current state of public schools, you will be lucky if your children leave with the ability to read and write, let alone program.

+5  A: 

Remember when there were typing classes in high schools? When they were first introduced, all the students were people who wanted to be secretaries. Gradually, as computers went more mass-market, typing became a more mainstream skill, and now everyone can do it. In many high schools there aren't typing (or "keyboarding") classes any more at all, because everyone comes in knowing how to do it properly (even if they choose not to!).

Typing is now a basic part of literacy.

The same thing is happening to programming. There are programming classes in high schools right now, but they're electives, and the only people who take them are people who want to be programmers.

But we're starting to see programming environments that are intuitive enough that even people who don't want to be programmers can use them. They use them to get something specific done, and to those folks, programming is just another tool they can use to get their jobs done.

This shift will turn programming into a basic skill, just like typing now is.

It's going to take some time. Over the next 10 years or so, though, you'll see more and more integration of basic programming into other subjects. You can hasten it along by encouraging people who haven't ever been exposed to programming to try it - this includes teachers. You can also volunteer to set up an after-school club, or teach at a summer camp.

A useful side effect of this democratization of programming is that people with the logical inclination who wouldn't have otherwise tried it, will try it! So we'll get more of the good folks we need in the industry as well.

Sarah Mei
I agree. As programming becomes more of a common skill, for most people it *should* be just another tool that they can use to accomplish things in they day-to-day work. Even if the code they write is bad compared to that of a professional, it still lets them solve many problems a lot more effectively than if they couldn't use any programming at all.
+4  A: 

I think it comes down to a basic question - is it critical that a high school education cover all potential fields? And will Computer Science help even those students who don't become programmers?

I can see teaching high school students basic computer concepts - like the parts of a computer, the fundamentals of the Internet and the web, and some basic security concepts. These are the things I wish my computer illerate friends knew, because they are fundamental to working in a huge number of jobs in a variety of disciplines. But those are Information Technology courses, not Computer Science.

For recruiting and inspiring potential programmers, I think it would be more useful to have working professionals volunteer time to be mentors. In venues like an after school club, a publicly accessible CS lab, or another broadly focused organization (like the Scouts, the Boys & Girls Clubs, YMCAs, etc). In those venues, with open-ended activities, kids can get guidance in the craft of software engineering, rather than formal structure of a graded course.

I do think that programming is only interesting and useful for a certain segment of the population, and I'm reluctant to say we should use public funds to pay for CS courses for kids, when we are cutting many other electives, like the arts.

That's actually a fair question. I don't think is any less valid than taking Home ec, shop, auto shop, etc..., etc... And it has a wider application than any of those. Anyone going on to math, electrical engineering, mechanical engineering, computers science, or most of the hard sciences like physics and wot not can make use of it. Plus everybody and there brother is making web pages these days. (Whether they should or not.) So, I don't think it's any less valid than many other standard classes.
Not that I love the idea of home ec. and shop - but if the cirriculum is learning to fix household stuff, cook a simple, healthy meal, and sew on a button -- then I think the cirriculum is actually is useful to more people than learning a programming language.As for writing web pages - I agree. But with many of the WYSIWYG web editors, I don't think you need to learn to *program* to do this. But an intro IT course for this would be very useful.
I know a guy who designs web sites for local companies who was, of all things an Art Major, the slick gui's can do a lot of things. But some basic programming skills would go a long way in improving his websites. Besides, you make the same argument for teaching algebra and geometry to most poeple, and they would tell you it was a waste of there time. They see no value in it, would you advocate removing those topics as well? I'm not saying teach them compiler design, just introductory programming. Even if they are just using MS Office to balance a checkbook, it has applications.
+2  A: 

i don't see how this is even an argument. computer science is as relevant a field nowadays as math, english, science, etc., and even more practical considering most kids' (and adults, too) lives are spent on them. this trend will not be decreasing any time soon.

i'm not saying force CS upon them, but hell yes give them the option in high school. i wish it had been presented to me as an option when i was in high school. who cares if they will think it is boring? they'll just find out it's not for them, and good riddance! that's one less person who grows up to be a crappy programmer out of necessity.

lots of kids think physics is boring or calc or history or british literature (why the #%*! we needed to learn that in HS, I will never know) and so they don't pursue it any further. it's the kids who take to the subject are the ones who will learn the most. they're also the ones who will seek out CS when they get to college.

CS is no different than any other subject. absolutely teach it in HS.

on a side note, teaching something practical and functional, such as robotics or (especially) web development would probably be the best way to go because of the "fun" and "creation" elements.

+2  A: 

FIRST is a great way to start. Other ways to encourage programming is to target even younger kids than FIRST does (FIRST LEGO League is junior high. But I started programming in elementary school, so it's entirely possible to start earlier).

+1  A: 

I think it's because it's taught in the wrong way. I didn't know there might be a better way to teach computer science until I heard about and watched "From Nand to Tetris in 12 Steps". There is also an interview where the professor talks about the holistic approach the course takes, where a student learns through hands on projects, how to build a whole computer, that eventually will play a Tetris clone. The course requires building up everything from logic gates, to the machine language, OS, VM, building a higher-level programming language, and literally everything it takes to make a virtual computer. I wish I had of had a course like this long ago.

Richard Hein
+3  A: 

Its not teaching programming that is important, its teaching problem solving. Its developing creativity. Its encouraging out of the box thinking. Its lighting the spark to want to know more, to want to dig deeper. Programming isn't so much the language, its seeing a problem for what it is, and then seeing a solution that we describe. THAT is what needs to be encouraged. Programming can then be taught as a natural extension of how to solve problems. It doesn't matter the language, since the real work will be done in a different one anyway. Teach how to do real research, how to communicate, how to blog...

most of all, teach how to type.

+1  A: 

I think it's a good idea to teach kids programming, it requires a lot of logics and it can be also fun (depending on how you teach it). The problem is in the nature of programming: teaching science is not easy, specially something so close to maths (cosidered hard) as programming.


Some of the more "mathy" aspects can wait til they are older. However it is a good side dish for the maths they are already learning. Using computer graphics and animations to illustrate physics and maths can incurage actual exploration of concepts rather than simply "doing the homework."
+7  A: 

"If you want to build a ship, don't drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea."

you don't have to read my ramblings; just watch The Last Lecture to get the point I'm trying to make.

For programming, I fully believe that Creativity is that "endless sea". Creativity is not only healthy (research), but it can be what makes you alive! To be able to see a world in your head, and then to persevere until you have made it is quite a glorious feeling. And by "world" I don't mean a MMORPG world or something (though it could be that), I mean whatever it is that you dream that you want done.

Also, all pain is subjective to hope/meaning/purpose. Programming will be a pain in the ass sometimes (in fact, so will life), but for those who fixate on a deeper satisfaction/joy/etc, there will actually be a reason for enduring the pain of learning and the pain of sheer grit and willpower to keep coding/debugging/etc

I know beyond any shadow of a doubt that the reason I am whatever good I am at programming, it is because very specific friends and professors believed in me, and tried to impart the same yearning for the vast and endless sea.

btw, the quote is from Antoine_de_Saint_Exupéry: http://en.wikiquote.org/wiki/Antoine_de_Saint_Exup%C3%A9ry

That's a fantastic lecture. I would like to see more of the work done at CMU. I was just by there the other day, I had dinner at Jerome Bettis's Grill. It was on a 3 day trip to Pitt for work.
+1  A: 

I believe that high schools should give the option of having a Computer Science course. The course would be a rather an introduction than the full thing. I do not believe simple programming in certain languages such as VB.NET or doing some HTML/CSS would be that hard for students. It would not be harder than Biology, Chemistry, Physics or Maths. The hardest part would be to learn a new way of thinking, but all the previous courses I mentioned are doing that. If programming is too complicated there a lot more things to Computer Science than just programming. It could be a course on how to use another OS such as Linux, it could show what a computer is made of, it could be to show the different career possibilities, etc. In fact, it could be a little of everything just to give a feel and taste of what Computer Science is. It would allow kids/teenagers to know more on computers than just writing with a text editor and surfing on the web. It would allow them to have the opportunity to be interested in this field of study. Computers have gone a long way and will continue to do so. If we ignore to teach Computer Science to students of high schools many people will ignore the very technology that they will eventually be using or are using has a write this. The goal of a Computer Science course is to give a certain perspective on computers that they would not be able to have otherwise.

Also, it would not be that hard to put in place such a course for a school. In fact it would not be farfetched at all. Programs such as Microsoft DreamSpark could help schools put in place the software necessary for a Computer Science course. Also, free Operating Systems such as Linux could help a lot too.

+4  A: 
  • We should encourage learning in our public schools. The pace of teaching and learning has been slowing down. Legislation like "No Child Left Behind" hasn't been helping. We need to teach children to be active learners, and encourage our public schools to do the same. I wish I had some concrete suggestions for accomplishing this . . .

  • We should find ways to fund our public/state schools. In Iowa, there have been schools considering a 4-day week because they can't afford to stay open otherwise. Before we can consider adding new curricula, we need to enable schools to continue teaching the basics. Funding specific programs can also be helpful -- some of them won't ever get enough money from the school budget.

  • We should volunteer. Most schools probably won't ever be able to afford a full-time programming teacher of any quality. Clubs that meet outside of school hours are an option, but they require still dedicated, skilled volunteers. My high school had a stellar Industrial Technology program, and what made it work was the people: we had passionate, skilled instructors, parents, and members of the local community. We didn't get much funding from the school, but thanks to the time invested by these people, we learned a lot.

  • We should plan. If you get the chance to teach, know what you are going to teach ahead of time. At least have a loose lesson plan. Have some resources prepared. Have some project ideas of varying difficulty.

  • We should provide a proving ground. Competitions are great for encouraging learning in high school. They create purpose and focus. Get your employer to sponsor and/or host a competition. Just don't forget to make sure there are competitors. You mentioned that kids aren't prepared for these -- that's ok. You can still use these competitions to find out who's interested and then work on preparing them for the next competition. My HS Industrial Tech. program is a great example again: we competed in TSA and SkillsUSA (VICA). A lot of kids had no idea what they were doing when they started out, but our upperclassmen consistently performed well in competitions. Why? 1) The instructors and volunteers figured out who we were and gave us guidance, and 2) we were taught to analyze our failures and other people's successes. Competition gave us plenty of failures and successes to observe.

  • We should lower the barrier to entry. Some tools are expensive, others are hard to learn. Donate what you can, and provide simple tutorials to get kids started fast. Look for programs that offer free or reduced cost software to educational institutions. Introduce kids to FOSS. In some schools it won't be possible to install development tools on lab computers due to IT policy, so computers might be a valuable donation. Embedded platforms tend to be cost-prohibitive for individuals, and schools may not want to make room in the budget for them.

  • We should not limit ourselves to programming. If you can teach something else, especially something basic like language skills, by all means, do so. Intelligent, informed people are useful in any profession.

  • We should remember that robots are cool. Provide some simple robots that can be easily programmed (Mindstorms are a good example). This will help kids feel like they are actually doing something, and make their work seem more tangible. Think turtle graphics, except that you can touch it. You can also argue that there is real-world application with industrial robots, CNC machines, and other forms of automation.

  • Use Industrial Technology as a back door. If your local school has a good program, take advantage of it. It's not just woods, metals, and auto. Industrial automation and automotive control systems have made our profession relevant to the Industrial Tech. crowd. This can be an expensive route, but you'll find people who are genuinely interested in learning, because it's fun. Once you establish enough know-how, make a project out of converting an old lathe or mill into a CNC machine. This involves multiple disciplines: mechanical, electrical, and software. Plenty of room for everyone.

I still think that programming is a fairly specialized skill, and I wouldn't expect many kids to get excited about it. If you have enough of them to get something organized going, great, but a lot of communities probably lack the numbers needed to reach critical mass. You may be able to tutor a particularly interested individual, but you have to find that person first.

Steve S
Have a look at https://www.dreamspark.com/
@Partial: That raises a good point: tools can be expensive (either in dollars or in learning curve), and a big part of getting people into programming is LETTING them into programming.
Steve S
+1  A: 

We could argue til the cows come home about what programs are "essential" to public schools. But that doesn't matter since elephant in the room is that our teachers are woefully unprepared to teach computer science in an average school. It's such a new and specialized field that you simply cannot find a core subjects teacher that knows a damn thing about it.

So what we need to do is organize, as a community, in order to convince public schools that CS is worth teaching as an elective.

In my opinion, schools have much much more important problems. Step one is to get them to actually teach students basic reasoning and problem solving skills.