Tecniche generali di programmazione per accelerare i tempi di programmazione


20

Mi sto preparando per un concorso di programmazione in cui dobbiamo programmare in C ++ ed è tutto sulla produzione di codice funzionante in breve tempo. Un esempio potrebbe essere l'uso di una macro per ottenere il minimo di due ints o l'utilizzo di memset per inizializzare le matrici (ma mi è stato detto che non dovresti usare neanche qui ).

Questo porta alla domanda: che tipo di tecniche di codifica esistono da usare in un vero lavoro?


26
Immagino che le tecniche che usi in una competizione di codifica potrebbero non avere nulla a che fare con le tecniche che useresti in un vero lavoro.
Doug T.,

1
Non stavo chiedendo tecniche in un vero lavoro, stavo chiedendo tecniche in una competizione di programmazione.
marktani,

1
@DougT. Sono d'accordo, i trucchi per una competizione di programmazione non sono in tema, ma penso anche che potresti ampliare per parlare di produttività in un ambiente di lavoro e come ridurre al meglio il tempo speso per il codice delle scimmie
James,

1
Perché non dovresti usare memset per inizializzare le matrici dinamiche?
James,

3
Non usare c ++. Usa la lingua di livello più alto che puoi.
Kevin,

Risposte:


52

Il modo per produrre velocemente il codice di lavoro è ... rallentare. Fai piccoli passi. Assicurati di sapere a cosa serve ogni passaggio. Assicurarsi che dopo ogni passaggio il codice venga compilato ed eseguito.

Soprattutto, utilizzare lo sviluppo guidato dai test. Scrivi un test fallito. Scrivi il codice sufficiente per superare il test. Rifattore per rendere pulito il codice, assicurandosi che superi tutti i test. Ripetere.

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


21
Sei serio? TDD per il concorso di programmazione?
Codismo,

1
@Codismo: le domande sono state ampliate per includere tecniche applicabili al normale sviluppo di software.
Dima,

2
TDD sicuramente aiuta a migliorare il mio codice, ma non mi ha mai aiutato a scrivere il codice più velocemente. Un ambiente di programmazione interattiva (ad esempio console Groovy, REPL di Lisp, ecc.) È stato il più grande risparmio di tempo nella mia esperienza.
erturne,

3
-1 per TDD. Ciò ha senso se il progetto è a lungo termine, non un breve hackathon.
TheLQ

1
@TheLQ Solo perché preferiresti passare tutto il tuo tempo a utilizzare un debugger non significa che TDD sia un cattivo suggerimento.
byxor,

29

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


+1 - Sono totalmente d'accordo con questo. Saper scrivere rapidamente il codice in STL è enorme in questo tipo di competizioni.
Jordan Parmer,

23

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

  • Come altri hanno detto, familiarizza con il linguaggio , in C ++ in particolare con STL, ha entrambe le funzioni comuni che vorresti usare (binary_search, min, max) e solide strutture di dati per farti risparmiare tempo (stack per evitare la ricorsione diretta , fai la coda per BFS, anche la priorità_queue per Dijkstra se ti piace così).

  • Identifica la categoria del problema, se è matematica, programmazione dinamica, teoria dei grafi, ecc. Chiediti: quanto conosci questo tipo di problema? Dopo averlo fatto, dovresti prendere delle decisioni sull'ordine in cui le risolverai , che andranno di pari passo con il punto successivo ...

  • Vuoi capire il problema completamente prima di scrivere, risolvere il problema giusto , nelle mie prime competizioni ho pensato che se non stavo scrivendo avrei perso tempo; In seguito ho scoperto che si trattava di un errore.

  • Non pensare che i commenti siano una perdita di tempo, almeno nel codice "intelligente", non vuoi fare il debug riga per riga per vedere cosa è andato storto (che è una vera perdita di tempo), valore di chiarezza .

  • Buon divertimento .


6
+1 per comprendere completamente il problema prima di digitare. Altrimenti, stai sprecando il tempo della squadra (la competizione ACM è un computer per 3 persone)
Codism

Bella risposta. :)
Jared Farrish,

13

Bene, mi sembra che tu conosca solo C e non C ++. Queste domande possono essere facilmente risolte da qualcuno con una conoscenza base della lingua.

Un esempio potrebbe essere quello di utilizzare una macro per ottenere il minimo di due ints

Basta usare una funzione? std::minesiste già.

o usando memset per inizializzare le matrici

std::array<T, N> inizializza già i suoi contenuti.

che tipo di tecniche di codifica esistono da usare in un vero lavoro?

Il primo passo è conoscere la lingua che stai utilizzando.


Sto cercando di conoscere la lingua che sto usando, ecco perché ho posto questa domanda! Grazie per l'ingresso su questo .
marktani,

