What will be covered here?
In this article, I'd like to cover a bunch of methods and practices that you can apply immediately to improve your programming skills. This article can be useful for software engineers, both beginners and experienced.
How to navigate this guide?
Here's the table of content of what you'll find below. If you're only interested in something specific go there right away. I've tried to structure the guide in a modular way so that each topic is standalone.
How to become a skilled programmer
- Sprint vs Marathon
- Acquiring the right skillset
- Learning new programming languages
- Learning programming fundamentals
- Improving your debugging skills
How to ask for help from experienced programmers
- Find a mentor
- Pair programming
- Code reviews
The mental side of becoming better at programming
- Taking care of your mental and physical health as a developer
- Fighting the imposter syndrome
- Best practices for productivity for developers
Fast ways to become a better programmer
- Coding challenges and competitive programming
- Online courses
- Reading programming blogs
- Side projects and personal projects
- Making a personal portfolio website
- Improving your GitHub profile
How being part of a developer's community can make you a better coder?
- What are the recommended communities for developers?
- #100DaysOfCode
- Attending meetups
- Contributing to open-source projects
1. How to become a skilled programmer
Sprint vs Marathon
Breaking into the tech industry is a challenge. No doubt about that. especially for an entry-level job where the demand is growing and so do the requirements.
For many of the great tech companies on earth, it is no longer enough to have an academic degree. In fact, many of the high-end companies don't even consider that for technical positions.
The good news is that today everyone can become a software developer. The know-how is out there available in online courses, coding challenges, video tutorials, and a handful of programming blogs and magazines. However, getting hired as a programmer is definitely not an easy task, even for people that have an academic background in computer science or software engineering.
I'll start with my conclusion by saying that learning software development is more like a marathon than a sprint. It a full-time effort that requires the discipline to improve a bit every day. So the key to success is consistent improvement in baby steps.
Acquiring the right skillset
When most people think about the skillset a developer needs to have they refer to what tech stack they should master or what programming languages they should know. Although it is true, many experienced programmers would mention a wider range of skills that are necessary beyond writing good code, clean code, or any other hardcode coding skills.
Being a good programmer requires a broad scope in terms of skillset. Some of the key skills for success would be:
- Mathematical orientation. The degree of math you need to know is highly dependent on the project you are working on. However, programming is mostly about dealing with numbers and building logic around them. Mathematics is one of the most important tools for programmers to develop sophisticated applications, APIs, algorithms, and more. Without some knowledge in mathematics, it's quite difficult to improve. A good way to start would be this course by freeCodeCamp Math for Programmers.
- Problem-solving skills. Being a better programmer means being a better problem-solver and logical thinker. In fact, Solving problems is the core of computer science. Programmers must first understand how a human solves a problem, then understand how to translate this "algorithm" into something a computer can do, and finally how to "write" the specific syntax (required by a computer) to get the job done.
- Programming languages. I'll start by saying that different types of developer roles require different languages. Assuming you already know at least one language, one way to go is to dive deeper into a book about it and learn it thoroughly. Reading books is often overlooked but in fact, there's an abundance of knowledge there. Another strategy to improve is to expand your horizon to a new language. More about it below, keep reading.
- Excellent organizational and time management skills. Wait, What? Yes, you read it right. Many software developers don't just code all day. According to thenewstack, software developers spend 22% of their time just doing code maintenance. They also spend a higher percentage of their time writing new code or improving existing code (39%) and a much lower percentage of their time on operational tasks and in meetings (14%). Looking at this data means that writing code isn't everything. Being a better developer means you'll need to manage your time carefully. At this point, you may be too focused on writing code and not enough on learning other important skills that every developer needs.
- Accuracy and attention to detail. Well, this comes to one of the biggest emotional challenges that every developer experiences in the form of debugging. If you started programming already, you should know what I'm talking about. It can be disorienting, so when it does something different from what you expect, it's hard to figure out why. In many cases, debugging isn't technically difficult by itself. It's finding the bug that can drive you crazy. More about debugging below.
- Teamwork skills. Simply put, teamwork helps solve problems. Collaboration within a group can help solve difficult problems and improve your critical thinking. Brainstorming is a good opportunity for the team to exchange ideas and come up with creative ways of doing things. By working together, teams can find the solutions that work best by reviewing and reading code of each other. Nowadays, it doesn't matter where you're going to work, most likely you're going to be part of a team.
- Self-development skills to keep up to date with fast-changing trends. The tech world is ever-changing. Being on top of the latest developments in software is a "must-have". There are many ways you can stay updated but the main challenge is to manage your time efficiently. You may want to pick a specific blog to follow or you can use a coding news aggregator for that purpose. Another option can be to subscribe to newsletters.
Learning new programming languages
How to choose a new programming language to learn is quite complicated. Since it will take quite an effort, there are a lot of things you may want to consider. With that said, luckily there are some best practices that I'd like to share with you.
It all comes down to whether you know what you want to build or not.
If you don't know what you want to build
It can happen but it's quite rare. In this case, I would recommend you to go and read blogs about how to choose your next programming language. It very unlikely that after a few posts you won't get some idea about it. alternatively, you can go to StackOverflow or Quora to find people who have had the same question.
Another option is just to choose one without overthinking about it. Pick a language that's very popular, whether it's JavaScript, Java, Python, HTML, whatever. Just start with something. This is called action bias. Once you'll start learning you will gain motivation.
If you know what you want to build
Luckily there are some best practices that you can use to guide your learning journey. The optimal way in many cases is just to follow the popular language for whatever is it that you want to build.
- For web development (frontend): JavaScript, HTML and CSS. You'll also need to check different popular web dev JS frameworks such as React, Vue.js, and Angular.
- For backend development: Python, C#, or JavaScript. It's also quite handy to know SQL.
- For data science or machine learning: Python or R.
- For game development: It depends if you're aiming for 2D or 3D games. For 2D it's best to choose JavaScript (with Phaser Construct 3 as a framework) or C# (with Unity 2D or MonoGame).
- For Android development: Firstly Java was the official language for Android app development, but now it was replaced by Kotlin as officially declared by Google in 2019.
- For iOS development: Objective-C and Swift are two main programming languages used to build iOS apps. While Objective-C is an older programming language, Swift is a modern, fast, clear, and evolving programming language.
Learning programming fundamentals
Functional Programming
Functional programming (also called FP) is a method of thinking about software development by creating pure functions. It avoids concepts of shared state, mutable data that are observed in Object-Oriented Programming. It emphasizes the application of functions, in contrast with the procedural programming style that emphasizes changes in state.
Even if you don't work in a functional language, the solutions offered by the functional way of thinking can help you solve difficult problems and understand the world of computing.
Object-oriented programming (or OOP)
OOP stands for Object-Oriented Programming. Procedural programming is about writing procedures or functions that perform operations on the data, while object-oriented programming is about creating objects that contain both data and functions.
Object-oriented programming uses classes and objects, Procedural programming takes on applications by solving problems from the top of the code down to the bottom. This happens when a program starts with a problem and then breaks that problem down into smaller sub-problems or sub-procedures.
Object-oriented programming languages reduce development time because you can reuse code and develop models based on previous objects. Objects also separate themselves to prevent accidental overwriting or influence from other programs. It's clean and efficient.
Data structures
Data Structure is a way to store and organize data so that it can be used efficiently. There are many types of data structures such as Array, Pointer, Structure, Linked List, Stack, Queue, Graph, Searching, Sorting, Programs, etc.
Algorithms and data structures are basically the foundation of everything even though you'll probably never write one of your own once you're past the beginner stage. Knowing them, or at least having known them, will make you a better developer in the end.
Design patterns
A design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn't a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. The most common design patterns are Creational/Singleton, Decorator, Command Design Pattern, Factory Design Pattern, and The Observer Pattern.
Design patterns can make your designs more flexible, more resilient to change, and easier to maintain. If you've encountered design patterns only in passing, in a nutshell, they're general object-oriented solutions that you can use in your own designs.
Improving your debugging skills
Debugging itself is a very difficult process because of the involvement of humans. Another reason due to which it is considered difficult because it consumes a large amount of time and resources too.
There are so many strategies and tips for this online, here are a few of my favorites:
- Make it a habit to dig deeper and find more information about the issue before starting to debug a non-trivial issue.
- Increase code reading skills. Reading source code that other people wrote can help you become familiar with navigating in larger codebases.
- Learn from the bug. Don’t repeat the same mistakes.
- Take a shower / go to sleep.
- Try talking with a friend or colleague about the bug.
- Buy a rubber duck and explain what is it that you're trying to debug.
- Learn the basics of the tools you use often. Especially your IDE.
- Familiarize yourself with common error messages.
- Don't use it if you don't understand It.
- Practice writing all sorts of testing such as unit testing, integration testing (which is essentially taking components that have been unit-tested and building a program structure), regression testing, etc.
2. How to ask for help from experienced programmers
Find a mentor
Have you ever heard of a professional athlete that doesn't have a coach? It's simply impossible to achieve tremendous results over time without having someone to watch and guide you. The journey of becoming a better developer is no different. Finding a mentor can dramatically help you improve your coding skills.
A mentor is a big word, but in reality, it's a person with whom you create a relationship for the purpose of improving and learning new things. It can be a friend, colleague, or even a total stranger dev that you admire.
How do you get someone to be your "mentor"?
First, you'll need to find a person that you feel comfortable approaching with this topic. In case it's someone you don't know then make sure you do your homework on who they are and what they care about. Most chances that they are at least as busy as you. There's nothing more frustrating than getting a cold email from someone who clearly knows nothing about you and didn't even search about you on Google.
Once you've found that person, the ideal way would be to now make an approach. If you know them, it should be easier. In case you don't know that person, it can start with a simple email or a DM on Twitter asking for feedback. One of the most effective ways to start such a relationship is to work on some side project, and then ask for feedback about it. You'd be surprised how many people would be willing to help.
Once you've got your first meeting or email exchange, try to make it as actionable as possible. Narrow down the questions you have in mind and focus on those ones only. Ideally, by the end of the meeting, you already have a bunch of ideas and things you may want to improve. At this point, I'd ask the potential mentor whether I can follow up in a couple of weeks to show the progress made. If I got a positive response that a great way to start! It means that we now have some sort of a relationship that I can foster.
From that point, it's a matter of your passion and ability to move this relationship forward and try to make it stable. As a final note, keep in mind that although both sides to this relationship earn from it, it's still time-consuming. So please do your best to be mindful of your mentor's time.
Pair programming
That's a thing most developers encounter for the first time in a job interview. The thing is that pair programming can be used not only to evaluate the skills of a developer but also for two devs to learn from each other.
Say you have some project in mind, you cab always choose to go for it by yourself. Instead, try to add a partner to work on this with you. Obviously, having a partner doesn't mean you'll be coding together with the same pieces of code. But if you two are working well together and looking to improve you may want to try doing some pair programming. You'd be surprised how many new things you can learn from your partner by doing so.
Code reviews
Those who code as part of a team have probably experienced code reviews. However, many developers nowadays are solo developers. That means that in most cases no one will ever look at your code. If you're a solo developer, I'd definitely advocate that you find either a mentor or someone who's passionate about what you're doing. If you can find such a person you can both review each others' code and create an ongoing mutual improvement process.
3. The mental side of becoming better at programming
Taking care of your mental and physical health as a developer
Physical and mental wellbeing is a big topic, and it would probably require another set of posts to cover just this thing. However, when I wrote this article I found it highly important to mention this aspect of improving as a developer.
The journey to becoming a better developer is long and can sometimes be tough. Having to learn new complex concepts, deal with problem-solving, debugging and more can come with a price. There's an increasing amount of developers who experience occupational burnout or other forms of difficulties.
That brings me to one of the very first points of this article - becoming a better developer is not a sprint, it's a marathon. That means, it takes time, consistency, and perseverance. It's much better to improve 1% every week over time than trying to squeeze your improvement process into a specific time frame.
So if we understand that it's a long-term play, we also understand that without the proper conditions to win in this long-term play, we won't be able to make it. Physical and mental health is an important part of this. So here's how to deal with stress as a developer.
Fighting the imposter syndrome
If you got here and never heard of the term imposter syndrome that's perfectly fine. Most likely you've experienced this feeling but did not know that it's called that way. Developer imposter syndrome sees both junior and senior developers dwelling on the knowledge and coding languages that they don't know. They struggle to recognize their value, and negatively compare their skills against the skills of others.
I've seen many people suffer from that feeling and get into an endless overthinking process. You might be suffering from it if you've been thinking one of the following thoughts lately:
- "I simply don't know enough."
- "Every other developer in my team knows better than me."
- "I have to learn harder."
- "It's probably not the best way to build what I'm trying to build."
There are many ways to fight this situation. The first and most important step is to recognize if you feel that way or not. Once you're aware of it, you've already made a big step! You shouldn't be so hard on yourself. You know it, but no one is great at everything all the time.
Another good practice to fight imposter syndrome is to share your feelings with close people or with your network on social media. The support and empathy you'll get can help cope with it.
Best practices for productivity for developers
Earlier last year, during the COVID pandemic, I've written on this topic. My tips in general are:
- Set a daily goal
- Embrace accountability
- Plan your breaks
- Be transparent with your team
- Separate your work station and the rest of your life
- Get some exercise
- Welcome meaningful human interactions
For more detail, read the full post on productivity best practices for remote working developers.
4. Fast ways to become a better programmer
Coding challenges and competitive programming
Participating in coding challenges is an excellent way to refresh your memory of basic and advanced concepts before seeking a new job, preparing for a job interview, etc. I believe that’s the first thing we think about when the coding contests come to mind. However, you might find it interesting (or not) that many programmers actually love participating in such challenges just for fun. Yes, you read it right, and it has a name -- competitive programming!
Here are two valuable resources on this topic to help you explore it better:
- Top 5 Coding Challenge Websites Ranked by Data
- The Best Coding Challenges Websites To Practice Problem Solving by Catalin Pit
Online courses
Noaways, online courses have become more common and accible than ever. Tons of resources are being offered for free on YouTube and other platforms. Up until a few years ago most of the content was hosted on established sites like Udemy, Coursera, edX and Khan Academy. However, now there are plenty of indie educators that are providing awesome online courses in reasonable prices and sometimes even for free.
If you're more into the indie creator stuff make sure to check these awesome teachers:
Reading programming blogs
Wow this is one of my personal topics! One of the great things about the development ecosystem is that so many developers are also blogging. There are magazines, blogging platforms, coding news readers, indie blogs and more.
Finding written content is not a problem at all. The issue is actually the opposite! There is too much content that makes it nearly impossible to clear the clutter and find high-quality articles without having to spend much time and energy.
I'm not objective, but for me daily.dev is the ultimate solution as it is an all-in one coding news reader. It collects, ranks and display the best programming news in a feed. That way you can get all the best articles at a glance without spending a minute on searching for it. Want to see news on web development? No problem. Machine learning? You got it. Easily select your desired topics, and daily.dev will take it from there.
Reading an article a day is the perfect example of the "marathon" nature of improving as a developer. So it is highly recommended to start and making it a habit.
Side projects and personal projects
One of the most popular ways for developers to boost their knowledge is by building side projects. A side project (or a personal project) is practical way for you to try out new technologies, programming languages and frameworks.
If that sounds appealing the first step would obviously to come up with an idea. If you google it, there are endless resources on how to find an idea for a personal project.
We've covered this topic in our blog in the past so you may want to check out these resources:
Making a personal portfolio website
A personal portfolio website is a wonderful way to show your skills and the different stages of your journey as a developer. In most cases a developers' personal portfolio contains:
- Bio or some info about you
- Blog posts or essays that you've written
- Projects you've built
- GitHub repos that you contributed to or maintained by you
- Links to you social media accounts
- And basically anything else you would like to showcase!
One of the befits of making a personal portfolio is that it can motivate you to fill it with high-quality media and assets. After all you have your name and reputation on it!
Improving your GitHub profile
Although improving your Github will not necessarily contribute directly to your effort of becoming better at programming, it's important for your personal brand. In the world we live in today, it's not enough to have the technical skills. Potential employers want to know more about you, your history and character.
Your GitHub profile will most likely be one of the top results on Google when someone searches for your name. So having a proper presence there is worth your while.
Learn more about creating a killer GitHub profile README.
5. How being part of a developer's community can make you a better coder?
I'll start by saying that the answer to this question is yes. Being part of a community for developers can dramatically help you become a better developer. The main reasons are:
- Through communities you get to learn new things
- It's easier to stay updated on the lastest trends in programming
- You get motivational support and possibly also some recognition
- You can discover amazing opportunities for both your career and life
- You get to meet awesome people
What are the recommended communities for developers?
The definition of a developers community is a bit vague. But if you ask most developers this question these are the main site you want to check out:
- Dev.to - it's an online blogging platform. It's like a social network for developers where people get together to share knowledge. If you haven't heard of them make sure to give it a try.
- freeCodeCamp - it's an educational community that strives to make it easier for people to learn how to code. The best thing about freecodeCamp is not only it's super high-quality content, but also the fact that they are non-profit.
- Stack Overflow - I guess I don't need to say much about it. They are one of the most prominent developer communities out there. If you're not active on Stack Overflow I highly recommend that you start.
- Indie Hackers - although this community is not tailor-made for developers it's still an interesting place to be in. That's true especially for people who try to build new software businesses and side projects.
- Hashnode - this community is all about blogging as a developer. They offer some of the most appealing features for developers who blog. Make sure to check them out!
- Discord - there are plenty of Discord servers for developers. If you're into chatting, search for it on Google and you'll find some good servers right away.
#100DaysOfCode
#100DaysOfCode is one of the most popular personal challenges that people take on themselves to improve their programming skills. That applies mostly for beginners but not necessarily.
There's a whole ecosystem and community channels around it. If you feel like giving it a try go and check the official #100DaysOfCode website.
Attending meetups
Part of staying in the loop and learning new concepts is by listening to how other people are doing it. Events are all over the place and it's quite difficult to find the best ones for you.
As an initial step, I'd suggest you to visit meetup.com and search for topics you're interested about. That's a solid way to discover local groups that talk about it.
Additionally, if you into more consistent learning, we recently launched The Monthly Dev. It's a TED-like monthly online events. We meet online once a month to listen to world-class speakers. If a fun way to connect with other devs, learn new stuff and get inspiration.
Contributing to open-source projects
The open-source community is always open for contributions. For you it means that you can actually influence a library that many other developers are using around the world. I personally find it super cool.
The main issue is finding the right open-source projects you can try as a beginner. The best resource for this in my opinion is the repo MunGell/awesome-for-beginners. It provides a list of the exact projects and issues that you can take right away as a beginner.
Wrap up
I hope you enjoyed reading all these tips. I did my best to write it concisely, the same way I'd love to get it, if I was the reader. As you could see, improving your programming skills is a long-term effort and in comprised of several themes. There's the technical side of getting better at coding but it's not everything. You also may want to be active in developer communities and practice habits that will improve your wellbeing and productivity.