Practices to improve your programming skills
Most of the time a developer encounters two types of problems:
- hard problem which can be solved with little amount of code
- easy problem which requires ploughing through tons of code to find a particular place to insert those couple lines of code
To tackle the first one you need the problem-solving skills for the second code-reading skills.
How to improve problem-solving skills
To improve your problem-solving skills you need to practice more solving programming challenges.
And while practicing read up on the theoretical background the task relates to.
Here are some free platforms where you can solve programming challenges.
Codility
Codility has free lessons for different types of programming tasks and several tasks of different levels (effortless, painless, respectable, ambitious) for each lesson, so you can practice what you learned. It also has quite enhanced online IDE that supports all major programming languages.
HackerRank
Very mature platform with huge number of programming tasks in all sorts of flavors. Here you can practice algorithms, data structures, mathematics, specific programming language tasks, databases, etc.. there are even tests for distributes systems.
CodinGame
If you want to add some fun to the coding you should try this platform. CodinGame is a challenge-based training platform for programmers where you can improve your coding skills with fun exercises. You can also play with friends or colleagues and participate in international coding competitions.
There are many other similar platforms - Codechef, TopCoder, LeetCode, SPOJ… Just pick your favourite or several favourites and code the hell out of it.
How to improve code-reading skills
To improve your code-reading skills you need to play more with unfamiliar codebase and you need proper tools to help you with that.
Contribute to open source
Where to get an unfamiliar code? The answer is - Open Source.
There are hundreds of great open source projects on GitHub, contributing to them has several advantages:
- you practice more your code reading skills
- you receive great feedback from experienced programmers via code-reviews
- it looks good on your resume (the least important though)
Any open source project has open issues labeled with different levels of difficulty. You can start with some simpler issues before you get to know the codebase and gradually progress to more complex issues. Most of the easy issues are labeled something like low-hanging-fruit, beginner, good first issue, etc.
Luckily the software developers are mainly quite smart and love to share knowledge, so here’s a great GitHub repository listing lots of open source projects and the label they use for easier issues. The list is grouped by programming languages!
Know the tools you use
No matter what IDE you use learn all the shortcuts and features that it’s capable of. You can easily google it. It will not only speed up your work, but also help you to read and navigate through the code faster.
I personally use IDEs from JetBrains (InteliJ IDEA, WebStorm) and when navigating through code I use a lot of its features:
- fuzzy search of classes or files
- jumping quickly to specific file/directory in project tree by fuzzy typing file/directory name
- jump to declaration or implementation of an interface/class
- search/replace text occurrences in specific folder, module or whole project with option to use RegEx, file extension filtering, etc.
The types of the problems listed in the beginning of course is not complete. There’s at least another type of problem which involves fitting lots of new code into existing codebase which requires code-designing skills, but that deserves a separate post. Let me know if you want to add something to it.