I will try to answer the more general question: how to develop properly.
There are a few points to note:
- Good sources
- Strong knowledge
- Learning iteration
- Relatively clear development plan
- Variety of topics
Now in order.
1. Good sources
There are dozens of books and hundreds of articles a day in the world. If you approach the selection process thoughtlessly, it will be extremely inefficient. There are so many proven and high-quality sources on almost any topic. Here are some of them: Classic books on programming , Books for studying C # /. NET , Books on design / OOP .
These lists are far from perfect, but can serve as a good starting point. Then, as in the search for good specialists, it is enough to look at the list of literature in good books: they will not advise the bad there.
2. Focusing on getting stable knowledge
On the one hand, it may seem that our industry is developing incredibly fast, on the other hand, many of the concepts that are “new” in the world of .NET / Java / C ++ have been known to experts for decades. Functional programming, which is now popular, is older than structured programming and OOP, but it is only now gaining popularity.
It makes no sense to try to remember a million facts from all possible areas of knowledge. It is much more efficient to obtain a framework on the basis of which this knowledge can be derived and more effectively obtain new ones.
Good knowledge of even such a high-level language like C # will allow you to more quickly master other similar languages, such as Java. Understanding DBMS concepts will enable SQL Server, Postgre SQL, and Oralcle. Understanding the concepts of multithreading will work effectively on any platform, since the synchronization patterns are very similar everywhere.
This point is directly related to the previous one: a good book provides not just short-term knowledge, it also describes the basics on which this knowledge holds. Studying good sources then allows you to learn faster by reusing knowledge .
3. Iterative learning
It is impossible to study a specific topic from the first time deep enough. More precisely, it depends on the quality of sources and current knowledge, but in general, the approach to learning, as well as to knowledge in general, is iterative.
The perception of new knowledge strongly depends on the current practical and theoretical experience, and some important things just do not settle in the head the first time.
The Richter's book can be re-read several times and each time there are interesting things for yourself that you didn’t pay attention to before. Philosophical things such as coding, OOP, FP, and the like require even more time to master.
That is why, it is worthwhile to periodically go back to the same topics and see how the attitude to this issue changes with time. This does not mean that you need to re-read the same thing (although this is also possible), it is enough to have a suitable set of sources.
The iterative nature of the learning process has a number of positive aspects. First, it is impossible to study one topic for too long, sometimes you need to give yourself a rest and switch to something else. Secondly, to gain a deeper understanding of one topic, you usually need to dig another. For example, it is impossible to understand C # deeply without understanding CLR / JIT. And to deal with these topics you need an understanding of the OS and other low-level things.
Similarly, in order to get deeper into OOP, you often need to look at other programming paradigms, for example, look at the problems of structured programming and learn the basics of functional programming.
4. Relatively clear development plan
It is not necessary to have a training plan, painted on days for 10 years ahead. It is enough to have a simple mind map, in which the key branches of development will be designated: OOP, Coding, Programming Philosophy, Architecture, Algorithms, Multithreading, Project Management, etc. (I described something similar in the article “Fascinated Programmer” ). In this case, you can even make a selection of materials in the form of books, articles or courses, so that when itch would not have to spend time searching for suitable materials.
The idea is not to rush from side to side, when suddenly there will be a desire to take up the study of something new, but rather to clearly understand which way to direct your interests and where to switch with time.
5. Variety of topics
This aspect has already been mentioned before, but I want to focus on it.
It is very important to keep the right balance between depth and breadth of knowledge. There is no sense in endlessly digging .NET, it makes no sense to limit yourself to the web, only OOP, only C ++, or just something else. Moreover, to achieve deeper knowledge, it is often necessary to dig into adjacent areas.
Now, short answers to specific questions of a topstarter:
How to improve knowledge of .NET? In particular, ASP.NET MVC, IIS, WPF? (Richter read, but is it enough?)
Watch here .
Where to read or learn how to code? For example, a banal code, where if in if, and this if in another if. (ReSharper helps to avoid this, but nonetheless)
There are some good books on this topic:
What applications or add-ons to use to draw UML in VS, IntelliJ IDEA?
Tools are in Google. Here I would advise simply to get acquainted with UML on the example of UML Distilled Fowler, or Larman's Applying UML and Patterns .
if, it usually means that you stuffed a ton of logic into one function. If your function is greater than, say, 50 lines, try to select subfunctions from it. (Even if these subfunctions will be called only once.) - VladD