bien programmer ?

bien programmer ? - Divers - Programmation

Marsh Posté le 09-11-2002 à 22:47:49    

youp,
 
 
je voulais savoir comment bien programmer.
 
J'ai un peu apris la programmation à l'école, mais j'ai jamais fait de projets "sérieux".
 
 
Donc, si vous pouviez me dire ce qu'il faut faire pour par exemple :
 
-la gestion des erreurs
-optimiser (j'ai lu je sais plus dans quel topic qu'il y avait des programmes qui faisaient ca (???))
-... (tout conseil sera le bienvenu :) )
 
 
 
merci


---------------
oui oui
Reply

Marsh Posté le 09-11-2002 à 22:47:49   

Reply

Marsh Posté le 09-11-2002 à 22:53:15    

->se trouver une convention d'ecriture de code et s'y tenir
->choisir un mecanisme de gestion d'erreur, et s'y tenir
->ne pas optimiser trop tot
 
 

Reply

Marsh Posté le 10-11-2002 à 06:54:02    

a propos d'optimisation:
pensez vousqu'il vaut mieux avoir une approche      globale
d'un projet puis affiner au fur et a mesure ou au contraire
plancher en detail partie par partiedes le debut?


---------------
http://www.core-tx.com
Reply

Marsh Posté le 10-11-2002 à 12:57:15    

L'optimisation, ca se fait a la fin!
Sinon, on ne s'en sort plus...
Je pense donc qu'il vaut mieux avoir une approche globale, pour répondre a ta question.


Message édité par Ace17 le 10-11-2002 à 12:57:44
Reply

Marsh Posté le 10-11-2002 à 13:54:37    

En C, éviter d'utiliser les types intégrés (int, char, long...). Il vaut mieux se créer ses propres types "logiques" (typedef). Par exemple on n'écrira pas "int id1;" mais "id_t id1". Le type doit indiquer ce qu'est la variable (un id), pas comment elle est stockée (dans un int). Ca permet aussi d'éviter d'accumuler les "*" devant les noms de variables : on écrira "client_t client1" plutôt que "struct client *client1".
 
Ne jamais utiliser dans le code de constantes numériques. Se faire plutôt un #define (enfin sauf pour 0 et 1, suivant le contexte : pour le compteur d'une boucle on peut évidemment écrire 0, mais si ce 0 a une signification précise, par exemple le nombre minimal de threads en attente dans un pool, là il faut un #define).
 
Faire des fonctions courtes. Si une fonction dépasse la centaine de lignes, c'est sans doute qu'il faut en créer une nouvelle. Evidemment ça dépend aussi de la complexité de la fonction : si tu a un très long switch avec à chaque fois des opérations élémentaires, personne ne t'en voudra si elle fait 800 lignes. Une indicateur simple de la complexité d'une fonction pourrait être le niveau maximum d'indentation. Si du code est indenté plus de mettons 4 fois, ça devient trop compliqué.
 
Eclater le code dans plusieurs fichiers. Les fichiers ne devraient jamais être très longs. Deux fonctions qui rendent des services tout à fait différents (coeur de l'algo et affichage par exemple) n'on rien à faire dans le même fichier.
 
Et mettre beaucoup de commentaires. En-tête au dessus de chaque fonction avec un petit commentaire sur ce qu'elle fait, les arguments qu'elle attend, ce qu'elle renvoie, les variables globales qu'elle utilise, les variables globales qu'elle modifie. Plus plein de commentaires dans le code, mais des commentaires utiles (pas de "/* i <- 2 */" ). Et aérer le code.  
 
Pour la présentation du code c'est suivant tes préférences, mais il y a quelques règles à respecter. Essayer de tenir dans 80 colonnes. Tabulation à 8 caractères (l'argument "mais après ça déborde" ne tient pas, cf. plus haut). Type de la valeur de retour d'une fonction sur une ligne à part (ça permet de coller le nom de la fonction à gauche, ce qui facilite les grep). Par exemple :

Code :
  1. int
  2. main(int argc, char *argv[])
  3. {
  4.         /* Some code */
  5. }


Message édité par matafan le 10-11-2002 à 14:11:34
Reply

Marsh Posté le 10-11-2002 à 14:00:40    

tabulation à 8 :ouch:  
moi j'en mets 3, et je mets des espaces au lieu des tabs
(habitude du Pascal, où on ne met même que deux caractères)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2002 à 14:06:21    

Ah et puisqu'on parle d'optimisatio plus haut, attention. L'optimisation du code c'est avant tout l'algo. Après c'est l'ordre des instructions pour éviter de casser le pipeline, et pour permettre la vectorisation.
 
