Superare la lenta risoluzione dei problemi grazie alla maggiore conoscenza di cosa potrebbe andare storto [chiuso]

443

Questo mi ha turbato per un po 'di tempo, e apprezzerei molto l'input di altri professionisti.

Breve background: ho iniziato a programmare quando i miei genitori mi hanno comprato il mio primo computer nel 1988 (all'età di 14 anni, ora ho 39 anni). Ho seguito un paio di altri percorsi di carriera prima di diventare un programmatore professionista nel 1997. Un po 'tardi, forse, ma è così che è stato. Sono ancora contento della mia scelta, amo la programmazione e mi considero bravo in quello che faccio.

Ultimamente, ho notato che più esperienza guadagno, più tempo mi porta a completare i progetti o determinate attività in un progetto. Non ho ancora intenzione di diventare senile. È solo che ho visto tanti modi diversi in cui le cose possono andare storte. E le potenziali insidie e trucchi che conosco e ricordo stanno diventando sempre di più.

Esempio banale: era solo "okay, scrivi un file qui". Ora mi preoccupo delle autorizzazioni, del blocco, della concorrenza, delle operazioni atomiche, dei sistemi di riferimento, dei diversi file system, del numero di file in una directory, dei nomi di file temporanei prevedibili, della qualità della casualità nel mio PRNG, mancanza di energia nel mezzo di qualsiasi operazione, un'API comprensibile per quello che sto facendo, documentazione adeguata, ecc. ecc.

In breve, i problemi si sono da tempo spostati da "come faccio questo" a "qual è il modo migliore / più sicuro di farlo".

Il risultato è che mi ci vuole più tempo per finire un progetto rispetto a un novizio. La mia versione potrebbe essere solida come roccia e impenetrabile come so farcela, ma ci vuole più tempo.

L'esempio "crea file" sopra era solo questo, un esempio. I compiti reali sono ovviamente più complessi, ma meno adatti per una domanda generica come questa. Spero tu capisca dove sto andando con questo. Non ho problemi a trovare algoritmi efficienti, amo la matematica, mi piacciono i soggetti complessi, non ho difficoltà con la concentrazione. Penso di avere un problema con l'esperienza, e di conseguenza con una paura di errori (intrinseci o estrinseci).

Trascorro quasi due ore al giorno a leggere nuovi sviluppi, nuove tecniche, linguaggi, piattaforme, vulnerabilità della sicurezza e così via. L'enigma è che più conoscenza guadagno, più lento sono nel completare i progetti.

Come ti occupi di questo?

    
posta Zilk 09.10.2013 - 16:03
fonte

21 risposta

267

Non sei più lento nel completare i progetti. In precedenza, pensavate che i vostri progetti per principianti fossero fatti quando in realtà non lo erano. Dovresti vendere questa qualità ai clienti.

"Questa azienda potrebbe farlo in modo più veloce ed economico, ma è davvero fatto? O ti caccerai per anni?"

Oltre a ciò, devi conoscere e accettare il vecchio idioma: "Perfetto è il nemico del bene".

    
risposta data 28.03.2014 - 23:16
fonte
177

Sembra che sia giunto il momento di unirti al lato oscuro: la gestione.

Non ti sto suggerendo di rinunciare alla programmazione e diventare un manager. Ma sembra che tutta l'esperienza che hai citato fino ad ora sia stata di natura tecnica. Nella semplice operazione di scrittura di un file, puoi pensare a 10 diversi aspetti che uno sviluppatore meno maturo non prenderebbe mai in considerazione. Non necessariamente una brutta cosa, ma ...

Il lato oscuro è tutto basato sul valore attuale. Si tratta di effettuare investimenti minimi per il massimo guadagno (analisi costi-benefici). Negli affari tutto si riduce a quanto mi costerà, probabilità di successo, probabilità di fallimento, probabilità di fallimento spettacolare e potenziale guadagno. Fai la matematica; agire di conseguenza.

Funziona altrettanto bene quando sei uno sviluppatore: crea un file temporaneo, ignorando le autorizzazioni e le collisioni di nomi - 5 min. Guadagno netto, il resto della squadra può iniziare a lavorare su qualsiasi codice dipende dalla presenza di quel file. È una soluzione perfetta? Assolutamente no. Ti prenderà il 99%, il 95%, forse il 90%? Sì, probabilmente lo farà.

Un'altra domanda da porsi: come ti senti riguardo al debito tecnico? Alcune persone pensano che debba essere eliminato. Penso che quelle persone abbiano torto. Proprio come nel mondo degli affari, il debito tecnico consente di prendere in prestito "denaro" o "tempo" per consegnare qualcosa prima. Cosa c'è di meglio: una soluzione perfetta in 2 anni o un trucco completo che un cliente può utilizzare e acquistare in 4 mesi? Ogni situazione è diversa, ma in alcune situazioni se aspetti 2 anni, il tuo cliente si iscriverà già alla tua competizione.

La chiave è gestire il debito tecnico allo stesso modo in cui un'azienda ben gestita gestisce il debito finanziario. Se non si assume abbastanza, non si ottiene un ritorno sull'investimento ottimale. Se ti impegni troppo, l'interesse ti ucciderà.

Quindi il mio consiglio: inizia a valutare il tuo lavoro sulla base del fatto che stai massimizzando il tuo valore invece di massimizzare la tua completezza. E se lo pratichi, svilupperai la stessa intuizione che hai già sviluppato nella tua area tecnica.

Come nota a margine, recentemente ho iniziato a fare la tecnica pomodoro e mi ha aiutato molto. Invece di andare su una tangente di una tangente, concentrarsi su piccoli intervalli di tempo e quindi allocare pomodoros per lavoro / ricerca futuri. È incredibile quante volte ho fatto una nota per cercare un argomento ma un'ora dopo quando è arrivato il momento, ho pensato tra me e me, "ci sono almeno altre 3 cose che potrei fare con il mio tempo oggi che sono tutte più preziose."

    
risposta data 28.03.2014 - 22:10
fonte
93

Ho avuto il (probabile) stesso problema molti anni fa, è durato per alcuni anni e l'ho superato. Quindi forse sarebbe interessante per te sapere come l'ho raggiunto, anche se non sono sicuro che il mio modo si applicherà anche a te.

Dovresti anche dare un'occhiata qui: Le sette fasi di competenza in Ingegneria del software mostra che la produttività è in gran parte un effetto collaterale del livello di abilità. Può darsi che tu sia ancora ad un certo punto tra lo stadio 3 e lo stadio 4 della tecnologia che stai usando (l'abilità tecnica dipende dalla tecnologia, puoi essere padrone di alcune tecnologie mentre ancora impari altri).

