I love being a Software Developer. Getting to solve problems and create amazing applications on a daily basis is something I get so much enjoyment out of. But I still vividly remember struggling as a beginner, that feeling of being so lost all the time, not really understanding what I was doing.
But I kept at it, and I’m so glad I did. As a mostly self-taught developer, there are so many things that I wish would’ve been explained to me upfront. Instead in my stubbornness, I had to learn a lot of things the hard way, and fail a lot. But through failure, I ended up learning a lot more, and for that, I’m thankful.
So here are five lessons that I learned as a Junior Software Engineer.
Let’s start with the obvious; being a Software Developer is all about solving problems. Being able to break the larger goal and purpose of an application (even simple ones), into smaller, manageable units of code working together and in unison is easier said than done.
Many people think that being a programmer is all about mastering complex logic, and to some degree this is true. The computer is incredibly dumb and needs to be given exact instructions in order for it to perform the action or output desired. But the process of creating complex logic is actually quite creative.
Every programmer needs to be able to see both the big picture and minuscule details. This combined with the tiny building blocks of programming, we as developers are able to construct the greater application as a whole. This also carries over into debugging as well. As a developer, you may spend just as much time (if not more) trying to find that pesky error in the codebase you’re working on.
This balance between the ability to write exact logical flows and statements, whilst also resolving tricky bugs, and doing it in a way that creatively and efficiently solves the problems at hand is the key to being a good developer. Doing in a way that is clean, readable, sensible, and well documented is the key to being an amazing one.
At the end of the day, the purpose of the Software Developer all comes down to being able to solve problems.
Fundamentals are key. Programming is a lot like school math, in that nearly every concept builds upon a previous one. If you ever find yourself in a situation where you are writing a complex piece of code but don’t understand one of the smaller components, go back! This is why you should never copy & paste: you probably don’t understand what that code is doing, and it may have unintentional side effects.
It’s not to say that writing out the code by hand will magically flip a switch in your brain, and you’ll suddenly have an a-ha! moment. But writing it out by hand will make you question what that bit of code is really doing. And that’s the point: if you don’t really understand the code you’re writing, you’ve missed the point of understanding.
If you ever see a bit of code that you don’t understand, seek to further your knowledge of everything by trying to figure out exactly what that code is doing. It might be a new piece of syntax that you’ve never seen before, or it might be a way to structure a codebase that you’re unfamiliar with.
Whatever the case, you must master the fundamentals. Having a solid mental model of everything will let you solve problems much more efficiently. You’ll be able to reach a point where you have such a deep understanding of the code that you’re reading or writing that when you encounter a problem, you’ll know instantly what‘s wrong. You’ll be able to write clean, efficient code and fix broken code all the faster.
Without a true, solid foundation, you’ll never be able to be that truly great developer. You’ll try to move on to a more complex concept, and feel utterly lost because you haven't fully grasped those fundamentals. Trust me, I speak from experience when I say: If you see something you don’t understand, go back and seek to understand it.
Concepts are far more important than the specifics of the syntax of any language. Every language is going to have its quirky feature, but it’s also going to have the core concepts that nearly all languages have. Variables, arrays, conditionals, loops, and so on. Whether it’s the constructs of Object-Oriented or Functional programming, these concepts are the focal points to solving larger problems as a whole.
Of course, at the end of the day, you need to be able to write code. But if you want to be able to write good code, concepts are key. Andy Harris has an amazing talk on thinking like a programmer, and this is one of the points he makes. He focuses on teaching concepts, and not code, and thus his students walk out of his class having learned 4 new programming languages, but more importantly, having learned the key programming concepts.
I feel as though I can’t stress this enough, as it seems so many beginners completely miss this. They instead get stuck on the intricacies of the syntax or trying to memorize every class and method in a library. These things are always a mere google search away, and good developers always know this. It would be impossible to memorize absolute everything of the standard library of the language you’re working in or that oh-so-important framework you write your code on top of.
Bottom line: Concepts are more important than the Code itself. You can write thousands and thousands of lines of code, but you don’t understand any of the concepts behind that code, you’ve missed the point. And to go even further, understanding the reasoning behind these concepts, that’s where true mastery is achieved.
Everyone learns differently but knowing how you learn best can be a massive difference maker. The tech industry is constantly shifting, changing, and innovating, and if you ever stop learning, you’ll get left behind. Being a developer is a commitment to a lifelong learning process, so learning how you learn best will make your life a whole lot easier.
Some people prefer to just throw themselves into the documentation, while others like to watch hour-long courses that break every little thing down. The trick is to find what works best for you. Personally, I prefer a little of both: I like to watch a quick primer video to get a general idea, and then deep dive into the documentation to learn all of the gotchas.
There are other ways as well. Some people prefer to have a mentor who can push them in the right direction, while others prefer to read everything from Stack Overflow. Whatever way you prefer, the important part is finding the way that you learn best.
It can be really easy to get lost in a mountain of tutorials, articles, and documentation. But no matter how many videos you watch, or courses you take, nothing can substitute actually writing code. This one might seem like it would be obvious, but you’d be surprised.
Sometimes I’ve found myself trying so hard to read piles and piles of documentation just trying to figure something out, spending days doing so, only for it to really click once I actually sat down and wrote the code out. As you are learning key concepts and building your mental map of how everything is interconnected, make sure you write the code out yourself.
The other problem that may present itself is, “Well, what next?” In these situations, there are two things that will help you: Roadmaps, and Project Ideas, and both are a Google search away. Roadmaps will provide you with ideas on what to learn next, and lists of Project Ideas will give you exactly that: Ideas for projects that you can build.
Becoming a Developer isn’t easy, and if it was, everyone would do it. Technologies change, libraries rise and fall, and engineers will forever argue about tabs vs spaces. Learning how to write code is hard, time-consuming, and mentally exhausting. But trust me, the payoff makes it all worth it!
So continue to learn! Always strive to get better, make things more efficient, get faster, and write better code!
Good luck, and Happy Coding!