Programmazione * in * una lingua vs. scrittura di codice C in Ruby

10

Il codice completo indica che devi portare il codice in una lingua anziché il codice in . Con ciò, significano

Don't limit your programming thinking only to the concepts that are supported automatically by your language. The best programmers think of what they want to do, and then they assess how to accomplish their objectives with the programming tools at their disposal. (chapter 34.4)

Questo non porta a utilizzare uno stile di programmazione in tutte le lingue, indipendentemente dai punti di forza e di debolezza della lingua in questione?

Oppure, per mettere la domanda in un formato più rispondente:

Proporresti che dovresti provare a codificare il tuo problema nel modo più accurato possibile con i dettagli del linguaggio, oppure dovresti cercare la soluzione più elegante in generale, anche se questo significa che devi implementare costrutti forse imbarazzanti che fanno non esiste nativamente nella propria lingua?

    
posta bastibe 27.02.2012 - 09:32
fonte

3 risposte

7

C'è un approccio ancora migliore: dimentica il tuo patetico linguaggio di programmazione fisso. Codifica il tuo problema in una lingua che hai appena inventato, derivato dagli stessi termini del dominio problematico pertinente, codificalo nel modo più naturale possibile, e solo allora pensa di implementare questo nuovo linguaggio di programmazione o di addolcire il tuo codice fino ai limiti del lingua esistente.

Questo approccio è chiamato programmazione orientata alla lingua . Esistono molte tecniche per implementare efficientemente le lingue specifiche del dominio , ed è un argomento particolarmente caldo per la comunità di Ruby .

    
risposta data 27.02.2012 - 09:43
fonte
2

Credo che la risposta corretta e quella voluta dal libro sia:

one should try to encode one's problem as neatly as possible with the particulars of one's language

Programmando in un linguaggio, ho sempre pensato che fosse usare tecniche al di fuori del normale stile della lingua dove porterebbe a un vantaggio . Questa è una differenza fondamentale rispetto alla scrittura in uno stile in tutte le lingue.

Ad esempio, l'apprendimento di Haskell ha notevolmente migliorato le mie capacità nell'uso di funzioni di ordine superiore. Ora, quando si programma in c #, utilizzo i vari metodi IEnumerable come Select più spesso, poiché l'uso di questi metodi porta a un codice più pulito rispetto a scrivere in cicli for. Tendo anche a usare le funzioni pass e use (es. Func<int, int> ) più spesso a causa della mia esperienza con haskell. Il mio uso dell'ereditarietà è diminuito a causa di ciò e il più delle volte il risultato è un codice più semplice.

Tuttavia, non uso concetti come monadi o tipi di dati algebrici in c #. Questo perché nessuno dei due è chiaramente rappresentabile in c # e porta a poco beneficio in cambio di molta oscurità.

Quindi uso gli strumenti del linguaggio per usare le competenze che ho per l'effetto migliore. Credo che sia la programmazione nella lingua.

    
risposta data 14.12.2012 - 09:23
fonte
0

Would you propose that one should try to encode one's problem as neatly as possible with the particulars of one's language, or should you rather search the most elegant solution overall, even if that means that you need to implement possibly awkward constructs that do not exist natively in one's language?

Il punto è che i bravi programmatori non hanno una lingua a . La citazione del libro parla di "strumenti di programmazione a loro disposizione" - questo significa che se conosci perl e Java, allora forse dovresti usare perl per quella manipolazione rapida delle stringhe. I linguaggi di programmazione non sono scatole per limitarci, ma strumenti che usiamo per risolvere i problemi. Questo è (imo) ciò che Code Complete sta ottenendo. Non inserire codice in un linguaggio di programmazione / ambiente, inserisci la soluzione migliore nel miglior linguaggio / ambiente di programmazione per te, i tuoi problemi e la tua soluzione.

    
risposta data 21.08.2013 - 05:07
fonte

Leggi altre domande sui tag