Qual è l'approccio più efficace per apprendere un programma complesso non familiare? [duplicare]

1

Ho un bel po 'di esperienza con diversi linguaggi di programmazione e sto scrivendo programmi piccoli e funzionali per una varietà di scopi. Le mie capacità di codifica non sono quello con cui ho un problema. In effetti, ho scritto un'applicazione web decente da zero per il mio avvio.

Tuttavia, ho difficoltà a saltare in applicazioni sconosciute. Qual è il modo più efficace per approcciare l'apprendimento di una nuova struttura e / o architettura del programma in modo da poter iniziare ad attaccare il codice in modo efficace? Ci sono strumenti utili per i loro rispettivi linguaggi (Python e Java sono le mie due lingue principali)? Dovrei iniziare solo guardando i nomi delle funzioni o la documentazione? Come si avvicinano i veterani a questo problema?

Trovo che questo debba essere ottenuto con il minimo aiuto da colleghi o collaboratori che hanno già familiarità con l'applicazione e che hanno cose migliori da fare che aiutarmi. Mi piacerebbe praticare questa abilità in un progetto open source quindi qualsiasi suggerimento per i punti di partenza (forse anche leggermente complesso) sarebbe fantastico!

    
posta Community 26.11.2011 - 18:54
fonte

5 risposte

1

La tua migliore risposta è trovare e leggere la documentazione. Se non ce ne sono disponibili ed è un progetto open-source, probabilmente non è una buona idea usarlo.

Utilizzare un buon IDE che ti permetta di passare all'implementazione del metodo è anche molto utile per scavare nel codice.

Se vuoi capire come, dove, quando i codici sono eseguiti, potrebbe essere meglio eseguirlo in modalità di debug. È possibile rintracciare la chiamata allo stack per visualizzare il comportamento o il segnalibro per mettere in pausa l'applicazione in esecuzione e visualizzare le variabili.

    
risposta data 26.11.2011 - 19:03
fonte
1

Non esiste uno strumento, un software o un pattern che possa comprendere un progetto complesso e poi spiegarlo {;-) ANCORA}.

Vedi, per il sistema avanzato avrai sempre bisogno di una buona documentazione per capire cosa sta succedendo sotto il cofano. Oppure dovrai sederti e applicare il tuo tempo per la comprensione.

Facciamo un esempio di Plone CMS . Supponiamo che se questo non ha offerto una documentazione, sarebbe difficile per voi, me o qualsiasi sviluppatore esperto. Tu sai perché ?? Perché non due persone prendono la stessa soluzione per un problema. X può sviluppare un sistema in abc modo mentre Z può interpretarlo meglio in cba modo. Quindi, il punto è che se trovi difficile capire il sistema scritto degli altri, non farti prendere dal panico. Sta succedendo a te ed è successo a tutti.

Soluzione per la comprensione di sistemi complessi : - Questo è solo un modo per farlo.

  1. Tieni traccia del risultato. Se si tratta di un sito Web, traccia il file che sta visualizzando l'output (HTML)
  2. Verifica la logica in questo file e i modelli a cui sta accedendo
  3. Capire il modello e acquisire il database.

Pertanto, vai sempre dall'endpoint al punto di partenza. Prendo questa strada per un sistema complesso, ma a volte non riesco a capire perché alcuni lo abbiano fatto e così via. Ma alla fine capisco cosa c'era nella sua mente e perché le cose si sono sviluppate in questo modo.

NOTA : - Una cosa che vorrei approvare è solo la mia opinione. Non studiare il sistema di qualcun altro per solo scopo di apprendimento. Avere una vera esigenza o idea, quindi metterlo insieme. La strada migliore per imparare è guidare la tua auto .

    
risposta data 26.11.2011 - 19:27
fonte
1

Algoritmo di come di solito mi avvicino al codice estraneo (guardate in basso per una sua versione concisa in pseudo-codice).

Il modo migliore per iniziare ad esplorare il sistema straniero è leggere la sua documentazione, specialmente se qui è disponibile una documentazione specifica per gli sviluppatori (manuale dello sviluppatore, ecc.). Chiedere allo sviluppatore precedente di inviarti tutta la documentazione che lui o lei ha per il sistema e nominare un incontro con lui / lei (se possibile) in 1-2 settimane.

