April 29, 2020

Education is a racket

Having said this, I will also say that I am a big fan of education. I have 3 university degrees myself, and in large part this is a big part of why I am who I am. This also qualifies me especially well to make some critical comments.

There is a lot of money involved in getting an education. Whenever a lot of money is involved in anything, there is a breeding ground for conflict of inteest. I could talk about the cost of textbooks, the trap of student loans, and requirements to take pointless classes, but this is supposed to have a Javascript angle, so I'll focus on that.

What is the best way to learn? Is a classroom the best way? Is a class the best way -- online or in the classrom? I could just answer "No!" and end the essay here, but I will answer "maybe" and discuss some pros and cons.

If you want to learn a programming language, all you need is a computer and acess to the internet. There are endless resources, including manuals for languages and packages, often very well written. If you want to learn Javascript, all you need is the chrome browser and you are off to the races. It is true that different people have different learning styles, but that can just be an excuse for taking the easy path, namely a class.

So what does a class offer? A class may force you to learn things that you have no interest in and would otherwise skip over. A class will impose a schedule and require assignments to be done in a certain time frame. Both of these though are substitutes for personal discipline and initiative.

I have a degree in Computer Science, so it may seem unreasonable for me to claim that I am "self taught". But I am! During my undergraduate years back in the early 70's I took a 1 unit FORTRAN class, followed by a 3 unit assembly language "systems programming" class, and that launched my career. I later taught myself C, Perl, and seemingly dozens of other languages and assembly language for more processors than I can probably remember.

Every programmer is self taught. Most classes don't teach the details of programming. In my computer science classes, I virtually never say any programming that was done by the instructor, and much to my dismay, the instructor never looked at my code. My program was graded on its ability to run some test case, and who knows what kind of mess was inside. Programming is learned in the struggle to solve problems.

So what virtue is there to a class? Some people can't imagine learning anything without taking a class. I would encourage such people to muster their courage (and creativity) and try learning on their own. Do you want to learn Ruby or Python or Javascript. Consider buying a book. Install the language on your computer and roll up your sleeves. I like books, but these days there are incredible online resources and you can save yourself some money. But some books are classics, like the "rhino" book for Javascript or the "pickaxe" book for Ruby.

Taking classes has another virtue -- the ability to obtain credentials. If employment is your goal, having some kind of degree may carry weight with certain employers. This is by no means universal though. Some employers recognize that the best programmers are self taught and will look for people with enough drive and initiative to teach themselves. Ultimately the question is, "can this person solve problems", not whether they have a degree or certification.

Access to a good instructor can be another virtue of taking a class. At the university level, this is pretty limited though. Don't expect to get stuck in the middle of an assignment and get an instructor to help you debug your code! What is valuable is big ideas that a good instructor presents in a lecture and exposure to their way of thinking.

A great danger, especially in university classes, is outmoded technology. At the university where I got my CS degree, they were teaching undergraduates PASCAL long after the language was dead and forgotten in the real world. They moved on to Java, which is only a mild improvement -- it is certainly in use in the real world, but much of the energy and excitement is elsewhere. (I find it hard to use the words "excitement" and "Java" in the same sentence). But if you want that sheepskin, you have to endure these anachronisms.


Have any comments? Questions? Drop me a line!

Adventures in Computing / tom@mmto.org