Getting Computer Science Into Middle School
avc.com
avc.com
What would such a "computer science" look like? I don't know, but the odds of it being actively anti-educational are far too high for my liking. Can you imagine what a computer science optimized for testability would look like? I can see it now:
"Fill in the blank with the correct variable name."
"Organize these lines of source to correctly sort the list."
"Find the thirty-three keywords of $CRAPPY_LANGUAGE_WE_STANDARDIZED_ON_TWENTY_YEARS_AGO in this word scramble."
"Which of the following is the definition of 'strong typing'? A: wrong answer B: wrong answer but defendable C: essentially wrong answer from 30 years ago the curriculum officially calls correct D: a more right answer than C but still wrong"
It was way too formal to boot, too! If I want to create a specification, I write them in code, either as unit test or as a prototype.
I would have loved to have been exposed to some CS in school. For some reason, my otherwise rather privileged schooling didn't feature any computing, and nobody in my direct environment did any. Only after starting a Physics undergrad did I meet some proper hackers, and years onwards I still feel like I'm years behind on them.
I'm pretty comfortable with that conclusion.
Anti-teaching, the teaching of things that are actively misleading about the nature of the subject or even actively wrong, is a bad idea. It doesn't matter how much "prior art" it has. It doesn't matter how much we have to just fill time while the students are sitting there. It doesn't matter whether there isn't a "better choice", because nothing really is a better choice than anti-teaching. Anti-teaching is a bad idea.
Besides, ask around. Ask your non-geek friends simple, basic physics questions. If you like, even ask if they took physics in high school. If the goal of physics is for students to pass a test in school, we're OK. If the goal of physics is to give the general public an understanding of simple, basic Newtonian physics... we already aren't teaching physics, we're just going through the motions. The "threat" you raise is already the situation we are in.
There were attendance problems in Oakland due mainly to external factors, like parents not wanting their kids walking home after dark. Only 7 of the original 13 Oakland students finished the class, compared to 12 out of 14 in Daly City, but everyone who finished the class in both Oakland and Daly City had a working program by the end of the 10-week course. I think it's fair to say that all of the students who finished have a reasonably good understanding of some basic computer science concepts: functions, variables, applying operators to values, evaluating expressions, and a simple notion of types (strings, numbers, booleans and "images"). The obvious next steps would be iteration/recursion and some simple compound data structures, but we didn't have time for that in just 10 lessons, which is all that this particular after-school program permitted.
My point is this: middle school students can handle a fairly rigorous approach to introductory computer science. Saying we shouldn't teach something because it will be taught poorly is no excuse not to teach it the right way -- we just need people qualified to do that. That's the real problem, but most of you who're reading this could help do something about that by volunteering to teach a curriculum like Bootstrap.
Asked that way, I'm not so sure the question has a definite answer. French will still be French by the time today's middle school students graduate from college, but Ruby on Rails just might be old-fashioned technology by then. And maybe the paradigm of programming in general will have changed by then more than any modern language has changed. I'm not disparaging computer science as a subject of study--in fact my oldest son did learn more computer science in middle school (mostly C through the Eric Roberts texts used by the EPGY distance learning program
http://epgy.stanford.edu/courses/cs/
but also Logo) but foreign language study is important too. As another article submitted in the last few hours points out, schools don't teach nearly enough mathematics these days, either, so the whole curriculum has to become more efficient to squeeze in one more subject.
I homeschool my children to have more flexibility to choose better curricular materials and to have efficiency in teaching so that my children devote the most time to the subjects they NEED the most time for. That allows them to learn programming at middle school age while also being bilingual and well practiced in writing and mathematical problem-solving.
I don't remember the last time I touched a line of Apple IIe BASIC; it was probably around 6th grade. Later, I learned C, and then moved on to a variety of other languages. The learning of BASIC per se wasn't particularly useful, but the fact that I learned to program at all was very useful. I'm not convinced that the long-term viability of the language (or even the particular programming paradigm) is very relevant. It was writing poorly-understood BASIC code that got me into programming, and without that start, I probably wouldn't be writing programs of any sort today.
I grew up in an era when BASIC was a standard part of the curriculum at many junior high schools, and I had a nominal course in computer science in high school also. But both were deadly dull. Sometimes it's better for children to learn a subject directly from hobbyists or professionals (as did several of my high school classmates who became professional computer scientists eventually) rather than from clueless schoolteachers who teach the course in desultory fashion.
Algorithmic/systemic thinking, combined with the basic principles of physics do wonders to get you through problems that life throws at you.
I really wish the public schools where I live now would step up to the plate and teach some more practical stuff. I really feel a lot of the kids are wasting their time with stuff they don't really enjoy, and don't need to be taught over and over again.
As for it being required of every student I don't know that I agree with that. I work with "non-computer" people who I swear to you lack basic problem solving skills (by their own admission they are "emotionally intellegent"). I'm not sure those people would be capable of understanding and implementing the basic logic structures needed to program and I'm not sure it's fair to set them up for failure.
I think this is the reason that classes like Physics are also elective. Everyone should have a basic understanding of Physics but I'm not sure you can require that of people who aren't math inclined (remember you can graduate High School having only taken first year algebra)
I also just recently finished teaching an after school program on using Scheme to program a (simple) computer game at a middle school. While it was only a 10 week program that met once a week, I think we had a fair degree of success.