2010-03-10 14 views
17

Ho bisogno di documentare il software al momento sto lavorando. Il software è costituito da diversi linguaggi di programmazione e script che mi hanno fatto riflettere. Se un nuovo sviluppatore arriva e ha bisogno di aggiustare qualcosa, potrebbe conoscere Java ma forse non bash scripting. Sarebbe bello se ci fosse un programma che aiuterebbe a capire cosaEsiste un programma che può aiutare a capire un altro programma?

for f in "[email protected]" ; do 

mezzi. Stavo pensando a qualcosa che crea una pagina HTML statico con il codice più evidenziazione della sintassi e se si passa sopra qualcosa (come il "per"), sarebbe visualizzare un pop-up con una spiegazione:

for inizia un ciclo che itera su tutti i valori che seguono in. Nel ciclo, è possibile accedere a ciascun valore tramite la variabile $f. Il corpo del ciclo è compresa tra do e done

Ha qualcosa del genere già esiste?

[EDIT] Questo è solo un esempio. Otterrai un altro aiuto per f, in, "[email protected]", ; e do, vale a dire ogni singolo elemento della linea dovrebbe essere spiegato. Gli elementi sconosciuti (come i nomi dei comandi) devono essere collegati a Google. Quindi puoi capire cosa fa anche se ti manca qualche dettaglio.

[EDIT2] Sono consapevole che non è possibile scrivere un programma che capisca cosa fa un altro programma. Quello che sto cercando è un semplice strumento che farà "l'evidenziazione estesa della sintassi" nel senso che colorerà un'espressione e darà una spiegazione breve cosa significa (più forse un collegamento ad alcuni riferimenti approfonditi).

Questo è pensato per qualcuno che sa come programmare ma forse non ha mai visto qualche costrutto oscuro prima. Dire

echo "Error" 1>&2 

Ogni programmatore bash sa che cosa questo significa, ma uno sviluppatore Java potrebbe essere perplesso dalla 1>&2 nonostante il fatto che essi possono intuire che echo == System.out.println. Un semplice "Reindirizzamento da stdout a stderr" cancellerà le cose e darà quell'istante "AHA!" che consente loro di rimanere nel loro attuale pensiero.

+2

Per qualcuno che non conosce bash, la parte difficile non è 'for', è' $ @ '. – mouviciel

+0

Questo è solo un esempio. Otterrai un altro aiuto per 'f',' in', '" $ @ "', ';' e 'do', cioè ogni singolo elemento della linea dovrebbe essere spiegato. Quindi puoi capire cosa fa anche se ti manca qualche dettaglio. –

+0

+1 Buona domanda. : D Esistono programmi in grado di comprendere altri programmi. Sono chiamati interpreti/compilatori. Ma generalmente ognuno di loro comprende solo una lingua. –

risposta

0

Se ci pensi, non è molto utile avere uno strumento che spieghi la sintassi. Gli sviluppatori potevano semplicemente google per parole chiave invece di navigare in un sito web in modo simile a http://www.codeweblog.com/source/.

Credo che i buoni commenti saranno di gran lunga più utili, in più ci sono strumenti per estrarre la documentazione usando i commenti (ad esempio, HappyDoc lo fa per Python).

+1

I buoni commenti spiegheranno i dettagli di alto livello. Ma per me, è ovvio cosa significa "$ @" significa, mentre un altro sviluppatore lo guarderà con frustrazione. Capisco che questo strumento non permetterà di creare documentazione automatica; è solo una "lente intelligente" in grado di rispondere a domande dettagliate. –

+0

Quindi perché non aggiungere un commento in linea su "$ @"? Puoi aggiungere tag anche ai commenti, come #TODO: ... o #FIXME: ... o #SEEME: ... o, in questo caso, #NOTICE: "$ @" fa questa piccola cosa ... Su un sidenote, quale sarebbe il vantaggio per qualcuno che non conosce bash ma sa che Java sa cosa "$ @" fa, oltre a conoscere i dettagli di alto livello? Sicuramente non ti aspetti che esegua il debug o il fix senza imparare bash? –

+1

Perché non so cosa potrebbe sapere il prossimo sviluppatore e sicuramente non voglio spiegare ogni personaggio in ogni riga del mio codice! –

0

È una cosa molto complessa. Prima di tutto, per definizione, si può dimostrare che il programma che "comprenderà" qualsiasi programma non esiste. Tuttavia, è ancora possibile utilizzare la documentazione esistente. Forse usare strumenti come Doxygen può aiutarti. Dovresti documentare il tuo codice attraverso i commenti e la documentazione verrà generata da loro.

+0

Qui trovi uno strumento che supporta ancora più lingue: http://sourceforge.net/projects/naturaldocs/ –

+1

Voglio solo che un nuovo sviluppatore risparmi lo sforzo di cercare ogni dettaglio di un linguaggio di programmazione sconosciuto in un libro o in Google . Non sto cercando uno strumento che possa "capire" ma che "aiuti a comprendere" –

+0

Questo genera una documentazione di bell'aspetto dai commenti del codice sorgente. Sto puntando a qualcosa che funzioni a un livello inferiore. –

1

