GitHub hosts more than 200,000,000 repositories, but only a fraction of them are valuable resources for specific niches.
Next to many repositories with learning projects, open source software, and collections of ideas, you sometimes find a few gems. Mainly thanks to GitHub's native markdown support, the platform often even hosts full books or collections of learning resources for nearly anything.
Over time, I collected quite a few precious repositories that contain so much knowledge that you can use to become a better developer. Particularly software developers can be pretty happy because most of those resources focus precisely on their craft.
In this article, I will share the 11 best repositories that help you become a better software developer.
Without further ado, let's get into it.
Professional Programming is a classic resource collection.
You get many tips on outstanding books, many more worthwhile articles to consume, and a link for nearly everything you can probably imagine.
This repository will take quite some time to go through, but every single piece inside it is worth being consumed if you really strive to become a better software developer.
If you now ask yourself what a snippet is, take it like this: For quite a few problems you can imagine, there is at least one possible solution. A snippet presents this solution in an easy-to-digest way, shows you the code, additionally describes it a little, and that's it.
This repository is the perfect bookmark if you ever get stuck. Just jump into it and look at whether there is already a solution for your problem.
Project Based Learning is a list of programming tutorials that shows aspiring software developers how to build an application from scratch. It contains projects in many different languages.
Practice is the best way to learn software development. Repeatedly solving specific problems fortifies your knowledge and gives your brain the reason to memorize all those concepts you apply during your work.
This repository is an excellent collection of projects that you can do to improve your problem-solving and get more competent in your language of choice. Just pick a project from time to time and work on it regularly until you are finished. You do, of course, not need to do everything at once or even at all.
The System Design Primer is the missing guide to system design that many less experienced (but even more experienced) software developers always searched for.
System design is one of those fields where practice especially makes you better. Theory often lacks behind real-world use cases and issues you encounter in the wild.
This repository, however, is an incredible example of how to teach the very practical domain of system design with Python. If you manage to finish going through this repository, you'll be a pretty dangerous software engineer who knows their way around system design way better than many of their peers.
If you are really interested in system design, set aside at least some time each day and focus on working through this repository. Make sure you put enough focus on it because system design can be pretty challenging to grasp.
Becoming a software developer at a large company can be a challenging task.
Tech interviews can be daunting and are often nothing like the actual job. Some even go so far as to say that you need a whole different set of skills to pass a tech interview than you need to do the job.
Coding Interview University is a repository that aims at precisely guiding you through the process of becoming competent in tech interview situations, all while additionally teaching you many crucial computer science fundamentals.
The guide explicitly states that it is aimed at software engineering and not web development, so keep this in mind when you try it.
Should you decide to go through this guide, make this your only focus. It is specifically designed as a roadmap for a dedicated learning process, so better try to prevent too many interruptions from other topics.
No matter how much you know in tech, you will probably never know enough.
As harsh as this statement might sound, it is true. Tech as a field is too broad nowadays to even remotely come close to knowing everything. This should, however, never discourage you from learning more.
Every Programmer Should Know is a collection of (mostly) technical things every software developer should know. By going through this repository, you might learn a few new tricks, and this alone justifies spending some time on this collection.
This is no guide you need to follow regularly. It is a learning resource you can refer back to from time to time or whenever you feel like learning something interesting and new.
roadmap.sh is a collection of detailed roadmaps.
A roadmap is basically a guide with directions for you to follow if you want to do a specific thing or learn a particular profession.
In this case, roadmap.sh contains ten very detailed roadmaps that show you how exactly you can design your learning path to become proficient in the following fields:
- DBA (Postgres Database Administrator)
You need to be aware that those roadmaps are usually designed to be followed relatively strictly. Although they offer alternative paths from time to time, you still need to put in work regularly if you want to get through. This means you should free up some time if you decide to get into one of these.
Have you ever wondered how you could implement specific things? Have you ever tried to create your own operating systems and missed some crucial guidance?
Build your own X tries to close the knowledge gap in implementing some basic but also some pretty advanced topics. It basically contains deep dive projects for curious hackers.
Whether it is an operating system, a voxel engine, or something as simple as a command line tool, this repository most likely has you covered.
All projects can be created on the side. Just set aside a few minutes or more from time to time and continue working on the project you chose. It is up to you how much time you actually want to put into these projects.
Books can be a fountain of knowledge. The majority of an author's knowledge distilled into ink on paper—hundreds of pages of practical advice and learning opportunity.
List of Free Learning Resources In Many Languages, in this case, is an incredibly huge collection of free eBooks for any software developer to consume and learn from. And the best part is that the repository does not only cover English books but many other languages, as well.
Whether your native language is Arabic, Dutch, German, Hindi, Vietnamese, or another, you might be able to find the book you are looking for. And if your native language doesn't contain the book you are looking for, the English section - with its sheer size - might still have a valid alternative for you to consume.
The great thing about books is that you can usually just read a chapter a day, sometimes a few more, and still gain valuable knowledge. It is up to you how much time you want to spend with these books.
Awesome Guidelines is a little different. Instead of distilling knowledge into a collection or a book itself, it gives you some of the most basic foundations a programmer regularly needs: Coding and formatting guidelines.
If you're now one step before skipping this repository, wait for a second, and let me explain.
Code is read way more often than it is actually written. This alone justifies formatting your code in some way or the other - at least to the extent that you and everyone you work with can agree on how your code should look.
Learning even such an essential thing as a specific coding guideline can immensely help you understand code you haven't written yourself way faster. And if you understand it way more quickly, you can probably fix it even faster. And all this leverages your learning process because you should never forget one thing: Code is as good as a teacher as any text. You can always learn a trick or two by just reading code.
Whenever you have your IDE/editor open, also remember to pull up one of these guides. Perhaps even try to configure your favorite linter according to these, and you are already good to go.
Domain-Driven Hexagon focuses on teaching you how to design software. It focuses explicitly on domain-driven design, which is a design approach that focuses on the specific domain software is created in.
When going through this repository, you especially learn how to incorporate domain-driven design into all aspects and layers of software systems - from the implementation of a specific feature to the interfaces between applications, down to the persistence layer.
The chapters within this guide are often bite-sized, so they are great to be consumed within a few free minutes of your day. Whenever you have a few minutes of spare time, read on, and learn more.