La pubblicazione di codice eseguibile invece di pseudo codice viene evitata?
Non che io sappia, ma questo probabilmente dipende dalla sottocultura specifica del rispettivo campo.
In Informatica è preferibile descrivere algoritmi usando pseudo codice piuttosto che codice reale?
Lo era (vedi la risposta di Owen) e talvolta può ancora essere (vedere le considerazioni di seguito).
Se sì, perché?
[...]
Quindi quali sono gli argomenti codice?
Come molte altre risposte già affermano: A parte il codice ingenuo eseguibile, lo pseudo codice mira ad essere facilmente letto e compreso senza disturbare il lettore con cose non importanti (per l'aspetto presentato) dettagli. E di solito riesce a raggiungere questi obiettivi.
Come tu stesso affermi, anche il codice eseguibile ha i suoi vantaggi. Consentitemi quindi di eludere la questione affermando che
con un po 'di sforzo potete ottenere il vantaggio di entrambi
(e senza fornire entrambi, pseudo codice e separati codice eseguibile, come suggerisce syn1kk.)
Il codice ideale nei documenti (e, se fattibile, altrove) è pseudo -pseudo codice: Codice che ha tutte le proprietà positive dello pseudo codice, ma sembra essere eseguibile (e in realtà fa quello che sembrava).
È mia ferma convinzione che tutto eseguibile sufficientemente ben scritto il codice è indistinguibile dallo pseudo codice : se qualcuno può dire che un determinato codice (effettivamente eseguibile) non è uno pseudo codice perché non è così leggibile e facilmente comprensibile come lo pseudo codice, quel codice eseguibile non è strutturato bene abbastanza, ancora, e dovrebbe essere riformattato.
Come ottenere uno pseudo pseudo codice
Come si ottiene un codice eseguibile facile da leggere come uno pseudo codice?
Ci sono diversi aspetti da considerare e realizzarli tutti potrebbe non essere sempre facile o fattibile, o talvolta nemmeno possibile. (Questo può essere un motivo valido per utilizzare un vero e proprio pseudo codice non eseguibile invece di uno pseudo-pseudo codice eseguibile.)
Scegli la lingua giusta
La lingua più adatta dipende da molti cose:
- Il dominio del problema
- Il tuo approccio alla soluzione
- Il tuo pubblico
- Le possibilità che la lingua offre per (ri) strutturare il codice
Nota che per alcune combinazioni di questi, nessun linguaggio di programmazione può (ancora o talvolta anche mai) esistere che consenta di scrivere codice sufficientemente ben scritto. Per ovvie ragioni pratiche, dovrai anche tenere in considerazione la tua padronanza della rispettiva lingua (quanto sei abile nell'applicarla).
Rendi il tuo codice estremamente pulito: refactoring, refactoring, refactoring
Se ci sono dettagli di implementazione che offuscano l'idea centrale dell'algoritmo che stai descrivendo, estraili (ad es. in costanti, variabili, metodi o funzioni), in modo da poter sostituire il loro "come" (la loro implementazione) con il loro "cosa" (il nome della cosa in codice appena estratta). Se appropriato, scegliere di non mostrare l'implementazione o l'assegnazione estratti negli estratti del codice in-paper. Prestare estrema attenzione nel nominare le cose estratte, in modo che il loro scopo (non necessariamente la loro implementazione) sia estremamente chiaro e ovvio dal loro nome e dalla firma della chiamata.
D'altra parte, se un algoritmo è troppo disperso tra diverse parti del codice per essere prontamente comprese, potrebbe essere necessario inserire selettivamente codice inline.
In tutto ciò, mira a un singolo livello di astrazione per unità di codice (ad es. funzione) o, almeno, ai giusti livelli di astrazione per mostrare e spiegare al meglio l'algoritmo. Sebbene applichi il principio della singola responsabilità in qualche modo correlato solo con attenzione: applicarlo eccessivamente (o interpretare "responsabilità singola" troppo ristretto) può disperdere e quindi offuscare il tuo algoritmo. Si noti che a questo proposito, il giusto equilibrio per il codice da presentare in un articolo molto probabilmente sarà diverso dal giusto equilibrio per il codice in un prodotto software (da mantenere).
Con qualsiasi ottimizzazione sufficiente compilatore o interprete, nessuno di questi refactoring dovrebbe influire negativamente sulle prestazioni. Ma quando l'obiettivo è presentare un algoritmo piuttosto che implementarlo in un sistema di produzione, questo non dovrebbe essere di troppo preoccupante, comunque.
Rendi il tuo codice ovvio da interpretare
La corretta interpretazione del tuo pseudo pseudo codice non dovrebbe fare affidamento sulla conoscenza del linguaggio di programmazione scelto, o della sua versione, variante o dialetto. Quindi fai attenzione alle caratteristiche del linguaggio che usi.
Ogni caratteristica del linguaggio che è comune a molti linguaggi di programmazione (nota al pubblico) e che nella lingua scelta ha una sintassi simile a molti altri linguaggi di programmazione potrebbe semplicemente oltre a essere anche una caratteristica di un dialetto pseudo codice e può quindi essere utilizzato in pseudo pseudo codice, a meno che il linguaggio di programmazione scelto non abbia una semantica insolita e non ovvia. Anche una caratteristica non così comune o specifica del linguaggio, o una con una sintassi non così comune, può essere utilizzata senza problemi, se la sua semantica è sufficientemente evidente dalla sua sintassi e parole chiave e dalla loro relazione con il linguaggio naturale.
È meglio omettere le caratteristiche linguistiche non ovvie, ma possono essere utilizzate se combinate con spiegazioni nei commenti in codice o nella prosa dell'articolo. (Proprio come si applicherebbe a caratteristiche non ovvie di uno pseudo dialetto codificato.)
Lo stesso vale per gli idiomi specifici della lingua: evitali o spiegali, se devi aspettarti che non siano evidenti per il tuo pubblico.
Alternativa: rendi eseguibile lo pseudo-codice
Le due sezioni precedenti presuppongono che si inizi dal funzionamento del codice eseguibile. Ovviamente puoi anche iniziare da pseudo codice e modificarlo per renderlo effettivamente eseguibile (e, si spera, per fare quello che sembra) in un linguaggio di programmazione adatto. Nota, tuttavia, che in questo modo potresti ritrovarti con un codice molto non idiomatico per la lingua di destinazione, che potrebbe non essere quello che desideri. Ovviamente, il refactoring di solito può risolverlo.
Spiega il tuo codice
Proprio come dovresti spiegare (in prosa, commenti sul codice o callout) alcuni aspetti del tuo codice se fosse presentato in pseudo codice, devi farlo se è scritto in pseudo pseudo codice.
I vantaggi dello pseudo pseudo codice
- Leggibile e comprensibile come pseudo codice
- Se viene specificata la lingua utilizzata (inclusa versione, variante o dialetto, se applicabile):
- è eseguibile e utilizzabile
- è testabile sia manualmente che in automatico test
- è profilabile
Alcuni di questi vantaggi ti avvantaggiano come autore, come puoi per esempio assicurarti che (r) l'algoritmo presentato è effettivamente corretto. Altri avvantaggiano il tuo pubblico che potrebbe voler valutare il tuo algoritmo
Se questi benefici valgono il lavoro significativo richiesto per ottenere uno pseudo pseudo codice rispetto al solo pseudo codice o d'altra parte non sufficientemente ben scritto eseguibile sta a te decidere.
Oh, e non dimentichiamo il vantaggio morale: che "sembri amatoriale" o no, puoi essere certo che non lo è, grazie a tutta l'abilità e il duro lavoro che richiede.