Par contre toutes les "optimisations" du genre "je fait << 2 plutôt que * 4", c'est à éviter absolument. Ca rend le code moins lisible, et de toute façon le compilo génerera exatement le même code dans les deux cas (avec un décalage de bits). De même, dans une expression arithmétique, ne pas hésiter à laisser les calculs intermédiaires sur les constantes, si ils permettent de mieux comprendre le calcul : on ne gagne rien en écrivant "x * 192" plutôt que "x * (128 + 64)". Les calculs sur les constantes seront fait au moment de la compilation, le code généré sera le même.
 
Et un conseil : ne perd pas de temps à optimiser à fond toutes tes fonctions. Utilise un profiler pour voir où le temps est perdu, et concentre toi sur ces endroit : ne perd pas une journée à optimiser une fonction qui prend 1% du temps. Un profiler c'est fait pour ça, et on est parfois surpris du résultat.

Reply

Marsh Posté le 10-11-2002 à 14:10:01    

antp : si tu utilise des espaces pour indenter le code, tu peux mettre la largeur que tu veux, pas de problèmes (par contre moi je l'indiquerait en en-tête du fichier quand même). Mais si tu utilises les tabulations, alors elles doivent faire 8 caractères, point. L'usage veut qu'il en soit ainsi, et toute autre valeur donera un code mal aligné chez 90% des développeurs.

Reply

Marsh Posté le 10-11-2002 à 14:11:59    

antp a écrit a écrit :

tabulation à 8 :ouch:  
moi j'en mets 3, et je mets des espaces au lieu des tabs
(habitude du Pascal, où on ne met même que deux caractères)




 
heuh, ouais, 8 ca fait quand meme bpc [:ddr555]

Reply

Marsh Posté le 10-11-2002 à 14:12:15    

De toutes façon, chez moi, la touche tab donne : "insère moi (ou supprime) le bon nombre d'espaces pour avoir un code correctement indenté"


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 10-11-2002 à 14:12:15   

Reply

Marsh Posté le 10-11-2002 à 14:13:04    

Matafan a écrit a écrit :

antp : si tu utilise des espaces pour indenter le code, tu peux mettre la largeur que tu veux, pas de problèmes (par contre moi je l'indiquerait en en-tête du fichier quand même). Mais si tu utilises les tabulations, alors elles doivent faire 8 caractères, point. L'usage veut qu'il en soit ainsi, et toute autre valeur donera un code mal aligné chez 90% des développeurs.




 
dans l'absolu je preconise putot l'emploi d'espace que de tabs (question de formatage). D'ailleurs VC (et surement bpc d'autre) permettent de remplacer les tabs par des espaces. C pas mis par defaut, mais cocher le titi n'est pas une mauvaise idée :D

Reply

Marsh Posté le 10-11-2002 à 19:03:09    

Pourquoi les espaces a la place des tabulations? Je trouve les tabulations plus pratiques, moi! Qu'est-ce que j'ai loupé pour penser ca?

Reply

Marsh Posté le 10-11-2002 à 19:47:49    

Ace17 a écrit a écrit :

Pourquoi les espaces a la place des tabulations? Je trouve les tabulations plus pratiques, moi! Qu'est-ce que j'ai loupé pour penser ca?




Parce que les tabs, c'est paramétrable dans la plupart des éditeurs.


Message édité par verdoux le 10-11-2002 à 19:47:58
Reply

Marsh Posté le 10-11-2002 à 20:24:20    

Ace17 a écrit a écrit :

Pourquoi les espaces a la place des tabulations? Je trouve les tabulations plus pratiques, moi! Qu'est-ce que j'ai loupé pour penser ca?




 
ben le pb c le melange espace/tab qui survient assez souvent
 
si jamais toi tes tabs sont a 5 (exemple inside) et que tu passes chez un type chez qui c a 3, ca risque de devenir un gros foutoir (truc mal indenté tout partout)
 
avec les espaces, rien de cela

Reply

Marsh Posté le 10-11-2002 à 21:48:48    

moi je mets 2 espaces comme indentation  [:sinclaire]

Reply

Marsh Posté le 11-11-2002 à 02:03:33    

ok merci :)
 
 
 
c'est quoi un profiler exactement ? (je veux des noms aussi !!! :) (pour c++))
 
et aussi, que conseillez vous comme debugger ?
 
 
merci


Message édité par art_dupond le 11-11-2002 à 02:57:54
Reply

Marsh Posté le 11-11-2002 à 04:08:28    

Citation :

ok merci :)
c'est quoi un profiler exactement ? (je veux des noms aussi !!! :) (pour c++))


 
ca te fait tourner ton programme pendant un certain temps
puis ca te dit dans quelle fonction ton programme a passe
le plus de temps.
Certains profilers avances te donnent aussi des informations
plus precises comme le nombre de stall en attente de l'OS, d'une ressource partagee, d'un cache miss, du CPU (quand il s'agit d'un GPU) etc.. Tres utile en cours de developpement
pour voir qu'on va dans le mur et qu'il faut changer son fusil
d'epaule. Ou en fin de developpement pour gagner quelques cycles
sur une execution.
 
Il y en a un integre dans Visual C++ 6 et ulterieur.
Le plus utilise sur plateforme intel est VTune produit
par Intel lui meme.
 

Citation :

et aussi, que conseillez vous comme debugger ?


 
Utilise celui de ton environnement de developpement. S'il ne te convient pas ou si tu ne trouves pas de doc convenable dessus songe a changer d'environnement de developpement.
 
LeGreg

Reply

Marsh Posté le 11-11-2002 à 06:50:38    

art_dupond a écrit a écrit :

youp,
 
 
je voulais savoir comment bien programmer.
 
J'ai un peu apris la programmation à l'école, mais j'ai jamais fait de projets "sérieux".
 
 
Donc, si vous pouviez me dire ce qu'il faut faire pour par exemple :
 
-la gestion des erreurs
-optimiser (j'ai lu je sais plus dans quel topic qu'il y avait des programmes qui faisaient ca (???))
-... (tout conseil sera le bienvenu :) )
 
 
 
