Apprentissage horizontal: la curiosité n’est pas un défaut

TLDR; Il ne faut pas s’arrêter au développement d’un logiciel mais apprendre à maitriser l’amont (sa conception) et l’aval (déploiement, monitoring) car les développeurs travaillent de plus en plus en collaboration avec le client (Scrum) et le sysadmin(Devops).

Le code est une part importante du développeur, pourtant, même dans un monde où la spécialisation gagne du terrain, certaines entreprises, particulièrement petites ou jeunes, cherchent encore des profils transverses.

Certains développeurs délaissent les autres domaines aux personnes affectées et restreignent leur apprentissage, pourtant les outils et les méthodes venant d’autres horizons peuvent nous aider à progresser et améliorer l’existant.

Croissance verticale et horizontale

En économie on défini les croissance verticales et horizontales. Pour l’industrie forestière, une scierie par exemple, la croissance verticale cherchera à accroitre sa production actuelle (acquisition d’autre scieries concurrentes). Cette croissance permet d’obtenir plus de production sur le même produit/service mais surtout plus de clients (clients de l’ex-concurrent).

Une croissance horizontale poussera la scierie à se développer sur les domaines qui lui sont liés en amont et en aval: acquisition d’une pépinière, d’une exploitation forestière, d’un fabriquant de meuble, d’un vendeur de meuble etc … Au final la croissance verticale permet de maitriser la production de la graine de l’arbre à la vente d’un meuble: la production (quantité) initiale est inchangée, c’est le produit ou service qui a évolué.

Quand Facebook achète Instagram, il « diversifie » son offre originale c’est donc assimilable à un évolution horizontale. L’évolution aurait été verticale si Facebook avait racheté Google+ (service équivalent, le but est de récupérer les utilisateurs).

Et en développement logiciel ?

Ce résumé très succinct du concept économique cherche avant tout à expliquer l’idée verticale et horizontale. Si vous êtes un développeur Java, apprendre C# vous fera rester dans le même domaine (développement serveur) ça sera donc un apprentissage vertical. Si vous décider d’améliorer vos connaissances en administration Linux (système) où d’apprendre la gestion de projet ça sera un apprentissage horizontal donc transverse.

Pour la maitrise logicielle du backoffice au front-office on parle de Stack. Par exemple la plus connue: LAMP (Linux, Apache, Php, MySQL) ou une plus récente MEAN (Mongo, Ember, Angular, Node) pour javascript. Un apprentissage comprend ce coté purement logiciel mais va en amont (conception) et en aval (déploiement/suivi).

Note: Le terme « cycle de vie » d’une application se réfère beaucoup au statut du logiciel; conception, développement, test, maintenance – Ce sont des phases dans un processus de développement ce qui est assez différent des outils/méthodes qui accompagnent et/ou composent ce logiciel. J’utilise pour le reste de ce document le terme « Environnement logiciel » pour définir les solutions utilisées dans le développement logiciel (autant au niveau organisation que outils technique et logiciel).

En fait on est déjà un peu transverse

On ne maitrise pas que le langage et un framework, on maitrise aussi une base de données (et son langage comme SQL), une couche visuelle ou web (CSS, JS), des outils de gestion (Mantis, SVN, …), des solutions pour les tests (JUnit) et un peu d’applicatif serveur (Apache Tomcat, Apache HTTP, Windows Server). Dans une certaine mesure on est un peu transverse, parfois un héritage de ses formations mais généralement c’est un besoin professionnel.

Ce coté transverse a notamment été propulsé par les méthodologies agiles où les développeurs travaillent en étroite collaboration avec le client et l’approche DevOps où le même développeur se retrouve rapproché de l’équipe système. Pour le bon déroulement de cette collaboration les compétences du développeur doivent évoluer, à un niveau raisonnable, vers de nouveaux domaines.

