Techniques de programmation générales pour accélérer le temps de codage

20

Je me prépare pour un concours de programmation où nous devons coder en C ++ et il s'agit de produire du code de travail en peu de temps. Un exemple serait d'utiliser une macro pour obtenir le minimum de deux entiers ou d'utiliser des ensembles de mems pour initialiser des tableaux (mais on m'a dit que vous ne devriez pas utiliser non plus ici ).

Cela conduit à la question: quel type de techniques de codage existe-t-il pour utiliser dans un travail réel?

marktani
la source
26
Je suppose que les techniques que vous utilisez dans un concours de codage peuvent n'avoir rien à voir avec les techniques que vous utiliseriez dans un vrai travail.
Doug T.21
1
Je ne demandais pas de techniques dans un vrai travail, je demandais des techniques dans un concours de codage.
marktani
1
@DougT. Je suis d'accord, les astuces pour un concours de codage ne sont pas sur le sujet, mais je pense aussi que vous pourriez vous développer pour parler de productivité dans un environnement de travail et comment réduire au mieux le temps passé sur le code de singe
James
1
Pourquoi ne devriez-vous pas utiliser des memsets pour initialiser des tableaux dynamiques?
James
3
N'utilisez pas c ++. Utilisez la langue la plus élevée possible.
Kevin

Réponses:

52

La façon de produire du code de travail rapidement est de ... ralentir. Faites de très petits pas. Assurez-vous de savoir à quoi sert chaque étape. Assurez-vous qu'après chaque étape, votre code se compile et s'exécute.

Mieux encore, utilisez le développement piloté par les tests. Écrivez un test qui échoue. Écrivez juste assez de code pour réussir le test. Refactorisez pour rendre le code propre, en vous assurant qu'il passe toujours tous les tests. Répéter.

Si vous ne le faites pas, il est très facile d'écrire une grosse pile de code, ce qui ne fonctionne pas. Ensuite, il vous faudra beaucoup de temps pour comprendre pourquoi cela ne fonctionne pas.

Dima
la source
21
Es-tu sérieux? TDD pour le concours de programmation?
Codism
1
@Codism: les questions ont été élargies pour inclure les techniques applicables au développement logiciel normal.
Dima
2
TDD aide certainement à améliorer mon code, mais cela ne m'a jamais aidé à écrire le code plus rapidement. Un environnement de programmation interactif (par exemple la console Groovy, Lisp REPL, etc.) a été le plus grand gain de temps de mon expérience.
erturne
3
-1 pour TDD. Cela a du sens si le projet est à long terme, pas un court hackathon.
TheLQ
1
@TheLQ Ce n'est pas parce que vous préférez passer tout votre temps à utiliser un débogueur que TDD est une mauvaise suggestion.
byxor
29

Examinez attentivement les bibliothèques standard, en particulier les algorithmes STL. Cela vous fera économiser de nombreuses lignes de code et beaucoup de temps. La clé pour gagner des concours de programmation réside dans la programmation au plus haut niveau possible. En C ++, sans bibliothèques externes, cela signifie des appels STL au lieu de boucles.

Kevin Cline
la source
+1 - Je suis totalement d'accord avec cela. Savoir écrire rapidement du code en STL est énorme dans ce genre de compétitions.
Jordan Parmer
23

