I stumbled into programming as a foreignor in a native land. Everything confused and mystified me about these strange people. Masochists to the core, obsessing over seemingly trivial details and minutia.
You see, I hate technology! It irritates the hell out of me when shit doesn’t work. Oh no, I upgraded my video driver and now I can’t use my computer! Crap, the internet’s out! Technology is great when it works, but how often do you encounter technology that works reliably 100% of the time and can never be hacked? Yeah, I thought so…
The problem isn’t you
I’m here to tell you that it’s not your fault. Really. Your computer is basically a souped up toaster. Yes, computers enable a ridiculous amount of amazing things. But fundamentally, computers have no native “intelligence” of their own. They can only do exactly what they are programmed to do. And this gets to the crux of the issue.
Modern computer systems are incredibly complex
Who’d have thought, right? But seriously, the level of complexity of modern hardware and software can be quite mind-boggling. It’s almost as if a massive amount of time and effort has been invested into developing them or something!
What is one to do about this?
What if you don’t identify as a computer geek, but nevertheless recognize the incredible career potential in software development and fashion yourself as an intelligent person who could learn this stuff and make a good living?
You can do it! I did. I’m not going to lie to you and tell you that it is going to be easy. Because it’s not.
However, I don’t think it helps that there are not a lot of good resources available for helping beginners advance to intermediacy.
The forgotten “middle class” of programmers
In starting from scratch and trying to make programming a career, I’ve found the lack of material catering to budding programmers to be a bit frustrating.
Most of the resources I come across are bifurcated into introductory tutorials and advanced material. Not that these can’t be very useful, but the gap between parroting introductory tutorials you find online and actually working on real code as part of a team of developers can be quite daunting.
I believe that there is a serious dearth of resources catered to bridging this gap, and I would like to try and help alleviate this problem.
What am I actually going to write about?
I will be writing based on my personal experience, which included a relatively brief academic exposure to computer science before trying to adjust to the realities of producing software as part of a team in order to pay rent and put food on the table. That is to suggest, computer science classes do not necessarily teach you effective habits and skills for a sustainable career in software. Some of the things that seem obviously important in this context are not always so emphasized when you are trying to solve homework problems and complete class projects.
In my estimation, the single greatest factor that will help you become an effective programmer is… interest! This might seem rather obvious (it is), but sustaining interest is something I personally struggled with for a long time. As previously mentioned, technology can be frustrating as hell. Nevertheless, the more I have learned, the more interested I have become. I want to make programming fun by making it simple! To this end, most posts will be relatively short, but there will be a lot of continuation, interrelation, and semi-tangential exploration, with a focus on things you can apply, especially early on. I’ll try to maintain a routine of writing a couple posts each week, and the relatively brief intended post size should help facilitate that.
I have a strong propensity towards distilling information at a high level as opposed to diving deeply and narrowly into the weeds. Sometimes we will have to dive into the weeds, but the goal will always be to pull you out, and give you some higher level context for it.
What specific technologies are you going to be talking about?
There are many things I want to write that are relatively platform agnostic. However, my personal experience will definitely play a role here.
As my own coding has been predominately in the Linux and MacOS space, a lot of posts will touch on aspects of how these systems work, and how you can make these concepts part of your own intellectual toolkit. Sorry, Windows users, nothing personal- I just don’t have a lot of Windows experience!
Though if you were one of those kids who started coding with Basic when you were 8, I will have stuff for you later too! :P Such posts will likely be more conceptual in nature since I’d generally like to keep regular posts relatively short.
Professionally, I mostly code in C++ with a bit of Python. I tend to do most of my side projects in Python, however, and will probably use it in a lot of examples. I absolutely love working with it and will definitely extol its virtues, which include beginner friendliness, in various posts. C++ is a difficult language for beginners (and experts alike), and I probably won’t dive into the weeds with it too much, but I will undoubtedly bring in aspects of it, especially as it relates to particular concepts being discussed.
Some of my current interests include highly scalable distributive systems, functional programming concepts, and the BEAM Virtual Machine.
You get a cookie!
Hey, you made it this far! Thanks for reading!
If you’re anything like I was when I started out, you don’t know what you’d be interesting in learning more about, because you don’t know what you don’t know! But if you have any feedback, feel free to drop me a line at: [email protected]