Il n’est pas nécessaire de maitriser absolument tout l’ensemble de l’environnement technique du logiciel, comme il n’est pas nécessaire de connaitre le logiciel de monitoring à la perfection, l’important est de connaitre globalement les pratiques et les possibilités offertes. La recherche de l’application correspondante à son besoin pourra être étudiée en temps voulu.

Du concret (exemple)

J’ai segmenté l’environnement du logiciel en plusieurs catégories, ce découpage à uniquement pour but de simplifier la lecture

La liste n’est pas du tout exhaustive, elle cherche avant tout à donner un exemple – Les solutions fournies sont assez classiques, et sont orientées PHP. La liste a de forte chances d’être mise à jour en fonction des évolutions et de vos commentaires.

Étude et analyse

Ici on parle plus d’outils permettant la réflexion pour l’élaboration et le suivi du logiciel. On s’ouvre ici vers la gestion de projet et l’analyse, utile pour les projets agiles.

  • Méthodologie projet/organisation (XP, Scrum, Kanban, Lean, Podomoro …)
  • Conception (Merise, UML, BPN/BPMN, …)
  • Outils de gestion et de documentation (Basecamp, Confluence/Jira, Trello, Mantis …)

Développement

C’est le cœur de métier du développeur généralement bien acquis exception faite de l’automatisation.

  • Langage/Framework/Libs (Laravel, Twig, Monolog)
  • Libs tiers (integration Google Maps, Facebook connect…)
  • UI: Twitter Bootstrap, Polymer, JQuery
  • Base de donnée/ORM (PostgreSQL & SQL, Doctrine)
  • Suivi de version et dépendances (Git ou SVN, Composer…)
  • Automatisation (Brunch, Phing ou GruntJS)

Test

Maitriser toute les « couches » de test n’est pas forcément utile, certaines entreprises pensent même que la première (test unitaire) est facultative.

  • Test unitaire et fonctionnel (Phpunit, Praspel, Mockery, Behat, Selenium)
  • Outils processus (Intégration continue avec Jenkins, déploiement continu …)
  • Performance/Charge (siege, ab…)
  • Sécurité (w3af, Zed…)

Plateforme et déploiement

Ici on s’approche des connaissances habituelles du sys-admin permettant la symbiose DevOps. Pour un développeur connaitre les possibilités des outils lui évitera d’implémenter des solutions déjà existantes et stables.

  • Serveur application (Apache-HTTP)
  • Système hôte (Linux Debian)
  • Système de messagerie (0MQ)
  • Mise en mémoire (Redis, Memcache)
  • Serveur externe (LDAP …)
  • Virtualisation (Vagrant, Docker)
  • Automatisation Ansible, Salt, Chef

Monitoring

Personnellement après avoir vu un tableau de bord Nagios j’ai toujours voulu la même chose pour les applications. Aujourd’hui on peut facilement suivre la qualité du code, les performance et extraire les erreurs des logs pour en faire quelque chose de visible.

  • Qualité du code (SonarQube)
  • Monitoring de l’application (Graphite, Kibana)
  • Monitoring des hôtes/plateformes (Zabbix ou Nagios)

 

Version « Nuage »

De nombreux services en ligne permettent de déporter l’installation et la gestion du logiciel. Ici j’en cite quelque-uns au hasard mais n’hésitez pas à chercher un équivalent pour trouver celui qui correspond le mieux à votre besoin.

  • Github/GitLab/Bitbucket: gestion de source en ligne
  • Travis/CircleCI/CodeShip/Shippable: Intégration continue en ligne
  • Heroku/AWS: Hébergement d’applicatif
  • New Relic/AppSignal: Statistiques de performance de l’application

 

J’aimerais encore souligner qu’il n’est pas nécessaire (et qu’il est par ailleurs presque impossible) de maitriser l’ensemble des outils mais qu’il est important et utile de les connaitre. Dans notre métier la curiosité n’a jamais été un défaut.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s