Real talk from real computer science teachers
medium.com
medium.com
At the high school level, I think it is better to teach computing as a broad-based life skill, not as a prerequisite to the AP exam, college major, or programming specialization.
Most students of history in high school won't be historians; most students of literature won't write great novels or screenplays; and so on. I think computing is like math and science generally, in this way.
I use Kernighan's "D is for Digital" book in some of my classes. He wrote it for an introductory college course for non-majors, and it works for high school students too.
But by the same token, the economic effects are quite apparent. It takes a very special individual to rise above the pack in history and literature to turn that into a successful career. For most, with so much competition, it will never be more than a hobby. Anecdotally, I have a couple of friends who are published authors and I would be surprised if they are ever able to recoup the cost of the time they put into it, let alone sustain their costs of living.
Programmers are fortunate right now that the skill is relatively rare amongst the general population and when demand exceeds supply, prices rise. The concern isn't so much with everyone being a programmer, it is that only a few will be able to make money at it when the supply starts to exceed the demand, much like careers in history and literature today.
I thought a lot about this when I got my first job with a BS and was making more (inflation-adjusted) than my mother with an MS ever made teaching elementary school.
Why do programmers make so much money, relatively speaking?
And the answer is that supply and demand of qualified workers in a specialization is only part of what defines your income range. The other, usually dominant, component is "What is the real value of my work product?"
A teacher's real value is the teaching they've provided to X students. In a physical setting, X has a ceiling. But say, ceteris paribus, we compare to an online teacher who can teach Y students, where Y>X.
The online teacher's employer can afford to pay him or her more, because they have created more real value ($value/student * greater number of students). Even if the work they do is no different.
The miracle of computing systems is that they leverage output. "Do" a calculation once, and you can repeat it as many times as you want.
So, accepting that computers increase productivity generally speaking, what do you think the real value created by the people who can program the things that leverage a worker's value is?
In essence, we get a piece of the following pie: total_created_value = ((existing_worker_value * improvement_multiplier) - existing_worker_value) * number_of_affected_workers
Where workers can be actual people or just systems
But the key is that our value scales with number_of_affected_workers, with limited additional effort on our parts. So if we can make an improvement for 1,000 people, there's always going to be a decent living in that -- because the consumer can afford to pay for the work. They may choose to save that money themselves, but in my experience people are willing to pay to get better product (more reliable, on time, more features, etc etc).
I am glad that your course is called 'computing' and _not_ computer science, since they are usually misconstrued (as in this article). I am all for teaching children how the digital world works, and introducing them to the concepts of electronics, programming etc. but it call it what it is.
Computer science != programming. Programming is an applied skill across nearly all scientific disciplines. Physicists, climate researchers, statisticians, etc, all require programming to do their research.
I agree these courses are often mislabeled and it does the discipline a great disservice, but programming is a part of a computer science education and programming language theory (which you can only really learn well from programming) is a part of computer science itself. How else can you put algorithmic theory and data structures into practice? It's just not the whole thing.
Computer science people on the more mathy side of the spectrum tend to discount applied computer science completely, and that annoys me. Maybe we shouldn't call a plain coder a computer scientist - but anyone who regularly applies theory in practical applications in a programming context and occasionally runs experiments should be considered an applied computer scientist.
For better or worse, a big part of studying computer science at the undergraduate (and presumably high school level) is programming. And programming is a part of computer science, but of course you're right coding/programming != computer science and that misconception is a problem.
By profession, we're all effectively software engineers, data engineers, or computer engineers, according to our work emphasis.
But then you've got the weird break you noted where academically and theoretically, everything we do is math. Or more reasonably, at least a larger proportion than any other discipline except physics and pure math.
So... we could always just go the physics route and retitle the discipline "Computing" and ourselves "Computerists"! (No trailing noun)
For web dev it means starting at a computer with just a web browser and showing them how to get a functioning site running which you can send a web address to outsiders, even a very, very minimal one. The definition changes with robotics, or other coding disciplines, but the absolute key is developing tutorials and tools which help people go from zero to minimal app deployment.
Once you get someone there, they can build on it using tutorials.
With all this discussion about Common Core, we're still at the point in my state where MAYBE a Computer Science can be applied to the Math credit requirement for graduation.
I just feel like so many schools view it as an optional afterthought.
Source: Physics teacher who has been begging his administration to add this course. Right now I have over 40 kids who meet after school to learn programming and scripting, but can't find it to be added as part of the official offerings.
"Programming and scripting" classes are a different matter altogether with highly dubious benefits beyond far-fetched theorizing by its overly optimistic proponents.
Too much faith is put on compulsory schooling. Everything must be coordinated and planned. The very idea that one might acquire programming as a means to a pursued end later in life appears to be anathema to many people, who instead advocate that a ritualistic drilling of how to write lines of ALGOL will mystically make people "technically literate" and appreciative.
To me - the problem is not enough programmers willing to come into teaching. Programmers just want to be in startups right now.
Its not really surprising, considering that programmers can make significantly more (even before considering the lure of the potential upside of equity) in the private sector (startup or not) -- or even as programmers in the public sector -- than they could hope to teaching, and without paying for the additional required certification and credentialing requirements to get into teaching.
Without going into the debate about the programming gender disparity and lighting that fire, if you've got very few teachers from the subset of the population that for whatever reason correlates with computer programming, you're likely to end up with very few school teachers that are interested enough or qualified to teach it.
I thank my stars that my high-school chemistry teacher had sons that grew up in the Apple II era to be computer programmers and that she thought it was important enough to teach an elective in it.
[1]http://www.aaeteachers.org/index.php/blog/757-the-teacher-ge... [2]http://www.techrepublic.com/blog/software-engineer/it-gender...
But I'm not sure I would want to teach a real class either. Computer Science is very hit-or-miss. Seems bad to force a kid to complete a class when they have no aptitude for it.
Final side note: I help run Boise Code Camp, which is held once a year around spring break. As part of that we devote one room just to kid topics (grade school-middle-school). That room accounts for over 10% of our attendance.
(Would we still have shop classes if students had a chance to try it out first?)
ETA: On reflection I suspect many here won't see it that way. It's worth pointing out that, even in the public system, there are different schools, and different subjects, for kids whom the system identifies as "smart", than for those whom it does not.
The former will generally have ample opportunities to learn about computers and programming whether it's officially sanctioned or not, and indeed will probably do so more successfully if it isn't, because being required to do it makes it feel less like fun.
The latter will have to learn that kind of thing on their own, if they're inclined to it, because the system isn't going to trouble itself, the attitude being that anything more complicated than making change and operating a point-of-sale system is almost certain to be wasted on them anyway, and trying to impart complexities to them will only leave them bored and frustrated anyway. (This is in fact true, in a superficial sense, but it has nothing to do with their ability to cope with complexity, and everything to do with the way it'd be put to them. See also: the utter, abject incompetence with which almost all high-school-level mathematics is taught.)
It works this way because it was explicitly designed to work this way by people who genuinely believed in the progressive utopia, where in exchange for there being a specific and fitting place for everyone, everyone was trimmed and pared down to fit a specific place. (See also: Aldous Huxley. Why do you think he went to the trouble of writing a book-length satire of this kind of thinking? Just for the hell of it?) Unfortunately, their design was fundamentally flawed, and they therefore bequeathed to us a system which cannot possibly bear up under its own weight. Fortunately, their design was fundamentally flawed, so the system they inflicted upon us will inevitably collapse and make way for something new which might turn out to be better, not least because it could hardly be worse.
But actually - the opposite is also true. In general, communities want men participating in kids' lives. You do have to build a little trust - but IMHO time well spent. And (elementary age) kids are also the best kind of people - usually they're not shouting, yelling and bawling - most of the time they are genuinely lovely people. Now this is a generalization - and it varies from place to place - and my school is only half comprised of lower-income kids - but yeah - kids this age are at an age of wonder and discovery.
Teaching is just programming a child's mind. I wish more programmers had an appreciation for that. I would venture to say that computers are MORE stubborn than children. :)
I have TAed at Cornell and ran my own section for beginner Java and pretty sure I can do a great job of teaching students. However, why would I leave a programming job or a founder job to do a teaching one at a huge pay cut. Make the part time easy to do and I can drive to a school daily near lunch hours and teach an hour of class and grade homeworks after work.
Once I chanced upon an ad for high school comp sci teacher. They were willing to waive the Master's degree requirement as well as the teaching credential requirement. As you note, the pay was ridiculously low, about 30-35% less than industry salary for a fresh-out-of-school graduate. Would have been nice though, for someone eager to teach but wanting to skip the 2-4 years of extra training.
> "Until CS Principles, 95% of my students were math and science majors."
Since when did high schools start making kids choose majors??