The best resources for studying programming

Illustration of a stylized child dressed as an astronaut looking at a toy astronaut through a magnifying glass, with an oversized helmet in the background. Illustration of a stylized child dressed as an astronaut looking at a toy astronaut through a magnifying glass, with an oversized helmet in the background.

It is crucial to know how to choose good learning materials on the challenging path of studying programming. Not only in our field there are a lot of great, excellent books, but also developers from all round the world publish dozens and hundreds of articles on solving specific problems.

In such a chaos it is very difficult to find the necessary, fundamental knowledge, having which one can easily understand and learn any kind of technique in the shortest time possible. In this article we will review the main sources of this fundamental knowledge: the links you should start with when learning any new technology. But be prepared: the resources offered are much more difficult to use than the traditional ones. But if you follow this advice, then the speed of learning will increase dramatically ;-)

Documentation

First of all, you need to google the official site of the technology and study everything that is written here. Docs must always be your first point of contact with any library, programming language, framework or any other instrument. Don't google "getting started with ruby on rails", don't search "how to make a todo list on react.js" and forget search requests like installing ElasticSearch. Remember, that developers are those who know the technology the best, and if they are good guys, they have already taken care of a good documentation.

Github Issues, Github Pull requests and other channels of communication with developers.

Ok, so you've opened the official documentation, made everything like it is said, but dumb Logstash just won't start. Here you'll ask - "so, maybe it's time I throw my cap over the windmill and start googling everything?".

No, not yet. Your next step is to look at opened and closed Issues on GitHub, to look for pull requests there. If it is true that your problem doesn't result from your inattention, then either there is a ticket on it in the project repository already, or you should create it. Along the way you will get the information about the solution of the problem from the very developers of the problem. A lot of big technologies (like the very Elasticsearch) even have separate forums and chats, in which you can ask your question. You will also practice your english once again!

Jump into the source codes!

Well, okay. The documentation of the project is terrible, no activity has been on GitHub for a couple of years and/or the authors do not react to your questions. What should one do in this case? That's right: open the source code of this library (with programming languages, it's a little bit more complicated, but still possible) and debug the bug you've found by yourself.

Why? Because this way you will not only solve your problem, but also understand, how the instrument you use works and turn from "I google and copypaste" to "I read source codes as a mature senior programmer" at once.

A lot of developers, especially the beginners, are afraid to look into the source codes of the projects, because they don't understand, that this way they miss the opportunity not only to deepen their knowledge, but also to make a couple of commits to the open source. It is useful to look from time to time at how one or another feature in some technology works, even not having the specific problem.

For example, when I was interested in how NewRelic collects information about Rails applications, I dug into the "sources" and discovered a lot of the new things.

One more bonus from reading the source codes is: the illusions that all these libraries have been written by super-brilliant programmers who write the flawless code will quickly disappear. Rather the opposite... To put it mildly... Let's just say that a lot of gems have a huge space for refactoring.

Google!

So, the moment had finally arrived when you, having studied the documentation, understood how the new technology works. You've learned how it was organized and how to apply it to your task. You've encountered the bug, which, apparently, nobody had resolved and which, as it seems from the source codes, isn't so easy to resolve (or you have no time to solve the problem by yourself right now).

At this very moment you can open your favourite google and, already knowing what you are looking for, rush to the exploration, run from one topic on Stackoverflow to another, read all the comments, tweets, etc. Eventually, it is likely that you will find the solution to your problem. But if you haven't, then come back to the point about sources and solve it yourself.

What about the books?

I do not strongly favor diving into books in the beginning of the study. Agile Web Development With Ruby on Rails and Rails Tutorial definitely are the works of high quality, but the person reading them has to follow the instructions from the book instead of writing and understanding the code on its own. That's why, if you have started studying programming not long ago, the bunch of books will only slow down your progress. You better rely upon documentation and practice, try writing something on your own or you can enroll for our mentorship, for that matter.

It is a different matter when you need to gain really deep knowledge about the specific subject. In this case you can, for example, read the book about code refactoring, or the separate book about the code organization in big Rails' applications.

For example, in order to fill some gaps in understanding database indexes, half a year ago I armed myself with the book SQL Performance Explained. The excellent book, I definitely recommend it to you.

That's why, repeating what was already said: turn to books when you need to fully explore the topic. Just make sure, that this topic is really what you need to study at this point.

The exception is little e-books, targeted on fast and clear review of some instrument with following links to the sources, which should be studied for the full immersion in the instrument.

The perfect example from the developers' world is the book Self-education for web developers - in 60 pages one will learn everything that is necessary to know to become a web-developer and will get dozens of helpful links on the most essential materials. Another good example is 7 reccuring revenue recipes for freelancers.

But what about the articles from mkdev? What about the railcasts?

Educational articles and screencasts in the internet have in this case only two objectives:

To retell the documentation

Very often the documentation tells about the technology or its implementation not clear enough. The typical example is still terrible documentation on Angular.js. It is not clear enough how to use Angular in real projects, which structure of folders one should keep to etc. In this case a qualitative and detailed article or a screencast can help to fill this gap.

Provide examples from real life

And also it can be that the technology is cool, but it's not clear enough where to apply it. That's why the examples of its usage for solving the real problems are always to the point. Guidances on implementation of some specific features in real (or training) projects also can relate to this category.


These two problems are just what mkdev articles are trying to solve: to tell the reader more clear about the specific technologies and, if possible, to provide the real-life examples of their implementation. But despite this, your process of search for information still should begin with the official documentation, then move to github issues and then to the source codes.

But what are the questions internet still can't give you answers for? Maybe you don't understand how to implement a specific feature in Rails? Or where to insert React.js? Write in the comments below, we will be happy to write a detailed and not detached from reality article for you.