Programming for Money - It's an Annoying Motivator
Day in and day out I have these magnificent ideas on what to make. Whether it be a game, a WASM website, or some water feeding micro-controller/microprocessor, I always get bogged down by the same old problem. Fucking. Money.
I have discussions about sociological motivators with my mate all the time and what the main priorities are to ensuring that we - as a civilisation continue to advance as rapidly as we have. Now I know, I know, it may be hard to believe that we are advancing given the current circumstances with regards to our leaders and all that shit, but we're still advancing rapidly. To the point - our consensus at the end of a discussion that lasted a good while was that money is the main ingredient to get things going. It's annoying to think about it, but money buys health, which can lead to prosperity. It starts with being enabled to obtain what you need to survive, followed by education and then giving back to the community that you belong to, hopefully something beneficial to all parties involved.
Alright, Let's Make Coin!
I've had to think hard on what to do about making money since starting up a company, quitting my kinda-sorta-full-time job and attempting to mould myself into a strong independent adult. I've started thinking about how to make the most of my skill set even with my shortcomings(see my previous post on my ordeal with imposter syndrome). What do I know? At the time, I could make games, I knew how to code half-decent systems, but I lacked the boring shit that everyone looks for - algorithms and data structures. Well, I didn't lack it, I forgot about it. I never remember that stuff, so much is automated now that I've not needed to use that stuff at the level that I'm programming at. I started off low level, but there's only so much I can deal with this whining computer at the lower level. That being said - I pulled up my left sock, and got to learning. I started by jumping on to HackerRank from time to time to relearn that stuff. That helped a fair bit with the underlying logic, but it sure as hell isn't enough anymore.
Design principles, they're so crucial to anything you're about to take on. This is something that I would tell everyone who's coded even a little bit. Understanding how you're going to build a system before you get started will save you a ton of time. It is so crucial to getting it right immediately. Nobody wants to spend hours de-spaghettifying their code in an attempt to debug. It's a pain, do right by you, learn the principles. Even though they might not be directly related, OOP design principles are more a logical flow that crosses to every language. They're important to developing a robust, scalable and - most importantly - easily understandable system that will save you from many headaches. Please learn them.
Next up is the web stuff. Depending on whether you're going for a JS framework or not, you should understand the popular design pattern for that framework. An example is Vue with the MEVN stack, where you'd learn how to communicate with servers more easily because you know the steps you need to take, thereby minimising your chance of stuffing up. I can definitely get that it might feel a little restrictive when you're adhering to certain principles when developing something. But you're implementing the tried and true methods of communication between servers and cients etc. i.e. the boring shit. So just deal with it so that you can go back to the fun stuff. I wouldn't worry about the novel networking techniques unless you're developing an MMO or something.
Ahhh the new age stuff, apps. Native code is a bit of a pain, whether you're dealing with Android or iOS, it gets technical sometimes. Flutter really makes it easy to just get the job done. You don't need much coding experience. only that you understand strongly typed languages. Flutter uses Dart as a language and it is so great. It's so easy to just jump right in and get started with a simple app that renders to both iOS or Android. Their ideology is to streamline development to multiple OS's, so I highly recommend you learn this early on to give you a headstart.
Which leads me to making games. This is what I love. It is the culmination off all things systems, design, engineering and art from any industry. I have good grounds to say that if you want to learn how to program well, get started with a game. You've got the sandbox to manage multiple systems, learn the process, optimise the process, learn how to improve the project even without coding and tackle multiple problems from so many perspectives without ruining your computer. Rah! I fucking love video games! Every other industry is now borrowing from the game dev scene to visualise their projects and advance forward. It's amazing how much respect the industry has garnered recently.
Those Old Fuckers Had it Easy
I'm of the opinion that the role of Junior Developer is a dying one. Because nowadays you need to know C, C++/C# have created at least 1 application for a desktop, know SQL(or equivalent), have worked on one paid project, have developed several websites, have done an internship, fiddled with Tensorflow(or equivalent) and have 3 years experience. So native app, web development, database and machine learning experience.
Does that sound like a bloody junior developer to you? This is the sort of crap that I was running into. So I had to jump on and start ticking things off. I have barely any money for rent, chickpeas or to cover my credit card. But hey, let's slave away for that sweet dosh.
I'm still in the process of learning design patterns and new forms of logic and I've figured out how to speed up the processes of certain segments, which I'll explain below. In case you too are dealing with the frustrations that is becoming a developer in today's world.
What do we want? Experience!
Websites/Apps are such a cluster fuck. You need to install a mish mash of libraries to get shit to work, and it's so painful to troubleshoot. Fortunately Flutter comes to the rescue and knocks that crap right out of the water. That being said Flutter Web is still in its infancy, but I highly recommend getting started with it as it'll boost your productivity so high.
I wish I'd bothered to learn databases and stuff earlier on, as it's quite handy for lazy people like me. I'm learning it now, mind you, but I just wish I'd had more experience with it. At the moment I'm learning Flutter and with it comes needing to understand Firebase. It's easy enough to get, but I can pick up on where people would slip up and get confused. It takes a bit of fiddling around with before you understand the mechanisms.
Games are super fun to develop. Even if you're shit at it, it's just fun. You can see in real time what you're doing and it really motivates you to want to keep going. I used UE4 and Unity during my time at uni and then Unity during my time as a simulations developer. It's a lot of fun to develop your own systems, and you can easily pick up on how to optimise your stuff as you're going along. There are some principles that you can follow, but they are engine dependent, so read the introductory docs to help you understand how to approach them.
How Long do I need to Learn for Before I Start Getting Paid!?
This is the thing that shits me, because it varies on who you know, and getting that douche in HR to slot you in for an interview. I applies left, right and centre to secure an interview, and it seems to have worked. I was able to talk the talk. Walking the walk was harder because each company has their own metric for hiring someone. But here's how I worked it:
Much like a neural network, every time I was shut down and failed an interview, I would go home and revise what the core problems were. I had no time to get upset at myself for failing because I needed to go home and learn stuff. This is another core issue that's been annoying me, the culture to accept failing - or lack thereof.
The way I see it - if I'm going to fuck up, I'm going to fuck up gloriously. So I'm going to see every fuck up right through to the end and these interviews are the perfect example. I kept going home and tweaked ever-so-slightly the errors of my ways to get myself back out there to get the job. And sure enough - I still wasn't getting work.
Oh, did you think I was landing my jobs? Nah mate. Since I was no longer looking at job interviews, I started seeking out my own business. My business partner and I do some freelance work on the side to pay for our goods/skill up. We converse all the time with random people that we meet. Occasionally we'll get some business and other times we'll get people that talk absolute shit about their 'great app idea' and not follow through with an email. I'm always having a hard time securing work, but I'll just roll with the failures. I don't think I don't have the skill set. I just don't want to slot myself into one role forever. Thus starting my own business.