• [^] # Re: de quoi tu te plaint ?

    Posté par . En réponse au journal la Geste de l'Estudiant.. Évalué à 2.

    « Pour moi, un mec qui sort avec un Master en Informatique, il devrait être capable d'écrire, depuis 0, un OS avec compilateur C, linker, shell, drivers et rajouter un langage de haut niveau par-dessus. »

    Je vois pas comment tu peux dire ça. Même en prenant un « temps assez long ». Ou alors décris-moi le nombre d'années que tu considères. Parce que figure-toi que je suis dans un domaine où modifier un compilo est relativement fréquent, écrire une bibliothèque de threads aussi, etc. Mais je sais que ça nous prend un temps fou, même en partant d'outils déjà faits (genre LLVM). Pour rappel, une chaîne de compilation complète inclut:

    - un chargeur (pour charger le binaire, par exemple au format ELF)
    - un éditeur de liens (pour regrouper tous les fichiers objets compilés précédemment),
    - un assembleur (pour transformer du code en langage d'assemblage en code objet),
    - un compilateur (au minimum front-end -- lexer + scanner, et back-end -- allocation de registres et génération de code).

    L'assembleur nécessite d'avoir une syntaxe et une grammaire (même si elles sont simples). Le compilateur aussi, mais il faut en plus gérer les cas ambigus (cas typique des if/else imbriqués), avec des cas bien tordus.

    Passons ensuite à l'OS: il faut un noyau, avec des pilotes de périphérique pour piloter le matériel (minimum vital: clavier, sortie standard par exemple -- la sortie pouvant être une imprimante). Si on commence à parler OS multi-utilisateurs, il faut rajouter un ordonnanceur et tout un tas de trucs. Je parle même pas de la mémoire (mémoire virtuelle, gestion de la pagination, etc.). Et oui, il faut aussi une forme de shell (ça encore, c'est pas trop trop dur).

    Sauf que tu oublies qu'un mec qui a fait un master est aussi censé avoir appris des trucs en :
    - réseaux (couches OSI, pile TCP/IP, ...),
    - bases de données (BDD relationnelles, BDD semi-structurées peut-être, algèbre relationnelle, divers langages tels SQL, XQuery, ...)
    - algorithmique,
    - programmation procédurale (C/Pascal/Basic/whatever), orientée objet (C++/Java/Eiffel/...), fonctionnelle (Scheme/LISP/OCaml/...), déclarative (PROLOG,...), ...
    - architecture des ordinateurs,
    - maths,
    - génie logiciel (analyse et conception de systèmes d'informations, avec diverses méthodes et langages formels)
    - tout ce qui se passe à côté (anglais, et tout ce qui pourrait concerner la culture générale ...)

    Donc voilà comment je vois les choses: si tu demandes à un mec qui a un master de ne faire QUE de la compil comme activité professionnelle, alors oui je suis d'accord avec toi il va y arriver. Mais je pourrais aussi te dire qu'en sortant de l'IUT, et si tu m'avais donné assez de temps, j'aurais pu te faire un compilo+un OS+... Donc la même chose en gros.

    À moins de vouloir forcer les élèves à faire 60h/semaine toute l'année, je ne vois pas comment tu peux espérer que le diplômé moyen de master puisse savoir faire ce que tu demandes. Qu'il ait des souvenirs de tout ça, oui, je suis d'accord, ça devrait être « automatique ». Qu'il soit censé savoir où trouver l'information dont il a besoin oui, aussi. Mais à part ça, je ne vois pas trop.

    Tu trouves que savoir faire OS+compilo+... est important. Un autre informaticien te dira qu'il est plus important de savoir correctement spécifier et implémenter ses programmes/structure de données, et qu'à ce titre, le génie logiciel est plus important. Surtout si en plus on tient compte du fait qu'il y a plus d'utilité à savoir comment fonctionne une base de données en interne dans tout plein de cas d'informatique d'entreprise plutôt que de savoir comment le compilo fait du modulo scheduling pour correctement ordonnancer les instructions ...