Les connaissances informatiques de base

Au fil du temps, j’ai pu observer des lacunes techniques chez beaucoup d’informaticiens. On ne peut évidemment pas tout savoir ; l’informatique est un domaine très large, qui couvre des choses très variées. Mais il y a un certain nombre de connaissances basiques que vous devez absolument maîtriser si vous êtes informaticien.

Valeurs binaires standard

Il me semble absolument nécessaire de connaître de tête les plus importantes valeurs binaires.

Un octet, c’est stocké sur combien de bits ? Et un entier standard ?
Combien peut-on stocker de valeurs différentes en 8 bits ? Et en 16, 24, ou 32 ?

Réponses :

  • Un octet est stocké sur 8 bits. Un entier standard est stocké sur 32 bits. Un «short» est classiquement stocké sur 16 bits, un «long» sur 64 bits.
  • En 8 bits (sur un octet, donc), on a 256 valeurs différentes. En non-signé, cela va donc de zéro jusqu’à 255. En signé, cela va de -128 à +127.
  • En 16 bits (sur 2 octets), on a 65 536 valeurs. De zéro à 65 535 en non-signé ; de -32 768 à +32 767 en signé.
  • En 24 bits (3 octets), on a 16 777 216 valeurs possibles.
  • En 32 bits (4 octets), on a 4 294 967 296 valeurs possibles.
  • En 64 bits (8 octets), on a 18 446 744 073 709 551 616 valeurs.

C’est pas bien compliqué à mémoriser. Gardez juste à l’esprit les ordres de grandeur :

  • 1 octet => 256
  • 2 octets => 65 milles
  • 3 octets => 16 millions
  • 4 octets => 4 milliards
  • 8 octets => beaucoup (je considère que 18 trillions, ça fait trop grand pour être compté).

Mais pourquoi est-ce si important à savoir ? Après tout, on peut recalculer facilement tout ça. Oui, mais pour un informaticien, recalculer ça reviendrait au même qu’un géomètre qui se demande tous les jours combien il y a de centimètres dans un mètre…

Concrètement, ces valeurs ne servent pas forcément tous les jours, mais il faut être capable de les utiliser à bon escient. Si vous faites du développement embarqué, vous aurez sûrement besoin de calculer au plus juste l’utilisation de la mémoire ; et en codant en C, vous devrez choisir le type de vos variables en connaissance de cause. Mais ce n’est pas le seul cas où c’est utile.

Si vous êtes un développeur Web ou un DBA vous aurez à créer des tables dans votre base de données. Pour cela, vous devez connaître les types de données que vous pouvez utiliser. Si on prend l’exemple de MySQL, les nombres entiers peuvent être stockés dans des champs de type TINYINT, SMALLINT, MEDIUMINT, INT et BIGINT. Chacun pouvant être signé (par défaut) ou non-signé (en ajoutant UNSIGNED au type).
Alors pour stocker la taille d’un être humain, en centimètres, un TINYINT UNSIGNED sera sûrement suffisant. Hum… sauf si vous devez gérer les 4 hommes les plus grands du monde qui dépassaient les 255 centimètres. Certains choisissent alors la facilité et stockent tous leurs entiers en utilisant des INT. Mais pourquoi prendre 4 octets, là où la moitié suffirait ?

De la même manière, quel est le type le plus adapté à une clé primaire ? Sur 16 bits, ce serait un peu court ; c’est assez fréquent d’avoir des tables qui contiennent bien plus de 65 milles lignes.
Un petit truc pour y arriver, c’est de réfléchir en terme de rapidité de remplissage de la table : Si vous avez en moyenne une nouvelle ligne par seconde, une clé primaire stockée sur 3 octets (un MEDIUMINT UNSIGNED) se remplira en à peine plus de 6 mois. Si par contre vous passez sur 4 octets (INT UNSIGNED), vous pouvez tenir ce rythme pendant 136 ans. Est-ce vraiment utile de passer sur un BIGINT ?

Langage de script

