Domanda

Literate programmazione ha buoni ideali. Perché pensi che questo non è mainstream? E 'perché non è riuscita a fornire?

È stato utile?

Soluzione

ho visto la prima volta in un libro di scritti di Knuth, e ho pensato che sembrava pulito. Poi ho cercato di utilizzare il display di programmazione letteraria di capire cosa stava succedendo nel programma, e l'ho trovato più difficile di quanto sembrava. Potrebbe essere stato che ero troppo abituato a passare attraverso gli elenchi dei programmi, ma sembrava confuso.

Poi ho guardato il codice sorgente, e che mi ci spento allora e. Avrei dovuto imparare a scrivere programmi in un modo completamente nuovo, con meno corrispondenza tra il testo programma e quali la sega compilatore, e non vide nessuno corrispondente beneficio.

Inoltre, le persone possono scrivere a lungo e convincere gli argomenti che il codice sta facendo X quando è in realtà facendo Y, e ho incontrato la mia parte di commenti fuorvianti. Ho sviluppato una predilezione per la lettura del codice a vedere cosa sta facendo abbastanza presto. programmazione letterata è l'antitesi di tutto ciò.

Altri suggerimenti

Vorrei dare la colpa al effetto di rete . Per le altre persone di modificare il codice e la documentazione, devono essere in grado di capirlo.

Questo spinge le persone lontano da qualcosa come CWEB / noweb, perché il loro utilizzo che richiedono di imparare TeX e la sintassi specifica programma sulla parte superiore del linguaggio di programmazione che si sta utilizzando per il progetto. Questo può essere visto come un enorme spreco di tempo, soprattutto se non hanno bisogno di alcuna della composizione matematica che è una grande attrazione come per TeX, in primo luogo. (E per molti programmatori di applicazioni, in realtà sarà non averne bisogno). Invece si preferisce qualcosa di simile commenti XML di Visual Studio, perché è già popolare e ben consolidata.

I posti che ho visto di programmazione letterata decollare sono in calcolo scientifico / statistica, dove la maggior parte dei programmatori hanno una formazione significativa (aka PhD) in matematica, CS, o statistiche, e quindi sono già famliiar con LaTeX. La documentazione che scrivono è più probabile che includono un sacco di formule complicate che sono meglio scritti in TeX, e sono più probabilità di essere la programmazione in R. La percentuale di programmatori R che conoscono SWeave è sicuramente molto più alto rispetto, ad esempio, il percentuale dei programmatori C che conoscono CWEB.

sono stato affascinato dal concetto di Literate Programming alla fine degli anni 90'es durante gli studi, e sto ancora incuriosito con l'approccio Knuths alla programmazione, e della stampa. Niente ma il meglio lo farà.

Il sistema di programmazione Literate che Knuth progettato ha fatto molto, molto di più che immediatamente soddisfa l'occhio, e cioè a superare molte lacune nel linguaggio di programmazione di fondo che lo strumento di generazione di codice generato dal documento di origine Knuths, ovvero standard di Pascal.

Per chi ha la fortuna di non aver provato standard Pascal, qui sono alcuni dei punti salienti.

  • Per rendere più facile avere un compilatore single-pass, la specifica del linguaggio ha detto che tutte le dichiarazioni dovevano venire in un certo ordine. Dalla pagina wikipedia: "Ogni procedura o funzione può avere le proprie dichiarazioni di Goto etichette, costanti, tipi, variabili e altre procedure e funzioni, che devono essere tutte in questo ordine." Questo significava che si poteva non di gruppo tue cose logicamente insieme nel file di origine.
  • la gestione delle stringhe è stato più noioso che in pianura C.
  • identificatori non potevano avere lunghezza arbitraria.
  • Molte altre cose che non ricordo più.

Tutte queste cose in pratica significava che Knuth necessaria una migliore linguaggio di programmazione (così ha inventato uno) e ha usato Pascal come linguaggio assembly.

La maggior parte delle lingue moderne può fare queste cose senza molto sforzo, eliminando quindi una parte GRANDE del lavoro che Literate Programming dovesse risolvere.

Anche le lingue moderne sono più espressivi permettendo più pensato per essere messo in codice stesso.

Quindi, che cosa rimane? La capacità di generare una forma tipografica della documentazione dal codice sorgente, e che esiste oggi.

Si pensi JavaDoc - il runtime Java API è forse il più grande pezzo di Literate programmazione oggi disponibili (tranne che il codice non è effettivamente presentata, ma avrebbe potuto essere se Java è open source fin dall'inizio). Si veda ad esempio la presentazione del quadro collezioni sul http://download.oracle. com / JavaSE / 6 / docs / api / java / util / Collection.html

Credo che esistono sistemi simili per NET e altri programmi generali.

Una cosa che ho scoperto quando ho avuto la mia storia con la programmazione alfabetizzati negli anni '90 era che ha attirato persone molto appassionate che volevano fare esattamente la cosa giusta - e che ha coinvolto la scrittura il proprio sistema di programmazione letterata perché nessuno esistente era abbastanza buono per loro. noweb stato un buon tentativo di taglio che fuori, fornendo un buon-abbastanza minimo comune denominatore per tutti, anche se anche allora, ho trascorso la maggior parte del mio tempo lo sviluppo di un LP pretty-stampante per esso ...

Un altro problema è che è davvero anti-agile. In un certo senso, di essere rallentato è buono perché ti costringe a pensare di più up-front e fare le cose bene la prima volta. D'altra parte, meticolosamente documentare come si va vuol dire che c'è una grande barriera per il refactoring del codice. E se si aspetta fino a quando il codice è indurito prima di LP-ify esso, si finisce con un compito di documentazione più giorni, che può davvero fermare nelle tracce.

A mio modesto opinioni, molte aziende hanno una cultura che è l'opposto agli obiettivi della programmazione Literate: vogliono risultati più rapidi (piangono solo qualità quando l'applicazione è in produzione). Nella mia esperienza, i miei capi avevano rifiuti per capire che i risultati più rapidi non significa "un programma eseguibile il giorno dopo ho chiedere." Per loro, se uno sviluppatore non è impegnato a digitare sul suo tastiera, non lavora, è "sprecare il suo tempo nel design-non-sense". Sì, lo so, il mio capo è uno stronzo.

