Nobody talks about it, but something very important happen when learning to code.
We learn the power of abstraction.
Abstractions is something that hide the details of something else to make things simpler.
An everyday exemple is your car.
The whole driver seat is an abstraction layer.
The steering wheel, break, accelerator, dashboard are simplified vision of the internal mechanics of the car that talk about piston, wheel, motor, hoses.
These same internals are also abstraction over their internal components. (I don't know their name of these internals)
We talk about self contained abstraction when one can use an abstraction to reach a goal without having to go into the internals.
For some goals, for example car tuning, the driver seat abstraction is not enough, and one has to get the internals of this abstraction.
Another term to represent a self contained abstraction in software design is called a layer.
A layer is nothing but a self contained abstraction.
The more layer you understand, the more you can track down problems, and the more creative power you have. You break the limitation of having one layer of thought, and can search for a solution on multiple angles.
Common goals have common abstractions. (Driving in the city only needs the driver seat abstraction)
Uncommon goals have to work with multiple layer of abstraction.
A great developer transforms an uncommon goal to a common goal, and so the developper create its own self contained abstractions. It is also what we call the business domain.
We often call such programmer an architect, or just developer opposed to what we call programmer described below.
The goal of average developer is to just reuse self contained abstractions made by someone else. We call them code monkeys, or just programmer opposed to developers.
Both share the same activities, that is, coding. But they have not the same level of thinking to solve a problem. An architect make average programmers possible to work.
Finding architect is not scalable for a company. That is why having an architect is so valuable. It permits an enterprise to recruit more developers to get things done.