Take this article like my vision of apex development based on my professional experience with this programming language dedicated to Salesforce technologies.
Apex allow us to write custom code to make the salesforce app act really like we want (or at least our AMOA really want :/)
Apex is really a Java like language, and with this language we can manipulate data, make transaction in SF database and work with API and webservice.
In Salesforce framework, some classes are really recurrent and often if not always used when we developping custom functionalities.
Database provides methods for performing database operations (querying and manipulating records).
System class provides static methods and properties for interacting with the Apex runtime environment.
Schema class allow interacting with the database schema, like list of field of an object, or get type of fields.
When developping with salesforce, we can often use a basic approach to respond our needs
In salesforce, the layout can mostly (and should mostly) be configured by XML and by the Lightning App Builder that provides drag and drop interface.
The layout will allow the standard user to make action, like create, update, delete records. Click on a button and make a web services call
All of this will trigger apex code, either by standard trigger, or by LWC call to apex classes.
When the project will growing, we could add some abstraction to better manage this codes. And that in my humble opinion the most enjoyable thing of this framework as a developper ^^!