Ora parto con la testimonianza biografica.

Un po 'di contesto. Ho 47 anni. Ho iniziato a programmare a 12 anni 80. Mentre ero al liceo, ho anche lavorato come programmatore di giochi professionali part time. Fondamentalmente non mi costavano così tanti soldi, quanto basta per comprare hardware, ma mi piaceva e imparavo molto. A 18 anni ho iniziato un apprendimento formale dell'informatica.

Come risultato quando ho compiuto 20 anni, ogni volta che ho iniziato un'attività di programmazione, conoscevo molti modi per risolvere i problemi indicati ed ero molto consapevole dei molti parametri e insidie alle mani, e degli svantaggi e dei limiti di qualsiasi metodo.

In alcuni punti (diciamo circa 26 anni) è diventato davvero difficile per me scrivere qualsiasi programma. Sono state aperte così tante possibilità che non potevo più scegliere tra loro. Per alcuni anni (ce l'ho fatta 6) ho persino smesso di programmare e sono diventato un giornalista tecnico.

Non ho mai smesso completamente di provare a programmare comunque. E ad un certo punto è tornato. La chiave per me era la programmazione estrema, in particolare il principio della semplicità: "Scrivi la cosa più semplice che potrebbe funzionare".

Fondamentalmente mi sono sforzato di non preoccuparmi dell'efficienza del codice (questo era il mio posto di blocco principale, evitare disegni inefficienti), ma basta andare nel modo più semplice. Inoltre, mi sono imposto di occuparmi meno degli errori e di ritardare la gestione degli errori in un secondo momento, dopo aver scritto i test che hanno generato l'errore (in realtà è TDD).

È qualcosa che ho imparato mentre stavo scrivendo. Quando non so cosa scrivere, o sapevo che cosa stavo scrivendo era cattivo . Andiamo avanti. In realtà scrivere le cose cattive. Alla fine lo correggerò più tardi. O se è davvero così brutto cancellarlo e riscriverlo, ma è più veloce scrivere cose due volte che scrivere qualcosa di perfetto la prima volta.

In realtà è molto probabile che un codice che ritieni sia valido in fase di prima scrittura avrà bisogno tanto di miglioramenti quanto di pessimo.

Se segui il percorso Simplicity ottieni anche un bonus aggiuntivo. Accetti facilmente di rimuovere / modificare la progettazione / codifica iniziale. Ottieni una mente più flessibile.

Ho anche preso l'abitudine di inserire un commento temporaneo nel codice, spiegando ciò che non stavo facendo ora e che intendevo fare più tardi quando il codice sarebbe stato funzionale nel normale caso d'uso.

Ho anche frequentato un Dojo XP con kata di codice praticato con altri programmatori per interiorizzare le pratiche XP. Ha aiutato. Ha reso istintivi i metodi formali di cui sopra. Anche la programmazione delle coppie ha aiutato. Lavorare con i giovani programmatori dà un certo slancio, ma con l'esperienza si vede anche ciò che non fanno. Per esempio nel mio caso le vedo spesso impegnate in progetti eccessivamente complicati e conosco l'incubo del design che potrebbe portare a. Andato in quel modo. Fatto. Ho avuto problemi.

Il punto fondamentale per me è mantenere il flusso. Essere veloci sta davvero riuscendo a mantenere il flusso.

Ora sono tornato come programmatore professionista e credo di essere sia migliore che più veloce con una comprensione più profonda di ciò che sto facendo. Praticare il TDD I potrebbe essere ancora un po 'più lento di quando ero un giovane toro (e non ho provato nulla), ma non ho alcun timore nel refactoring e certamente spendo molto meno tempo nel debugging (quasi per niente, rendilo meno del 10% del tempo ).

Riassumendo: ho superato il mio codice utilizzando metodi agili (XP), andando per semplicità, poi rifattiandolo e facendo pratica per renderlo istintivo. Ha funzionato per me. Non sono sicuro che possa essere generalizzato a chiunque altro.

In termini di livello di acquisizione delle competenze, ho soprattutto imparato ad accettare il fatto che ogni volta che cambio tecnologia (apprendo nuova lingua, nuovo framework, ecc.) passerò attraverso un palcoscenico quando sto rallentando. Questo è normale e alla fine lo supererà. Posso anche compensare ciò con una buona metodologia e competenze di programmazione generale e non sarà tanto un problema.

    
risposta data 13.11.2014 - 17:34
fonte
41

Una parte importante della programmazione è gestire e controllare la complessità e per me personalmente è uno dei problemi principali. Se ignorata, la frequenza delle carenze aumenta o, come nel tuo caso, l'ETA del software finito aumenta drammaticamente.

Lacomplessitàdelsoftwarepuòesserecontrollataegestitadadiversilivelliemodi,maunabuonaregolaempiricaperottenereunacertaprospettivaèquesta:"La priorità principale di qualsiasi progetto software è la soddisfazione del cliente, che è una funzione delle loro aspettative."

In altre parole, la complessità del software dipende molto dalla tua abilità nel controllare le aspettative del tuo cliente.

Quando si adotta questa vista, allora due punti importanti diventano ovvi:

  1. le aspettative dei clienti devono essere esplicitate (in qualsiasi forma);
  2. le aspettative dei clienti possono sempre essere modificate e ciò avviene attraverso l'arte della negoziazione.

Il tuo esempio è molto buono, "scrivilo semplicemente" contro "una miriade di altre considerazioni". Pensaci - se qualcuno dovesse scrivere requisiti esaustivi per entrambe le varianti, può esserci un'equivalenza nelle caratteristiche descritte o no?

Costruire un F16 è diverso dalla costruzione di un Cessna, sebbene entrambi possano volare.

    
risposta data 08.10.2013 - 14:57
fonte
24

La risposta semplice è: accettala.

In tutti i sistemi si devono fare dei compromessi tra affidabilità, robustezza, sicurezza, velocità, costo dell'hardware, costi di sviluppo, time to market, come si chiama. Non sarai sempre d'accordo con il modo in cui il cliente fa questi trade-off, ma non sei tu a prendere quelle decisioni. Tutto quello che puoi fare è fornire un'opinione ponderata. Lo sviluppo del software copre l'intera gamma, dalla "mia pagina web personale" al "funzionamento del reattore nucleare", e il codice deve essere scritto di conseguenza. Se un incidente significa "ricaricare la mia pagina web personale", allora a chi importa davvero se ciò accade? Ma se un incidente significa "Chernobyl", allora la tua preferenza per il codice solido è semmai un po 'casuale per i miei gusti.

Ci sono alcuni clienti che accetteranno felicemente il codice di livello "Proof of Concept" e lo eseguiranno nei loro sistemi live, e spesso hanno amministratori di sistema che sono ben abituati a questo. IME i loro sistemi di solito non sono disponibili per un'ora o giù di lì nel bel mezzo della notte, mentre un sacco di riavvii programmati si verificano. Ma hanno preso la decisione aziendale che è così che vogliono andare. Idealmente perché il loro campo è così rapido che il codice di alta qualità non sarebbe mai pronto, ma spesso perché non possono vedere il valore (se un sistema "funziona" non lo notano mai, quindi quel sistema non rappresenta un valore per i soldi). Se ti infastidisce troppo, prova ad evitare quei client.

Tenersi aggiornati è il momento in cui tutti dobbiamo spendere o almeno spendere. A volte questo ti porterà a lavorare, altre volte ti manterrà in buona forma. Ad ogni modo, prova a divertirti.

    
risposta data 08.10.2013 - 03:25
fonte
16

Sembra che le tue competenze siano molto utili per lo sviluppo di sistemi mission critical di altissima qualità, come le applicazioni finanziarie / commerciali, la trasmissione, l'aerospaziale, la difesa ...

Gli errori in questo tipo di applicazioni sono molto costosi e impiegano persone che la pensano come te in quanto possono coprire tutti i casi.

    
risposta data 12.10.2013 - 20:40
fonte
15

La verità è che i sistemi moderni stanno diventando sempre più complessi. Il computer è ora simile a quel gioco "Jenga" in cui hai tutti questi pezzi che fanno affidamento su molti altri. Estrarre il pezzo sbagliato e si ha un errore, estrarre un pezzo corretto / necessario e si può ancora produrre un errore. Più complesso è il sistema, più tempo avrai a spendere pensando a come rendere il tuo codice più robusto e, auspicabilmente, più sicuro. La velocità sarebbe buona, ma penso che la velocità passi molto in secondo piano in questi giorni quando si apprende dalle notizie che la società "XYZ" è stata hackerata e 6 milioni di numeri di carte di credito dei clienti sono stati rubati.

I tuoi clienti potrebbero non voler sentire che il loro programma deve essere sicuro, robusto, ecc. Ma potresti dire loro che la loro auto non ha bisogno di cinture di sicurezza e airbag né che la loro casa ha bisogno di serrature e porte ... perché chi vuole sentire tutto questo?

Se pensi troppo che stai andando per le cose nel modo giusto, eccetto per il fatto che devi scegliere una strategia che sembra "concreta" e seguirla.

    
risposta data 08.10.2013 - 03:20
fonte
9

Sembra che tu sia consapevole della tua tendenza a pensare a tutto ciò che può andare storto.

Gli esperti esperti di prudenza spesso imparano a seguire il mantra YAGNI , non ne avrai bisogno, quando cercheranno di tornare a un flusso di lavoro snello, agile e produttivo dopo essersi soffocati troppo nelle erbacce della modalità fallimento- analisi-andato-amok.

Tuttavia, se stai scrivendo qualcosa in un dominio in cui quel livello di attenzione non è inferiore a quello richiesto dal Professionismo, allora dovresti capire che la tua "velocità", la tua "produttività", in termini netti, è misurabile da come molto bene (o danno) che stai facendo alla tua azienda, ai tuoi clienti, alla suite software o alla famiglia di prodotti che stai creando o mantenendo.

Ricorda di:

  • Includere il costo totale della manutenzione, il costo totale di proprietà e il costo totale di distribuzione e manutenzione delle soluzioni quando si prendono in considerazione modifiche nel proprio approccio. Andare più veloce e fare più errori può o non può rendere le cose migliori.

  • Se lavori in una buona compagnia, probabilmente puoi discuterne con la tua squadra e con il tuo supervisore, senza che sia una mossa limitante per la carriera. Se non puoi, ora è il momento giusto per scoprirlo e trovare un nuovo lavoro.

risposta data 08.10.2013 - 19:56
fonte
7

L'unica cosa che posso vedere è: "Stai diventando sempre più prezioso".

Come e quando ottieni più esperienza, apprendi cose che dovresti evitare, e questo è ciò che ti rende migliore di altri.

Una cosa avresti notato che il tuo codice sarebbe più sicuro e più gestibile ora.

  • L'unica cosa che devi fare è spiegare al tuo cliente perché ci è voluto del tempo e come sarebbe stato utile per loro.
  • Devi mostrare loro la profondità delle tue conoscenze.
  • Devi dire loro perché hai fatto, cosa hai fatto e in che modo sarebbe stato importante per loro e per i loro affari.

Il mio suggerimento sarebbe di concentrarsi su questa parte.

    
risposta data 08.10.2013 - 09:49
fonte
7

in caso di dubbio predefinito per citare male Knuth ...

"L'ottimizzazione prematura è la radice di tutti i mali."

Ecco cosa suggerirei, in quanto sembra che tu abbia un problema che ho di tanto in tanto ...

Ciò che funziona davvero per me ...

  1. Scrivi i test unitari, come se tutto il codice fosse stato fatto.
  2. documenta l'interfaccia.
  3. implementa l'interfaccia.

cosa hai fatto veramente:

  1. lavorare attraverso i requisiti dei livelli del modello
  2. ha davvero impostato la divisione del lavoro, quali oggetti sono responsabili di ciò che
  3. iniziare a lavorare in un ambiente quando puoi effettivamente passare attraverso il codice funzionante, il che rende le cose molto più veloci e più accurate ...

si basano anche su asserzioni in fase di sviluppo iniziale ... quindi scopri quali rimedi devono essere implementati e non scrivere codice irraggiungibile o difficile da testare.

    
risposta data 08.10.2013 - 17:36
fonte
6

Penso che dovresti attenersi agli standard di codifica, ma assicurati di essere in linea con i tuoi clienti. Molti clienti non sanno cosa ci vuole / costa costruire un buon software. Fa parte del lavoro dello sviluppatore professionista educarli.

Sia che tu sia agile o cascata, ottieni una sorta di accordo da parte del cliente su ciò che si aspettano che l'applicazione faccia. Troppi sviluppatori (OK forse più addetti alle vendite) sono colpevoli di sandbagging . "Non hanno detto che volevano un sito Web altamente sicuro." Nella maggior parte dei casi, è perché non sono stati richiesti. "Ti dispiace se il tuo sito di e-commerce viene violato?" Certo che gli interessa e perché lo costruiresti per permettere a chiunque di penetrare nella sicurezza? Devi educarli.

Assicurati di fare solo ciò che il cliente ti sta pagando. Parte del tuo servizio è la tua esperienza. I clienti si aspettano che tu conosca le insidie senza che loro debbano chiedere. Spetta a loro includere il requisito. Potresti voler trasmettere a clienti che vogliono qualcosa di economico.

    
risposta data 08.10.2013 - 16:57
fonte
6

Pensa alle conseguenze pratiche di un bug rispetto a tutti gli altri problemi che devono essere risolti.

Considera le seguenti conseguenze della creazione di una parte di codice scritta male:

  1. L'intero database viene scaricato ogni due mesi. 48 ore di inattività durante il ripristino dei backup.
  2. I record dei clienti vengono linkati. $ 200 di ordini vengono spediti ai clienti sbagliati al mese
  3. Un ordine si blocca in uno stato sbagliato una volta alla settimana. Ordina le navi ma il magazzino deve chiamare l'helpdesk ogni volta che succede.
  4. Una volta circa due settimane circa, l'app si arresta in modo anomalo e l'utente deve immettere nuovamente 2 minuti di dati.
  5. Una volta al mese, l'app si blocca all'avvio. L'utente deve terminare il processo e ricominciare.

Il primo è ovviamente inaccettabile. # 2 - # 5 può o non può essere, a seconda della natura dell'attività. # 2 - # 5 devono essere valutati nel contesto di altri problemi che l'azienda sta affrontando.

Idealmente, # 2 - # 5 non accadrebbe mai, mai. Nella vita reale, con priorità in conflitto, le persone che firmano il tuo stipendio potrebbero volere che tu stia lavorando su altre cose invece di scrivere un codice perfetto che non ha mai, mai avuto un problema. Non rimarranno impressionati se il # 5 viene corretto a spese di non correggere un bug più grave in un altro programma.

    
risposta data 08.10.2013 - 20:50
fonte
5

La soluzione è creare una raccolta di librerie con funzioni di uso comune che è possibile riutilizzare in tutti i progetti. Per esempio. Ho una libreria .NET StringFunctions.dll che fa cose come codifica, crittografia, decrittografia, valutazione di espressioni regolari, ecc. In questo modo, non devo riscrivere continuamente cose che non cambiano.

Avere un wrapper per le attività di creazione di file ha anche molto senso. La tua libreria potrebbe esporre un metodo chiamato GetFile () che esegue tutti i controlli e restituisce null o un file (o qualsiasi cosa tu ritenga utile).

    
risposta data 08.10.2013 - 18:19
fonte
4

Penso che tu abbia bisogno di imparare a decidere quanto deve essere fatto per quale progetto. Alcuni progetti potrebbero essere banali e non è necessario spendere tutto quel tempo per perfezionarlo. Non tutto avrà bisogno di una crittografia solida e solida, e tutto sarà ridimensionato a milioni di utenti.

Scrivendo un programma che può scalare bene per più di un milione di utenti ci vorrà del tempo e dell'esperienza che hai ora, ma se sai che la tua applicazione non verrà utilizzata da più di 1000 utenti al massimo, non ha senso nel passare tutto quel tempo a perfezionarlo.

Penso che questa sia una fase importante della tua carriera di programmazione e ora devi andare al livello successivo, che ha a che fare con la maturità e non con la programmazione. Devi essere in grado di decidere correttamente quanto tempo e codice dovrebbero essere sufficienti per ogni particolare progetto.

E come ogni altra cosa, puoi anche ottenere questo risultato con la pratica. Quindi prova a decidere questo prima di iniziare un progetto, a volte anche mentre ci stai già lavorando, con l'esperienza supererai anche quella. Potrebbero esserci alcuni colpi all'inizio, ma con il tempo lo perfezionerai (processo decisionale, non codice).

    
risposta data 08.10.2013 - 09:09
fonte
3

@Zilk, non sono un grande programmatore e sto programmando dal 1998. Anche io sto affrontando questo problema ora. Ma quello che ho capito è in definitiva la qualità conta. Se muoio oggi, qualcuno dovrebbe essere in grado di riprendere quello che sto facendo ora da dove sono partito. Tali dovrebbero essere gli standard di programmazione (Universal).

Mi sono trasferito da sviluppatore ad architetto ora. Passare a Gestione sta cambiando la linea. Se vuoi continuare con la tua passione, puoi passare a diventare Architetto.

Inizialmente come architetto tecnico - > Solution Architect - > Enterprise Architect - > Chief Architect e così via.

Come architetto guiderai le persone al successo. Persone come te che hanno programmato per decenni quegli anni di esperienza che puoi utilizzare per guidare gli altri.

Come un uccello più in alto vola più terra che può vedere così è la tua esperienza.

Consentitemi anche di dire che programmare l'implementazione corretta è importante piuttosto che programmare un'implementazione sbagliata più velocemente. Recentemente uno dei miei junior ha programmato qualcosa di sbagliato e costa una banca un sacco di soldi. Ovviamente avevamo consegnato in tempo prima, ma era inutile! Mi è stato dato il ruolo di guida anche se lo stesso junior avrebbe codificato che il problema non sarebbe successo. Sto dando questo esempio per sottolineare che anche dare una buona guida è importante. Alcuni chiamano questo lavoro come consulente.

    
risposta data 08.10.2013 - 08:49
fonte
3

Un'altra opzione è: smetti di scrivere il codice, invece vendi la tua esperienza per individuare i problemi in anticipo.

In altre parole, diventa un consulente .

Molte organizzazioni sono felici di pagare costosi dollari (se non top-dollar) perché qualcuno possa individuare i problemi prima che impiegano mesi a creare il codice che crea i problemi. È ben noto che la correzione di un bug nel design è di ordine di grandezza più economico / più facile che ripararlo dopo che è stato codificato, testato e implementato.

Non scriverai tanto codice, e probabilmente potresti non vederlo, ma sembra che le linee effettive di codice non siano la tua forza principale, ma conoscendo quali linee di codice dovrebbe essere scritto - e quale non dovrebbe

Concentrati sui tuoi punti di forza.
(beh, se è quello che ti piace ...)

    
risposta data 15.10.2013 - 13:17
fonte
2

La mia migliore raccomandazione per te è: blocchi.

Crea un blocco di file che puoi sempre fidarti, creane uno per la tua API, smetti di sprecare tempo scrivendo sempre la stessa cosa. Pensa a ogni problema una sola volta e risolvilo una volta per tutte.

Nessuno lo raggiungerà, certamente non il novizio che spende l'80% del proprio tempo per il debug del codice che fallisce per casi in corner che non capiscono.

Soprattutto, non correggere i problemi che non possono verificarsi, ad esempio autorizzazioni errate.

Se i permessi sono sbagliati, qualcosa è già sbagliato e dovresti correggerlo piuttosto che rendere il tuo programma a prova di proiettile.

Ad un certo punto non devi semplicemente spararti ai piedi invece di controllare sempre se lo hai fatto o meno.

Invece di dedicare tempo alla documentazione, dedica del tempo a rendere il tuo codice autodocumentato e il più breve possibile. Sostituisci tutte quelle funzioni duplicate. Riduci la tua biblioteca, rinomina le cose con precisione.

    
risposta data 11.10.2013 - 08:54
fonte
1

Non essere troppo duro con te stesso. Stai lavorando in una professione di crescente complessità, che richiede più intelligenza umana, conoscenza ed esperienza che mai.

La potenza di elaborazione del computer sta rallentando - forse presto stallo - portando alla necessità di introdurre chip multi-core, numerazione basata su GPU, parallelismo, ecc. Ci sono solo tanti transistor che possono essere posizionati su un chip.

Quindi i grandi progressi attuali e futuri arriveranno dai programmatori - algoritmi avanzati e codice più efficiente.

Se guardi GTA 4 e GTA 5 le differenze sono sbalorditive. Ma entrambi funzionano sullo stesso hardware. Questo è il risultato di alcune pratiche di programmazione molto intelligenti e avanzate che semplicemente non erano richieste, o disponibili, 10 anni fa.

Potrebbe anche significare che i programmatori esperti potrebbero diventare più preziosi in futuro, proprio come le altre professioni come l'ingegneria, in cui i guadagni massimi si verificano in genere in ritardo nella carriera.

    
risposta data 10.10.2013 - 10:09
fonte
1

Proprio come te, ho iniziato a programmare all'età di 14 anni, anche quando ho ottenuto il mio primo computer (sebbene stavo studiando da alcuni mesi a quel punto). Tuttavia, ora sono "solo" 33. : -)

Il mio suggerimento è che, quando sviluppi qualcosa, prendi ognuna di queste preoccupazioni (permessi file, numero di file in una directory, ecc.) e poi usa tutta la tua vasta esperienza per rispondere ad alcune domande a riguardo, in questo spirito:

  • Quanto tempo ci vorrà per gestire correttamente tale problema nel tuo codice?
  • Se non lo gestisci correttamente, quanto è probabile che questa cosa ti morda più tardi?
  • Se ti morde, quali sono le conseguenze?

Armati di quelle risposte, un ragazzo così esperto non avrà problemi a prendere una decisione saggia. ; -)

