Lesssons
1. Show off your work - even if it's horrible
I often reflect and think back on my journey as a programmer. I started in primary school with scratch, and due to my fondness for games, found enjoyment creating games for myself and showing them to my friends. Then, I wanted to write more complex games and one of my teachers from school suggested GameMaker. This engine took me from a drag and drop coder into someone who could actually write code, I felt like a "coder".
However, my games were never any good, and I was embarrassed to show my friends some of the things I had worked on. The motivation that I had received from showing my friends and them saying "this is really cool" had been the driving force for me to keep learning, but once that pipeline had been taken away, I suddenly found myself unmotivated.
This is why this lesson would be number one for me. Especially as a younger person, it's sometimes hard to show off things you're passionate about in fear of rejection. So biting the bullet and getting feedback is one of the best things you can do, and it will also set you up for later in your life knowing how to deal with constructive criticism / rejection.
2. Force yourself to finish
Shiny Object Syndrome often gets the best of us, especially when we're just starting out coding. We learn new technologies and techniques so fast that our old code quickly becomes outdated, and often throwing away everything and starting again might be faster than finishing a project. However this is a quick trap to fall into. For me, one of the most motivating forces that got me to keep coding was imagining my portfolio page, and it being full of projects that I could be proud of and consider completed. However, after about 4 years of coding games with GameMaker, I had no finished and published games.
This feeling was extremely disheartening, and I realised that I had trouble finishing anything. I had trouble with commitment. Everytime I got to something difficult in the creation of a game; creating assets or dialogue, or a tutorial or a nice UI - I would give up and move onto my next big idea. I would try and explain the idea of a new game to my friends and I was always met with the same response - "what about that other game you were working on".
When that question was asked my stomach always sank a little bit. Because I knew that the game had defeated me - I lost the battle of discipline. It got too hard and I just quit - I was a quitter. It pained me everytime to come up with some excuse that wasn't "I'm lazy and quit".
Getting into the habit of finishing projects is exponentially good for your development as a programmer. You learn specific skills about publishing - when to consider something "done", cutting down on scope, minimum viable product etc. Also, having something that you can add to your portfolio or resume as something you're proud of is especially beneficial.
3. Stick to one stack
During my time making games I mostly stuck with GameMaker. However I was aware of the technical limitations and wanted to experiment with something that I thought would be more "powerful", like Java or C++, or Unity and Godot. However, I spent about 6 months trying to make a simple game with these 4 technologies (or tech "stacks"), and had gotten no further than I was currently at with GameMaker. GameMaker was perfectly able to do what I wanted, and I was simply wasting time with the other languages. Sure, I was learning some abstraction ideas and learning other languages never hurts, but in terms of finishing a game - getting something concrete that I could show off - I was wasting my time.
This is sometimes a lesson I have to tell myself again and again today. The current webdev landscape is full of fresh new frameworks every week it feels like, and everytime I see one I think to myself, "Wow this could do x so much better than what I'm using now". And so I'll do a bit of research into the new framework but then have to stop myself.
You get to a point where any language or framework can do what you want too with enough code and determination. This is a lesson that should be shouted into new programmers. Sure, some languages may be better at some things than others - but if you're just learning the new languages, there's no way you're going to be comfortable enough to utilise the specific features of each language that makes them better. Understanding the core fundamentals of a tech stack or language is exponentially more important than learning lots of languages.
One quote - I don't know where it came from - stuck with me. "A beginner programmer will say they know 2 languages, a novice programmer will say they know 10, and an expert will say they know 2."
4. Document your progress
This one is especially useful for when it comes to creating your portfolio and resume, but is also extremely useful for finding motivation when things get tough and you're on the edge of burnout. There are many different tools for this: Pen and Paper, A Blog, or GitHub repos even. Just something to track your projects, what you've learnt from something, and a little description on why this project has furthered your skills is enough to count any project as a "success".
Everyone has those little side projects that you might have spent one week and then got blocked by some implementation that you couldn't get - but even failures like this can be useful. You now know what you don't know, and for those keen on becoming a better programmer, this knowledge is more valuable than knowing what you do know.
To be able to look back from where you started, from your first for loop to your first public GitHub project, to your first PR, to your first public API - to be able to look at your progress is soul fulfilling. Being able to see the progress you made is reassuring that you're at the right level - and it will help fight the inevitable imposter syndrome.
5. Install Linux
Now, this may seem like a pretty opinionated lesson, and it very much is. Programming in Linux is just much nicer than the Windows workflow. Being able to do everything via a terminal is so much nicer than having to install 3 different apps just to edit a project on git. The customisation of linux distros (especially Arch 💙) allows for some more programming learning opportunities. If you spend the time to learn linux, you will eventually come across many concepts in computer hardware that are important to know for when it comes to programming later on - especially low-level programming. Linux is the #1 OS for programmers for a reason; switching earlier will be exponentially beneficial.