Ce billet est issu d’une discussion informelle sur l’évolution du métier d’ingénieur software ou ingénieur en développement logiciels avec Fernand Galiana, Imhotep Software.
Il m’a semblé intéressant de la partager avec celles et ceux qui exercent ce métier aujourd’hui ou avec les plus jeunes qui l’exerceront demain, mais pas seulement.
Une fois de plus, je suis frappée par l’impact de la culture numérique sur les pratiques de tous les métiers. Les aptitudes nécessaires à l’exercice de métiers technologiques se retrouvent dans beaucoup d’autres métiers.
Un Ingénieur polyglotte, spécialiste du développement logiciel
Fernand Galiana se définit comme un ingénieur software polyglotte, dans le sens technologique du terme. Franco-américain, Fernand conçoit et manage le développement de logiciels pour différents secteurs d’activité.
Il forme également des ingénieurs et développeurs de grandes sociétés Tech de la côte Ouest des Etats-Unis, actuellement sur Golang, Kubernetes, après avoir travaillé avec Ruby, Elixir, Java et bien d’autres. Il contribue régulièrement aux communautés et participe aux conférences tech aux Etats-Unis et en Europe.
Pour les plus techniques d’entre vous, quelques contributions à Kubernetes :
If You K8s, Please Try K9s https://medium.com/@fernand.galiana/if-you-k8s-please-try-k9s-82ea30eb9aa3
A quick tour of K9s an alternate command line interface to interact with your Kubernetes clusters https://www.youtube.com/watch?v=k7zseUhaXeU
Knative before Knative… https://imhotep.io/istio/faas/2018/02/23/combing-lambdas.html
Any Clusters With Ears On? https://imhotep.io/k8s/golang/2017/10/14/sonick8s.html
Son métier a évolué au gré des révolutions technologiques, de sa propre curiosité, de sa lecture des innovations émergentes, de paris aussi… Et de l’auto-formation qu’il a réalisée tout au long de son parcours.
Métier d’Ingénieur Software : plus de complexité et de responsabilités
L’ingénieur développement doit détenir plus de connaissances techniques
“Le terme Fullstack ne veut plus rien dire. Fullstack = maître de rien. Il est préférable de se positionner en Backend, FrontEnd ou Ops… Ce qui n’empêche pas de te repositionner à l’occasion d’un nouveau projet, d’un nouveau framework ou d’une nouvelle technologie qui t’inspire et te parle”.
“La durée de vie d’un langage informatique est en moyenne de 10 ans. Plus on en connaît, mieux c’est.
Même si on n’utilise pas le nouveau langage sur lequel on s’est formé, cet apprentissage permet d’acquérir d’autres modes de pensée et d’approche les problèmes”.
Aux connaissances techniques s’ajoutent des applications plus complexes à concevoir, à développer et à manager.
On est passé des applications monolithiques, et plutôt simples, aux applications plus sophistiquées fragmentées en microservices. L’ingénieur software doit choisir le langage qui convient le mieux. D’où le besoin de connaître plusieurs langages et leurs points forts respectifs. La charge cognitive des développeurs est aussi plus forte. De bonnes pratiques de développement et d’organisation du projet permettent de soulager cette “cognitive load”. Enfin, il faut intégrer dans la conception que les microservices complexifient l’identification et la correction des anomalies.
La dématérialisation a modifié les pratiques de développement informatique.
La virtualisation simplifie certaines actions. Mais elle nécessite une capacité plus forte d’abstraction et de représentation. L’ingénieur software doit avoir une vision technique, fonctionnelle et stratégique.
L’exigence des utilisateurs est aussi bien plus forte.
L’informatique est devenue critique en raison de sa diffusion et de son impact direct sur la performance des organisations et sur le contenu du travail, voire la société. La sécurité est aussi devenue un sujet central. Les ingénieurs développement ont plus de responsabilités techniques, économiques et sociétales.
Le développement logiciel : un engagement fort
Il est bien connu qu’un ingénieur logiciel doit se former continuellement.
“Il faut se spécialiser dans les domaines qui nous passionnent et rester en veille sur les innovations”.
Des choix stratégiques sont à faire par chaque développeur au regard des innovations qui perceront vraiment dans les entreprises. “ Il faut anticiper au mieux les cycles d’adoption. Ce qui n’est pas simple”.
L’engagement se traduit également dans le travail d’équipe. Il y a davantage de travail collectif, interne et externe, physique et virtuel, et de management au sens large.
Les éléments d’attractivité du métier d’ingénieur développement
“Pouvoir grâce au code animer un objet, une lumière, un son ou contrôler un serveur ou une base de données a toujours été magique pour moi ”
“ Développer un logiciel, c’est concevoir et créer un outil qui va faciliter, simplifier, etc. Un bon développeur est plus un artiste qu’un ingénieur. Plus un créatif qu’un technicien”.
“ Il est certain qu’il faut trouver de l’intérêt à la programmation même, à la logique du code, au design d’applications, aux projets et domaines auxquels ils se rapportent, etc.
Le panel est large sur le plan des techniques et des usages. Chacun peut y trouver différentes motivations et satisfactions”. Les innovations techniques et d’usages renouvellent l’intérêt intrinsèque du métier.
“Le métier du développeur a évolué comme celui du mécanicien. Avant le mécanicien réparait le carburateur défectueux. Aujourd’hui, il le remplace. Ce qui peut limiter l’intérêt du métier si on n’adopte pas une vision plus stratégique du projet. Ou si on ne fait pas partie de l’équipe qui conçoit le module à remplacer !”.
Aujourd’hui, l’intelligence artificielle, et particulièrement le Machine Learning, impactent fortement le métier d’ingénieur logiciel.
“Les données foisonnent. Elles sont devenues notre matière première. Il est incontournable d’extraire l’essence de ces données pour les rendre utiles et de mobiliser les techniques d’intelligence artificielle pour le faire. Les ingénieurs vont devoir intégrer de nouvelles compétences portant sur la structure et l’analyse de données, et les technologies qui s’y rapportent”.
MP : Cette évolution pourrait remobiliser les ingénieurs sur le secteur informatique plutôt que la finance 😉
Les principales qualités d’un Ingénieur Software
- La passion
- La curiosité
- Le goût d’apprendre
- L’ouverture d’esprit
- L’imagination et la créativité
- La capacité à comprendre le client et son problème pour une conception et une programmation simple. « Le talent s’apprécie dans le code. Un bon code est avant tout un code simple ».
- Les aptitudes à capitaliser et à anticiper. Elles se développent avec l’expérience.
- La persévérance et la résilience
- Et beaucoup d’humilité !
Le métier d’ingénieur software demande beaucoup d’efforts, de sacrifices et de résilience à l’échec. Il peut être aussi frustrant et ingrat. La reconnaissance n’est pas toujours à la hauteur des efforts et de l’implication… D’où la nécessité de trouver des motivations dans la nature même du travail et les collaborations.
C’est un métier qui demande de l’engagement sous différentes formes, pour les utilisateurs, pour l’entreprise, pour les projets, pour soi.
“Comme pour le compositeur de musique, il y a des moments de blocage. Et aussi des moments de “flow” où vous sentez votre code. Vous voyez les solutions se concrétiser facilement et simplement. Ces moments de grâce apportent du plaisir et transforment ce métier en passion”.
MP : L’acquisition continue de connaissances, la conception de solutions, la résolution de problème, la coopération, l’engagement, la curiosité, la créativité, le plaisir, etc. autant d’éléments qui imprègnent le travail de tous les métiers aujourd’hui.
Ce billet a été initialement publié sur LinkedIn.