Tecniche di programmazione generale per accelerare i tempi di codifica

19

Mi sto preparando per un concorso di programmazione in cui dobbiamo codificare in C ++ e si tratta di produrre codice di lavoro in breve tempo. Un esempio potrebbe essere l'utilizzo di una macro per ottenere il minimo di due int inte o l'utilizzo di memsets per inizializzare gli array (ma mi è stato detto che non si dovrebbe usare qui ).

Questo porta alla domanda, che tipo di tecniche di codifica esistono per un vero lavoro?

    
posta marktani 21.06.2012 - 23:04
fonte

9 risposte

51

Il modo di produrre codice funzionante veloce è ... rallentare. Fai piccoli passi. Assicurati di sapere a cosa serve ciascun passaggio. Assicurati che dopo ogni passaggio il tuo codice venga compilato e eseguito.

Meglio di tutti, usa lo sviluppo basato sui test. Scrivi un test non funzionante. Scrivi il codice sufficiente per far passare il test. Refactor per rendere il codice pulito, assicurandosi che passi ancora tutti i test. Ripetere.

Se non lo fai, allora è molto facile scrivere una grande pila di codice, che non funziona. Poi ti ci vorrà un molto tempo per capire perché non funziona.

    
risposta data 22.06.2012 - 00:10
fonte
29

Esamina intensamente le librerie standard, in particolare gli algoritmi STL. Questo ti farà risparmiare molte righe di codice e molto tempo. La chiave per vincere concorsi di programmazione è nella programmazione al livello più alto possibile. In C ++, senza librerie esterne, questo significa chiamate STL anziché loop.

    
risposta data 21.06.2012 - 23:41
fonte
21

Partecipo regolarmente alle competizioni ACM, speriamo che alcuni di questi suggerimenti ti possano aiutare:

  • Come altri hanno detto, familiarizza con la lingua , in C ++ in particolare con l'STL, ha entrambe le funzioni comuni che vorresti usare (binary_search, min, max) e robusto strutture dati per risparmiare tempo (stack per evitare la ricorsione diretta, coda per BFS, anche priority_queue per Dijkstra se ti piace in quel modo).

  • Identifica la categoria del problema, se è matematica, programmazione dinamica, teoria dei grafi, ecc. Chiediti: quanto sei abile con quel tipo di problema? Dopo aver fatto ciò, dovresti prendere decisioni in merito all'ordine in cui risolverli , che va di pari passo con il punto successivo ...

  • Vuoi capire il problema completamente prima di digitare, risolvi il problema giusto , nelle mie prime competizioni ho pensato che se non stavo scrivendo stavo sprecando il mio tempo; In seguito ho scoperto che si trattava di un errore.

  • Non pensare che i commenti siano una perdita di tempo, almeno in un codice "intelligente", non si vuole eseguire il debug line-by-line per vedere cosa è andato storto (è un vero spreco di ora), chiarezza del valore .

  • abbi divertimento .

risposta data 22.06.2012 - 05:30
fonte
12

Beh, mi sembra che tu conosca solo C e non C ++. Queste domande sono facilmente risolvibili da qualcuno con una conoscenza di base della lingua.

An example would be to use a macro to get the minimum of two ints

Basta usare una funzione? std::min esiste già.

or using memsets to initialize arrays

std::array<T, N> inizializza già il suo contenuto.

what kind of coding techniques exist to use at a real job?

Il primo passo è conoscere la lingua che stai utilizzando.

    
risposta data 22.06.2012 - 00:23
fonte
10

Oltre a conoscere la lingua, conosci i tuoi strumenti, in particolare il tuo editor. Ho iniziato a programmare per oltre 15 anni professionalmente, e ho visto il rallentamento di altri grandi programmatori perché i soli comandi dell'editor che usano sono i tasti cursore e crtl-x / c / v ..

