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?
Réponses:
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.
la source
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.
la source
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 .
la source
:)
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.
Utilisez simplement une fonction?
std::min
existe déjà.std::array<T, N>
initialise déjà son contenu.La première étape consiste à connaître la langue que vous utilisez.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source