V
V
Vitaly2018-06-14 21:22:44
Software design
Vitaly, 2018-06-14 21:22:44

How to learn software design?

Greetings. I am a programmer who grew up on TK-shki prescribed for me.
I want to learn how to plan the development of programs on my own, otherwise I immediately undertake to write code and, as a result, wander in the wilds for a long time. I know about the stages "tasks-functional-prototypes-layouts-api-code", but I don't understand the boundary between them. For example, you don't want to spend a lot of time on interactive prototypes when it's time to start writing code, and vice versa - write code with an unfinished prototype.

Answer the question

In order to leave comments, you need to log in

5 answer(s)
S
Sergey Gornostaev, 2018-06-14
@sergey-gornostaev

The main tool for
software design is the brain of a
person who is well acquainted with the principles of
design. It's not technology.

© Craig Larman
Simply put, this will only come with experience. Somewhat speeds up the process of reading relevant literature (for example , Uncle Bob ) and the opportunity to work in a large company on large projects.

N
nexus478, 2018-06-14
@nexus478

Application design can be conditionally divided into 2 levels:
1. Project level.
This includes understanding how the application should look like as a whole and what components it should consist of, as well as how it is going to interact with the outside world (if necessary). The components depend on the chosen architecture - in the case of a monolithic application, you need to understand how to break it into layers and what is the responsibility of each layer; in the case of microservices, you also need to understand how to delineate areas of responsibility and define communication protocols between them.
In your case, I think microservices are unlikely to be relevant (they are for large projects), so you will most likely have small monolithic applications.
Books on how to design applications at a general level:
1. Robert Martin. Clean Architecture is a very short and simple book, I recommend starting with it.
2. Eric Evans. Domain-oriented design (principles + strategic patterns).
3. Martin Fowler. Architecture of enterprise applications (part 1).
Level 2. The level of modules (classes).
Once you've designed the components that make up your application, it's time to design their internals—that is, break them down into smaller, more specific modules. This is where object-oriented design principles, SOLID principles, and patterns come in handy.
Books by level 2.
1. Gang of four. Techniques of object-oriented design. Design patterns. Here it is important not only the patterns themselves, but the principles by which they are built. Focus on principles.
2. Robert Martin. Principles, patterns and techniques of agile development in C#. It takes a closer look at object-oriented design and the principles of SOLID in comparison to its "Clean Architecture".
3. Eric Evans. Domain-oriented design (tactical patterns).
4. Martin Fowler. Architecture of enterprise applications (part 2).
5. Stephen McConnell. Perfect code (concentrate on understanding the Main Technical Imperative!).
These books will be enough for you to navigate in the design of applications, everything else is decided by practice. Draw diagrams, focus on the responsibility of components and their interfaces, and learn to discard unnecessary implementation details.

R
Ranwise, 2018-06-17
@Ranwise

Books like Agile Estimating and Project Planning may be suitable
, Mike Cohn - 2018
Mastering Agile. Values, principles, methodologies, E. Stellman, D. Green - 2018

Z
Zakharov Alexander, 2018-06-14
@AlexZaharow

To do this, you need a little:
1. Screw up the project, and maybe more than one, in order to understand what does not lead to a solution.
2. Dodge like a snake, but find a solution when no one can solve the problem, in order to learn to rely only on one's own strength and not to believe the rest that something cannot be done.
3. Learn to have a clear vision of the solution so that you know where you are when you solve a problem.

D
dmitriy, 2018-06-16
@dmitriylanets

Maybe something here will be useful https://github.com/dimaxz/Lectures?files=1

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question