Il tuo editor supporta un singolo tasto per cancellare una riga? Per ri-indentare una linea? Spostarsi tra funzioni / metodi? blocco seleziona / incolla? segnalibri? Passa parola? L'editor può generare automaticamente classi / metodi / funzioni? Dispone di modelli che è possibile creare in anticipo? Refactoring rapido? Registrazione macro?

Conoscere il tuo editor può velocizzare notevolmente i tempi di sviluppo.

    
risposta data 08.09.2012 - 19:33
fonte
6

Pensa prima di agire. È meglio pensare e pianificare prima di scrivere un'implementazione di classe che dopo tre fallimenti. Inoltre, pensa mentre agisci: fare le cose a piccoli passi semplifica enormemente il processo di sviluppo.

Scrivi solo il codice che ti serve al momento. Ovvero, non iniziare a scrivere codice con mentalità del tipo: " avrò bisogno di queste funzioni più avanti, quindi potrei solo anche scrivere i loro prototipi mentre ci sono io ". Le cose cambiano, i piani cambiano. Finirai con un codice che potrebbe non essere nemmeno utilizzabile. È una perdita di tempo.

Scopri cosa stai facendo. Non c'è niente di peggio che cercare di ricordare come funzionano le funzionalità e le funzionalità di base della lingua e / o della libreria. Prendi confidenza con lo / gli strumento / i che usi.

    
risposta data 22.06.2012 - 02:40
fonte
4

Ci sono già state molte risposte, tuttavia vorrei aggiungere la mia opinione.

Per velocizzare la codifica, Diventa un utente di tocco a una velocità tale che durante la digitazione puoi concentrarti sia sulla logica che sul codice. Ci sono molti software per imparare a digitare (Typing Master, Rapid Typing, KTouch, gTypist per esempio), usarli

Ho visto molti programmatori esperti che sono ancora dattilografi a due dita. Questo porta a codice sgradevole senza documentazione e codice veramente criptico con macro e nomi di tipi abbreviati.

    
risposta data 22.06.2012 - 18:54
fonte
2

Lo sviluppo del software è una di quelle classiche attività 80-20 - vale a dire dove il primo 80% del lavoro prende il 20% delle volte e l'ultimo 20% del lavoro prende l'80% delle volte.

La chiave per accelerare il tuo lavoro in generale è, quindi, lavorare per migliorare le tue prestazioni per quel 20% di sforzo. Di solito sono le fasi di debug e il lavoro per legare tutto e renderlo utilizzabile.

Puoi migliorarlo prendendo più cura nelle fasi iniziali. Pianificare e progettare il lavoro all'inizio di un progetto può sembrare una perdita di tempo quando si è tentati di immergersi nella programmazione hardcore, ma possono risparmiare un sacco di tempo in seguito.

Le persone parleranno di metodologie specifiche come TDD o BDD. Questi sono grandiosi, ma se non li stai facendo ora ti prenderanno un po 'di tempo per adattarti, quindi probabilmente non sono qualcosa con cui vuoi iniziare un concorso di programmazione. Ma fermarsi a pianificare quello che stai facendo prima di tuffarti e farlo raccoglierà ricompense non importa quale. E sono comunque i primi passi verso TDD e BDD. Qui è dove vuoi iniziare.

    
risposta data 10.09.2012 - 10:15
fonte
-2

Se è per una vera competizione di programmazione, non usare C ++. Utilizzare un linguaggio di script RAD veloce, interattivo. Questo è qualcosa a cui VB6 domina assolutamente. Vai pre-armato con le librerie che scrivi prima. Separazione di stringhe, inversione dell'array, ricerca, ordinamento, grafica scortecciata, controllo della console.

Se è per lavoro, fai esattamente il contrario. Scopri cosa c'è, usa un linguaggio solido (C ++ va bene), commenta tutto e così via. I due tipi di ambienti non potrebbero essere più distanti.

    
risposta data 21.06.2012 - 23:46
fonte

Leggi altre domande sui tag