Coder comme un batteur

#android #code #dev #qualité 

Quand j’ai commencé la batterie étant enfant, la seule chose qui m’intéressait était de m’assoir devant l’instrument et de jouer. Mais il s’est avéré qu’être à l’aise sur toutes sortes de musiques requiert beaucoup de pratique. Cela nécessitait en particulier du travail dans trois domaines :

  • Tout d’abord, les rudiments : ce sont des motifs et des enchaînements simples à travailler encore et encore pour gagner en rapidité et en maîtrise des baguettes. Ça peut sembler un peu rébarbatif pour un ado qui veut juste taper sur les peaux, mais c’est essentiel pour développer suffisamment d’aisance dans les gestes.
  • Ensuite, il faut développer une culture rythmique en écoutant beaucoup de styles différents, pour se créer une collection de rythmes variés dans laquelle puiser pour construire son propre style.
  • Enfin, il y a l’indépendance coordonnée, ce qui veut plus ou moins dire arriver à résister à cette tendance qu’ont nos mains à vouloir taper dès que les pieds jouent une note et vice-versa. Plus mes membres arrivent à jouer indépendamment les uns des autres, plus j’aurais de liberté dans mon jeu.

Mais quel rapport y a-t-il entre la batterie et la programmation ? Probablement aucun, mais cela me permet une petite analogie pour le programmeur débutant qui veut progresser et améliorer ses compétences.

Tout comme l’adolescent que j’étais, chaque nouveau programmeur veut simplement s’assoir devant son ordinateur et taper quelques lignes de codes pour avoir rapidement une application fonctionnelle. Obtenir un résultat visible avec lequel on peut jouer est tout aussi satisfaisant que d’accompagner ses morceaux de musique préférés avec son instrument. Mais celui qui n’est pas prêt à passer quelques heures à travailler va rester relativement limité dans son jeu.

De la même manière, la programmation comporte plusieurs aspects et il est nécessaire de travailler ces différentes facettes pour devenir un codeur suffisamment varié et efficace. Quelles sont donc ces compétences à développer ?

Les rudiments

Thats’ one small step for a man, one giant leap for mankind

N’importe quel rythme de batterie peut être décomposé en plus petits éléments, comme de petites briques qui permettent de créer des rythmes plus complexes lorsqu’on les assemble. Mais si vous commencez par vous attaquer directement à des rythmiques et des breaks compliqués, vous allez être vite frustré devant la difficulté. Il vaut mieux commencer petit, travailler chacun de ces petits éléments individuellement avant de commencer à les combiner pour élaborer des rythmes plus intéressants. On ne construit pas une tour d’un coup, on la construit brique par brique.

De la même manière, la programmation est un art (ou une science ?) qui essaie de résoudre certains problèmes avec des algorithmes. Différents problèmes nécessitent différentes solutions, mais les blocs de logique élémentaires à utiliser existent déjà depuis des décennies. Ce sont les structures de données et les algorithmes que l’on découvre dans n’importe quelle classe d’introduction à la programmation.

Les tableaux, les listes, les arbres ou les graphes sont le genre d’objets qu’il faut s’habituer à manipuler. Pour monter en compétences, il va falloir étudier ces structures et les façons de les manipuler efficacement. Il va aussi falloir se pencher sur les algorithmes les plus communs : tris de listes, traversées de graphes, gestion d’une queue priorisée… C’est en expérimentant avec ces éléments que l’on développe une forme d’instinct naturel pour reconnaître des motifs récurrents dans les problèmes que l’on essaie de résoudre qui ont des solutions efficaces et déjà largement éprouvées.

Lire des livres d’algorithmiques classiques comme « The Algorithm Design Manual » de Steven Skiena est un bon départ, mais il est aussi très important de pratiquer. Des sites comme Codingame offrent la possibilité de travailler sur toutes sortes d’exercices ludiques dans le langage de programmation de votre choix.