7
Oh. Allora devo aver frainteso la tua domanda. Consiglierei un libro . Presentiamo gentilmente solo i libri che vale la pena leggere, invece di quelli che insegnano C spazzatura.
DeadMG

10

Oltre a conoscere la lingua, conosci i tuoi strumenti, in particolare il tuo editor. Ho programmato per oltre 15 anni in modo professionale e ho visto rallentare i programmatori altrimenti perché gli unici comandi dell'editor che usano sono i tasti cursore e crtl-x / c / v ..

Il tuo editor supporta un solo tasto per cancellare una riga? Ri-rientrare una riga? Spostarsi tra funzioni / metodi? bloccare selezionare / incollare? segnalibri? Muoviti per parola? L'editor può generare automaticamente classi / metodi / funzioni? Supporta modelli che è possibile creare in anticipo? Refactoring rapido? Registrazione macro?

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


1
amen. Sto solo lavorando con un nuovo ragazzo che è molto veloce ... e usa Vim. Funziona per lui perché ha avuto il tempo di imparare come usarlo.
gbjbaanb,

Inoltre ... se il tuo editor non supporta quasi tutte le funzionalità elencate qui, trova un editor migliore.
Abhi Beckert,

intervista in Google Docs ... la peggiore esperienza per questo motivo.
UmNyobe,

6

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

Scrivi solo il codice che ti serve al momento. Cioè, non iniziare a scrivere codice con mentalità del tipo: " Avrò bisogno di queste funzioni in seguito, quindi potrei anche scrivere i loro prototipi mentre ci sono ". Le cose cambiano, i piani cambiano. Ti ritroverai con un codice che potrebbe non essere nemmeno utilizzabile. È una perdita di tempo.

Sai cosa stai facendo. Non c'è niente di peggio che cercare di ricordare come funzionano le funzionalità e le caratteristiche di base del linguaggio e / o della libreria. Acquisisci familiarità con gli strumenti che usi.


+1 per YAGNI .
Brendan Long,

4

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

Per accelerare la codifica, diventa un dattilografo touch a una velocità tale che durante la digitazione sei in grado di concentrarti sia sulla logica che sul codice. Esistono molti software per imparare a scrivere (Typing Master, Rapid Typing, KTouch, gTypist per esempio), usali

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


Downvoted con un dito indice :)
mlvljr

Bella risposta. Aggiungerò che le persone che guardano la tastiera invece dello schermo spesso scrivono immondizia prima che se ne rendano conto e debbano tornare indietro. O digiteranno nella finestra sbagliata. E la cosa triste è che non si rendono conto di quanto ciò li rallenta.
Dave Markle,

2

Lo sviluppo del software è una di quelle classiche attività 80-20, ovvero dove il primo 80% del lavoro impiega il 20% del tempo e l'ultimo 20% del lavoro impiega l'80% del tempo.

La chiave per accelerare il tuo lavoro in generale è, quindi, lavorare per migliorare le tue prestazioni per quell'ultimo 20% dello sforzo. In genere si tratta delle fasi di debug e del lavoro per legare tutto insieme e renderlo utilizzabile.

Puoi migliorarlo prestando maggiore attenzione nelle fasi iniziali. La pianificazione e il lavoro di progettazione all'inizio di un progetto possono 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. Sono fantastici, ma se non li stai facendo ora ti ci vorrà un po 'di tempo per adattarti, quindi probabilmente non sono qualcosa con cui vuoi iniziare per un concorso di programmazione. Ma smettere di pianificare ciò che stai facendo prima di immergerti e farlo raccoglierà frutti indipendentemente da cosa. E sono comunque i primi passi verso TDD e BDD. Questo è dove vuoi iniziare.


-2

Se è per un vero concorso di programmazione, non usare C ++. Utilizza un linguaggio di scripting RAD veloce e interattivo. Questo è qualcosa in cui VB6 domina assolutamente. Vai pre-armato con le librerie che hai pre-scritto. Suddivisione delle stringhe, inversione dell'array, ricerca, ordinamento, grafica rudimentale, 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.


3
Non ero uno dei downvoter, ma presumo che probabilmente ti avrebbero preso perché la domanda riguardava la programmazione più veloce in C ++ .
Gordon Gustafson,

9
VB6? Sul serio? Vieni dal passato?
Konamiman,

2
@Konamiman: eh, sì, lo sono. Non saprei dire se intendesse "Mi sto preparando, in C ++, per un concorso di programmazione" o "Mi sto preparando per un concorso di programmazione C ++". Oh bene, le patatine si trovano dove possono. Tuttavia, nulla batte un ambiente RAD molto veloce per le competizioni di programmazione, dove letteralmente ogni secondo conta.
Bryan Boettcher,

Ho modificato la domanda per chiarimenti.
marktani,

Su RAD: Delphi 6 sarà la scommessa migliore allora, possibilmente.
mlvljr,
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.