codificatori codice di scrittura non inglese.

codificatori non piace la scrittura di documentazione, perché non aiuta il codice run.

codificatori non sono bravo a scrivere la documentazione perché la sua un mezzo povero di esprimere le proprie idee.

programmazione Literate sembra essere l'idea di prendere la documentazione al livello successivo in cui il codice è più di un dopo-pensiero. Forse avrebbe funzionato, ma per la maggior parte coder sembra che la documentazione antipatico.

Principalmente perché le persone sono molto stupido. testimonianza evidente che è un flusso infinito di ipotesi e incomprensioni espresse dai giovani circa la natura di questa semplice tecnica.

La gente prendere LP essere: (a) un metodo di documentazione (b) un metodo di scrittura alcuni saggi lucido che richiede alcune abilità speciali o talenti (c) semplicemente non hanno idea - come il creatore di editor di programmazione Leo, da sua stessa ammissione ecc ecc ecc.

LP tuttavia è semplicemente: (1) la scrittura di programmi in una miscela di codice e frasi in un (= qualsiasi) linguaggio umano, in cui il secondo supporto per altri pezzi di codice e / o frasi inclusi. Questo è esattamente ciò che gli autori di libri di testo programmazione innumerous fanno .. e (2) si tratta di un semplice preprocessore che si espande in quelle frasi umana (che è diventato come se i nomi di subroutine inclusi) per svelare il risultato nell'ordine desiderato dal compilatore (o interprete). In caso contrario, si può espandere il testo scritto con un altro piccolo programma di utilità per includere la formattazione dei simboli di trasformare la "fonte letterato" in un bel testo leggibile ben formattato.

I giovani non provare questo estremamente semplice idea -. E sia fantasticare o immaginare motivi falsi per cui non saranno mai cercano o lo fanno

In sostanza l'idea principale di programmazione "in pseudocodice", scritto in un linguaggio umano e quindi in espansione con una semplice utility preprocessore consente di gestire ATTENZIONE (limitato, una difficoltà principale per qualsiasi programma lunghetto), più o meno come ripiegamento codice o la divisione di il flusso del programma in funzioni / subroutine, necessario per non perdersi nei dettagli, ma del tutto inutile per l'esecuzione della macchina.

Ci sono 2 aspetti di programmazione letterata che do desiderio sono stati inseriti nella programmazione corrente principale - immagini incorporato (ad esempio, schemi di progettazione) e puntatori ai tentativi precedenti e alternativi (ad esempio, "Il motivo è in questo modo è perché ho provato questo altro modo e non ha funzionato perché ... "). Entrambi questi aspetti possono essere gestiti con doc-commenti e URI.

Perché la logica di programmi non funziona lo stesso come si parla. Un programma ha una portata ben specificato, e le condizioni, e loop.

Dopo aver codifica al sacco, penso in questi termini. Il mio cervello trasforma i problemi in dominio di destinazione di codice eseguibile. Ed è molto più efficiente per me di scrivere questo in giù in un linguaggio di programmazione di solito, di dover fare il passo in più trasformare per fare i miei programmi di leggere e scrivere.

In realtà, credo che i miei programmi sono già alfabetizzati ... parlando identificatori, nomi di funzioni bene, i commenti in cui ho fatto un po 'di aggiustamenti che non vorrei capire subito io stesso dopo pochi mesi.

Per concludere:. Codice mio Java è più leggere e scrivere da solo come ogni programmazione "letterato" vuole essere

Sono venuto a leggere e scrivere programmare il contrario - ho sognato avere il codice organizzato come si adatta la mia mente, non come il compilatore lo richiede. Ho trovato Leo quasi ideale per questo scopo. Supporta anche tenere traccia dei file modificati al di fuori. Questi file non devono contenere nessun marcatore speciale, in modo da poter usare Leo per me stesso senza bisogno di altri nella squadra di conoscere. Questa caratteristica - "alberi @shadow" - è molto promettente, anche se ancora po 'bacato, ha bisogno di più bulbi oculari. E si risolve anche il "oh no, tutto in un unico grande file" problema sia organizzando tutto in albero di contorno e da supporto per i file esterni.

Per quanto mi riguarda, in contrasto con il nome, la "programmazione letterata" non si tratta di documentazione a tutti. Non ho più la documentazione di prima. Si tratta di avere la struttura che mi aiuta a non perdersi . Giuro da essa, soprattutto quando la gestione colosso file JSP (e che, nonostante Leo è stato originariamente destinato principalmente per Python e non ha il supporto per la lingua JSP - devo dividere il file di Leo albero manualmente!)

.

Lo vedo come uno strumento didattico prezioso, in cui una tesi sul codice può essere scritto, e poi frammenti di codice funzionante intercalata in esso per i lettori Istruire sulle i come, che cosa, e perché di codice.

Al di fuori di un ambiente puramente educativo, penso solo Knuth capisce davvero il modo migliore per utilizzarlo.

E 'il peggiore di tutti i mondi - si deve scrivere un programma per computer altamente corretta, altamente specifico in un linguaggio molto non specifico = inglese. Quindi si deve scrivere accuratamente utilizzando esattamente le frasi corrette -. Così si potrebbe pure il codice basta scrivere

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top