Penso che sia una buona domanda, non una risposta facile.
Tutto quello che posso darti è la mia opinione.
C'è qualcosa nella tua testa - un problema e la sua soluzione.
La separazione tra questi non è sempre chiara, ma sono dichiarati in un linguaggio mentale appropriato al problema.
Puoi avere un'idea di cosa sia questa lingua discutendo il problema con un'altra persona.
Ciò rivela una rete di concetti sotto forma di parole.
Se un programma per computer deve essere parte della soluzione, allora il problema / soluzione deve essere comunicato nelle sequenze di tasti alla macchina. Per fare ciò è probabilmente necessario istruire la macchina sul dominio del problema, in modo che tu possa dirgli quello che vuoi.
Quando definisci un tipo di dati o scrivi una procedura o altrimenti definisci le cose in un linguaggio informatico, stai aumentando quella lingua con i concetti appropriati al tuo problema. Lo stai trasformando in un DSL (linguaggio specifico del dominio nel gergo).
Ci sono molte abilità coinvolte in questo passaggio e diversi programmatori hanno imparato diversi modi per farlo.
Ora, se stai chiedendo di paradigmi di programmazione diversi come OOP, programmazione funzionale, programmazione logica, ecc. ecc., quale di questi accorcia il tuo percorso verso la creazione della DSL che desideri?
Di nuovo dipende dall'allenamento.
(Se tutto quello che hai è un martello, tutto sembra un chiodo).
Incoraggio le persone ad avere il più disparato insieme di strumenti mentali possibili.
La misura in cui hai creato un DSL per il tuo problema è una questione di gradi.
Nell'estremo ideale, dovrebbe essere solo necessario dichiarare il tuo problema, dove la soluzione è incorporata nel DSL.
Una misura di quanto hai fatto bene è prendere in considerazione modifiche incrementali al problema e chiedere quanta modifica nella lingua è necessaria per eseguirle senza errori.
L'ideale è 1: 1. 1: 5 non è male. Ho visto 1:50 e non va bene.
Più grande è questo rapporto, più difficile è far passare la tua idea al codice e più difficile è evitare di inserire bug.
(Non so se sarebbe utile darti un'idea di cosa intendo mostrare come ho cercato di farlo nel dominio di interfacce utente dinamiche .)