Quel que soit votre domaine, quelle que soit votre plate-forme, quelles que soient les technologies que vous utilisez, vous ne pouvez pas faire votre travail efficacement si vous ne connaissez aucun langage de script. Évidemment, on peut toujours s’en tirer en mettant au point des «méthodes de contournement». Mais quelle perte de temps ! Cela revient à passer le baccalauréat scientifique avec une calculatrice « 4 opérations » ; c’est possible, mais c’est se mettre soi-même des bâtons dans les roues.

Attention aux mercenaires

Vendredi dernier, j’ai fait passer un entretien d’embauche. J’en fait passer régulièrement, c’est une activité chronophage mais malheureusement nécessaire.

Là, je recevais un jeune homme qui avait un profil autodidacte, chose qui ne me dérange pas outre mesure tant que les connaissances, les capacités et la motivation sont là. Malheureusement pour lui, il a lamentablement échoué à un petit test technique de rien du tout, qui me sert habituellement de «filtre passe-bas». Comme je cherche un développeur expérimenté, c’était évidemment rédhibitoire.

Quand je fais passer un entretien − à plus forte raison quand je m’apprête à l’écourter − je prends le temps de donner un feed-back au candidat. Je peux lui donner quelques trucs dont je parle sur ce blog, concernant le CV ou l’entretien lui-même, ou lui donner quelques pistes dans sa recherche. On ne se refait pas.

Là, le jeune homme avait sur son CV un parcours particulier : une première expérience d’un an en contrat pro, puis une autre expérience d’un an, puis enfin son poste actuel qu’il occupait depuis moins de 2 ans. Quand je vois ce genre de chose, je demande toujours au candidat de m’expliquer. Jusqu’ici, j’avais toujours eu des réponses satisfaisantes ; on m’expliquait que le poste était moins intéressant que prévu, ou que que l’entreprise n’offrait aucune perspective d’évolution, ou encore que les attentes de l’entreprise étaient trop élevées et que le candidat s’était mis à la recherche d’un poste lui permettant de développer son expérience.
Bref, dans tous les cas, les personnes en face de moi ont toujours tenté de m’expliquer qu’il s’agissait d’erreurs de parcours ponctuelles.

Bizarrement, ce candidat a réagi tout autrement. Il m’a dit que le turn-over est un fait en informatique, que les développeurs restent entre 6 mois et 1 an et demi dans leurs entreprises, qu’il est normal de vouloir changer d’air régulièrement. Quand je lui ai dit que les entreprises cherchent des employés pour les garder longtemps, il m’a dit qu’il n’était pas d’accord (sic) et qu’aucun autre recruteur ne lui avait jamais posé ces questions ni fait ces remarques.
(Je lui ai demandé si les autres recruteurs qu’il avait rencontré l’avaient rappelé, il m’a dit que non. Étonnant, hein ?)

Où est le problème ?

En fait, il faut se rendre compte que lorsqu’une entreprise embauche une personne, c’est dans l’idée d‘investir dessus. Investir en prenant le temps de la former, ce qui génère des coûts par son salaire alors qu’elle n’est pas productive, mais aussi par le manque à gagner sur le salaire des personnes qui la forment et qui ne sont donc pas productives non plus durant cette période. Investir en comptant qu’il lui faudra une certaine période d’adaptation au métier de l’entreprise, à ses outils, à ses procédures.

Attention aux «sauveurs»

J’ai rencontré plusieurs situations où une personne était placée, ou se plaçait, en situation de «sauveur». Vous savez, c’est le syndrome qui fait qu’on pense parfois que, face à une situation problématique, le recrutement d’une seule personne va tout solutionner.

Malheureusement, cela a plusieurs effets pervers.

On vous présente un sauveur

