Hello everyone, I hope you’re all doing well. Welcome to my very first blog post! For this blog, I'm going to share with you my journey in developing my software development skills and give you insights into what I've learned throughout. Hopefully, through these posts, I can also guide you in your path as a programmer. This will be very different from my programming tutorials where I will dive into the technical things I've learned. Here, I will give more general tips around improving your skills as a developer or even as a person. If this is something that interests you, be sure to subscribe to my newsletter above.
In this first blog post, I thought I’d share with you tips on how to teach yourself to code. Along the way, I hope to share with you tidbits of my own experience to give you an idea of what works for me. Feel free to take some of my advice with a grain of salt because I haven’t gotten a job as a software developer at the time of writing this. Yet, I know I’ve learned a lot since I’ve started teaching myself to code and greatly accelerated my learning through this pandemic. I'd now say I'm at a point where I’m quite close to landing my first software developer job. Also, I’d like to recommend to you this book called soft skills which had a large influence on the ideas I had for this guide.
Do I have what it takes?
The idea of teaching yourself to develop software sounds like a large, daunting task (even more so once you understand just how much there is to learn). To non-programmers, this probably all seems like some kind of witchcraft that they could never understand. Thankfully, contrary to this belief, I’d say it’s quite easy to get started teaching yourself to code and get pretty far with it. From my experience, there are only three things you need to get far into this journey:
- An internet connection
- A decent computer
That’s really all you need! Some people have the misconception that you need to be great at math to be a programmer but I didn’t necessarily need strong math skills. As far as I know, only select fields of computer science require strong math skills. What you need though is problem-solving skills to develop complex systems or algorithms. Yet even still, there are areas of software development that are more design-oriented that can appeal to people who may not be the greatest problem solvers.
I sincerely hope that people will realize all these things to demystify software development in their minds. I don’t believe that you are just born with it or not and that just about anyone could learn to code given the three resources I mentioned above. If you just commit to learning for some time, eventually you will gain vasts amounts of creative power just by typing out some text.
What languages/technologies should I pursue?
I’d say you should just try anything that you gravitate towards or are interested in. It makes the whole learning process much more enjoyable. Even if you happen to learn something you are not interested in and get a job through it, do you want to spend many hours each week doing something you don’t enjoy? It sounds cheesy but do whatever you are passionate about or interested in. Hopefully, that passion can then help you learn faster and engage in what you are doing.
Counterpoint: But what if you are wrong about what you are passionate about and end up wasting your time? Shouldn’t I then learn a bunch of things instead to be versatile?
Of course, it could very well happen that you realize you are wrong with what you thought you wanted to do in life; people go through many changes. This just has to be a risk you are willing to take to master something. Even if this happens there is still value in having built any type of software that can help you learn other things. As software developers, we have to be good at learning new things because there are so many technologies or even features of technologies to learn. It’s better to specialize than to be stretching your focus so far because of a fear of specializing. That’s not to say you can’t explore for a little while to find what you want to do but you have to understand that it’s best to eventually specialize. Say we had someone specializing in one area versus someone trying to be the jack of all trades. Because the specialist focuses on one thing, they could become much better at that one thing than the jack of all trades is in any of the things they are learning. In the end, you can only have one job specializing in one thing so the specialist will be more appealing to hire. Sure, you miss out on more jobs but by choosing one thing and trying to become a master at it, you are more likely to get hired in the jobs you do apply for. So many beginners get caught up in thinking about which language/framework they should use when they should just pick something and follow through for now. Even if you realize what you chose was not for you, chances are you can more easily learn another language/technology based on what you already know.
Warning: just because on one day you feel you don’t want to do what it is you chose doesn’t mean that you aren’t passionate about it, nor does it mean that you should switch what you’re doing. Passion naturally comes and goes for people, especially if you’re working diligently. I know personally, there are some days where I just don’t feel like practicing/learning to code but that doesn’t mean that’s my general attitude towards it. Sometimes, I even get frustrated and do not enjoy it as much as I normally do. This is natural.
Learning strategies I’ve used
As a developer, you need to learn how to learn effectively. As I mentioned before, there are many different things out there you need to learn. This even applies if you specialize in things because software development is complex. Therefore, it’s important to at least have a general strategy for how to learn things. I’ll lay out some of the things I’ve found useful in my learning to give you some ideas for what you can try. Of course, people may learn things a little differently so these are my ideas of what worked for me.
Consistency is key
To me, consistency is my best friend in trying to get better at anything. I’m sure you heard this before but it is often better to practice a little each day than to practice a lot on one day and come back after some time. This ensures that everything stays fresh in your mind and becomes a habit. Then by making it into a habit you can pretty much get to a point where you can do certain things on autopilot.
"We are what we repeatedly do. Excellence, then, is not an act but a habit." - Aristotle
I’ve been practicing coding fairly consistently to the point where it more or less feels like a lifestyle. I don’t even need to think much about what my long-term goals are, I just enjoy the process of learning. I think there is beauty in just enjoying the process without having the final goal in mind, more so on a philosophical level but also to some degree on a practical level. If you can enjoy the process without being too anxious about the destination then it becomes a habit or lifestyle. From there, it should all be smooth sailing. That’s not to say that you shouldn’t think into the future where necessary to plan, I just believe that the majority of your time should be spent enjoying the process and not thinking about the results.
In terms of your study habits/times, I give myself little rules/plans for the week as to how much I’ll practice. I’ve noticed that in my mind these plans feel almost like the law so I usually don’t have much trouble following through with what I planned out. I like planning out my workload for a day in terms of pomodoros. With that, I have a good understanding of how much time I spend every day/week on a particular thing and therefore know how productive I’m being. I tend to go for 10+ pomodoros on weekdays and on weekends closer to 5-10 per day depending on how much work I need to get done.
Don’t just listen or watch, try to apply as well
A lot of you probably know about the whole idea of tutorial hell and why you shouldn’t want to be there. This happens when you binge-watch a bunch of tutorials but aren’t able to apply anything you’ve learned. I haven’t experienced this that heavily so I may not fully understand the struggle. However, I’m more inclined to believe that the reason I haven’t experienced it much is that I did a good job avoiding it.
The way you avoid it is to always ensure you spend time applying what you’ve learned. I know you’re probably thinking: It can’t really be that simple, if it was then why have I been struggling with it? I think you’d be right in saying that to some degree but hear me out here. Sometimes when I’m learning a new technology, I reach a phase where I feel like I know it but I’m afraid to actually sit down and code out of fear of messing up. I believe that that might be what causes tutorial hell for some people, the resistance to sitting down and coding.
The way I’ve always overcome it was to just dive in and force myself to code despite how I feel. I know in the end that it will lead to good results because I do need to eventually code myself if I want to succeed. As well, from personal experience, it is only when I take this big leap that I fully understand a technology or at least to a good level. Even if you mess up a lot along the way, that’s just a part of coding and learning in general.
One of the strategies I’ve used to practice with a technology was to try to build a clearly defined project that heavily uses it. It doesn’t have to be anything world-changing nor do you even need to finish it to the very end. I’ve had success learning something just by playing around with a project for a while and eventually abandoning that project. That’s not to say though that you shouldn’t commit to projects, just learn to distinguish a full project that you want to show off from an experimental one (this I’ve honestly struggled with and didn’t do correctly).
Participate in hackathons or contests
This is something that I find works quite well for me although I might understand why it isn’t the best for some. The reason I like using hackathons or contests as a learning tool is that it drives me to sit down and code real concrete things over a long time. Of course, whatever you build doesn’t need to be perfect but the key here is to practice anything you’ve learned recently or even try something out. Sometimes what I would do is learn something new a couple of weeks before a hackathon and try to put it to use during the event. I feel that through doing this I’ve been able to help myself solidify concepts in my mind. I’ve even learned new things during some hackathons to suit the requirements of my project.
Of course, you might have to go solo in a hackathon if you are using it to learn a specific concept in case your teammates may not have the same goals as you. However, there is still a lot of value in doing it in teams. I’ve even made some pretty valuable connections with my former teammates which helped me get to where I am today. I found my job as a technical writer via a connection I made from a hackathon!
I’d also recommend longer-term contests if you have the time for those. With hackathons, you will most likely write some pretty bad code because of the small time frame. With longer-term contests, however, you will get a better taste of the full development life-cycle and write some cleaner code.
I’m more competitive by nature so these events motivate me but if you’re not like that I can get why it might not be effective for you. However, even if you're not competitively driven I'd say there is a lot to get out of these experiences that make it worth a shot.
Work smart and hard
They always say that you should work smarter not harder. While that may be true in some instances the truth is I don’t think there is a magic pill that can replace hard work. Sure, you need to know how you should be working if you want to succeed, but in the end, someone who spends hours every day is going to outperform someone who spends an hour every other day assuming similar circumstances.
To be as successful as you possibly can, you need to work both hard and smart. Be willing to make some sacrifices, mainly in having less leisure time. That’s not to say you can’t have breaks, of course, nobody can work non-stop and not break a sweat. That being said, you should definitely learn to handle larger workloads especially if you plan to use coding to create a business.
This might sound a little counterintuitive. How can I learn by helping others learn? Well, I’ve found that teaching other people has helped me solidify concepts in the process. It feels as though doing that forces you to know something from start to finish instead of having the ideas randomly stored up in your head. As well, I found myself learning new things while trying to create the best guide I can for others; in the process of making my explanations, I realize gaps in my knowledge that I need to fill. Of course, as a bonus, you could even get something to show on a resume and get paid to teach people.
What types of resources do I like to use?
For learning to code, I mainly go off of youtube videos or articles/posts online. I imagine most people would enjoy the format of a youtube video too because of its interactivity. I find that while the content there isn’t perfect it can bring you very far. As for online articles, there are plenty out there for free that you can learn a lot from. I mostly use these as references when I’m trying something new.
If you have some money to spare you can try using books or online courses. With books, I’ve personally haven’t learned much about coding from them but I suppose there is a place for them for some people. These can be a little harder to use and boring from personal experience. Lastly, you can try taking paid online courses. For these, I’ve used Udemy which offers a bunch of different courses for cheap because of the frequent sales. I haven’t used Udemy much so I can’t give a detailed opinion about the platform but there have been good courses out there.
With all that, you should have a good idea of the strategies that I’ve had success with in teaching myself to code. I hope this helps other people in their journey to learn to code and gives them some direction to reach their goals. If you have any questions or things to add to this feel free to leave a comment below. I have a lot to say about this topic and this guide was already long enough so I’d be happy to answer any questions you might have.
If you like what you read, consider subscribing to my newsletter to be notified of new blog posts. Also, check out my programming tutorials here.