È responsabilità dei "veterani" come te inventare questo tipo di requisito, e ciò implica sia identificare che cosa può andare storto e decidere quali potenziali problemi si dovrebbero prestare attenzione.

    
risposta data 03.04.2014 - 13:50
fonte
0

Conoscere tutti i possibili criteri durante lo sviluppo dell'app è la cosa più importante nello sviluppo di un prodotto di qualità. Stai facendo bene in questo. Una cosa che puoi fare è, puoi classificare il requisito in livello di qualità quindi mappare il livello con la scadenza indicata. In questo modo, puoi soddisfare la scadenza del progetto con facilità.

    
risposta data 08.10.2013 - 12:37
fonte
0

Nelle parole di Edsger Dijsktra: "Se il debugging è il processo di rimozione dei bug del software, allora la programmazione deve essere il processo per inserirli." Stai facendo meno di quest'ultimo, quindi devi fare meno del precedente . È solo una questione di imparare a passare il tempo a codificarlo correttamente. Sono ancora un programmatore relativamente giovane (leggi 20ish) e aspiro ad essere in grado di codificare qualcosa completamente giusto una volta. Un'ora di pianificazione e 10 minuti di codifica sono decisamente migliori di 10 minuti di pianificazione, un'ora di codifica e tre di debug.

    
risposta data 09.10.2013 - 14:55
fonte

Leggi altre domande sui tag