Voilà la situation la plus fréquente. La hiérarchie de votre entreprise est persuadée qu’elle ne possède pas en interne les qualités nécessaires pour aller là où elle le souhaite. Elle embauche donc un caïd, une personne qui est censée avoir des aptitudes hors du commun, de par son intelligence, sa formation et/ou son expérience.
Souvent, on vous présentera une personne qui a un CV long comme le bras, ayant fait sa carrière dans de grosses boîtes (ou, en tout cas, dans des entreprises de taille supérieure à la votre). Cela lui donne une respectabilité et une assurance qui lui viennent de sa connaissance des sujets à traiter, de son habitude des procédures à appliquer.

Personnellement, j’ai déjà été confrontés à plusieurs sauveurs de ce genre. Je n’y ai vu que 2 issues possibles :

  1. Tout le monde se développe de grandes attentes, on espère de grandes choses. Et rapidement, on se rend compte que le sauveur n’est finalement pas à sa place. Il a l’habitude du cadre d’une grande entreprise, mais ne sait pas comment appliquer ses connaissances dans une petite boîte où il faut être plus réactif. Ou pire, il cherche à imposer sa manière de faire, sans prendre le temps de comprendre comment fonctionne l’entreprise ; il tente sa petite révolution, qui non seulement n’est jamais appréciée par les gens en poste, mais n’atteint pas son but la plupart du temps. Dans de telles situation, j’ai toujours vu le sauveur finir par quitter l’entreprise ou se faire virer ! Véridique.
  2. Le sauveur tente de faire son travail du mieux qu’il peut, en tentant de comprendre les méthodes de travail en place et en faisant preuve d’humilité. Malheureusement, si la direction l’a embauché en le présentant comme LA personne qui allait tout solutionner, c’est que de grands espoirs sont placés en cette personne. Et forcément, il est quasiment impossible de se montrer au niveau de ces espoirs. Systématiquement, ceux qui avaient dit «Vous verrez, avec lui tout ira mieux !» sont alors extrêmement déçus lorsqu’ils se rendent compte qu’ils n’ont pas recruté le surhomme escompté, et ils réagissent avec un excès inverse : le sauveur devient à leurs yeux un incompétent. Et souvent ils passent plusieurs fois de l’euphorie à la déception, de manière de moins en moins excessive, jusqu’à se rendre compte que la personne fait son travail efficacement, qu’il fallait juste lui donner le temps de monter en compétence.

Dans les deux cas, cette réaction est assez humaine mais reste très désagréable. Cela fait traverser des périodes de doutes, de déceptions, de conflits ; tout le monde se retrouve dans une situation d’échec à un moment ou un autre à cause de ce genre de situation.
Ce n’est pas bon pour l’entreprise, ce n’est pas bon pour les hommes, ce n’est pas efficace en terme de business.

Vous êtes le sauveur

Vous venez d’être recruté dans une entreprise, et dès le premier jour on vous fait comprendre qu’on vous attendait impatiemment. «Ah, toi au moins tu réussiras à faire avancer le projet X.», «Depuis le temps qu’on attend quelqu’un pour résoudre le problème Y.», «On a hâte que tu nous apprennes les vraies méthodes de travail !»

Les clés de la réussite

Je n’aime pas le titre de cet article, il est assez pompeux et ressemble à une « formule miracle ». Mais je n’en ai pas trouvé de meilleur.

Je me suis déjà retrouvé plusieurs fois à tenter d’expliquer à de jeunes informaticiens (hum, même à des moins jeunes, d’ailleurs) les divers principes à appliquer au quotidien pour faire avancer leur carrière ou améliorer la manière dont ils gèrent leur travail. Et avec le temps, je me suis rendu compte que ces principes peuvent au final être résumés en 3 points clés :

  1. Simplicité
  2. Communication
  3. Passion

Évidemment, ils ne suffisent pas à donner toutes les directions à suivre. Mais si, jour après jour, chaque action est guidée par ces 3 principes, on se rend compte que l’on fait naturellement de bien meilleurs choix. Je me suis surpris moi-même récemment, au moment de prendre certaines décisions, à me demander «N’est-ce pas trop compliqué ? Qui dois-je en avertir et avec quel niveau de détail ? Ai-je vraiment envie de faire ça de cette manière, y ai-je consacré l’attention nécessaire ?». Et cela m’a permis de revoir certains choix de façon éclairée.

