Bonjour à tous,
Débat très intéressant et qui, à mon avis, met en évidence une forme d'opposition entre ceux qui pensent que les nouveautés sont à considérer avec circonspection (voire avec méfiance) et ceux qui estiment qu'il faut s'y adonner clairement.
Pour ma part je suis plutôt "jeune" (26 ans) même si j'ai commencé à programmer il y a fort longtemps en QBasic sur un vieux 386. Je suis ainsi passé par l'assembleur, le pascal, le C, les triplet C++/Java/C# et bien d'autres langages, parmi lesquels le très intéressant Caml (incontournable en prépa).
Mon sentiment est qu'il y a toujours une forme de méfiance de certains "vieux" (j'emploie ce terme affectueusement), persuadés que toute nouveauté est une forme d'agression à l'encontre de leur savoir et de leurs compétences. Je pense que c'est une façon de penser assez extrémiste et stérile. Heureusement, la plupart des séniors que j'ai rencontré n'ont pas cette vision réductrice et ne rechignent pas à utiliser eux-mêmes des outils comme Eclipse.
La question qui se pose, pour moi, est celle de l'apport des SDK et des frameworks. Au risque de paraître moi-même un peu "vieillot", j'estime que ce sont des outils dont il faut savoir se servir en connaissance de cause et pas "parce que ça fait bien". J'ai une assez faible expérience du monde du travail mais j'en ai suffisamment pour avoir rencontré des personnes qui utilisent des objets ou des frameworks sans rien savoir de la technique sous-jacente et s'il fallait, pour moi, mettre en avant un aspect dangereux de ce genre de choses, c'est bien la tentation de considérer ces outils comme des boîtes noires.
Pour prendre un exemple simple, j'apprécie quand mes collaborateurs savent ce qu'est un tableau, ce qu'est une liste chaînée, ce qu'est une table de hachage (ouverte, fermée) et quand utiliser chacun (beaucoup d'insertions/suppressions ? beaucoup d'accès séquentiels ? nécessité d'accéder à un objet en temps constant ?). J'apprécie que les membres de mon équipe aient ne serait-ce qu'une notion de ce qu'est la complexité d'un algorithme et pourquoi il est important de savoir la calculer.
Pour moi, ce n'est qu'une fois le concept clairement assimilé qu'on peut passer à un outil permettant de l'automatiser. A partir de ce moment, j'approuve presque sans réserve l'utilisation d'outils comme Eclipse car l'utilisateur sait alors clairement ce qu'il fait et comment. Comme le disait un de mes professeurs, "l'IDE ne programme pas à votre place. Il ne décidera pas pour vous s'il faut utiliser systématiquement un QuickSort ou si, en dessous d'une certaine taille, il ne vaut pas mieux passer à un tri Shell ou à un tri par insertion.".
A part ça, j'apprécie énormément quand mon IDE (Eclipse, Visual Studio, Netbeans, peu importe) m'aide à créer mes getters/setters, quand il m'aide avec l'auto-complétion, quand il fait de l'indentation automatique ou, même, qu'il me permet de gérer en un seul endroit la programmation, la compilation, la doc et le lancement des exécutables. A ce titre, un outil comme Emacs est aussi un IDE, voire une "usine à gaz", terme caricatural souvent entendu dans la bouche de certains séniors qui croient ainsi dénigrer Eclipse alors que l'Emacs qu'ils prônent propose exactement les mêmes fonctions ... voire beaucoup plus.
Tout ceci ne m'empêche pas de me servir d'un vi si le besoin s'en fait sentir. Mais uniquement s'il s'en fait sentir. L'auto-flagellation ne fait pas partie de mes principes et si je peux aller plus vite, être plus efficace et finalement m'amuser plus avec Eclipse, je le ferai sans arrière-pensée. Je ne vois pas où est la gloire de se farcir 50 get/set avec vi alors qu'un Eclipse me soulage de ces tâches peu intéressantes pour me permettre de me focaliser sur ce qui importe vraiment.
Pour conclure cette partie, je dirais que je suis tout à fait ouvert à l'utilisation des nouvelles technologies (dont je suis moi-même un fervent utilisateur) mais sans oublier les fondamentaux. Il ne s'agit pas d'oublier comment ça marche, mais d'aller plus vite tout en sachant faire sans l'outil si besoin est. De même, de bonnes connaissances en algorithmique, en structures de données, en complexité sont indispensables. Pas pour réinventer la roue mais pour être capable, en toute circonstance, de faire le bon choix et d'assurer à son programmes des performances sinon optimales, du moins excellentes. A ce titre, des livres comme "Algorithmes en langace C" de Sedgewick ou le fameux "Concepts fondamentaux de l'informatique" d'Aho et Ulmann doivent figurer dans la bibliothèque de tout ingénieur qui se respecte.
La seconde partie sur laquelle j'aimerais donner mon avis c'est la fameuse opposition entre les langages. Sur ce plan il n'y a pas à tergiverser, le marché dicte sa loi. J'ai un faible pour les algos en C fignolés et optimisés aux petits oignons (même si le "grand" Knuth a toujours prévenu contre les méfaits de l'optimisation) mais pour l'instant je fais du Java ... et je ne m'en porte pas plus mal ! Le langage n'est pas réellement un problème quand on connaît les fondamentaux. Pour le coup, je n'ai aucun mal à passer du Java/.NET ... au C, au Perl ou même à l'assembleur. Par contre, il est vrai que les nouveautés sont légion d'année en année. Toutefois, cela ne m'inquiète pas trop. En effet, bien que pratiquant la veille technologique (comme tout le monde, j'imagine), je ne le fais pas de façon effrenée. Pourquoi ? Parce que même si beaucoup de nouveautés sont séduisantes, combien subsisteront ? Je ne suis pas du genre à me jeter à corps perdu dans chaque truc qui sort parce que je sais par avance que c'est peine perdue. Je préfère me focaliser sur ce que réclame le marché et franchement, ce n'est pas très difficile : en gros, C/C++, Java, .NET et du web. Un de mes profs disait "90% des technologies sur lesquelles vous travaillerez n'existent pas encore". J'ai envie de lui répondre que pour l'instant ce n'est pas trop le cas car nombre de technologies sur lesquelles j'ai eu l'opportunité de travailler n'ont rien de nouveau. Je n'ai pas encore eu à bouleverser ma façon de travailler, je n'ai pas encore découvert un langage ou une technologie révolutionnaire, juste des paradigmes de programmation un peu différents de ce que je connaissais (AOP, par exemple).
Enfin, il faut tordre le cou à ces préjugés qui veut que les "vieux" soient systématiquement de parfaits experts du code, capables de faire un Cray d'un 386 et les "jeunes" de parfaits incapables, capables de faire d'un Cray une machine poussive avec leurs "usines à gaz". Ce genre de considération émane souvent de personnes ayant une certaine expérience mais je peux vous dire que j'ai connu plusieurs "vieux" incapables de coder proprement, d'architecturer intelligemment leur code ou même, tout simplement, de le commenter. Dois-je pour autant céder à la faciliter et généraliser à tout va ?
Bref, et pour finir, il est difficile d'avoir un avis tranché et définitif. L'informatique évolue vite, très vite même, mais on fait beaucoup de neuf avec du vieux. L'important est de savoir discerner le bon grain de l'ivraie et de savoir évoluer en toute circonstance. Je ne pense pas que le savoir "profond" de l'informaticien soit remis en cause, on lui demande le plus souvent de savoir s'adapter à un nouvel outil ou à un nouvel environnement. Pour le reste les structures de données n'ont pas beaucoup évolué en 50 ans, le C est encore d'actualité et je gage qu'on en fera encore dans 20 ans, de même que le Java. Non, franchement, la rapide évolution déguisée des technologiles ne m'inquiète pas.
Partager