I strongly believe programming is an undervalued skill set. It may be highly valued, but not as much as it should be for how useful it is. And I'm not just saying this because as technology develops many other jobs are going to become increasingly obsolete (although I do think that), but because programming is one of relatively few skill sets that are useful almost regardless of your occupation.

Programming is not harder to learn than other skill sets

Non-technical people often have this idea that programmers (as well as those in any other STEM field) are super smart and like complex things. This idea honestly drives me nuts. We aren't smarter than you! I'm not "smarter" than an athlete any more than modern-day humans are "smarter" than our medieval ancestors.

Also, intelligence isn't about complexity. Intelligence is about simplicity.

Programmers fear complexity more than anyone. Because programmers have seen how horrifyingly evil complexity is. In fact, it's not inaccurate to say a large part of our work is trying to simplify complex things! (And I don't mean in the sense of "making tasks simple for the end user by creating new software that does it"; I mean simplifying complex software.)

Sure, programming can seem intimidating from the outside because the field has more jargon than most other fields, but if you give it a fair chance I genuinely believely it's not significantly harder than another skill set.

Programming is useful for you

Programming is useful for tons of things besides software development. For example, a while back I needed to bulk-edit images. I was proficient with GIMP, but it doesn't provide a way to edit images in bulk from its graphical interface, so I sought another way (GIMP itself does have a scripting interface but it's so nightmarish to use that I sunk two hours into it without getting any results or any error other than "Execution Error".). What did I land on?

Python. The scikit-image package, available as a free install for my operating system, gave me a Python interface to a powerful image processing library, and with a few lines of Python, it was trivial to transform dozens of images in the way I wanted. All in all it took me about five minutes to write and run the script (counting the failed iterations which I rolled back using git) after about twenty minutes to learn the library which will no doubt help me again someday.

Similar things are possible for any kind of media. Sometimes it takes some effort to find a suitable library, but there almost always is one - graphical applications like GIMP or LMMS are based on them.

Did I mention git? Oh yeah, version control is another thing that's super useful outside of actual software development. It may not be strictly 'programming', but git is a free piece of software designed for keeping track of versions of projects and collaborating on them. It makes it super easy to keep track of what changes you've made and when, merge them with changes other people have made in the meantime, overwrite anything without losing it, roll back to any previous version in a jiffy for whatever purpose, and do advanced things with the development history like edit out some changes that were made some time ago without affecting the changes after them (and without manually undoing them, obviously). But it's useful even if you don't fully understand all its features (I still don't). I've used it for visual novel scripts and my invented language and other stuff in addition to code.

While programming, version control systems, and command shells aren't all the same thing, they are very closely related and being proficient with one will be a great help in learning the others.

Programming will change the way you think in many beneficial ways

By forcing you to think in strictly meaningful terms, it helps you understand human communication and how human communication can be improved, and, at least if you're not a philosophobe, I think it can really help you to avoid bad philosophical ideas as well, by helping you develop an ontology.

Programming teaches you to be a perfectionist, and I mean this in a very good way. It teaches you to optimize things and to appreciate the beauty of simplicity.

And if by some chance this article convinces you to give it a try when nothing else did, I'd feel terrible if I left it at this and then you ended up quitting because you fell into some of the pitfalls I did when I was learning programming. I'm planning to post some more articles about that, but if I could give you just one piece of advice that could go right here, it'd be which language to start with, and right now, I think Python is by far the best language I've seen for learning the art. If you start with a language like C++ or Javascript then you're a lot more likely to quit.

A fun adage I came up with is this: Python teaches you to like programming, C teaches you to understand programming, and Haskell teaches you to understand the universe. You should definitely start with one that's enjoyable for beginners, and I can't think of one that fits that bill like Python does.


You don't need an account or anything to post. Accounts are only for email notifications on replies. Markdown formatting is supported.