Commandement du développeur

Les 13 commandements et la programation orienté objet

algorithmie

Commandement de monsieur taupe

Pour devenir un développeur aguéri, un dev se doit de suivre les 13 commandements de monsieur Taupe. Les voici :

  1. RTFM -> Google est ton ami
  2. KISS (Keep it simple, stupid!)
  3. Un con qui marche ira toujours plus loin que deux sages assis
  4. On ne résout pas un grand problème avec une grosse solution, mais par une armée de petites solutions
    • Il vaut mieux plein de petites travailleuses, qu’une grosse feignante
    • Diviser pour mieux régner
  5. Dieu déteste la répétition, le programmeur aime se prendre pour Dieu
  6. Ne réinvente pas la roue carrée
  7. Les variables c’est pas comme les lapins, ca sort pas d’un chapeau
  8. Pas assez de commentaires, tue le commentaire, trop de commentaire tue le commentaire
  9. Freud se trompe, tout n’est pas sexe, tout est bit
  10. La mémoire c’est comme les WC, quand tu as terminé tu tires la chasse
  11. Pour vivre heureux, vivons caché
  12. Tes classes, c’est comme ton mur facebook, t’as pas trop envie que ta mére sache tout
  13. Ne résous pas un probléme, résous LE PROBLEME

Bien Chosir ses opérations

  • addition & soustraction = 1 calcul
  • multiplication = 4 calculs
  • divisions = 20 calculs
  • racine carrée = 60 calculs
  • cosinus & sinus = 60 calculs

Pour optimiser un maximum son code il faut essayer un maximum d'utiliser les formules les moins gourmande en calcul.
Exemple :
10/2 = 5 -> 20 caluls ⛔
10 * 0.5 = 5 -> 4 calculs ✔

Bien comprendre la relation multiplication et divisions
  • Racine_carrée_inverse_rapide
float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y = number;
    i = * ( long * ) &y; // evil floating point bit level hacking
    i = 0x5f3759df - ( i >> 1 ); // what the fuck?
    y = * ( float * ) &i;
    y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
//  y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed

    return y;
}
Lien wikipédia

Penser juste et efficace au lieu de faire de l'optimisation

Exemple au lieu d'utiliser des cosinus et sinus les stocker dans un tableau

  • -> lookAtTable

Règle de la programmation objet

Il est important de toujours programmer orienté objet. Il est possible de faire des graph en UML pour s'aider a poser ses idées.

Il éxiste des logiciels qui transforme un graph ULM en code par exemple ENTERPRISE ARCHITECT

Cas inverse, un diagram UML a partir d'un graph : https://app.diagrams.net/

Pour illustré un mon graph j'utilise yed

Logique base de la cybernétique : pas comment je fonctionne mais comment réagit les échanges.

Dans une classe 2 types :

  • Composition si une roue sort de la voiture elle "meurt"
  • Agrégation si quelqu'un d'ATI quitte la classe il ne meurt pas

Principe de la surcharge et extends

  1. Les human Hérite des caractéristiques des bipeds,
  2. Les Biped Hérite des caractéristiques des mamifères,
  3. Les mamifères Hérite des caractéristiques des Animaux,
  4. Les Animaux Hérite des caractéristiques des êtres vivants.

L'héritage multiple (extend) est possible en C, C#, C++ mais pas en Python.

Classes abstraite pure :

L'existance précède l'essence !

  • Être vivant -> On sait que tout les vivant utilise la méthode "vivre" mais chaqun des entité "vie" différent.

Et des classe abstraite :

  • Biped -> Les biped ont 2 jambes mais n'éxiste pas réelement

Une classe (classique)

  • Human -> on peut faire spawn un human

Par exemple tout les êtres vivant

Gestion des test

Imginez que vous etes au bord d'une falaise et vous voulez sauter de l'autre coté. il y a 2 manières de réagir.

Manière C++

Je calcule toute les possibilités pour arrivé de l'autre coté puis je saute.

Manière Python

Je saute puis je vois l'erreur. Je modifie ma trajectoire la prochaine fois.

Unity & Unreal

Unity -> faussement difficile

Unity fonctionne de manière component :

Exemple : Pour créer un superhuman je vais créer un human ou je vais y accroché différents script. J'y met mon script de vol, de bouclier, sac....

  • -> permet la création de petit jeux vidéo plus rapidement.

Conséquence : pas de logique objet -> code moins propre et moins optimisé. Peut rapidement créer des soucis. L'utilisation de petits scripts est plus compliqué et moins modulaire.

Unity parfait pour commencer la programmation car on peut faire "n'importe quoi" pour tâtonner.

Unreal -> faussement facile

Fonctionne de manière objet. Pas le choix de coder en objet, sinon cela ne fonctionne pas.

  • -> Oblige a créer des jeux performant, c'est plus utilisable et plus modulaire.

  • -> bcp de concept  a comprendre avant de commencer.  Unreal est pensé pour les gros projets d'équipe, et certaines fonctionnalités peuvent être dérangeante pour les petite equipe.

Exemple de création d'un superhuman :

Heritage de la classe human, Héritage de la classe guerrier Héritage de la classe oiseau (car il a des ailes)

av logo

© 2021 Gilles Avraam. Tous droits réservés.