Connessione tra linguaggio di programmazione e soluzioni

6

Questa è una domanda piuttosto filosofica / teorica.

Mi interessa la domanda, come sono connessi il linguaggio (in questo caso i linguaggi di programmazione) e i pensieri (= soluzioni di problemi).

Voglio sapere, se il linguaggio di programmazione influenza le soluzioni, posso inventare.

Ad esempio:

Programma qualcosa in Haskell (funzionale) e in Java (OOP). Le soluzioni generali differiscono fondamentalmente o sono - a parte lo zucchero sintattico - lo stesso? Non utilizzo solo algoritmi diversi e un diverso design del software, ma fondamentalmente modificherò tutto il mio punto di vista, il mio concetto e la mia visione del software, a seconda del paradigma da cui provengo?

(Nota: "I" sta per un programmatore generico)

So che questa domanda è piuttosto difficile da rispondere, ma la trovo molto interessante, quindi volevo sapere se qualcuno ha (e potrebbe condividere) un'opinione su questo.

    
posta apfelbox 09.03.2013 - 13:42
fonte

2 risposte

6

Senza entrare nell'ipotesi di Sapir-Whorf, farò l'affermazione che il linguaggio, la struttura e gli strumenti (collettivamente, il tuo ecosistema di programmazione) influenzano e modellano profondamente il tuo modo di pensare, in termini di software di scrittura.

Non è difficile capire perché sia vero. Si consideri una tipica applicazione line-of-business. Tradizionalmente, avremmo scritto istruzioni SQL per recuperare i dati da un database e produrre un report. Ma poi arrivarono gli ORM, e ora possiamo recuperare i dati in raccolte di oggetti. Alla fine, qualcuno ha sottolineato "Beh, perché abbiamo addirittura bisogno di SQL", e il movimento NoSQL è nato.

In che modo questi diversi paradigmi influenzano il modo in cui i programmatori pensano? Bene, in SQL, se vuoi mettere insieme due tabelle di informazioni, esegui un JOIN. Il ragazzo NoSQL deve scorrere le sue raccolte per trovare le coppie che corrispondono. Il tipo di SQL pensa in termini di set e join . Il ragazzo NoSQL pensa in termini di raccolte e loop.

In termini di linguaggio di programmazione, la tua esperienza di programmazione (e il tuo modo di pensare) sarà strongmente influenzata da:

  • quali servizi offre la lingua,
  • a quale livello di astrazione concettuale il linguaggio è (cioè è di basso livello o di alto livello),
  • quali paradigmi offre il linguaggio (cioè funzionale, imperativo, orientato agli oggetti) e
  • che tipo di ipotesi i progettisti di linguaggio fanno (ad esempio molti modi per fare una cosa contro l'unico vero modo).

Eric Raymond lo riassume in modo eloquente quando parla dei vantaggi dell'apprendimento Lisp:

Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.

Per ulteriori informazioni su come il linguaggio influenza il nostro modo di pensare, vedere qui:
link

    
risposta data 09.03.2013 - 23:26
fonte
1

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 .)

    
risposta data 09.03.2013 - 23:26
fonte

Leggi altre domande sui tag