Durante la preparazione per l'incontro, studiare la documentazione. Se non c'è documentazione di quante tu possa avere la possibilità di ottenere una copia delle specifiche originali che sono state utilizzate per implementare il sistema (in grandi aziende queste sono solitamente preparate dai Program / Project Managers e conservate più a lungo, rispetto alla documentazione in esecuzione).

Se il tuo IDE (come VS2010 Ultimate o Eclipse con plug-in) supporta la creazione di diagrammi di architettura, allora prova quelli a ottenere una panoramica del tuo sistema. C'è un mucchio di software speciali, come JDepend / NDepend, a seconda del tuo sistema, che può essere utile qui.

Se non ottieni alcuna specifica, dai un'occhiata ai test unitari, anche questa è una parte delle specifiche e già scritta nel formato a te familiare.

Durante l'incontro chiedi allo sviluppatore di guidarti attraverso il sistema e porre domande alle parti che non capisci. Di solito cerco di mettermi nei panni degli sviluppatori e vedere se qualcosa sembra essere implementato in un modo un po 'strano: basta chiedere, forse ci sono dei requisiti impliciti o delle limitazioni di cui dovresti essere a conoscenza.

Ed ecco la versione succinta promessa del testo sopra.

if (Documentation.Exists()) ReadDocumentation();
else { 
 AskDeveloperIfThereIsDocumentationLyingSomewhereAround();
 if (Documentation.Found()) ReadDocumentation();
}

If (Code.IsDocumentedProperly()) {
   ExtractCodeDocumentation();
   ReadCodeDocumentation();
}

If (IDEOfYourChoice.Supports(ArchitectureDiagramms)) ProduceDiagrammsAndStudyThem();

if (Specification.Exists()) ReadSpecification();
else AskPMIfThereIsDocumentationLyingSomewhereAround();

TryToRunTheSoftwareOnYourOwn();

if (Developer.IsAvailable()) AskToGuideYouShortlyThroughTheCode();
else if (User.Any( user => user.IsCompetent(ThisSystem))) AskUserToGuideYouThroughProgramm();

If (System.HasUnitTests()) {
  ReadUnitTests();
  RunUniTests();
}
    
risposta data 26.11.2011 - 19:31
fonte
0

Penso che non ci sia una risposta giusta, ma ecco la mia opinione. Ho trovato che il modo migliore per imparare una nuova città è attraversarlo e fare shopping e mangiare. Quando ti perdi, guarda la mappa. Quindi, per applicare l'analogia, troverei un compito specifico su cui lavorare e concentrarmi su quel compito. Imparerai le cose lungo la strada, e anche se è solo una parte del codice, è un inizio. Fare più compiti significa più fette, e naturalmente inizierai a ottenere un'immagine più grande.

Questo non vuol dire che guardare l'architettura di alto livello e la documentazione del codice non sia utile. È solo più utile quando lo studia con il contesto del tuo particolare compito.

    
risposta data 26.11.2011 - 19:16
fonte
0

La cosa più importante è vedere che cosa fa in realtà durante l'esecuzione. Questo ti permette di capire quali concetti il programma presenta al mondo esterno, quali dati dovrebbero entrare e uscire e ti permettono di modellare mentalmente ciò che dovrebbe accadere all'interno. Se possibile, chiedi a un utente esperto di dimostrare il programma.

Successivamente, devi averlo in stato costruibile e eseguibile all'interno del tuo IDE preferito, in modo da poter utilizzare tutti i tuoi strumenti familiari per indagare ed eseguire il debug del codice. Da lì dovresti essere in grado di scremare la fonte e correlare le tue conoscenze attuali con il codice sorgente. Da lì, la soluzione migliore per imparare è migliorare la documentazione attuale della fonte. (Questo non è così sciocco come sembra - aiuta davvero).

    
risposta data 26.11.2011 - 19:21
fonte

Leggi altre domande sui tag