IMO sarebbe più semplice e più efficace raccogliere semplicemente i collegamenti a riferimenti e tutorial specifici della lingua in una pagina Wiki.

Per tutte le lingue tradizionali, tali sorgenti esistono e vengono mantenute regolarmente.Se si tenta di creare il proprio riferimento, è necessario mantenerlo anch'esso. Giusto, la sintassi di bash non cambierà molto spesso, ma altri linguaggi si sviluppano più velocemente, quindi sarà un peso.

+0

Sarebbe meglio raccogliere tali collegamenti in uno strumento che li possa connettere alle parti pertinenti del riferimento specifico della lingua. Quante volte hai provato a leggere qualche perl solo per chiedermi in quale punto dei documenti iniziare a cercare qualcosa? –

+0

Capisco il problema della versione. Ho pensato che dovresti eseguire lo strumento sulla macchina con gli script e chiamerà 'bash --version' e lo aggiungere alla pagina HTML (in modo che sappia quale sintassi è corretta). Sì, è uno sforzo ma non insormontabile. –

+2

@Aaron Digulla Ah, ora ho la tua idea. E sembra davvero intrigante. Direi ancora che uno strumento che si collega alla spiegazione della sintassi per un particolare costrutto è solo un aiuto superficiale. Per usare correttamente un elemento linguistico, è necessario comprenderne la semantica, gli effetti collaterali ... spesso c'è un sacco di complessità sottostante. Quindi conoscere la sintassi (e solo la sintassi) potrebbe dare un falso senso di controllo agli sviluppatori junior. –

0

Un linguaggio non può essere spiegato solo attraverso la sua sintassi. L'ambiente runtime svolge un ruolo importante, insieme alla filosofia di base del linguaggio e delle libraie.

Inoltre, la sintassi non è così complessa per i linguaggi più comuni (dato che il codice è stato scritto tenendo presente la manutenibilità).

Proseguendo con l'esempio bash, non si può comprendere a fondo bash se si sa nulla sui processi & controllo dei job, le variabili di ambiente, una grande lista di comandi Unix (TR, ordinare, tagliare, incollare, sed, awk, trovare,. ..) e molte altre funzionalità che non appaiono in sintassi.

+0

Non sto cercando una comprensione profonda. Voglio solo uno strumento che possa dirmi cosa significa "$ @". O nel tuo esempio: "&" creerà un pop-up: "Esegue un comando in background". Se il lettore ha bisogno di ulteriori informazioni, dovrà cercare di farlo. Ma se non hanno mai visto "&" prima potrebbe bastare solo quel piccolo testo. –

+1

Il mio punto è che il lettore potrebbe non capire il concetto stesso di "eseguire un comando in background" e alla fine cercherà l'intera lingua. Qual è il migliore? passare del tempo ad implementare i popup su ogni elemento di sintassi, spendendo tempo per insegnare a qualcuno che già conosce java o passare del tempo ad assumere qualcuno che già conosce bash e java? Non sceglierei la prima soluzione. – mouviciel

+1

Se non capiscono questo concetto, almeno sai cosa cercare Google. Prova a google per ">>". –

3

Uno strumento come questo può essere creato utilizzando ANTLR, ovvero analizza il codice in un albero di sintassi astratto utilizzando una grammatica ANTLR per quel linguaggio e scrive un generatore HTML che ha prodotto il codice annotato.

Sembra uno strumento utile da utilizzare per l'apprendimento delle lingue o per esplorare il codice sorgente di progetti che non vengono gestiti, ma è appropriato per la documentazione?

Perché è importante aiutare i programmatori di altre lingue a comprendere il codice a questo livello di dettaglio di implementazione? Chiunque mantenga l'implementazione a questo livello dovrà ovviamente conoscere la lingua e probabilmente avrà un IDE per fare la maggior parte di questo.

Detto questo, considererei senz'altro uno strumento come questo un aiuto per l'apprendimento.

+0

Non userò questo strumento per documentare il mio lavoro. Lo userò come strumento di manutenzione attraverso il quale il prossimo sviluppatore può eseguire qualsiasi script per capire tutti quei piccoli accorgimenti che non capisce :-) –

+0

Ok, sì, sarebbe davvero utile per quello. Anche qualcosa che definisce le parti del discorso sarebbe utile per ottenere il pezzo giusto di documentazione in modo più efficiente, ad es. dire che "> & 2" in bash è il reindirizzamento, dal momento che "reindirizzamento" è un termine buono per cercare nella pagina man o sul web. – mattbh

0

Se lo strumento ha prodotto

per inizia un ciclo che itera su tutti i valori che seguono in. Nel ciclo , è possibile accedere ad ogni valore attraverso la variabile $ f. Il corpo del loop è tra il do e il fatto

sarebbe abbastanza inutile. Questo è esattamente il tipo di commento che i programmatori (umani) tirocinanti sono stati detti a scrivere.

+0

-1 Scusa, non hai capito la domanda. –

+0

@Aaron Questo è spesso colpa dell'interrogante. –

+0

@Aaron: Lui ha capito la domanda, non hai fatto una domanda corretta che: p. – Younes

Problemi correlati