or: How I Learned to Avoid Toxic Situations and Love Myself
This post is a bit different from what I usually write since I usually focus on the intersection of geeky topics and disability. Here, however, I want to talk about something that affects every child, able-bodied or disabled, neurotypical or neurodivergent alike: Education.
Many people, including myself a few years ago have the vision that, because computers are playing a larger and larger role in our daily lives, we should teach kids programming in school the same way we teach them maths or [language]. I visit a HTL/HTBLuVA [Higher Technical (Federal) Teaching (and Experimentation) Institute]. That’s pretty much the Austrian equivalent of having senior high and (American) college combined over the course of five years. Because of that I actually have programming as a subject. While I certainly have learned a lot of skills in the four years until now I don’t think that the current school system can prepare someone for actually working a job in IT or even programming an own project. Even worse, it is deterring people from programming. (I have classmates who say that they just want their degree and then never touch a piece of code ever again.)
If you are familiar with software development the phrase “test-driven development” probably makes you think of working on a piece of code until it satisfies an array of automated tests. While this might be an acceptable approach to creating a product it is certainly not the right approach to teaching children. This may come to a surprise to many working in education but children are not products that have to conform to a definition.
So, what does test-driven development look like in schools?
We teach our children according to a curriculum and then give them a test. They have to prove that they can (within a margin of error) deliver the expected results.
On the other hand, unlike in software development, the development of the children is often artificially and deliberately stalled by the tests (even though it might very well happen in software development but it is usually subconscious). “That won’t be in the test.” in response to a student’s question is comparable to saying “The unit test doesn’t check for SQL injections, so don’t bother with them.” when developing an application.
While you may defend testing with the need for grading a student the way we are testing has absolutely nothing to do with the skills required in software development. While you have a lot of tools and references that help you when actually programming (including but not limited to: IntelliSense, Autocomplete, QuickDoc, your libraries’ documentation, the official IRC channel of your language where you can find some of the people who invented the programming language you’re using are hanging out or a cheat sheet on your wall) you’re on your own when writing a test. You usually have to learn things IntelliSense would remind you of in a real project (“Did source or destination come first in the parameters?”) by heart. While a while ago (as in the 80s) remembering 40 Assembly mnemonics and hundreds of idioms by heart in order to be able to quickly write a program high level languages and the internet have made programmers’ lives so much easier.
Forcing children to remember factoids they could easily look up when they need them (quick pop quiz: what parameters does calloc() take?) takes up valuable mental capacities that could be used for more important, high level (some would say theoretical) knowledge like “Where do I use a quick sort algorithm and where will it cause problems?”
Finally, here is an argument why teaching everyone programming in school is a bad idea. We don’t need that many programmers. Sure, there is a shortage of programmers right now but this is not necessarily a bad thing. If everyone finished school ready to be a programmer businesses would be able to pay programmers lower salaries and software development would slowly become a minimum wage job — which has implications in and of itself: If programmers are not well paid and treated with respect (which many businesses wouldn’t do if they were easily replaceable) they are far less likely to identify with their employer. Which makes the much less motivated to do a good job. While that might not be a big problem for a cook or a waiter (They do deserve a livable wage tho.) because they can’t cause too much damage if something goes wrong it definitely is for software developers.
In our web-centered economy, many software developers indirectly deal with sensitive data. Depending on what the company does they decide how credit card info, address, personal messages, passwords, etc. are stored. If the person who works on the authentication system decides to store all passwords in cleartext because they couldn’t care less about their employer we’re in trouble.
See, we don’t teach our children how to build a house or repair a car in school. While those things are similar to programming in that they can be used both personally (building pool house, repairing your own car) those are skills that aren’t necessary to survive. We do have professional architects, masons, and mechanics. And if you want to save money you can ask your friend’s wife’s cousin who happens to be a mechanic or google “change tires on 2006 Volvo S40”. Those are very specific skills which do not belong into a curriculum that’s supposed to prepare children for any possible job they might choose later in their life.
I still want children to be able to choose a school for their specific interests later on but it has to be their own choice. And while people generally know how a mechanic or a mason goes about their job a lot of people still have no idea of programming. And while I don’t think we should teach them how to program I am definitely in favor of showing them what a programmer does.