Four years ago I thought I wanted to be a system administrator, dealing with people's IT problems, and setting up network configurations. At that point in time, my only experience with coding was taking an introductory Python course on Udacity. I thought programming was too hard and only geniuses can do it. But having landed a job in tech support for a software company changed my perspective a bit. No, I didn't become a genius or start thinking that programming is easy. What I did realize though was that I can do or be anything I want, as long as I am willing to put in the work. Especially when someone believes in you, as my boss did. But that's a story for another post. Today, I want to talk about SEVEN MISTAKES I MADE WHEN LEARNING HOW TO PROGRAM.
1. NOT CHOOSING WHAT KIND OF DEVELOPER I WANT TO BE
I didn't know any better at the time and at the company I worked at every developer was expected to work on anything that was thrown at them. Whether it's designing APIs, creating new UIs for websites, or creating and managing SQL Servers. So my solution was easy: learning everything. And thinking back, I believe it was a wrong solution. What I should have done was figure out whether I am more interested in building websites, games, apps, enterprise software, or even designing machine learning algorithms. Of course, I was largely influenced by my surroundings, but if you don't have a job in a related field, figure out early what you want to specialize in, that will save you a lot of time and cut down the number of things you don't need to invest time in. For example, if you want to specialize in the backend code, it's not necessary for you to learn HTML and CSS, at least in the beginning. And also, you wouldn't have a problem choosing which programming language you need to learn, since depending on what you want to build, the choice may be more obvious.
2. NOT SPENDING ENOUGH TIME LEARNING AND IMPLEMENTING COMMON DATA STRUCTURES AND ALGORITHMS
It may seem like a waste of time since you most likely won't be reimplementing the wheel at a job, it's still important to understand the "how" and the "why" behind algorithms and data structures. Imagine that your skills are a house. You don't start building a house from the roof, you start with the fundamentals. In addition to that, you probably won't pass any interviews not being able to solve the programming assignments interviewers may come up with. And just knowing of the existence of certain things and how they work may help your code be more performant, and hence easier to scale and cheaper to host.
3. GETTING STUCK IN THE TUTORIAL TRAP
I have used multiple resources to help me learn how to code, anything from the CS50 at Harvard to Machine Learning on Udacity. The problem is, I was doing it all wrong. I would watch a course, follow along in the code editor, but upon the completion, I wouldn't remember most of it. It felt like I was succeeding since I was finishing courses, but my knowledge remained the same. Now I actually think my knowledge was degrading, since tutorials were giving me a false view of what I am able to do. If I had to start over, I would do it differently. I would choose a project that I want to work on, and then use tutorials as a guide when I am stuck or want to find a better way of doing something. That would have saved me time and helped me create a portfolio I could show to potential employers. And things would probably stick in my memory for longer periods of time since I'd also have to figure out multiple ways to do something and then pick which one is best. That leads not only to knowing how something is done but also understanding why it is done that way.
4. STARTING SIDE PROJECTS AND NOT FINISHING THEM
We do have to come up with the definition of "finished" here since in software development nothing is ever truly done. But in this context it would be a feature or a complete project that compiles, runs, and does what you expect it to do. Not choosing what kind of developer I wanted to become along with the tutorial trap left me with a lot of started but unfinished projects, which I eventually just purged from my Github account. Instead, I should have started just one project and worked on that one thing. This would have helped me to show the potential employers my ability to finish things. My current employer will tell you that I can finish projects but I have nothing to prove it to anyone outside people I work with since all of the software I developed there is proprietary and I can't share the company's code.
5. GETTING OVERWHELMED WITH ALL THE THINGS I HAVE TO LEARN
This is really just a continuation of the first mistake but even if you do choose what kind of developer you want to be, there is still plenty of filtering down you have to do to avoid all the confusion and frustration that may come when you're just starting out. My advice to my past self would be to stick with one thing and learn it very well. It doesn't matter whether it's React or Angular or Vue.js, or whether you just want to write backend code in Python or C#. It's more important to understand the concepts that are behind the technologies you're learning. That way when you learn one of them, it's likely that picking up the other one won't be too difficult.
6. NOT HAVING A MENTOR
I probably wouldn't even be writing this today if I didn't make the mistake that has been a hindrance to my learning how to program. And that is going on this journey by myself. There were two reasons why I didn't intentionally search for someone who could help me succeed. First, I don't like wasting people's time when I can't give them anything in return. Yes, I could have hired someone to help me but at the time my bank account's balance wasn't letting me do that. Second, I am too afraid to look dumb so it's really scary to show my code to people. That has become a little easier with the introduction of code reviews at work but even then I am never sure if I did everything right. That's probably the perfectionist talking in me, and what I have been learning about myself is that perfection kills progress. It's better to do it wrong a bunch of times and be corrected every time than do it once in what you think is a perfect way and find out you were doing it wrong this whole time. So note to my past self: find someone who already works in the field and ask them to help you. You do have to be careful here though and start with someone just a couple levels above you. You wouldn't go to a financial advisor who manages billions of dollars for people when you only have a few hundred bucks, so choose someone more reachable.
7. STAYING IN THE COMFORT ZONE
If I had to combine all of the mistakes I made into one, it would be "staying in the comfort zone". Tutorial trap, switching technologies just to find myself at the start of the road again, not discussing code with anyone, and sticking to only comfortable things are all the progress killers. It may only seem like you're progressing when in fact you're staying at the same place or even worse, regressing. Yes, you may be able to write a "for" loop in a dozen languages but the fact is - you made no progress wasting time on eleven of them since the concepts are the same in all of them. Thus, when you learned a concept, go to the next one. Don't just walk around one thing that won't get you anywhere. And don't be afraid to take on new projects when they're offered to you. Unfortunately, I wasted over a year avoiding "hard" work since I wasn't sure if I was qualified to do it. Anybody can learn how to do things. One just has to put in some work and motivation to do it.
To summarize, if you're just starting out with your programming career, pick who you want to be and what type of things you want to develop, start with the fundamentals, build something, find someone to go along with on this journey, and you will be on the right path.
What were your biggest struggles when you were learning how to code? Have you made any of the mistakes mentioned here?