Hello.

I am a programmer-student 3 courses. I have been writing on .NET / C # for 1.5 years. Developed web services, applications, desktop applications on WinForms. But it so happened that there are no experienced developers in the office, and the team lead is in another city - I had to learn and do everything myself; because of what I am plagued by vague doubts about the correctness of my coding style and the "straightness" of hands. Hence the following questions:

  • How to improve knowledge of .NET? In particular, ASP.NET MVC , IIS , WPF ? (Richter read, but is it enough?)
  • 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)
  • What applications or add-ons to use to draw UML in VS , IntelliJ IDEA ?

Thank.

Closed due to the fact that it is necessary to reformulate the question so that it is possible to give an objectively correct answer to the participants of Athari , fori1ton , VenZell , ReinRaus , atwice 10 Apr '15 at 8:16

The question gives rise to endless debates and discussions based not on knowledge, but on opinions. To get an answer, rephrase your question so that it can be given an unambiguously correct answer, or delete the question altogether. If the question can be reformulated according to the rules set out in the certificate , edit it .

Blocked by Nicolas Chabanovsky ♦ 12 Nov '17 at 7:53 .

This question has been preserved because of its historical importance, but it is not regarded as a good question on a topic relevant to the specifics of this site , so please do not consider it as confirmation of your ability to publish similar questions. This question and its answers are frozen, they cannot be changed. Read more: help .

Read more about blocked messages here .

  • Sample code in the studio (better link for example) - Barmaley
  • one
    @maximka: simplify functions! If you have a lot of nested 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

5 answers 5

I will try to answer the more general question: how to develop properly.

There are a few points to note:

  1. Good sources
  2. Strong knowledge
  3. Learning iteration
  4. Relatively clear development plan
  5. 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 .

  • @maximka seems to me the clean code of Uncle Bob, this is exactly the book that you need. - vittore
  • five
    Heavy artillery pulls up :). - andreycha
  • one
    what people visit our modest abode) You'll see, and we will see John Skeet here) - DreamChild
  • one
    Hello Sergey! The question was asked relatively long ago, and by this time I even forgot that I had an account (at that time, the old HashCode.ru). By the way, I already found your blog and actively read it; like your book on design patterns. Thank you for the comprehensive answer and recommendations! - maximka
  • @maximka was glad to help! - Sergey Teplyakov

Better to start with Troelsen, it's easier. And back up all this with Microsoft certification.

The approximate plan is as follows:

1. Basics

a. Studying Troelsen to Chapter 18 inclusive

b. We pass the exam http://www.microsoft.com/learning/ru/ru/exam.aspx?id=70-483&locale=en-us

2. Access to data

a. We read chapters 21-24 of Troelsen

We pass http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-516

i. If on the basis of one Troelsen it is impossible to prepare for the exam, then in addition read Julia Lerman

3. ASP.NET MVC

a. We read Sandersen

b. We pass http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-486#tab1

4. Services

a. We read Leve http://www.ozon.ru/context/detail/id/3822848/

b. We read http://www.ozon.ru/context/detail/id/20343905/

c. We are trying to pass http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-487#tab1

5. HTML 5, CSS and jQuery. You can immediately go to http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-480

Thus, we get pumping on the basic missing technology + control through exams. At the same time will be certification MCSD WebDev, and back to the MCSD WindowsStore and MCPD.

Books on the basic principles of development from this list, I would read in parallel

http://www.ozon.ru/context/detail/id/6733562/

http://www.ozon.ru/context/detail/id/5800704/

http://www.ozon.ru/context/detail/id/3105480/

    How to improve knowledge of .NET? In particular, ASP.NET MVC, IIS, WPF? (Richter read, but is it enough?)

    Richter (CLR via C #) - the latest edition is excellent. I would recommend mastering it completely to understand how the CLR works.

    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)

    Here I would make a knight's move, and send to read about F #: http://fsharpforfunandprofit.com - on the right is the Series section. In order, reading all the subsections of each series of articles. It will help you learn how to think through the algorithms correctly, correctly split the application "horizontally" into separate modules. Then, if you want (or need to) return to C #, think in F # primitives.

    What applications or add-ons to use to draw UML in VS, IntelliJ IDEA?

    I would recommend using the smartphone's Camera application, and drawing on the board with a marker. Then process in any editor, replacing the handwritten text with typesetting, if required.

      According to .NET main classics Here E. Troelsen advise especially. On programming, especially with regards to .NET, read about design patterns. But first of all, read any books on OOP in order to remember once and for all why inheritance is used here, not aggregation. And why this method is static, and here the constructor is prohibited. It is very important to correctly understand the same patterns. Then it is necessary to fix everything with Makkonel with his book Perfect Code. All this will help to write consistently, smoothly and beautifully.

      Books on algorithmic read. NET-chiku optional. because all the basic algorithms that may be needed in commercial programs are already implemented inside .NET. Yes, and productive programs are not written in. NET.

      • As for the uselessness of algorithmization, you still got excited. The simplest algorithms really are in the framework, but anything nontrivial will have to be encoded by yourself. One thing that can be given a little less attention is the details of the implementation of data structures: there are many different well-written data structures in .NET. (But it is still necessary to know their properties in order not to use the List for everything and not to search in complete brute force.) - VladD
      • > Books on algorithmic read. NET-chiku optional. because all the basic algorithms that may be needed in commercial programs already implemented inside .NET sounds extremely doubtful. - DreamChild
      • 2
        @ Anton Lakotko, of course, you need to read books. Only you need to understand that most of the examples in them are adapted for beginners. It is understood that inheritance is a difficult topic, so in any book it is given a lot of space, and in practice aggregation (composition) should be preferred to inheritance whenever possible (which the authors of most books for students are silent about (or maybe they do not understand themselves, since they have not practiced )). Familiarity with the patterns is reasonable, useful. Just do not follow them blindly. In general, recently they have become just some kind of religion for many programmers. - avp
      • one
        @VladD was based on work experience, maybe you are right. @avp I myself have not studied the patterns immediately. And I wrote the code as it seemed to me more logical and how I saw it with someone else. And later I found out about such things as: Single, Factory, Adapter ... and wondered why they were served as something cool. In any case, it was my subjective opinion. - Anton Lakotko
      • Troelsen clearly does not teach programming style - Veikedo

      I will say a fairly banal thing: you just need to sit down and start writing something, and as the task expands, take books already, watch video courses and immediately apply what you have learned in practice. When I first started learning, I had projects for implementing AD & D and M: tG games in C ++, and it was they who taught me the basics of the language.

      • 2
        Different ways of learning are suitable for different people ... It is important for each person to find the optimal approach that is most effective for a particular person. - Sergey Teplyakov