Je participe régulièrement à des compétitions ACM, j'espère que certains de ces conseils vous aideront:

  • Comme d'autres l'ont dit, familiarisez-vous avec le langage , en C ++ en particulier la STL, il a à la fois des fonctions communes que vous souhaitez utiliser (binary_search, min, max) et des structures de données robustes pour vous faire gagner du temps (pile pour éviter la récursivité directe) , file d'attente pour BFS, même priorité_queue pour Dijkstra si vous l'aimez de cette façon).

  • Identifiez la catégorie du problème, s'il s'agit de mathématiques, de programmation dynamique, de théorie des graphes, etc. Demandez-vous: dans quelle mesure connaissez-vous ce type de problème? Après cela, vous devez prendre des décisions concernant l'ordre dans lequel vous allez les résoudre , ce qui va de pair avec le point suivant ...

  • Vous voulez comprendre complètement le problème avant de taper, résoudre le bon problème , dans mes premiers concours, je pensais que si je ne tapais pas, je perdais mon temps; J'ai découvert plus tard que c'était une erreur.

  • Ne pensez pas que les commentaires sont une perte de temps, au moins dans un code "intelligent", vous ne voulez pas déboguer ligne par ligne pour voir ce qui a mal tourné (c'est une vraie perte de temps), la clarté de la valeur .

  • Amusez- vous .

lccarrasco
la source
6
+1 pour bien comprendre le problème avant de taper. Sinon, vous perdez le temps de l'équipe (la compétition ACM est composée de 3 personnes et un ordinateur)
Codism
Bonne réponse. :)
Jared Farrish
13

Eh bien, il me semble que vous ne connaissez que le C et pas le C ++ du tout. Ces questions sont facilement répondues par une personne ayant une connaissance pratique de base de la langue.

Un exemple serait d'utiliser une macro pour obtenir le minimum de deux pouces

Utilisez simplement une fonction? std::minexiste déjà.

ou en utilisant des memsets pour initialiser des tableaux

std::array<T, N> initialise déjà son contenu.

quel type de techniques de codage existe-t-il à utiliser dans un travail réel?

La première étape consiste à connaître la langue que vous utilisez.

DeadMG
la source
J'essaie de connaître la langue que j'utilise, c'est pourquoi j'ai posé cette question! Merci pour la contribution à ce sujet .
marktani
7
Oh. Je dois donc avoir mal compris votre question. Je recommanderais un livre . Nous ne présentons que les livres qui valent la peine d'être lus, au lieu de ceux qui enseignent les ordures C.
DeadMG
10

En plus de connaître la langue, connaissez vos outils, notamment votre éditeur. J'ai codé pendant plus de 15 ans professionnellement, et j'ai vu sinon de grands programmeurs ralentis parce que les seules commandes de l'éditeur qu'ils utilisent sont les touches de curseur et crtl-x / c / v ..

Votre éditeur prend-il en charge une seule touche pour supprimer une ligne? Pour ré-indenter une ligne? Se déplacer entre les fonctions / méthodes? bloquer sélectionner / coller? signets? Se déplacer par mot? L'éditeur peut-il générer automatiquement des classes / méthodes / fonctions? Prend-il en charge les modèles que vous pouvez créer à l'avance? Refactoring rapide? Enregistrement macro?

Connaître votre éditeur peut accélérer considérablement le temps de développement.

Garion911
la source
1
Amen. Je travaille juste avec un nouveau mec qui est très rapide ... et utilise vim. Cela fonctionne pour lui car il a pris le temps d'apprendre à l'utiliser.
gbjbaanb
Aussi ... si votre éditeur ne prend pas en charge presque toutes les fonctionnalités répertoriées ici - trouvez un meilleur éditeur.
Abhi Beckert
interview dans google docs ... pire expérience pour cette raison.
UmNyobe
6

Pense avant d'agir. Il vaut mieux réfléchir et planifier avant d'écrire une implémentation de classe qu'après trois échecs. Pensez également pendant que vous agissez - faire les choses par petites étapes simplifie considérablement le processus de développement.

Écrivez uniquement le code dont vous avez besoin pour le moment. Autrement dit, ne commencez pas à écrire du code avec une mentalité comme: " J'aurai besoin de ces fonctions plus tard, donc je pourrais aussi bien écrire leurs prototypes pendant que j'y suis ". Les choses changent, les plans changent. Vous vous retrouverez avec du code qui pourrait ne même pas être utilisable. C'est une perte de temps.

Sachez ce que vous faites. Il n'y a rien de pire que d'essayer de se rappeler comment les fonctionnalités et fonctionnalités de base du langage et / ou de la bibliothèque fonctionnent. Familiarisez-vous avec les outils que vous utilisez.