Voyons voir en quoi tout cela consiste.

Simplicité

La simplicité est un concept important mais trop souvent sous-estimé. Pourtant, il est valable à tous les niveaux.

Quelques exemples qui seront plus parlant :

  • La modélisation d’un composant logiciel, d’une base de données, d’une API gagne toujours à être la plus simple possible. L’histoire est jonchée de technologies diverses, de protocoles réseaux, qui ont disparu par « sélection naturelle ». À chaque fois que quelque chose est trop compliqué, d’autres technologies plus simples à mettre en œuvre apparaissent. Alors réfléchissez à vos propres développements : s’ils ne sont pas aussi simples qu’ils le pourraient, c’est vous qui allez souffrir à l’avenir.
  • L’offre de produits/services de votre entreprise doit être aussi facile à comprendre que possible pour vos futurs clients. Les offres à tiroirs et les options complexes n’inspirent pas confiance, ils ne donnent pas envie d’acheter. Assurez-vous d’avoir un discours clair et limpide.
  • Vous n’arrivez pas à faire en sorte que votre équipe utilise correctement le coûteux logiciel de gestion de projet que vous avez mis en place, malgré toutes les fonctionnalités hyper-géniales qu’il offre ? Incitez-les à utiliser correctement des outils simples, pour commencer ; donnez-leur un bloc-note à chacun pour noter leurs todo-lists, et gérez vos projets à coups de post-its collés sur un mur visible par tout le monde. Puis introduisez graduellement les outils plus structurés.
  • Vous n’arrivez pas à vous faire comprendre en réunion, vos idées sont systématiquement mises de côté ou on ne vous accorde pas tout le crédit que vous méritez ? Peut-être êtes-vous un peu trop brouillon, vous n’arrivez pas à agencer votre discours. Simplifiez-le ! Ne laissez pas les idées se précipiter toutes en même temps, prenez soin de les trier dans votre tête avant d’en exprimer les grandes lignes avec des phrases courtes.

Vous connaissez l’adage : on n’a pas atteint son but quand il n’y a plus rien à ajouter, mais quand il n’y a plus rien à retirer. Adoptez une approche zen.

Communication

Une bonne communication est nécessaire en toutes circonstances. Quelques exemples :

La veille : préparer votre futur

Je discutais récemment avec un développeur que je viens d’embaucher, et je lui expliquais entre autres pourquoi il est important de maintenir une veille active. La conversation avait commencé quand je lui ai donné plusieurs magazines à lire (en l’occurrence des Linux Format et PHP Architect), pour l’aider à se plonger dans la « culture informatique » dans laquelle il allait travailler. Cela l’a laissé un peu perplexe au début, mais il a fini par reconnaître mes arguments.

Par le terme de « veille », on pense habituellement à la veille technologique ; c’est le fait de se tenir au courant des nouveautés concernant une technique ou un champ de technologies. La plupart des informaticiens sont férus d’informatique (oui, ça paraît évident), et se tiennent au courant des dernières informations. Dans certains cas, ce sera les news concernant le monde du logiciel libre, ou celles de tout ce qui gravite autour d’un langage de programmation ou d’une plate-forme particulière ; éventuellement, on trouvera des gens qui suivent avec précision les évolutions des processeurs ou les sorties des jeux vidéos. Bref, on voit de tout.

Mais une des choses qui font la différence entre un ingénieur qui fera évoluer sa carrière, et un autre qui stagnera au même niveau, c’est entre autres l’implication personnelle qu’il met dans son travail. Ce qui veut dire aussi qu’il faut prendre du temps pour mettre à jour nos connaissances et élargir nos compétences sans arrêt.

Le mauvais exemple

Je connais des développeurs qui considèrent qu’ils possèdent le savoir nécessaire et suffisant pour faire leur travail. Leur instruction et leur expérience leur permettent de résoudre la plupart des tâches habituelles, et quand ils sont face à un problème, ils cherchent un peu sur Internet et ça suffit bien souvent.

