The Four Horsemen

Recently I was going through all of the half finished books on my bookshelf and realized that I have a tendency to pick up projects, start them enthusiastically, and drop them after a couple of days. This effect has led me to go down a bunch of rabbit holes that end up being pretty useless, especially as it relates to programming languages(in the past I've language hopped a million times which means I have a good cursory understanding of a lot of languages, but it turns out that isn't very useful for actually getting things done). Thus, I've tried to identify four general technology skill trees that I want to advance through and the programming languages that relate to those trees. I plan on spending some time increasing competency in each language for the purpose of pursuing each area and, in this article, I outline each language of choice, the area I plan on using it for, and a progression of books that I plan on using to improve competence. 

For Real Programming - C++


I don't know much c++, but it's easy to see that all of the real programmers in the world rely on this language for any serious tasks. When performance is in demand and stakes are high(think device drivers, SpaceX rocket software, trading and physics engines, etc) c++ always seems to be the language of choice. Due to its refusal to hold your hand as a programmer, c++ is incredibly scary. There are thousands of foot guns and the language is incredibly complex: the authoritative reference book is over 1000 pages and the main book for cmake(the most popular build system) is over 400 pages. However, the language is also inspiring. Once a person becomes competent at the language, he has earned the right to be called a true programmer. He can now dive into any serious computing area with the confidence that he can not just work in said area, but make real contributions. He has climbed an intimidating mountain, but there are more to climb in order to reach the ranks of programming gods like John Carmack, Jim Keller, Johnathan Blow, and Linus Torvalds.

Book Progression: Real Time C++ -> API Design for C++ -> Foundations of Game Engine Development 1 and 2 -> Game Engine Black Books

For General Purpose Computing and Concurrent Systems - Go


Go is the language I love most and have most experience in. I find that it has a ton of things going for it: a robust runtime, the cleanest concurrency/parallelism model, an incredible standard library, and serious, stubborn founders who don't generally bow to the mob that demands things rapidly change. At this point, it has been around for a while and has taken over areas like distributed computing, DevOps software, and even web development. I have written go professionally as well as used it for a lot of personal projects and it is always a joy to write. There is no wrangling with different build systems or package systems that break all the time. I like that the standard library allows a developer to do all that he needs without relying on dependencies. Go is also pragmatic: when a programmer needs to get something done and done right, go gets out of the way. There are no complex abstractions, and the incessant focus on error handling(as well as an amazing built in testing framework) means that writing robust software is a breeze. Its CSP based concurrency model makes handling parallel tasks easy, and all of the concurrency abstractions that one needs are built right into the language. Let's just say there is a reason that software like Docker, Kubernetes, and WireGuard are either written in go or have dependable go implementations.

Note: I have followed this book progression and have used go for a long time. Nowadays I learn more by reading better programmer's code on github, relying on competent friends for code review, and building projects for myself.
Book Progression: The Go Programming Language -> Concurrency in Go -> Docs and Code for the standard library

For Implementing Revenue Generating Web Apps - Ruby(using Rails)


Ruby on Rails is my newest adventure, and I have to say I love it. It's focused entirely on development speed and pleasure and, as long as you don't get any funny ideas about side stepping the Rails way to do things, it's the one I can get the most stuff done in the fastest. I was originally inspired to pick up a web framework for developing bootstrapped web apps when I listened to Pieter Levels' podcast on Lex Fridman. I must admit, I originally shit on the guy for making what I thought was just web slop. However, when I read more into him and his work, his approach is really fucking cool. He focuses entirely on minmaxxing revenue by rapidly developing apps and validating them in the market. If something doesn't make enough money, he just drops it and moves on to the next thing. He openly dunks on modern software engineering practices and complexity, choosing to write all of his software in php, html, css, and jquery. When someone tries to convince him to use the JavaScript framework of the day, he dunks on them and moves on to build something real.

Unfortunately, writing php and Laravel is not something I'm interested in considering the pay to win elements of Laravel. However, a similar character to this Levels guy is the controversial DHH. While giving the middle finger to entitled open source losers, racing cars at Le Mans, and blasting modern tech for being filled with complexity grifters, he has managed to build a web framework that allows any person to bootstrap a company in record time. Things like authentication and secrets management are built in. Working with database models is easy due to Active Record. Hell, these articles are written using Action Text. When DHH sees that something needs to be implemented that makes his life easier, he just makes it his way, gives it to you for free, and tells you to fuck off if you don't like it. That in itself is to be respected.

Over time, Rails has evolved to be the go to for deploying web prototypes, and I plan to use it that way to hopefully make some money myself. To DHH and Levels, thanks for the inspiration.

Book Progression: Ruby Koans -> Rails Docs -> Build Stuff and Try to Monetize It

For Breaking My Brain - Common Lisp


Lisp holds a special place in my heart, and I think learning it and breaking your entire brain chemistry by doing so is very important. Some of the best programmers I know personally swear by it, and so many modern features of high level languages derive from the Lisp programming paradigm. A lot of Lisp programmers have an art and/or math background, and I don't think that's by coincidence. If c++ is for hardcore engineers and rocket scientists, common Lisp is for mathematicians and artists who take pleasure in clean and aesthetic code that works together like a well written mathematical proof. Prior to python, all AI programming was done in common lisp. The power of the language is insane(macros themselves are a feature that almost no other language has), and while sometimes pretentious(for good reason), some of the smartest programmers are Lisp programmers. It's radically different than regular languages, and its heavy focus on recursion means that it's not the most performant. However, it's important for every person to learn different things than what they know, and nothing changes a programming mind like having to go through the struggle of learning Common Lisp. I myself have gone through the Little Schemer before, but I plan on redoing it before tackling some of the other mind altering books.

Book Progression: The Little Schemer -> SICP -> Grokking Simplicity -> Let Over Lambda