merci




 
lis des livres sur le génie logiciel, t'aura de très bonne base ainsi


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 14-11-2002 à 03:07:36    

Copier/coller de la rubrique bibliolinks C++ (anglais requis):
Teach Yourself Programming in Ten Years
The seven secrets of successful programmers
How To Write Unmaintainable Code
Optimization: Your Worst Enemy
 
Comment Poser Les Questions De Manière Intelligente
How to Report Bugs Effectively
I need help with my homework!
 
Interface Hall of Fame/Shame
 
Recommended C Style and Coding Standards.
C++ Coding Standard
The Ten Commandments for C Programmers (Annotated Edition)
 

Matafan a écrit a écrit :

Tabulation à 8 caractères


C'est énormément une question de préférence.
Il me semble que plus un programmeur a tapé de code, plus il a tendance à raccourcir.
 

Ace17 a écrit a écrit :

Pourquoi les espaces a la place des tabulations? Je trouve les tabulations plus pratiques, moi! Qu'est-ce que j'ai loupé pour penser ca?


Pareil...
Ça fait plusieurs fois que j'entends recommender les espaces au lieu de tabulations, et je n'y prétais pas trop attention tellement les tabulations coulent de source pour moi.
A un point tel que je n'envisageais même pas d'expliquer pourquoi.
Il semble qu'il va bien falloir pourtant...
 

verdoux a écrit a écrit :

Parce que les tabs, c'est paramétrable dans la plupart des éditeurs.


Justement, cela permet à celui qui visionne le code de paramétrer l'indentation qu'il préfères.
 

chrisbk a écrit a écrit :

dans l'absolu je preconise putot l'emploi d'espace que de tabs (question de formatage)
...
ben le pb c le melange espace/tab qui survient assez souvent



Je crois que voilà le coeur de problème: Il ne faut pas les confondre.
La tabulation sert uniquement pour l'indentation correspondant à l'imbrication logique du programme.
Les espaces servent uniquement pour les alignements manuels esthétiques.
 
L'alignement par espaces sert à grouper, mettre en évidence et rendre plus lisible les éléments similaires.
Il ne faut pas aligner des choses n'ayant pas la même imbrication, elle n'ont rien à faire ensemble.
 
Exemple:

Code :
  1. /*t*/ une tabulation
  2. $ un espace
  3. //Les noms de ces variables étant alignés, on en déduit qu'elles vont ensemble.
  4. double d; //la position du nom étant imposée...
  5. char $$c; //...aligner avec des espaces.
  6. //rupture d'alignement, ceci est un autre groupe
  7. int array1[]= {1, //la position du premier étant imposée...
  8. $$$$$$$$$$$$$$$2, //...aligner avec des espaces.
  9. $$$$$$$$$$$$$$$3};
  10. int array2[]= {
  11. /*t*/ 1, //imbriquer avec tabulation suite à l'accolade ouverte.
  12. /*t*/ 2,
  13. /*t*/ 3
  14. }; //accolade séparée pour marquer la fermeture de bloc.
  15. for( initpart ;
  16. $$$$$test ;
  17. $$$$$advance){
  18. }
  19. switch(s){
  20. /*t*/ case $$$1: schtroumpfer( 8, $4, 27); break; //Epaces pour aligner et mettre en évidence...
  21. /*t*/ case 1000: smurfer$$$$$(18, 14, $1); break; //...les éléments similaires.
  22. }


Ainsi mis en forme, du code survit à un changement de taille de tabulation.
Et je rajoute que d'indenter avec des tabulations à l'avantage de ne pas permettre des demi-indentations par erreur.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed