Come posso giudicare se un progetto è particolarmente complesso o se sono solo lento nel raccoglierlo?


16

Sto facendo pochi progressi su un grande progetto. La fonte è enorme, molti strati di oggetti, codice maccheroni, grafici a doppio diamante di eredità multipla, elementi semifornati congelati quando lo scrittore originale se ne è andato, e nessuno sa perché molti pezzi di esso siano stati progettati così come erano.

Suppongo che qualsiasi programmatore competente avrebbe qualche difficoltà a capire tutto abbastanza bene per correggere i bug, finire le cose a metà cottura e aggiungere nuove funzionalità. Tuttavia, sospetto che sto andando più lentamente di un normale programmatore.

Come faccio a giudicare se la fonte è insolitamente cattiva e lo sto facendo nel modo migliore possibile, rispetto alla fonte è tipica di un progetto come questo e sono solo saggia o scarsamente qualificata?


11
Comprendere il codice degli altri è un atto di empatia. Dimentica la velocità con cui stai andando e dimentica anche ciò che un gruppo di muti ********** sono le persone che hanno scritto il codice. Capirlo è un esercizio di flessibilità. Supponi che la fonte sia insolitamente cattiva, e che tu sia troppo esperto, e torna al lavoro e smetti di rovistare in questi stupidi forum. Questo vale anche per me ... Ho del codice da combattere.
Dan Rosenstark,

2
Soprattutto dimentica di "che gruppo di ..." quando le persone sono il capo, il fratello del capo, il capo del capo o il nipote del capo, ecc.!
DarenW,

2
Ah, il "perché" mancante. Ricorda di inserirli quando li capisci.

@DarenW - è il codice spaghetti, non il codice maccheroni: D (Mi dispiace, ho dovuto).
Jas,

1
@Jas google per il codice dei maccheroni ... ci sono più tipi di pasta che solo spaghetti ;-)
Jürgen A. Erhard

Risposte:


6

L'unico modo per decidere questa domanda è acquisire molti più programmatori per affrontare lo stesso problema e vedere se vanno meglio.

Questo è ovviamente raramente pratico, il compito è caduto nel tuo buon sé e fornendoti di fare il meglio che puoi su di esso, ricercando dove la tua conoscenza ti manca. Distruggendolo dove la complessità ti incanta e tenendo informato chiunque sia interessato ai tuoi progressi. Quindi non mi preoccuperei e continuerei.


16

Prima di tutto, non passerei troppo tempo a preoccuparmi che tu possa essere "arguto o scarsamente qualificato". Alcuni progetti sono difficili da comprendere e i progetti di grandi dimensioni richiedono spesso un po 'di tempo per accelerare. Pensare di essere "stupidi" o non all'altezza del compito non ti aiuterà in alcun modo.

Sembra che tu abbia bisogno di aiuto con il codice, quindi considera le tue risorse. Hai accesso ai programmatori originali? Se disponibili, potrebbero essere buone risorse per l'informazione. Quale documentazione è disponibile? Se la documentazione è scarsa, estrarre un notebook e iniziare a creare la propria documentazione personale.

La grande idea qui è che dovresti aspettarti che questo processo richieda tempo, e minore è il tempo che passi mentalmente a picchiarti, più energia dovrai analizzare il codice e capirlo. In bocca al lupo!


5
+1 Possono essere necessari fino a 6 mesi per iniziare davvero a conoscere alcuni sistemi complessi abbastanza per essere competenti in essi. Anche se la base di codice è "buona", diversi sviluppatori e team hanno stili diversi, e a volte basta un po 'di tempo per orientarsi.
Ryan Hayes,

3
@Ryan, e 6 mesi dopo, diventi tu stesso parte del problema :)
Benjol,

@ Benjol Sì, ci sono stato.
Ryan Hayes,

