Advice from a self-taught programmer
This post is meant to help newcomers to the field of software development and I believe that I’m now in the position to provide som insight regarding this topic. It’s been about 3 years since I started learning software development on my own and I still have a long way to go, but I have successfully taken me through the initial hurdles of learning this field. I will discuss these hurdles in this post and provide compassion as well as tips for how to get over them.
The initial phase and feeling overwhelmed
First things first, the initial phase of learning software development is hard. When you first start out there is seemingly an infinite things to learn and figuring out what to learn first is super difficult. And when you manage to pick something to learn, a bunch of other things is thrown at you that you are somehow expected to already know.
This is especially true for those who choose the self-taught route, in school you have a clear curriculum and for the most part I would imagine you stick to that plan as you don’t have much time to explore different topics because of homework etc. Obviously this means there is a smaller chance of you getting overwhelmed because you simply do what your teacher tells you to do as well as getting guidence for what you don’t need to focus on in a particular moment.
This is how I felt when I first started, and to some extent still feel when trying to learn a new technology. But what I have learnt is that you don’t need to understand everything from the start, it will come to you naturally later. I know this wisdom probably doesn’t help much when you first start, it’s still super overwhelming and I would consider it an artform itself learning to navigate this field.
My learning curve started to really pick up speed when I began focusing on building fun and interesting projects and viewing programming as a tool to make these idéas an reality. It was by doing this things finally started to make sense for me.
I had heard the word API everywhere and I could not wrap my head around what it really was for quite some time. It was in the middle of a project me and a friend was developing which required a mobile app to communicate with the web application we where building. We googled how others had solved this problem and the answer was to implement endpoints on the server which the mobile app could make requests to for data. This is what people call an API, or more precisely an “HTTP API”. …well, what is HTTP?!
Come up with fun idéas and begin to see technology as a tool to make them a reality and you will progress much faster!
Buzzwords and jargon
Software development has a lot of buzzwords and in a lot of cases it seems like you are expected to know these whenever you are reading blog posts etc. Don’t be discouraged. With experience you will start to see through the jargon and my strategy is honestly to not immediately try to understand the buzzwords I can’t directly wrap my head around, I know it will come to me later. The reason this strategy works is because over time you see words being used in different context and your understanding builds from that diversity.
Be curious and look up words all you want and do research, but do not get discouraged if you can’t wrap you head around it immediately.
You don’t need to know everything
You don’t need to know everything. As time goes by and you accumulate experience, you will start to see patterns in how things are done and how different things are connected. Every experienced software developer will tell you that it’s impossible to know every piece technology in detail. What makes a good developer is the ability to quickly pick up new technologies and methodologies and you get better at this over time.
Trust the process.
The whole world of software is built from layers of abstractions.
- At the bottom we have the hardware (cpu, ram, etc.),
- One layer above we have machine language (0 and 1's) which the hardware can understand.
- Above machine language, we have assembly languages where you basically write machine language instructions in a human readable form.
- Then we have languages like C, which makes it even easier to write programs the computer can understand.
- On top of languages like C, even higher level languages like Python and PHP is implemented. All of these higher level languages has it’s own advantages and thus their own use cases.
Top down or bottom up approach when learning software development? I believe there is benefits and disadvantages with both. I have taken the top down approach and I do not think I would have come this far if I didn’t. It kind of came naturally as a self-taught developer to take this approach. Sometimes I wish I had a computer scientist teacher by my side when trying to understand the low level stuff but I am also convinced you can learn anything on your own these days.
I would advice you not to advance into the low level stuff until you really feel ready, well when are you ready then? In my case I had learned to build some software and with time I just naturally started to wonder what was going on under the hood of the frameworks, libraries and languages I was using. Sometimes I catch my self being obsessed with how something works from the bottom up. When this happen I often get overwhelmed and need to remind myself that it’s okay to not know everything, nobody does.