Programming
This is a long, drawn out and very boring history about how programming entered my life, and why I've chosen certain technologies in my personal tech stack. Feel free to ignore this page and look at the project ones instead!
As a kid my dad had always wanted me to learn programming. He would constantly try to get me interested. Bless his heart, he just couldn't get me to take notice. I was too occupied with the PlayStation 2!
I finally started learning a bit about programming in 2021. In my previous job I'd worked in Electronics Engineering/Repair, and I knew it was a skill I was going to need to be able to kickstart my career seriously. So one day I picked up a book that had been lying around for years called "C++ For Dummies" and just read it. I didn't really do many of the exercises, but did have fun making silly console programs with my new-found knowledge.
Sadly I did not know how destructive this book would be, it was pre C++11 and never once mentions std::vector anywhere... Luckily, this pre C++11 subset is very close to what Arduino uses, and empowered that I could finally completely understand the short "Getting Started with Arduino" book we had laying around, and felt like I could make anything. Not too long after, I went on to read another book called "Learn C in 21 Days (Fourth Edition)". Lucky for me, C has not changed very much at all! I found this book a magnitude more fascinating than the first. C is such a beautiful language!
You probably notice something lacking thing here: Projects. Funnily enough despite learning C/C++, my first project was actually in Processing, which is essentially a library for Java with a beginner friendly preprocessor.
After that project and those books, I started seeing problems in my computing life that I realised I could fix. My first ever open source contribution was again in Java.
I went on to read and learn "The Black Art of Video Game Console Design" by Andre LaMothe. Whilst this book is mostly about the electronics side of things, there's also a lot assembly and C code for 6502 and SX52 (basically a super PIC) prototype console designs he demonstrated.
In 2022 I got a new job, and somehow I've ended up developing in C and Python for them. They said do you know any programming and I was like "erm, a bit?", so they gave me a Python script to fix.
This was my first exposure to Python, and I couldn't believe how easy it was! Of course anyone who's worked with Python long enough knows that comes at a price. IMO that price is Python's seemingly unsurmountable maintenance burden as new versions come out relentlessly, and packages get behind/abandoned, and while things never fully "break" they always seem to need "adjusting". The performance is obviously lower than C/C++ but honestly, that has never been my complaint, it's an aspect of the tool. However, white-space sensitive languages are quick to make my dislike list.
Nonetheless they seemed pretty happy (dare I say impressed?) with my work on it. And then they got me writing C code! I love C, but man there are so many foot-guns! It's a never ending learning process.
As I've grown as developer, I've settled on a few languages/technologies that are generally my first choices.
- C (and some C++) - These are the definitive languages that seem to underpin everything I'm interested in!
- Lua - Lua is the language used in many tools I like, such as Textadept, REAPER and Xmake.
- Dart - Mainly for Flutter, which I learned as it appealed to me a lot out of the choices for cross platform GUI toolkits, but I've found Dart to be a nice general purpose language outside of Flutter.
- Python - I'm not really a fan of white-space sensitive languages, but Python is undeniably everywhere and easy to be productive with.
I've also used/encountered Bash, JavaScript (who hasn't?) and Rust, but am not as good at those!
I do sort of wish I'd started with programming earlier. Starting in my early 20s already made me feel as if I was behind all the whizz kids you hear about (although frankly at school I don't remember anyone knowing any programming). At the same time, I don't think I had the maturity to stick with such books/materials and learn things properly until my 20s either. However, any age is a good age to learn so I'm trying to learn about 3D Graphics, DSA and DSP (I am a few chapters into The Scientist And Engineer's Guide to DSP).