Culture rythmique

Cette année le spectacle de la kermesse sera au top !

Un bon batteur doit être capable de jouer sur différents styles de musique. Mais même si vous préférez vous spécialiser sur un genre en particulier, des heures d’écoute de musique la plus variée possible permettront de découvrir de nombreuses variations à incorporer pour enrichir vos grooves. De la même manière, un programmeur doit connaître sa plateforme et son langage de programmation de prédilection de fond en comble pour être à l’aise face à n’importe quel défi.

Prendre le temps de lire la documentation ou des blogs techniques, de regarder ou d’assister à des conférences, de plonger dans le code d’autres personnes, etc. permettra de mieux s’équiper pour découvrir toutes les facettes de vos outils. Passez en revue les librairies et les frameworks les plus connus pour éviter de réinventer la roue tous les jours. Vous optimiserez vos efforts en réutilisant ce qui existe déjà.

Pour un développeur Android, il y a de nombreuses listes de bibliothèques bonnes à connaître qui existent, parmi lesquelles Dagger, Koin, OkHttp, Retrofit, RxJava, Timber, Lottie…

Indépendance coordonnée

Avec Informatique Banque Populaire, Osez l’équilibre! TM

Enfin, l’un des plus grands défis que rencontre un batteur est celui de l’indépendance et de la coordination. En gros, notre corps est câblé de telle manière que nos membres ont tendance à naturellement fonctionner de manière synchronisée, ce qui va par moment limiter nos possibilités. Les mains sont très liées avec les pieds, et les premiers cours de batterie consistent souvent à apprendre à découpler cette dépendance. Être capable de jouer plusieurs motifs simultanément avec chaque membre apporte énormément de liberté et de créativité à votre jeu.

Mais un couplage fort est aussi le genre de problème qui peut limiter vos capacités de développement. Des principes d’architecture et des patrons de conception (design patterns) propres vous aideront à éviter les dépendances qui ne sont pas nécessaires. N’importe quel programme peut rapidement dégénérer en un plat de spaghetti immonde et indémêlable. Garder le code clair et séparer les responsabilités sont les clés d’un programme qui pourra durer dans le temps et évoluer facilement pour prendre en compte de nouveaux cas d’usage et de nouvelles exigences.

Le principe important à retenir ici est que vos règles métiers sont le centre de votre programme et sa partie la plus précieuse, elles doivent donc être protégées autant que possible et isolées des détails d’implémentation comme le type de base de données, les dépendances de framework ou les spécificités d’une plateforme particulière. Une capacité à coordonner toutes ces briques et à les faire travailler de concert tout en gardant le cœur de métier suffisamment indépendant est ce qui fait vraiment briller un développeur.

Intéressez-vous aux communautés tournant autour de l’art du code (Software Craftmanship), aux principes de conception ou aux livres d’architecture pour acquérir les bases d’une bonne conception. De nombreux ouvrages de référence existent sur ces sujets, écrits par des gens comme Martin Fowler, Kent Beck ou Uncle Bob Martin (Clean architecture, de Robert C. Martin est particulièrement recommandé).

Une dernière chose : less is more

Allo Papa Tango Charlie…

Pour terminer avec cette analogie de la batterie, un dernier conseil me vient à l’esprit. La plupart des jeunes batteurs pensent que la meilleure façon de démontrer leur niveau est de jouer les rythmes les plus compliqués possibles en casant le plus de coups différents dans une même mesure. Mais avec un peu de maturité, ils finissent par comprendre qu’il est souvent préférable de jouer moins de notes. Le même principe s’applique à la programmation : on ne montre pas sa compétence en écrivant des algorithmes extrêmement compliqués, mais en trouvant toujours la solution la plus simple à un problème donné. Je suis tombé récemment sur une citation qui disait qu’un codeur de talent se remarque à la simplicité de son code. Ou comme le disait Saint-Exupéry :

« La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. »

Derniers articles