Sunday, August 25, 2013

Everyone Should Learn to Program!...No

I have seen several articles and interviews published online extolling the virtues of teaching children the value of learning to program. Well, perhaps "children" is a little limiting. President Obama and mayor Bloomberg, among other celebrities, have urged everyone to learn how to code. I'm still having a little trouble figuring out why.

It seems this is justified by our increasingly technological world; knowing how to program is a way to better understand how our devices work. That may be a good way to understand our world, but it is hardly a necessary skill. Our technology is based on abstractions that make it unnecessary to understand even the most rudimentary building blocks of our gadgets, and most people revel in their ignorance of how the world works. Do you really need to know how the cellular network works in order to upload yet another photo of your lunch to Instagram?

You don't need to know how a fuel injector works in order to drive a car. Indeed, there are people...a disturbing number, in fact...that don't even know how to change a car tire, a skill that was at one point unthinkable for you to not have if you possessed a license. It was the pervasiveness of cell phone technology that led to the decline of the skill. 

The abstraction of the details of how technology works, enabling our ignorance, makes things easier for us to use. It doesn't take a genius to see that, left to our own devices, people rarely use time available when feeling bored to learn about the world. This is especially true if they have access to cat memes and Facebook. 

The other reason I've heard the argument for learning to code is the future job market. I suspect this is the likely origin of the sensationalizing of this coding campaign; it sounds like another opportunity to fix some aspect of our public schools (remember Classrooms For The Future? That was another boondoggle that funneled profit to companies for awhile to the detriment of students and schools...) while also hitting the key words politicians love to use when courting businesses. Programming jobs are projected to grow into the double digits in the not too distant future! Learning to program will get you a great job with a big paycheck!

Good programmers can earn a really nice paycheck. They can also earn a crappy paycheck. It really depends on a number of factors. Learning a programming language guarantees nothing; if you're good at it, you will probably increase your chances at having a good income, but frankly if "they" were really concerned about you making a good income the financial sector is the place to be. Wall Street financial institutions not only manipulated world markets, housing bubbles and drove wealth disparity to an all time high but they've done it with impunity while pocketing six-plus figures for their employees.  

Learn to program? Learn your math, kids. Learn to balance spreadsheets and learn accounting. It'll make a significantly higher paycheck than tracing conditionals and iterations through a loop. Even a doctor today is graduating with enough debt to offset a good chunk of his or her large paycheck for quite some time. 

Then there's the implementation of teaching kids to program in schools. I've yet to see this really done "right." Schools suffer from not knowing what they're really teaching. I suppose part of this is a lack of proper instruction to the instructors; often in situations like this a teacher is simply told they are teaching a topic for the semester and is tasked with finding a course book that fits the bill. He or she may not even have a background in the topic, especially if the course is not one of the core topics being tested on standardized testing. 

Did you have to take a typing course in school? I did. It was a lot of learning to touch type that eventually led into exercises on creating basic letters and memos. Today this has been replaced with teaching kids how to use Microsoft Word. Because, "This is what they'll be using in the real world."

Yeah, institutionalized product endorsement. 

Kids don't learn the basics of word processing outside of the particular product and version. It is demonstrated every time a new version of Word is released. Students...and often teachers...flip out when the interface doesn't match the exact expectation of what they have memorized. They learn how to do something through rote memorization. Which really isn't a good way to learn programming. 

Programming isn't something you just learn through rote memorization. It's problem solving. It's application of logical thinking. In an age of public education being equated with teaching to the standardized test, programming to solve practical problems isn't necessarily going to fit neatly into the de facto framework used by schools to teach kids. Too often schools teach kids to seek the answer without understanding the problem or the solution. 

...I suppose in a world where everything we use is an abstraction, understanding...knowing how to think and arrive at a solution...isn't really necessary to survive.

When I was pursuing a degree in computer science, there was programming involved. But it wasn't a programming course. The language was a way to illustrate the ideas. What's a loop? What's a conditional? What's a structure or an object or a stack? The language was secondary; the concepts could be done in a variety of languages or even pseudo code. The time it takes to become proficient in a concept was an investment made before becoming proficient in a particular language; indeed, focusing on a particular language implementation, with its own implementation and syntax quirks, could drive you batty. But the understanding of the fundamentals is what allows truly great programmers to pick up a new language when confronted with a new challenge. 

The real key to understanding that this initiative came from a non technical committee is the fact it urged everyone to program. Some people simply cannot do this. The wiring in their brains simply cannot wrap around some of the fundamental concepts necessary to apply the logic and syntax of a programming language to a problem. When someone proclaims that anyone can program, they are either ignorant or trying to sell you something. 

Ask instructors teaching intro computer science or programming courses. There is almost guaranteed someone that will drop the course because they just cannot "get" the difference between a FOR and WHILE loop. No matter how it is illustrated or explained or demonstrated, the concept escapes these students. 

In the end, the whole "everyone should program" media meme was nothing of substance. I should note that Bloomberg made learning to program a 2012 New Years resolution. Here it is nearly September of 2013 and I can't find any update online of so much as a "hello world" example from his office. What does that tell you?

No comments:

Post a Comment