FWIW, quando sono stato su questa barca (diverse volte!), Ho trovato più utile fare pause frequenti piuttosto che sedermi e cercare il codice. Quando fai una pausa, alzati e allontanati fisicamente dal computer. Allunga, guarda fuori dalla finestra, pensa a quello che hai appena visto, poi torna indietro e guarda ancora un po '. YMMV, ma mi sono trovato a fare progressi molto migliori quando l'ho fatto. In bocca al lupo!
TMN

+1 per la creazione della propria documentazione personale. Quando faccio questo lavoro, trovo che fare molte note (nel codice o sulla carta) e disegnare molti diagrammi (che di solito significano qualcosa per me in quel momento) mi aiuta. Un ulteriore vantaggio di tutto ciò è il rafforzamento dei concetti nella tua mente.
Andy Hunt,

6

Mai visto la curva di apprendimento. La Curce dell'apprendimento

La teoria dice che inizialmente ci vuole tempo per intensificare. Il trucco è passare rapidamente il punto di incremento. Se rimani bloccato regolarmente, chiedi aiuto al tuo manager o almeno tienilo informato dei problemi che hai incontrato. Finché sei a posto per la pianificazione, nessun problema.


2

Sezionarlo, un pezzo alla volta

La tua situazione è molto comune, "arrivare alle prese" richiede tempo come altri hanno già detto.

Quello che trovo è che se lo affronti "un pezzo alla volta" , indipendentemente da quanto sia complesso un progetto, lo capirai. Devi solo essere logico al riguardo.

Inizia con dire un pulsante, scavare attraverso codice sorgente , metti i punti di interruzione, guarda passo dopo passo cosa sta succedendo. Ci sono due cose che devi soddisfare:

  • La panoramica di alto livello.
  • I dettagli grintosi che implementano la funzionalità sopra desiderata.
  • una volta capito parti di esso, ricodificalo.

"Un pezzo alla volta" potrebbe funzionare su altri progetti, ma questo ha tante classi derivate da altri, classi di amici, puntatori alle viscere reciproche, ci sono poche parti che possono essere comprese in modo indipendente.
DarenW,

Sono sicuro che sia un labirinto complesso (qualcosa che è "cresciuto" nel tempo). Tuttavia, se inizi con una funzione, mi stai dicendo che non sei in grado di rintracciarla da un capo all'altro?
Darknight,

Tracciare il flusso di dati o la sequenza di eventi quando, ad esempio, l'utente fa clic su un pulsante, si è rivelato impossibile.
DarenW,

1

Che ne dici di avere una visione diversa: cosa devi sapere su questo codice e hai un modo per misurarlo? Ad esempio, se si sta tentando di correggere un bug, ciò potrebbe richiedere un diverso tipo di immersione rispetto a se si stesse tentando di migrare il codice da una lingua a un'altra, ad esempio passando da VBScript a C #. Se stai cercando di ottenere tutti i requisiti dal codice corrente, ciò potrebbe richiedere del tempo, anche se sospetto che la maggior parte delle persone avrebbe quel tipo di problema.


Mi piace questo commento Uno dovrebbe avere un obiettivo specifico e lavorare per raggiungere quell'obiettivo (e solo quello). Altrimenti, ti perderai in esso - Molto simile a una cosa della mappa.
NoChance,

1

Mentre imparano qualcosa di nuovo, molti studenti penseranno: “Accidenti, questo è difficile per me. Mi chiedo se sono stupido. ”
Prima di andare oltre, assicurati che non sei stupido e che alcune cose sono difficili. ...

Signor Aaron Hillegass con le parole intelligenti.

Non sei stupido, non sei lento e non sei scarsamente qualificato. Sono nella stessa barca, sono entrato in un nuovo ruolo e la base di codice esistente è incredibilmente grande e mostra segni di essere ripetutamente troppo sviluppato, mi ci sono volute settimane per arrivare a un punto in cui mi sento come se stessi persino vicino alla massima velocità. Immagina che il progetto sia come imparare un'intera nuova lingua, non succede dall'oggi al domani, ma richiede pazienza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.