Préparer votre évaluation annuelle

La plupart des entreprises effectuent des entretiens annuels ou bi-annuels de leurs collaborateurs. Il sont habituellement réalisés par les managers, parfois avec l’assistance du DRH.

À quoi servent ces entretiens ?

Tout le monde attend ces entretiens avec impatience, mais souvent pour de mauvaises raisons. Un grand nombre de salariés n’y voient que le moment où va leur être annoncée leur augmentation de salaire. C’est évidemment un élément important de ces discussions, mais il ne faut pas que cela devienne une obsession qui occulte les autres aspects.

Les entretiens annuels sont un moment privilégié, pendant lequel on peut prendre un peu de recul par rapport à l’année (ou le semestre) écoulée. Le but est de récapituler les points forts et les points faibles, de revenir sur notre évolution au fil du temps ; comment on a réussi à s’améliorer, à progresser dans l’exécution de nos tâches.

Préparer l’entretien

Quelques jours avant l’entretien, prenez le temps de vous poser ces quelques questions :

  • Où en étais-je il y a un an, il y a 6 mois ? Mes supérieurs étaient-ils satisfait de mon travail ? Pourquoi ?
  • Quelle était l’évolution qu’on attendait de mois durant cette période ? Est-ce que mes objectifs étaient clairement définis ?
  • Quelles sont mes forces et mes faiblesses aujourd’hui ? En quoi sont-elles différentes d’auparavant ?
  • En toute honnêteté, quels sont mes coups d’éclats et mes ratages complets ?
  • Globalement, en suis-je là où je voudrais être ? Ai-je développé les connaissances et les capacités que je voudrais avoir ?

Quand vous avez répondu à ces questions, demandez-vous où vous voulez aller :

  • Suis-je satisfait de l’environnement technique dans lequel j’évolue, des projets sur lesquels je travaille ?
  • Dans quelle direction ma carrière doit-elle évoluer ? Qu’est-ce que je veux faire dans 6 mois, dans 1 an, dans 2 ans ?
  • De quelle aide ai-je besoin pour progresser ?

Une fois que vous avez fait le tour de ces questions (et seulement à ce moment-là), vous pouvez vous poser d’autres questions :

Il y a une limite à ce qu’on peut imposer

J’ai déjà écrit plusieurs billets consacrés à l’investissement personnel que l’on doit mettre dans son travail, que ce soit parce que les problèmes sont similaires malgré les différences d’échelle, ou parce qu’il y a toujours quelque chose à apprendre en entreprise, qu’il ne faut pas se sous-estimer, ou encore parce qu’il faut rester honnête en toute circonstance.

Comme je l’ai dit par le passé, il faut toujours chercher à progresser ; se mettre à la place des autres ; pensez aux choses auxquelles ils n’ont pas le temps de penser ; faire les choses qu’on est censé faire, pour leur éviter d’y penser à notre place ; apprendre de ses erreurs et ne pas y chercher d’excuse.

Je voudrais juste nuancer mon propos en disant qu‘il y a une limite à ce qu’on peut imposer aux autres.

Au sein d’une équipe

Cette limite est facile à atteindre quand on est « en bas » d’une hiérarchie, et qu’on tente d’imposer des solutions à ses supérieurs ou à l’ensemble du groupe. Le manque d’autorité empêche bien souvent de faire prendre aux autres le temps d’écoute et d’analyse nécessaire.

Mais cela peut aussi concerner des requêtes « top-down », qui peuvent être mal perçues car elles chamboulent les (mauvaises ou bonnes) habitudes.

Forcer les choses est la pire des démarches. Cela ne peut aboutir que sur des levées de boucliers.
Il vaut mieux adopter la technique du « courage, fuyons ! » :

Le nocif

