There are any number of people trying to advise people on the One True Way to program. Recently, a thread on Reddit quoted someone on 4chan who had their own opinion on this, an opinion that I thought was beyond ridiculous. The Redditor wanted to know if the 4chan post had any validity, and it moved me to respond with this:

Wow, this is terrible advice. I have two degrees in Computer Science, appreciate very well the high market value of computational abilities, teach beginners programming, and I wouldn’t word my advice this way at all.

There’s only really one piece of this that makes any sense – “Read an algorithms book. The first volume of The Art of Computer Programming is very good. Implement a linked list.” And even that doesn’t make full sense because for all its virtues, that book is written in such dense and impenetrable language as to make it virtually useless for perfectly capable people.

The idea that self-teaching is somehow done better one way or the other is ridiculous. All teaching is contextual and individualized – including self-teaching. Everyone goes through bouts of self-teaching interspersed with working with mentors and teachers. The only faulty approach is to stop the learning process.

You can self-teach programming without becoming, or needing to become, an expert. You can learn only how to build WordPress websites and have a perfectly respectable life. The average 4chan poster might not give you props, but I’ve heard the average 4chan poster is also a bully, a misogynist, and generally a terrible type of person. This person’s judgment is highly suspect.

If you really do want to know whether a life as an expert programming is “for” you, and want to learn that on your own before you pay anyone to help, here’s the One True Way to get to that answer:

* Consider any computational problem that’s “simple enough.” If you can’t think of one, here’s one for you – sort an array of numbers.
* Pick any language you know or learn one you want to learn anyway.
* Solve the problem above in that language. For example, your challenge could be “Write a Python script that will sort a given array of numbers.”
* Read about the fastest way to solve this problem – a method called Quick Sort. Keep reading until you understand why Quick Sort is the fastest way to do it (on average.)
* Now solve the problem again, but this time, implement Quick Sort.
* Implement Quick Sort again, in some other language.

What you have just experienced is the life of an expert programmer. If the challenges were fun and invigorating, then you’re probably going to like your life as a programmer. If they seemed tedious and uncreative, this is probably not what you should be doing with your life.