zxcdw
la source
+1 pour YAGNI .
Brendan Long
4

Il y a déjà eu beaucoup de réponses, je voudrais quand même ajouter mon opinion.

Pour accélérer votre codage, devenez un dactylographe tactile à une vitesse telle que pendant la frappe, vous pouvez vous concentrer à la fois sur la logique et le code. Il existe de nombreux logiciels pour apprendre à taper (Typing Master, Rapid Typing, KTouch, gTypist par exemple), utilisez-les

J'ai vu de nombreux programmeurs expérimentés qui sont toujours des dactylographes à deux doigts. Cela conduit à un code désagréable sans documentation et à un code vraiment cryptique avec des macros et des noms de type abrégés.

Sarvex
la source
Downvoted with a index index :)
mlvljr
Très bonne réponse. J'ajouterai que les gens qui regardent le clavier au lieu de l'écran tapent souvent des ordures avant de s'en rendre compte et doivent revenir en arrière. Ou ils taperont dans la mauvaise fenêtre. Et le plus triste, c'est qu'ils ne réalisent pas à quel point cela les ralentit.
Dave Markle
2

Le développement de logiciels est l'une de ces activités classiques 80-20 - c'est-à-dire où les premiers 80% du travail prennent 20% du temps et les derniers 20% du travail prennent 80% du temps.

La clé pour accélérer votre travail en général est donc de travailler à l'amélioration de vos performances pour celles qui durent 20% de l'effort. Il s'agit généralement des étapes de débogage et du travail pour tout lier ensemble et le rendre utilisable.

Vous pouvez améliorer cela en faisant plus attention aux premiers stades. La planification et le travail de conception au début d'un projet peuvent sembler une perte de temps lorsque vous êtes tenté de vous plonger dans la programmation hardcore, mais ils peuvent vous faire gagner beaucoup de temps plus tard.

Les gens parleront de méthodologies spécifiques comme TDD ou BDD. Celles-ci sont excellentes, mais si vous ne les faites pas maintenant, cela vous prendra un peu de temps pour vous adapter, donc ce n'est probablement pas quelque chose que vous voulez commencer avec un concours de programmation. Mais arrêter de planifier ce que vous faites avant de plonger et de le faire rapportera des récompenses quoi qu'il arrive. Et ce sont de toute façon les premiers pas vers le TDD et le BDD. C'est là que vous voulez commencer.

SDC
la source
-2

Si c'est pour une compétition de programmation réelle, n'utilisez pas C ++. Utilisez un langage de script RAD rapide et interactif. C'est quelque chose que VB6 domine absolument. Allez pré-armé avec les bibliothèques que vous avez pré-écrites. Fractionnement de chaîne, inversion de tableau, recherche, tri, graphiques rudementaires, contrôle de console.

Si c'est pour le travail, faites exactement le contraire. Apprenez ce qu'il y a, utilisez un langage solide (C ++ est bien), commentez tout, etc. Les deux types d'environnements ne pouvaient pas être plus éloignés l'un de l'autre.

Bryan Boettcher
la source
3
Je ne faisais pas partie des downvoters, mais je suppose qu'ils vous ont probablement attribué la cause parce que la question concernait la programmation plus rapide en C ++ .
Gordon Gustafson
9
VB6? Sérieusement? Êtes-vous du passé?
Konamiman
2
@ Konamiman: heh, oui je le suis. Je ne pouvais pas dire s'il voulait dire "Je me prépare, en C ++, pour un concours de programmation" ou "Je me prépare pour un concours de programmation C ++". Eh bien, les jetons se trouvent là où ils peuvent. Pourtant, rien ne vaut un environnement RAD très rapide pour les compétitions de programmation, où chaque seconde compte littéralement.
Bryan Boettcher
J'ai édité la question pour clarification.
marktani
Sur RAD: Delphi 6 sera alors le meilleur choix possible.
mlvljr