Dans la série des billets consacrés aux types de collègues, et pour faire la suite à ceux consacrés aux affectifs et aux revendicateurs, je vais aujourd’hui vous parler des « nocifs », c’est-à-dire des personnes qui – pour une raison ou une autre – sont réellement néfastes pour une équipe ou une entreprise. Nous allons voir comment reconnaître un nocif, et quelles sont les solutions qui s’offrent à vous pour traiter leurs cas.

À quoi reconnaît-on un nocif ?

Nous avons tous cotoyé au moins une personne dont le comportement ne semblait pas correspondre à celui attendu. Cela peut toucher un assez grand nombre d’attitudes :

  • Connaissances techniques trop faible. Un développeur qui est tellement mauvais techniquement qu’il produit systématiquement du mauvais travail.
  • Problèmes d’horaires. Quelqu’un qui arrive à 11h00 le matin et part à 17h30 le soir, ou qui se prend 20 minutes de pause toutes les 45 minutes.
  • Non-implication dans son travail. Une personne qui se met dans un simple rôle d’exécutant, au lieu d’utiliser ses compétences et son imagination pour faire réellement avancer ses projets.
  • Mauvaise volonté systématique. Quelqu’un qui réfute par principe toutes les idées qui lui sont soumises, ou qui ne prend en compte que les choix qui l’arrangent.
  • Problèmes de communication. La personne qui reste dans son coin en parlant le minimum possible. La personne qui n’arrive pas à avoir un débat constructif, et s’énerve dès que ses idées ne sont pas suivies. Celui qui ramène toutes les discussions à ses propres problèmes immédiats.
  • Problèmes avec l’autorité. Quelqu’un qui n’accepte pas qu’une autre personne puisse décider de ses priorités et de son planning.
  • Comportement non professionnel. Une personne qui se permet d’insulter ses collègues. Un commercial qui tutoies les clients. Un chargé de clientèle qui n’offre pas toute l’écoute qu’li devrait.

Pas d’intégrisme technologique

J’ai rencontré trop souvent des situations où mes interlocuteurs prenaient leurs goûts personnels pour de grandes vérités technologiques. Cela m’aurait systématiquement amusé, si je n’avais pas vu trop de mauvais choix résulter de ce genre de comportement.

On a tous entendu ce genre de réflexions :

  • « PHP c’est juste bon pour faire des pages perso », venant d’un ingénieur JEE.
  • « Perl, c’est pour prototyper un logiciel avant de le coder pour de vrai », entendu chez un codeur C/Unix.
  • « DotNet, c’est une copie de Java, c’est forcément moins bien », d’un autre ingénieur JEE.
  • « MySQL ce n’est pas une base de données sérieuse », assuré par un DBA Oracle.
  • « Bah, pourquoi vous utilisez Linux ? », par un candidat à un stage habitué à Windows.
  • « Ubuntu, c’est nul, je préfère Debian », par un autre candidat.
  • « Avec la base de données et le serveur Web sur des machines différentes, on ralentit le site », par un développeur expérimenté.

On peut apporter des réponses intelligentes à toutes ces remarques :

  • Si Yahoo, Facebook et Wikipedia sont codés en PHP, c’est parce que ce sont des sites perso, hein ?
  • Pour la plupart des développements, le Perl est plus rapide à développer, avec des performances plus qu’acceptables.
  • Les développeurs qui prennent le temps de mettre le nez dans DotNet semblent dire que c’est une très bonne plate-forme.
  • Wikipedia utilise plusieurs bases MySQL, qui fonctionnent conjointement de manière très performante.
  • La vraie question est plutôt « Pourquoi utiliser Windows ? ».
  • Avec de l’Ubuntu Serveur sur les serveurs, et de l’Ubuntu Desktop sur les postes de développement, on s’assure d’avoir une plate-forme unifiée.
  • Vous imaginez que Google tourne sur une seule machine ?

Faire un choix structurant

Nous avons tous des préférences. Je me sens bien sous Linux, à coder en C et en PHP. C’est ce qui correspond à mes goûts et mes choix. Je peux l’expliquer de manière factuelle, mais il y a aussi des raisons inexplicables.