Studi su quanto bene un programmatore può capire il codice in lingue sconosciute? [chiuso]

15

Ci sono studi seri su come un programmatore esperto che conosce il linguaggio X possa capire il codice scritto da un programmatore competente usando il linguaggio Y, per una buona gamma di linguaggi ampiamente utilizzati come X e Y?

Ovviamente il mondo reale non è così semplice come i programmatori conoscono solo una lingua. Quello che vorremmo sapere è: se facciamo il nostro progetto, diciamo, C #, e un giorno alcuni vecchi fisici che sanno solo Fortran e Algol lo guardano, fino a che punto avrebbe avuto senso per loro? Le parti matematiche potrebbero leggere bene per loro, se ignorano quello che per loro sono segni di punteggiatura casuali. Oppure, un esperto di Python sarebbe in grado di trovare difetti nella mia intelligente scrittura in Ruby?

Potrebbero esserci problemi dal livello di sintassi superficiale al livello di concetti grandi come oggetti, metaprogrammazione del modello, funzionale e così via. Non mi aspetto che l'unico programmatore capisca a fondo tutti i dettagli della sintassi del codice in una "lingua straniera" o segua la religione di qualche concetto grandioso, ma chiedendosi in quale misura otterrebbero il flusso principale di controllo, trova lo spot dove qualcosa viene disegnato sullo schermo e cosa ne determina il colore o la dimensione, verifica che un robot programmato per guidare una macchina spenga il motore quando è finito, questo tipo di cose.

Uno studio di buona qualità includerebbe la ricerca accademica pubblicata, un rapporto ufficiale di alcuni gruppi industriali o un'importante società di software, anche se proverò osservazioni sistematiche e imparziali da parte di esperti leader di workshop, corsi o altre fonti. Non sono interessato a brevi blog, esempi di casi singoli o aneddoti. (Be ', forse qualche aneddoto se riescono a fare una buona lettura.)

    
posta DarenW 04.08.2012 - 09:40
fonte

4 risposte

9

Ovviamente dipende dalla misura in cui le lingue sono correlate tra loro. Ad esempio, se hai uno sfondo C o C ++ e hai fatto qualche programmazione in C # o in Java, dovrebbe essere facile leggere e capire l'altro dei due linguaggi (Java o C #). Se conosci bene Lisp, Scheme non dovrebbe essere un grosso problema. Una volta ho eseguito il debug di un programma PHP senza avere alcuna conoscenza di PHP, solo con la mia conoscenza di C, C ++ e Perl. Sono abbastanza sicuro che quando quel programma sarebbe stato scritto in Haskell o Smalltalk, sarebbe stato per me immenso, quasi impossibile.

In effetti, non penso che una ricerca accademica su questo argomento abbia senso (almeno, non in modo serio). Non esiste una cosa come un "programmatore con esperienza standard che conosce la lingua X", quindi qualsiasi studio mancherebbe di dati di base garantiti. Le persone hanno conoscenze diverse e, anche se hanno frequentato le stesse scuole, hanno talento e motivazione diverse.

but wondering to what extent they'd get the main flow of control, find the spot where something is drawn on the screen

Può essere difficile anche quando si ha molta familiarità con la lingua, sia perché la qualità del codice è così bassa, o la struttura utilizzata è così complessa, o la base di codice è molto grande.

    
risposta data 04.08.2012 - 11:05
fonte
6

Non sono sicuro su un riferimento di studio condotto accademico, tuttavia un buon nome esplicativo di metodi, classi e funzioni in linguaggio C # / C ++ / Java / Python o ecc. dovrebbe fornire facilità di comprensione del codice base e flusso dei processi aziendali.

Convenzione di denominazione all'interno del progetto e in generale nello sviluppo di software è un aspetto molto importante. Tuttavia, its importance e pertinenza per il software di qualità degli edifici sono spesso trascurati o ignorati tutti insieme.

Linee guida per i nomi utilizzate in .NET Framework e < a href="http://msdn.microsoft.com/en-us/library/ms229045.aspx"> Convenzioni di denominazione generali utilizzate in .NET sono buoni riferimenti anche per l'aspetto.

    
risposta data 04.08.2012 - 10:38
fonte
3

Dipende moltissimo dal singolo programmatore e dal modo in cui interiorizzano le lingue. Non ho assolutamente problemi a lavorare in una dozzina di lingue, mentre ho un amico che conosce solo il C ++. Non è peggio di programmazione di me, ha appena imparato un modo diverso.

Personalmente, trovo una domanda correlata più interessante: quando c'è un bug nel codice (cioè il programmatore X pensava di aver scritto someFunction(x, y) ma in realtà scriveva qualcos'altro), quanto è difficile per il secondo sviluppatore identificare il bug. Un buon programmatore X renderebbe estremamente ovvio ciò che voleva che il computer facesse, e sarebbe facile da leggere. Tuttavia, se ha fatto un errore, può essere un grosso problema. Cose come il seguente bug C ++:

int x = getCorrectValueForX();
if (x = 2)
   doSomethingWhenXIsTwo();

Può essere NOTORIOMENTE difficile da rilevare se non conosci la lingua.

    
risposta data 18.02.2014 - 03:12
fonte
1

Non dipende solo dal programmatore come hanno detto altre persone, ma anche dalle somiglianze tra le lingue, sia in sintassi che in filosofia e implementazione.

Molte lingue diverse usano una sintassi derivata C, quindi seguire il flusso di controllo sarà più facile se si ha familiarità con quel tipo di sintassi. Lo stesso vale per i linguaggi strongmente tipizzati e generici, le lingue con supporto per le funzioni di ordine superiore, il livello di astrazione e le filosofie programmatiche. Non dipende solo dal fatto di essere in grado di leggere la sintassi ma anche di avere familiarità con i concetti e le filosofie linguistiche.

Se hai imparato C per esempio, penso che sarebbe ragionevole aspettarti che tu possa ricavare il flusso di controllo da C #, Java o C ++ ecc. Sarebbe un po 'più difficile decifrare VB a causa della differenza in sintassi, o JavaScript a causa delle chiusure, della digitazione debole e delle funzioni di ordine superiore (so che puoi farlo in C ma è un po 'vistoso). Non mi aspetto che tu sia in grado di eseguire il debug di Lisp, F #, R o, dio non voglia, assemblare perché usano un paradigma di programmazione completamente diverso.

TL; DR Non è solo importante essere in grado di riconoscere la sintassi, il più delle volte è possibile decifrare una dichiarazione o una chiamata di metodo, ma essere in grado di comprendere il motivo alla base del perché un programma è scritto in un certo modo è il punto cruciale della comprensione e leggere il codice.

    
risposta data 18.02.2014 - 04:14
fonte

Leggi altre domande sui tag