Pourquoi les nouveaux programmeurs ne lisent plus le code source des autres


Dans un ancien post sur son blog, Raymond Hettinger s’attristait de voir les devs lire de moins en moins le code source. Bien qu’il datait de plus de 4 ans, je n’ai pas pu m’empêcher de répondre. Puis je me suis dis que la traduction aurait tout à fait sa place ici.

La cause de ce phénomène est très culturel. J’enseigne à mes étudiants que si ils veulent en savoir plus sur le fonctionnement d’un bout de code d’un module, ils peuvent juste faire :

import module
print(module.__file__[:-1])

Puis ouvrir le fichier dont ils obtiennent ainsi le chemin dans leur éditeur préféré. Cela marche en tout cas pour tous les modules en pur Python.

En fait, si vous utilisez ipython, vous pouvez même faire :

!votreediteur module.__file__[:-1]

Et ça l’ouvrira directement. Par exemple :

!subl module.__file__[:-1]

Malgré cette information, ils ne le font jamais.

En partie parce qu’ils ont peur.

En partie parce que plus personne n’enseigne cet état d’esprit à l’université ou dans les tutos.

Mais essentiellement parce que toute autre méthode est plus productive, donc ils sont formés à utiliser à peu près tout sauf regarder le code source.

Chercher sur Google, demander sur un site d’aide, sur IRC, une mailling list, à un collègue, brute forcer tous les snippets qui traînent en les copiant/collant à la chaîne, et même, Dieu nous garde, lire la doc. Tout cela est plus facile et rapide que de lire le code source, parce lire les sources part du principe qu’on comprend comment tout marche.

Il y a aussi le fait que lire le code source il y a 30 ans était compétitif avec les autres options de consultation, tandis qu’aujourd’hui de nombreux devs ont 4 ordis chez eux avec un accès haut débit à la connaissance du monde entier.

Et bien sûr, ils se sont habitués à la vitesse. Et plus que ça, leurs enseignants/boss s’y sont habitués, et leur comportement communique implicitement cette attente, ce qui amène à ne pas lire les sources.

Cela m’a pris 5 ans de programmation pro avant de commencer à regarder les sources par moi-même de manière régulière. J’y ai été forcé, ayant beaucoup travaillé en Afrique et en Asie où avoir l’info hors ligne est un avantage.

Malgré cela, je ne le fais que pour le code Python, car mes talents en C sont faibles et je n’ai jamais pris le temps de télécharger les fichiers C. Je sais pertinemment que la programmation C est un atout important à avoir. Je souhaite l’apprendre. Et Rust, et Erlang, et Haskell, et l’espagnol et m’améliorer dans le gestion des CSS, l’administration système, la sécurité des systèmes, et essayer Riak, et OpenStack… Bien entendu, ça c’est juste la partie technique, j’ai une vie très pleine à côté.

Car voilà la seconde partie de la vérité : l’époque où on pouvait maitriser tout le champ de connaissance en informatique est révolue.

Je passe une HEURE, tous les jours, juste pour me mettre à jour dans mon ridicule petit champ d’expertise, et je n’ai même pas le temps de tout lire, encore moins de pratiquer. C’est 300 heures par an juste pour garder la tête hors de l’eau.

Maintenant, imaginez les débutants. Ils débarquent dans ce monde avec tellement de langages, de libs, de frameworks, d’outils, de technos ! Tellement de couches et de niveaux d’indirection ! Ils vont essayer d’obtenir la réponse aussi facilement qu’ils le peuvent, parce que la somme de connaissances accumulées qui permettent de lire les sources (ce n’est pas un acte simple, c’est une illusion qui bercent ceux qui sont devenus assez bons pour le faire sans effort), cette montagne, nous avons eu beaucoup plus de temps pour l’escalader qu’ils en ont. Et malgré cela, ils ont plus de choses que nous à apprendre.

Or le temps ne s’arrête pas pour autant, et l’expérience du marché se transforme. Les clients s’attendent aujourd’hui à des expériences logicielles bien plus complexes: designs léchés, animations, vitesse, connectivité, synchronisation, notification en temps réel, interconnexion de services, Web APIS, recherche intelligente, présentation contextuelle et personnalisée de l’information, traitement de médias riche… Et ça c’est juste pour des produits app/Web, car chaque marché a vu les attentes grandir.

Donc on attend d’eux qu’ils livrent tout ça, car les concurrents le font. Mais sans les y former, et si possible sans les payer trop cher. Et ASAP, évidement.

Les gens que je forme vont chercher un moyen d’obtenir le résultat dont ils ont besoin aussi vite que possible, avec aussi peu d’effort que possible.

C’est triste, mais je comprends parfaitement.

85 thoughts on “Pourquoi les nouveaux programmeurs ne lisent plus le code source des autres

  • harmo

    Encore un très bon article, a croire qu’ils savent pas faire autrement ici

  • Antho

    J’ai mis également pas mal de temps avant de piger que lire les sources est très instructif, perso ce qui m’a débloqué c’est la création d’un compte GitHub. Peut-être qu’en encourageant plus l’open-source dans les lieux d’apprentissage (virtuels ou non, je ne sais pas comment ça se passe à ce niveau là dans les écoles), on favoriserait la tendance à aller voir un exemple d’algo qui fonctionne AVANT de demander de l’aide.

  • Thierry

    C’est hélas très vrai et très pertinent. J’ai pu voir cette évolution singulièrement ces dix dernières années, lorsque la nouvelle génération est arrivée dans mon secteur. Ils sont très rapides, mais connaissent tout sur rien. Pire, ils n’ont pas l’air de s’intéresser au métier même qu’ils sont sensés simplifier en l’automatisant. Ils peuvent écrire des fonctions complexes, implémenter des algorithmes tordus, mais sans avoir la moindre idée du but final de la chose. Ca me renverse.

  • harmo

    argh mon commentaire précédent n a pas été entièrement enregistré…

    j ajoutais donc qu’on m a appris python directement en milieu pro, et mon mentor a bien intuite sur le fait d ajouter le dossier sites-packages a mon projet sublime text.

    Résultat 2 ans plus tard je me sers encore des docs, bien entendu, mais un coup d oeil aux sources est devenu pour moi indispensable, ça force a la compréhension de la lib, bien plus enrichissant que de copier coller!

    Si j ai l occasion un jour de former quelqu’un, j’utiliserai pour sûr exactement la même méthode.

  • LeMeteore

    J’ai commencé a lire de plus en plus de sources pour deux raisons: la premiere, manque de connectivité, et donc, quand tu as un peu d’internet, tu chopes tout, docs/sources pr consultation ulterieure. La seconde, fouiner sur un irc ou sur SO et ne pas vraiment obtenir la reponse qui te satisfait.

    En effet, le post est vrai et pertinent. On vit ds un monde malheureux où il faut produire, tout et tout de suite, autrement tu es mis sur le banc de touche. Merci pr le tres bel article.

  • buffalo974

    “Je sais pertinemment que la programmation C est un atout important à avoir. Je souhaite l’apprendre”

    Je profite de cet article et je vous propose de copier coller le lien suivant et de le ressortir en temps voulu :

    https://www.youtube.com/channel/UC_Os2N_lQX32N4mYW_VM0eA/playlists

    C’est pour découvrir le C++ moderne.

    Un bon tuto vidéo, ça démystifie la difficulté légendaire du langage, ça prépare à l’ effort.

    C’est complémentaire au python je pense, et participe probablement à une compréhension plus globale de l’ informatique.

    Et avec en plus HTML5 et SQL, on est couvert…

  • Sam Post author

    Disons qu’apprendre la syntaxe ce n’est pas la partie difficile. Je sais par exemple à peu près écrire en C. Ce qui me manque, c’est toute la connaissance autour : compilateurs, lib, organisation de code, structures de données avancées, patterns habituels, problématiques avancées autour de la gestion de la mémoire, etc.

  • Betepoilue

    Super article comme toujours, merci vous êtes des dieux !

    “Cela m’a pris 5 ans de programmation pro avant de commencer à regarder les sources par moi-même de manière régulière.”

    ==> pour un gros débutant comme moi et visiteur habituel du blog, je ne vais pas le cacher, j’ai lâché un soupir de soulagement à la lecture de cette phrase. Parce que c’est un conseil récurrent que j’ai vu passer quand je commençais avec python, et encore aujourd’hui j’ai du mal à me plonger justement par peur de ne pas être assez calé pour piger le truc.

    Et il y a un truc, un peu hors-sujet par rapport à l’article, c’est la distinction entre le ‘vrai’ programmeur et les autres. On retrouve ça dans au moins un article par semaine sur r/ programming et c’est toujours un peu décourageant pour un débutant que de lire que pour être un vrai dev, il faut être capable de coder son propre serveur en C tout en inversant un arbre binaire avec un doigt dans le cul .

    Après c’est net que lire les sources est une super pratique pour progresser, notamment en termes de propreté de son code j’imagine. Il faut vraiment que je m’y mette yyyaaaaaaaah.

  • buffalo974

    @Betepoilue : tu peux lâcher un soupir de soulagement, en vérité je te le dis :

    t’es pas obligé de mettre le doigt.

  • Nattefrost

    Sous pycharm on a accès directement aux libs de la stdlib écrites en python, ça m’arrive de les lire mais hormis celle ci je ne lis pas celles que je download, pourtant ça pourrait ête intéréssant de jeter un oeil aux sources de flask :p

    Merci pour cet article, ça agit comme une rappel pour une étudiant en fin de 2eme année.

  • Betepoilue

    @Buffalo974 rooooh mince c’est le seul truc des trois que je savais faire

  • LOuis

    Programmeur PHP, je suis un très gros lecteur de code source. En PHP, vu la quantité faramineuse d’applis codées avec les pieds en spaghetti code, lire d’abord le code source pour savoir à qui on a affaire est vite devenue un réflexe de survie. Les débats sur la qualité du code de telle appli par rapport à telle appli sont très courant dans la communauté PHP (voir Joomla vs Drupal vs WordPress). Mais, ce réflexe devrait être le même pour quiconque travaillant dans le domaine des webapps : quand on doit choisir un plugin en javascript, une librairie pour un framework, un composant pour un CMS, ou même un template, lire le code pour s’assurer du niveau et du sérieux des développeurs est crucial.

     

    Ensuite, pour ce qui est de la question de la jeune génération, je pense que les choses sont claires : tant que l’on fait des choses simples, des petits projets courts, ou des tâches précises dans un projet plus vaste; la doc, les forums, les IRC, et Stack Overflow suffisent. Dès que l’on doit faire des projets plus conséquents, où les questions d’architectures logicielles prennent une place importante, où l’on doit étendre les classes du frameworks, où l’on rencontre des problèmes qui n’ont pas encore été posés sur Stack Overflow : alors la lecture du code de source devient cruciale.

     

    D’ailleurs, au final, c’est souvent ce qui va faire la différence entre un lead developper et un simple développeur. Le premier prend du plaisir à lire régulièrement des codes sources différents, connaît les entrailles du framework qu’il utilise, est capable par lui même la solution à pratiquement n’importe quel problème rencontré par son équipe. À l’inverse, celui qui est dépendant de Stack Overflow ou des forums des frameworks/librairies/composants utilisés, qui peut attendre pendant des jours qu’une réponse lui soit apportée à un problème complexe, celui-là stagnera.

     

    Bref, il est bien naturel que les petits jeunes commencent par coder, et se contentent des réponses qu’ils trouvent sur Internet dans un premier temps. Ceux d’entre-eux qui voudront devenir très bon, qui voudront devenir chef d’équipe, qui voudront développer des projets long et complexe, ceux-là iront lire de nombreux code source de nombreuses applis.

  • Thierry

    Article super intéressant. Du coup as-tu la réponse du mec à ton commentaire ? A-t-il répondu d’ailleurs, si c’était 4 ans après…

  • Lhassa

    il y a peu de librairie qui gèrent correctement les erreurs et surtout les messages d’erreurs suffisement clairs pour debbuger… donc il faut aller lire le code source…

    d’autre part, gérant de gros fichiers input (~32Go pièce), j’ai besoin de m’assurer de la gestion du temps et surtout de la mémoire, donc… idem…

    mais globallement, je suis hélas plutôt d’accord… j’en suis au point où je suis content quand un étudiant à lu seul le message d’erreur avant de venir quémander de l’aide…

    merci à vous! c’est principalement grâce à vous que je me tiens à jour…

  • Erik

    “Je passe une HEURE, tous les jours, juste pour me mettre à jour dans mon ridicule petit champ d’expertise”

    Peux-tu détailler, s’il te plaît, quel(s) site(s) tu lis, quelle(s) rubrique(s), quel(s) auteur(s), quel(s) sujet(s) ?

  • François

    Il suffit de regarder SSL pour voir que le code libre est loin d’être relu (voir la conf de Aeris de PSES 2014 pour en voir une).

    Il m’arrive de relire du code, soit parce que je veux apporter une modification, soit parce que j’ai l’impression que je peux apprendre un point technique résolu par une lib. Cependant, j’en lis encore peu, principalement scientifique (mais pas que quand même).

    Par contre, ça reste difficile pour moi de comprendre entièrement le code des autres. Je suis curieux de savoir si vous avez des méthodes. Généralement, je commence par une fonction, et je descend dans le code avec les appels successifs des fonctions internes. Pour vous relire, c’est juste lire ou c’est aussi faire tourner avec un débogueur pour inspecter le contenu des variables ?

  • Sam Post author

    @Erik: redit/r/python, hackernews, planet python, sebsauvage.net, pyvideo.org, afpy.org, la liste python-idea, la liste autobahn, le planet de notre blog et la recherche https://twitter.com/search?q=%23python%20OR%20python%20lang%3Afr%20-monthy%20-monty%20-357%20-magnum&src=savs sont généralement mes points de départ. Après je digresse de temps en temps sur des variantes et des sources alternatives, mais c’est la base.

    @boblinux : cette liste n’est plus à jour, j’ai considérablement réduit mes source depuis car ça devenait ingérable.

    @François : ça dépend du but. Il y a autant de manière de lire que de problème que tu cherches à résoudre, c’est bien pourquoi ça demande autant d’expérience. Il faut en effet répondre à la question “je commence par où” qui est loin d’être triviale.

  • thomas

    A ce propos, pas plus tard que vendredi dernier, un recruteur m’a dit qu’il devenait de plus en plus compliqué de trouver de bons développeurs, car désormais beaucoup se lancent en dev en commencant directement par apprendre l’utilisation de frameworks (Jquery avant Javascript, Symfony avant PHP, etc.) pour être empoyables le plus rapidement possible. Du coup, derrière ils ne prennent jamais le temps d’apprendre les bases du langage (et d’ailleurs pourquoi ils le feraient, ils touchent 40K par an et bossent dans une startup de 30m² collés à 10 mecs qui pensent déjà être les prochains Zuckerberg parce que leur boite a tenu plus de 6 mois) et sont incapables, par exemple, de répondre à des questions très simples sur le langage (fonctions basiques, déclaration de variables, etc.) en entretien.

    En y réfléchissant derrière, je me suis demandé si on ne se dirigeait pas vers un secteur où seraient valorisés les types qui connaissent par coeur les derniers frameworks en vogue du marché, au détriment du langage pur et de types comme nous qui se sont cassés le cul depuis qu’ils ont 15 piges à apprendre toute une panoplie de technos pour être un minimum bons dans ce qu’ils font. Puis je me suis dit que pour le moment, ce genre de boites restaient quand même minoritaires, qu’il restait quelques boites sérieuses et que ça ne serait pas près d’arriver. J’espère juste avoir raison sur cette conclusion, et que jamais on ne tombera dans ce scénario. Perso, ça me ferait mal au cul de savoir que toute l’expertise que je me suis forcé d’apprendre avec le temps ne servira plus à rien dans l’avenir.

    Sinon excellent billet comme d’habitude. Très honnêtement, ça me rassure de savoir que je suis pas le seul qui a l’impression de couler un peu plus tous les jours. Merci pour ça.

  • ultra

    @thomas

    Expérience vécue et qui se répète avec les jeunes qui sortent de l’école.

    Site codé avec symfony2.

    Le jeune déploie sur la machine de test qui s’effondre, pourtant il n’a rien changé au code, il comprend pas.

    Alors je regarde, il a rajouté un bout de code tout con $commande->prix;

    Il retire, le site marche.

    Il comprend pas pourquoi ça plante.

    Je regarde.

    Comme tout bon framework sf2 a un orm, le truc c’est que pour obtenir le prix, l’orm réalise un join sur 3 tables de 1 millions de lignes chacune, forcément, c’est intenable sans quelques optimisations.

    Alors je demande au petit jeune si il sait qu’il y a une base de données derrière et qu’elle s’effondre.

    Réponse : “une quoi ? une base de données ? De quoi tu me parles, je veux accéder à une simple variable !!”

    Et oui, nous sommes arrivés la.

    Tout est devenu tellement abstrait que plus personne ne sait ce qui se passe derrière.

    Faire des requêtes sql ? Oh non, c’est trop bas niveau, puis c’est sale.

    Connaître un langage ? Oh non, c’est trop bas niveau, puis c’est sale.

    Connaître le protocole HTTP pour débuguer ? Oh non, c’est trop bas niveau, puis c’est sale.

    etc…

    En revanche, pour connaître les frameworks qui cachent tout, les abstractions qui cachent tout, etc… c’est pas les prétendants qui manquent.

    Je constate depuis 10 ans une fuite vers l’abstraction.

    Les gens ne développent plus en php mais sous sf2.

    Les gens ne développent plus en javascript mais sous jquery et pire, sous angular.

    Les gens ne connaissent plus sql mais maîtrisent parfaitement les orm.

    Bientôt nous verrons des gens qui ne connaissent rien à python mais qui maîtrisent django.

    La plus part des offres d’emploi iront dans le sens de l’abstraction pour plus de rentabilité.

    Mais les constructions deviennent extrêmement complexe.

    Et plus la complexité augmente, plus le bug devient probable.

    Certains diront qu’avec les tests unitaires et autres test driven developement limitent le plantage, mais ça rajoute de la complexité à la complexité.

    Je ne sais pas ou cette fuite en avant vers l’abstraction mènera.

    Ce que je sais c’est que quelque soit le langage, depuis les 3 dernières années, il y a autant de frameworks qui sont sortis que depuis la création des langages depuis 20 ans.

    Il y a une bulle des frameworks.

  • doublepenetration

    Qu’on leur apprenne déjà à écrire en français, ce sera déjà un bon début, à tous ces petits cons capitalistes analphabètes et incultes de mes 2 !

  • doublepene

    Tant qu’on ne fera pas comprendre aux gens que l’informatique est une science du traitement et non pas un loisir multimédia, on aura déjà avancé.

  • Louis

    Je viens de lire les précédents commentaires, et ça me rappelle mes cours de philosophie des mathématiques, où on se demandait ce qui faisait la différence entre les simples connecteurs logiques et le reste des fonctions mathématiques, et pourquoi ce sous ensemble de connecteurs est considéré comme propre à la logique, et pas les autres…

     

    Question de philo de l’informatique : qu’est-ce qui différencie un langage d’un Framework ?

     

    PHP lui-même n’était qu’une librairie à l’origine (intégrée en Perl si je me souviens bien). Idem pour les langages compilés, qui étaient des sortes de “frameworks” par rapport au langage machine. D’ailleurs, les codeurs de langages compilés considèrent les langages de scripts comme PHP, Ruby, Python ou JavaScript comme des “faux langages”, car faiblement typés, et non compilés, sans pointeurs mémoire.

     

    Quel développeur web aujourd’hui comprend l’adressage mémoire et les pointeurs ? Presque aucun, car ce n’est pas nécessaire. De même, connaitre le SQL est de moins en moins nécessaire. SQL est en train de disparaître, laissant la place à NOSQL, et avec l’augmentation de la puissance des serveurs, l’optimisation devient de plus en plus secondaire. La logique même des SGBDR va disparaître. Elle correspondait à un besoin d’optimisation et de performance correspondant à la faible puissance des serveurs des années 2000.

     

    Il y a peu, certains étaient contre la programmation objet car trop gourmande en mémoire. Où sont ils aujourd’hui ?

      

    Le mouvement vers l’abstraction existe depuis LES ORIGINES de la programmation. Lutter contre, c’est être réactionnaire, c’est protéger son bout de steak en disant “c’était mieux avant”, “les jeunes sont des cons”. Non, ce n’était pas mieux avant, et oui, ce sera mieux demain, et oui, nous serons un jour dépassé par la jeune génération. Un codeur de 50 ans, ça ne devrait pas exister.

     

    Au passage, profiter de votre cerveau encore plastique pour vous mettre sérieusement au JavaScript. PHP, Perl, Python et Ruby n’auront été que les langages de scripts faisant la transition entre les langages compilés façon C et le roi des langages interprétés. JavaScript , NoSQL, nGinx, programmation fonctionnelle et WebElements, voilà ce qui va totalement remplacer nos bon vieux serveurs LAMP, la POO et le modèle MVC.

     

    On a encore du temps devant nous, je dirais au bas mot cinq ans, mais c’est le moment de s’y mettre

    https://www.polymer-project.org/1.0/

  • boblinux

    Bon je vois, tout le monde est à peu près d’accord sur ce triste constat.

    Mais quelle solution proposez-vous? que conseillez-vous au jeunes comme moi? De faire du bas niveau dans tous les technos qu’on touche?

    Il faut bien comprendre que pour maîtriser sur le bout des doigts tous les protocoles/lire les codes de tous les frameworks qu’on utilise etc… nécessite plusieurs vies ^^

    Certes on fait ça par passion, dont on ne compte pas ses heures blabla…Etc…, mais les journées ne font tout de même que 24h =/

    Après sur le point de savoir bien écrire français, j’ suis totalement dakor, mais je ne pense pas que ce soit une priorité en soit, @Sam&Max ne sont pas des pros du français à ce que je sache =D, mais cela ne leur empêche en rien d’être des devs qui ont l’air de s’y connaître un minimum.

    De plus, la courbe d’apprentissage explose, en plus de tous les (nombreux) langages présents, maintenant, pour chaque langage il y a une panoplie d’outils à savoir gérer, et malheureusement, les offres d’emploi vont souvent dans ce sens, à savoir c’est des trucs du genre : On recherche dev Ruby On Rails, dev Django etc… donc on nous force la main à aller apprendre plein d’outils, si en plus de ça on doit tous les apprendre d’un point de vu bas niveau…ça risque d’être chaud

    D’ailleurs, n’est-ce pas le but de tous ces outils que de gagner du temps d’apprentissage? et de ne pas réinventer la roue?

    Donc pour être constructif dans ce fil assez intéressant, pour un jeune comme moi, j’aimerai savoir concrètement vers quoi vous nous orientez dans la stratégie d’apprentissage, à savoir (et d’autres qui passeront par là) par quoi commencer et quel cheminement tenir dans l’apprentissage de l’informatique ? sauter sur tous les outils présent? ou se contenter de la logique et ensuite s’adapter sur le champ ?

    Désolé du pavé =)

  • ultra

    Question d’un vieux aux vieux pour aider les jeunes.

    Quand un jeune veut apprendre à programmer, il doit commencer par quoi ?

    Les design pattern, uml, l’architecture ?

    Ou bien prendre un langage (au hasard python), lire l’excellent blog sam&max, maîtriser au bout des doigts le langage et seulement après aller vers plus d’abstraction (design pattern, uml, architecture et s’attaquer à java) ?

    Changement de sujet.

    @Louis

    Oracle a lu ton commentaire et ils éclatent de rire.

  • Louis

    IMHO, comme dit dans mon poste, nous vivons aujourd’hui une révolution dans les technologies web. Elle mettra quelques années à s’installer et à arriver en France, mais cela ne fait aucun doute qu’elle viendra.

     

    Cette révolution, c’est le JavaScript, NoSql, nGinx, la programmation fonctionnelle, les web elements.

     

    Ne perd donc pas trop de temps sur les anciennes technos (PHP, Pyhton, Java, etc.). Tu en as besoin pour trouver du boulot facilement tout de suite, mais pas pour trouver du boulot demain. Au passage, il y a déjà de nombreuses offres d’emplois pour des codeurs pure JavaScript.

    Le bas niveau : c’est pour les réacs. Les codeurs en langage machine se plaignaient que les codeurs en langage compilés ne connaissent même pas l’assembleur ; les codeurs C (procédural) reprochaient aux codeurs C++ (objet) de ne pas maîtriser les pointeurs ; les codeurs orientés bureau (C++ ou C#, Java, etc.) reprochent aux codeurs orientés scripts (PHP, Python, Perl, Ruby) de ne pas maîtriser le typage fort et de coder “sale”; et maintenant les codeurs orientés “from scratch” reprochent aux codeurs orientés frameworks de ne pas comprendre les BDD.

     

    La vérité : les réactionnaires finissent au chômage. Le secret en informatique, c’est d’être à jour, de se tourner vers le futur, d’être progressiste.

     

    Je te conseille donc, perso, de laisser totalement tomber le bas niveau, de ne pas consacrer trop de temps aux vieux frameworks type Django, Symfony, JEE, ou .NET (:puke:) ; et de consacrer beaucoup de temps aux nouveaux frameworks Javascript et à la programmation fonctionnelle (apprend la récurrence tant que ton cerveau est souple. )

  • Louis

    Orcale peut éclater de rire. Les programmeurs C++ se foutent aussi royalement de la gueule des codeurs django. Perso, je n’appartient à aucune secte, et j’ai fait mon bonhomme de chemin en me tenant à jour. Libre à vous de croire que la POO, les SGBDR et le MVC sont éternels. La vérité, c’est que la suite arrive déjà.

  • Romain

    Personnellement, il m’a fallu prendre un peu de distance avec le syndrome de l’imposteur avant de regarder les sources des vrais développeurs.

    Maintenant, j’en ai plus pris l’habitude mais je peux comprendre que cela fasse peur au programmeur débutant.

    Au delà de chercher des réponses aux questions techniques, cela permet de démystifier l’aspect magique de certains outils (quitte à en être decu) et cela peut permettre d’affiner son style de codage.

    Bref, c’est pas mal de traîner sur github de temps en temps…

    PS pour les lecteurs : allez voir les vidéos de Raymond Hettinger (cité dans l’article) sur pyvideo.org, vous ne perdrez pas votre temps.

  • ultra

    @Louis

    J’ai une question bête.

    Le petit jeune qui rajoute $commande->prix; qui plante le site, comment à ton avis il aurait pu débuguer sans savoir qu’il y a une base de données qui flanche derrière ?

    Je suis pas contre l’abstraction mais je suis pour savoir comment ça marche à un certain degré de précision (sans aller jusqu’à l’assembleur).

    Ton discours on dirait les livres d’uml qui t’expliquent qu’il n’y a plus besoin de savoir coder, suffit de faire de jolis diagrammes.

    Pourtant dans les offres d’emploi, ils cherchent des dèv, pas des designers uml.

    Autre point, les couches logiques.

    cpu -> assembleur -> c

    php, python etc… sont tous écrits en c

    ça fait 2 couches entre le langage et le cpu, ça va.

    Prends javascript, il y a combien de couches ? 3 ? 4 ? 5 ?

    Il y a des gens qui ont écrit en javascript une vm python qui tourne dans firefox.

    ça fait combien de couches entre le script python qui tourne dans cette vm et le cpu ? 10 ? 11 ?

    Après on s’étonne qu’il faut un quad core et 4Go de ram pour envoyer un mail.

    Je rappelle qu’il y a 30 ans, des cpu 4bits avec 8ko de ram envoyaient des mails (je caricature à peine).

    Si le progrès c’est devenir obèse, ça sera sans moi.

  • Louis

    @ultra

    Si tu relis mon tout premier post, j’ai commencé par expliquer que ce qui fait la différence entre un très bon codeur et un codeur moyen c’est le fait de lire le code source du framework que l’on utilise. Aujourd’hui, pour un codeur de plus de 30 ans, c’est normal, pour ne pas dire obligatoire, de maîtriser en détail le fonctionnement de son framework, et donc de comprendre les requêtes HTTP, les requêtes vers les BDD, de connaître le SQL, et les différents patterns de la POO.

     

    Un jeune de 20 – 25 ans aujourd’hui, évoluera dans un environnement de développement complètement différent d’ici 10 ans. Pour tout dire, cette génération n’a pas de chance : elle se retrouve coincée entre 2 paradigmes de programmation. Le premier (POO, SGBDR, MVC) est mûr, complexe, et demande un temps d’apprentissage long. Le 2ème est encore très récent (Programmation fonctionnelle, NoSQL, MVP, et Web Elements/components), pas vraiment prêts aujourd’hui pour les grosses applications (même si FaceBook, Twitter, & co sont déjà passé au NoSQL), et va subir encore de très nombreux changements (vous avez entendu parler du Extensible Web ?).

     

    Donc la génération actuelle doit apprendre le vieux paradigme bientôt périmé, et se préparer au prochain paradigme pas tout à fait prêt. L’ancienne génération, dont je fais partie, à intérêt à ce mettre à jour rapidement. Maintenant qu’on est à l’aise avec nos outils, c’est le moment d’apprendre à changer d’outils. Google nous facilite la tâche, avec Polymer par exempel :

    https://www.polymer-project.org/1.0/

     

    Quoi qu’il en soit, quitte à lire du code, lisez le code de AMPERSAND.JS, de express.js, de ember.js, et mettez vous sérieusement à node.js. Au lieu de perdre votre temps à optimiser les clés relationnelles de votre table, apprenez le NoSQL.

     

    Comprenez bien que même la programmation des chipset, donc ce qu’il y a de plus bas niveau aujourd’hui, passe au JavaScript. Le JavaScript est en passe de devenir LE langage de programmation, le langage de script qui va relayer la programmation C à sa fonction première : le développement système. (et encore, attentez vous à avoir un Kernel Linux en JavaScript un jour ou l’autre…). Les programmeurs en langage compilés seront bientôt une petite poignée élitiste bossant sur les OS, l’immense majorité de l’emploi sera tourné vers les javascripteurs. À bon entendeur…

     

    J’oubliais le @ultra

    Si tu relis mon tout premier post, j’ai commencé par expliquer que ce qui fait la différence entre un très bon codeur et un codeur moyen c’est le fait de lire le code source du framework qu’on utilise. Aujourd’hui, pour un codeur de plus de 30 ans, c’est normal, pour ne pas dire obligatoire, de maîtriser en détail le fonctionnement de son framework, et donc de comprendre les requêtes HTTP, les requêtes vers les BDD, de connaître le SQL, etc.

     

    Un jeune de 20 – 25 ans aujourd’hui, évoluera dans un environnement de développement complètement différent d’ici 10 ans. Pour tout dire, cette génération n’a pas de chance : elle se retrouve coincée entre 2 paradigmes de programmation. Le premier (POO, SGBDR, MVC) est mûr, complexe, et demande un temps d’apprentissage long. Le 2ème est encore très récent (Programmation fonctionnelle, NoSQL, MVP, et Web Elements/components), pas vraiment prêts aujourd’hui pour les grosses applications (même si FaceBook, Twitter, & co sont déjà passé au NoSQL), et va subir encore de très nombreux changements (vous avez entendu parler du Extensible Web ?).

     

    Donc la génération actuelle doit apprendre le vieux paradigme bientôt périmé, et se préparer au prochain paradigme pas tout à fait prêt. L’ancienne génération, dont je fais partie, a intérêt à se mettre à jour rapidement. Maintenant qu’on est à l’aise avec nos outils, c’est le moment d’apprendre à changer d’outils. Google nous facilite la tâche, avec Polymer par exemple :

    https://www.polymer-project.org/1.0/

     

    Quoi qu’il en soit, quitte à lire du code, lisez le code de AMPERSAND.JS, de express.js, de ember.js, et mettez vous sérieusement à node.js. Au lieu de perdre votre temps à optimiser les clés relationnelles de votre table, apprenez le NoSQL et la recherche par RÉCURRENCE .

     

    Comprenez bien que même la programmation des chipset, donc ce qu’il y a de plus bas niveau aujourd’hui, passe au JavaScript. Le JavaScript est en passe de devenir LE langage de programmation, le langage de script qui va relayer la programmation C à sa fonction première : le développement système. (et encore, attentez vous à avoir un Kernel Linux en JavaScript un jour ou l’autre…). Les programmeurs en langage compilés seront bientôt une petite poignée élitiste bossant sur les OS, l’immense majorité de l’emploi sera tourné vers les javascripteurs. Ce changement devrait se produire dans les 10 ans. À bon entendeur…

  • ultra

    @Louis

    Je suis d’accord avec l’évolution du métier, des outils, etc…

    Mais faut m’expliquer comment réaliser des transactions bancaires, des réservations d’hôtels/avions, achat e-commerce etc… sans SGBDR alors que ces services sont les poids lourds de l’usage d’internet.

    Il y a le blockchain (protocole utilisé par bitcoin) qui est un sérieux concurrent aux SGBDR dans cet usage transactionnel particulier, mais le NoSql, c’est une blague pour cet usage.

    Pour ce qui est d’écrire un noyau en javascript, linus nous lit et il rigole bien.

  • Louis

    mince désolé, j’ai posté la version “corrigée” à la suite de la version “sale”. :shame:

  • Sam Post author

    Autant je +1 sur l’évolution continuelle et inarrêtable de la technologie et de la manière de programmer, autant ta visions est limitée par de nombreux facteurs :

    • tu vois les choses depuis la lorgnette de la programmation web. La programmation Web n’est qu’un pan de la programmation. Ce n’est pas demain que tu verras JS utilisé dans un satellite (C), pour l’analyse de données financières (Python) ou pour gérer un complexe réseau (Erlang). Les autres outils ne sont pas là pour décorer, ils existent parce qu’ils répondent à des besoins, et en aucun cas une techo, fut-elle JS, ne répond à tous les besoins.
    • même dans la programmation Web, il n’y aucune raison de JS soit le seul compétiteur sur le serveur. Il est roi sur le client, c’est un marché captif, mais sur le serveur il a la concurrence d’autres technos qui ont aussi leurs avantages. Croire qu’il va bouffer tout le monde juste parce que tu aimes JS n’est pas objectif. Encore une fois, il y a plusieurs outils car il y a plusieurs besoins. Node n’est pas la panacée, aucune plateforme ne l’est, et les alternatives ont leurs points forts. Par ailleurs, le tout asynchrone n’est pas une solution miracle à tous les problèmes, et bien entendu, parfois c’est même contre productif.
    • dire que nosql va remplacer toutes les solutions de base de données est grandiloquent. En effet, la grande qualité des systèmes nosql, c’est un load balancing facile. Néanmoins, 90% des projets n’ont en aucun cas besoin de plusieurs serveurs. Du coup, on paie un prix en vitesse et en place pour un avantage dont on ne fait pas usage. Au final, même un système NoSQL fini par faire des check à l’insertion, et à formaliser le schéma de ses données quelque part quand il devient grand. C’est logique, il faut bien documenter. Alors on en revient à avoir défini ses tables (ou ses modèles ORM). L’avantage se réduit à nouveau. Note que je crache pas sur les systèmes NoSQL, qui sont forts utiles, mais encore une fois, pas une silver bullet.

    Donc certes, JS et NoSQL vont continuer de progresser, certes, ce sont des technologies à apprendre, mais non, les autres ne vont pas disparaitres.

    Le C n’a pas disparu. Le Java n’a pas disparu. Le PHP n’a pas disparu. Meme l’assembleur n’a pas disparu. Le mail n’a pas disparu. IRC n’a pas disparu.

    On utilise tout ça ensemble maintenant, avec une niche d’usage pour chaque techo où elle est performante. Ca sera pareil pour le JS.

  • Louis

    Critique acceptée.

    J’enfonçais le clou avec un peu trop de vigueur ^^

    Précision : je n’aime pas tant que ça le JavaScript.

    Et oui, bien entendu, je parle du développement web.

  • Thierry Chappuis

    J’essai personnellement de pratiquer la lecture de code de manière plus systématique, principalement dans un but d’apprentissage ou de perfectionnement, aussi parce que je suis curieux et que j’aime voir comme fonctionne les choses sous le capot.

    Une excellente lecture qui m’a bien aidé: http://www.spinellis.gr/codereading/

    avec mes meilleures salutations

    Thierry

  • doublepenetration

    “La logique même des SGBDR va disparaître”

    Il n’y a pas que le web dans la vie !! ;)

    Tu iras dire cela à la vente par correpondance et à l’industrie que les SGBDR sont morts ;), le nosql n’est pas nouveau…il a même 30 ans ;), alors pour un philosophe, tu manques de culture !

  • doublepenetration

    “Un codeur de 50 ans, ça ne devrait pas exister”

    Ce sont pourtant les meilleurs ;), bref tu joues le cake mais tu connais pas grand chose ;)

  • doublepenetration

    “JavaScript , NoSQL, nGinx, programmation fonctionnelle et WebElements, voilà ce qui va totalement remplacer nos bon vieux serveurs LAMP, la POO et le modèle MVC”

    Ou comment rêver des genoux ! Tu traînes trop sur korben.info…et finalement tu montres que tu n’as pas beaucoup d’expérience et que tu ne connais pas grand chose. Le BHL de l’informatique ;)

    • Louis

      “Les dev d’aujourd’hui, ils code peut être dans des langages pseudo-compilo-rterprété, là, de vrai assisté et tout, mais je les trouve bien plus malin qu’un mec qui essaye de déchirer la peau d’une bête avec ses ongles pour montrer qu’il est un vrai dur, alors qu’on a distribué les couteaux y’a 3 semaines.”

      lol, j’ai souvent vu ça dans ma carrière, en particulier dans la dev de jeux vidéo où les vieux codeurs issus du monde amiga ne veulent pas entendre parler de framework pour les jeux, de Unity & co… Déjà si ils utilisent DirectX ou openGl, c’est bien. Le nombre d’entre eux qui croient que “l’assembleur c’est super” et qui ne comprennent pas que ce N’EST PAS du langage machine, mais un langage compilé apparu à peu prêt en même temps que les autres langages mais pour les machines bon marchés… Enfin, ils se la jouent genre “proche du langage machine” et ils sont pas foutu de faire une démonstration en Lambda Calcul…. et parler leur de Curry-Howard et il n’y a plus personne…

      Sinon, je voulais juste dire à “doublepéné” que je ne suis pas un codeur js, et que les banques sont probablement les institutions les plus en retard et les plus conservatrices en terme de développement informatique. Et je suis lead programmeur, avec 10 ans d’expérience derrière mois, et suffisamment de neurones pour comprendre qu’il faut se mettre à jour.

  • doublepenetration

    “Le bas niveau : c’est pour les réacs.”

    Tu iras dire cela au monde M2M ;), tu dis connerie sur connerie, arrête s’il te plaît mon petit Louis ! Tu dis des betises à longueur de post ;)

  • doublepenetration

    @Louis

    Rentre chez toi rendre ton devoir en Javascript pour ton DUT, mais s’il te plaît arrête de faire le cake, tu te ridiculises car tu n’as pas assez d’expérience et tu lances des affirmations complètement fausses.

    J’attends le jour où tu auras 600 000 lignes de JS à debugger avec des callbacks dans tout les sens…T’auras bien le temps de philosopher ;) avec ton petit plugin webdev dans ton petit navigateur ;) crotte de nez qui pompe 2 Go de mémoire vive pour 5 onglets ;) !

  • doublepenetration

    “Au lieu de perdre votre temps à optimiser les clés relationnelles de votre table, apprenez le NoSQL et la recherche par RÉCURRENCE .”

    Je crois que c’est le pire que j’ai pu lire du petit Louis ;), attendez je montre ses postes à mon service ! On va bien rigoler !

    T’iras travailler pour la banque !!! “Eh les gars , faut arretez d’optimiser vos tables ” … ;) des barres ! Le transactionnel ça sert à rien en secteur bancaire… ;) c’est bien connu !

    Putain franchement, le web 2.0 c’est de la merde où la parole est donnée à des petits cons arrogants et ignorants…Retourne faire mumuse avec tes frameworks pourris en JS ;), putain y a des cours d’algo qui se perdent ;)

    Pour info, ça veut rien dire “une clé relationnelle”, une clé est soit primaire ou soit étrangère…L’esprit relationnel vient des cardinalités et des opérations réalisées sur les ensembles ! Encore un qui avait une bulle en MERISE ;) et qui utilise de l’UML pour modéliser des bases (du déjà vu) !

  • buffalo974

    Personne n’a parlé du futur de Cython…

    Question : on dit du bien de Node parceque c’est rapide et que ça permet de coder

    côté client et serveur dans une même langue.

    On a déjà parlé de Brython pour le côté client, mais qu’en est il des possibilités de Cython ?

    Moi j’aime pas être dépendant de JS.

  • boblinux

    j’ai failli déprimé en lisant le com’s @Louis !

    j’ai bien soufflé en lisant le com’s de Sam!

    Stop nous faire des frayeurs comme ça les gens ><‘ !

    ps : le web c’est de la m…, le C il n’y a que ça de vrai :xx

  • Sam Post author

    Heu les gars, louis sort un poli “critique acceptée”, et vous le dégommez. C’est pas cool.

  • Betepoilue

    Je ne trouve pas, vu de ma mince expérience, que tout soit à jeter dans ce que dit Louis. Après il s’est peut-être un peu trop enflammé, mais c’est vrai que tout évolue bien vite et qu’un certain nombre de gros acteurs (Facebook c’est toi que je regarde) cherchent à pousser Javascript toujours plus loin, quitte à rogner sur d’autres langages et à générer trop d’abstraction.

    Après là où je ne suis pas d’acord avec toi Louis, c’est que je pense justement que c’est le pire moment pour se mettre à tous les nouveaux joujous pondus en JS. Exemple simple : Angular, avant le passage à la v2 tout le monde se pissait dessus avec ça, j’ai commencé à m’y intéresser quand Sam en a parlé ici. Totale maintenant la plupart du code qui était valable avant ne l’est plus, puisque Google veut rester compétitif en terme de features avec ce qui se fait de nouveau (React, …) je n’ai que des petits projets à maintenir pour le moment donc peu importe, mais j’en aurais eu un vrai bonjour le caca en barres. Et même quand on regare les langages bas-niveau ça bouge aussi, Rust, D, et d’autres qui apparaissent encore un peu plus chaque jour. A part Facebook, qui se sert de D pour le moment ? Je pense voir apparaître au moins une nouveauté (langage/framework avec toujours une accroche marketing genre mon nouveau truc shiny dégomme tout plus que les autres) tous les mois sur reddit et hacker news. Du coup, je pense qu’il est non seulement impossible de tout suivre, mais qu’en plus ces nouveautés n’offrent pas suffisamment de garanties en termes de pérennité pour que ça vaille le coup de se casser le cul. On parle déjà des features d’ES7 alors que ES6 vient juste de passer en release et n’est même pas porté complètement sans Babel. Ce qui fait la force des lanages comme python, java ou autres, c’est leur ancienneté éprouvée et une communauté forte. Là mon petit délire cool kid c’est de mixer react et meteor et si je dois reconnaître que meteor est top en termes d’abstraction (c’est vraiment un jouet) il y a pas encore beaucoup de doc dessus et ça me bouffe trop temps d’essayer de m’en sortir avec mon niveau de dev amateur.

    Mais je suis d’accord sur le fait que les lignes bougent et qu’il est important de garder un oeil sur ce qui se fait de nouveau pour ne pas être perdu sur les compétences demandées par les recruteurs / clients. Ça vaut toujours le coup aujourd’hui d’apprendre le C 1 mon avis, au moins pour approcher les langages basés dessus autrement et avec un oeil éclairé.

    Toujours se branler avant de poster sur un débat de devs, toujours ;)

  • ultra

    Petit hs.

    La discussion sql / nosql est très intéressante et illustre bien l’imprévisibilité du prédateur.

    C’est pas nosql qui va tuer sql mais la blockchain.

    sql est utilisé pour garantir les transactions, oracle a bâti tout un empire dessus.

    Les blockchains c’est tout simplement un livre de transactions décentralisé infalsifiable.

    Les transactions peuvent être n’importe quoi :

    A doit 40 euros à B

    A a réservé un hôtel

    B a réservé une voiture

    A a commandé un livre

    etc…

    L’usage le plus connu du protocole blockchain est monétaire avec les bitcoins.

    C’est la killer app qui a sorti ce protocole de l’ombre.

    Le problème de cette killer app c’est que son usage est sulfureux, argent sale de la drogue etc…

    Donc la prochaine révolution, c’est celui qui va trouver une killer app moins sulfureuse et grand public.

    Par exemple, toutes les transactions d’achat / vente de biens immobiliers sont enregistrées avec ce protocole.

    Ainsi tout le monde a accès à l’historique de tous les acheteurs / vendeurs de n’importe quel bien immobilier.

    Le coût des enregistrements et de l’accès devient négligeable.

    Autre exemple, les successions et les héritages.

    Tout l’historique est dans la blockchain.

    Encore un exemple, le carnet d’ordre des transactions financières, qui a vendu à qui quand et à combien.

    Toutes les bourses mondiales passent au protocole blockchain, ça augmente l’efficacité d’un facteur 10.

    Quand on sait la course que mènent les bourses mondiales pour traiter au plus vite les transactions, la blockchain est un avantage considérable.

    etc…

    Avec un tel système d’enregistrement des transactions, oracle est mort de chez mort.

    Tout comme oracle a bâti un empire sur le sql il y a tout un boulevard pour créer un empire sur le protocole blockchain et a billion dollar company.

    Retenez bien ça, blockchain.

  • boblinux

    @ultra

    Ton com’s a l’air bien cool, mais quand on introduit un terme, faut un peu l’expliquer ;)

    Donc, qu’appelles-tu le protocole blockchain??

  • doublepenetration

    “Nous sommes la pour discuter, pas pour dézinguer les gens.”

    Je ne travaille pas dans le social, si les gens sont fragiles, qu’ils ferment leur grande gueule ! Ca nous fera des vacances !

  • fero14041

    @doublepenetration:

    Tu vis en société (IRL ou pas), interagit avec des gens qui sont par nature différents de toi. La moindre des choses est donc d’être respectueux par défaut, poli à tout le moins. Tout le monde n’a pas (à) accepté(r) ton contrat implicite: “ceux qui ne fonctionnent pas comme moi je les emmerde et leur fait savoir” (et/car ils sont “faibles”).

    De rien!

  • Réchèr

    La blockchain. Moui pourquoi pas. Et si on faisait un petit brainstorming à ce sujet ?

    Système de gestion de paternité de la création artistique. Je dessine une bite sous Paint. Quelqu’un d’autre lui ajoute un filtre sépia, une troisième personne l’intègre dans un tableau de la Renaissance. La blockchain permet de prouver qui a contribué et comment.
    Même chose mais pour la recherche scientifique. Ça permettrait de publier des résultats en étant sûr qu’on ne s’en fera jamais voler la paternité.
    La gestion des transactions immobilières permettraient d’être moins dépendant des notaires et de leurs tarifs indécents. L’utilité actuelle d’un notaire, c’est d’avoir une tierce partie pour arbitrer une vente, car pour quelque chose d’aussi important qu’une maison, on ne veut pas risquer de se faire arnaquer. Une blockchain pourrait remplir cette fonction.
    Calcul distribué de tout et n’importe quoi.
    Algos génétiques. Est-ce que l’ADN humain ne pourrait pas être vu comme une blockchain ? Chacun en ayant une version un peu spécifique.
    Hébergement web décentralisé, avec réplication et wayback machine intégré. Utile pour les lanceurs d’alertes, les activistes et les pédonazis. (Ah zut, on avait dit pas de sulfureux).
    Un gigantesque Minecraft-like avec possibilité de voyager dans le passé et de créer des réalités parallèles. (Et les joueurs auraient des pouvoirs spéciaux pour transférer des cubes d’une réalité à l’autre).
    Ou sinon un truc pour jouer aux échecs avec ses amis. C’est bien aussi.

  • Réchèr

    Rhaa bordel, j’avais mis des sauts de ligne et des petits tirets pour bien séparer chaque idée. Y’a tout qui s’est barré.

    Sam&Max, why you no more have previsualisation function ?

  • Nico

    Je n’y croyais pas (de mon point de vue, je suis principalement inté/dev front, auteur d’un micro-framework CSS), et pourtant, c’est bien une réalité : même sur un langage « simple » comme CSS (je mets « simple » entre guillemets), ils ne lisent plus le code et ne réfléchissent plus à l’archi derrière.

    Autant je peux comprendre qu’une couche d’abstraction sur de l’assembleur soulage bien les neurones :), autant je suis stupéfait de constater ce que dit cet article est juste : les 3/4 téléchargent la CSS, la posent, créent une autre CSS, écrasent les valeurs, et ne touchent pas. Alors que ça prendrait 15 bonnes minutes pour l’adapter.

    Evidemment, tout l’apport de structure qu’amène le micro-framework est ruiné en 3 minutes.

  • doublepenetration

    @fero14041

    Tu as tout compris, j’ai ai rien à foutre de la tolérance et des pleureuses dans ton genre.

    De rien ;)

  • doublepenetration

    @boblinux

    C’est vrai tu as raison, j’ai un peu abusé, mais ça me saoule les petits défenseurs en carton du temple du politiquement correct et de la bienséance, je n’ai aucun compte à rendre, si mon style ne lui convient pas, il suffit de m’ignorer. J’ai pas un style très Charlie ;)

  • kontre

    @doublepenetration Ah bon, Charlie est connu pour son politiquement correct ? :)

    Sinon, je lis avec intérêt cette discussion qui me passe loin au-dessus de la tête. Comme le dit Sam, y’a pas que le web dans la vie. Python prend seulement son envol dans les sciences, et y’en a encore un paquet qui font du fortran.

    Le web a l’avantage d’être relativement neuf, et ça évolue vite. Seulement changer de techno tous les ans, c’est juste pas viable sur le long terme. Ça va s’essouffler un jour ou l’autre et se stabiliser (même la loi de Moore se calme, c’est dire), avec quelques révolutions de temps en temps.

  • doublepenetrationcreampie

    @kontre

    Entièrement d’accord, il faut prendre du recul et ne pas vivre au rythme médiatique et commercial.

    Un projet ça s’étudie, ça se structure, ça prends de la maturité, ça s’enrichit, ça se mesure, parfois ça s’envole, parfois ça meurt.

    Je confirme également le fait que dans les grandes structures de recherche scientifique, le Python domine et s’émancipe : centres hospitaliers universitaires, CNRS, INSERM, unités de recherche…

  • Ginko

    @ultra, @Réchèr,

    La blockchain, c’est un historique décentralisé et infalsifiable de transactions. Ça permet de se passer d’institution à qui faire confiance. Institution qui généralement profite abusivement de sa position pour faire payer à prix d’or un service qui ne lui coute pas tant que ça. Sans compter la corruption.

    Donc ouais, pour cramer les notaires, c’est exactement ce qu’il nous fallait. Et une part de l’activité des banques aussi. Pour l’édition d’œuvre de façon décentralisé et sécurisée, ça devrait aussi le faire : la plupart des exemples de @Réchèr, sauf l’ADN (j’y reviendrai plus tard).

    J’ai trouvé ça sur les interwebz : http://radar.oreilly.com/2015/01/understanding-the-blockchain.html le mec va assez loin dans l’analyse.

    Mais ces caractéristiques (historique décentralisé et infalsifiable) n’en font pas une db universelle. Bien au contraire. Lorsque tu t’en fous de l’historique ou de la décentralisation ou de la confiance, la blockchain, elle te sert à rien. Une bonne petite sqlite ou même un fichier csv s’il faut feront très bien l’affaire.

    La blockchain n’est pas à mon sens la tueuse de SGBDR. Pas plus que les bases NoSQL. Chacun ses qualités, chacun ses usages.

    PS : à propos de l’ADN.

    Il n’est pas un historique : c’est juste un effet secondaire du processus héréditaire de l’évolution qui permet de retracer l’évolution du génome en traçant certains segments qui font office de signature. Mais c’est pas réellement fiable. D’ailleurs chez les bactéries c’est absolument pas fiable : elles passent leur temps à jouer avec des bouts d’ADN, à se les échanger, à les recopier. Et tout généticien vous le dira : les génomes, ce sont quand même d’immenses bordels avec des tas de bouts redondants qu’on sait pas vraiment s’ils servent à quelque chose, pas mal de vieux retrovirus qu’on sait pas s’ils sont complètement KO ou juste endormis, une logique de lecture à la mord-moi-le-noeud (et vas-y que je te parsème ton gène de portions inutiles qu’il faut dégager avant de pouvoir en faire quelque chose).

    Il n’est pas infalsifiable : c’est même une feature. La mutation dosée est le second pilier de l’évolution par sélection naturelle(avec l’hérédité). Certaines bactéries font même volontairement muter leur génome lorsque ça sent le roussis.

    Par contre on peut y voir une forme de décentralisation. Avec des checkouts à chaque division cellulaire, des forks à chaque mutation, des push lors de transgenèses (par exemple des échanges de plasmides bactériens) et des merge lors des reproductions sexuées.

  • JEEK

    …encore un article de qualité (oui je sais, je ne suis pas le premier à le dire)… avec son lot de commentaires intéressants (si si) !

    Pas mal de bons points soulevés, même quand ça monte un peu dans les tours ; donc forcement, je remercie tout le monde…

    :-)

  • boblinux

    @ALL

    Vous êtes bien gentils avec vos prévisions révolutionnaires mais en attendant personne n’a expliqué c’est quoi le blockchain concrètement :x

    Si c’est comme ça je vais demander à mon ami google ! (nananananeeereuh…)

  • Sam Post author

    La blockchain est une base de données distribuées qui a été popularisées par bitcoin. Le principe est que chaque entrée est signée cryptographiquement par celui qui l’a fait, puis propagée à tous les ordinateurs qui sont intéressés par le contenu de cette base de données. Aucune entrée ne peut être effacée, et chaque nouvelle n’est qu’une modification calculée par rapport aux anciennes.

    Comme chaque machine possède non seulement toutes les données mais les outils pour vérifier que les données sont bien rentrées par la personne qui prétend l’avoir fait, la blockchain est une base de données qui possèdes ces caractéristiques :

    • infalsifiable tant qu’au moins 51% de la puissance des machines joue le jeu
    • accessible par tout le monde
    • complètement publique et ouvert
    • toujours à jours et synchronisé entre toutes les machines
    • historique de tout ce qui s’est fait depuis le début

    Pour cette raison, la techo a du potentiel pour stocker toutes les données publiques qui ont besoin d’un historique fiable :

    • transactions immobilières
    • votes
    • comptes en banque

    Tous les citoyens auraient alors accès à toutes les données, en temps réel, avec l’intégralité de l’historique depuis le début, et l’identité des personnes qui font les entrées, tout en pouvant tout vérifier.

    Il y a 3 problèmes majeurs à la blockchain :

    • ça prend exponentiellement de la place;
    • c’est récent et difficile de dire encore si c’est fiable;
    • si 51% de la puissance des machines part en couille, le système ne vaut plus rien.
  • boblinux

    @Sam Merci pour l’explication claire =D (t’as changé de photo :O )

    bon, du coup la confidentialité on l’a dans le c… étant donné que tout le monde à accès à tout ce qui s’est passé, j’sais pas si ça arrange les gens que tout le monde sache ce qu’ils trafiquent sur leur compte en banque, ou encore dans leur choix de vote .

  • Sam Post author

    Le fait que toutes les transactions soient publique ne veut pas dire que l’identité des auteurs doit l’être. La blockchain garanti juste qu’on puisse retracer toutes les transactions d’un auteur. On peut imaginer par exemple une base de données séparées qui elles contient les informations nominatives, à laquelle seul l’état à accès sous certaines conditino.

  • amz3

    Ce qui m’aide à lire du code, c’est surtout le travail en groupe, sinon:

    Faire de la maintenance/contributions et pas juste pondre des nouvelles fonctions qui ont rien avoir avec le code initiale (genre faire une app générique en Django).
    Le jump-to-definition (avec elpy, sous emacs). Et si je le fais c’est parce que c’est plus rapide que taper dans la doc ou même http://devdocs.io.
    travailler sur des trucs récents (ex: asyncio) où il y a moins de doc, moins de gens pour aider qui ont du temps pour répondre à des questions de base…
    follow des projets, lire les shortlog et petit à petit on rentre dedans

    Et lire le code juste comme passe-temps. Perso j’ai commencer avec mes ancien projets en mode «Quelles betises j’ai pu faire à l’époque» ou «Quelle boulet pourquoi il a fait ça comme ça» sur des projet libre que je citerait pas :)

  • Max

    Toujours en train de râler ces devs, j’ai mis un plugin de prévisu mais comme les 3/4 des plugins WP il est tout bugué.

    Du coup y a une semi prévisu là en bas sous le bouton “post comment”.

    J’ai la méga flemme d’aller plus loin dans le code pour faire un truc beau donc ça restera moche sauf si quelqu’un propose un plugin plus sympa qui marche ^^

  • boblinux

    @Max

    Ah, enfin te voilà dans les parages !

    Pendant que je te tiens :

    ça avance le plugin projet d’IE? à un moment t’avais fais 2-3 tests et ensuite pu rien )=’

    J’espère que tu nous prépares un bon article là dessus…je(on) brûle d’impatience !

    • Max

      @bob

      je vais te décevoir alors, le plugin pue du groin, ça foire de partout donc j’ai laissé tombé, un peu trop le bordel surtout que j’ai pas de version en local pour tester, alors obligé de bidouiller en prod et ça fait tout péter :/

      je me tâte pour discourse mais je doute qu’il soit bien adapté…

      il faut relancer le débat ^^

  • Tta

    Hum,

    pour répondre à l’article je dirais aussi qu’il y’a l’effet code source degueu. Bon on ne parlera pas d’open ssl avec ces dix sept niveaux de #ifdef #endef imbriqués (cf http://www.openbsd.org/papers/bsdcan14-libressl/mgp00001.html pour plus de detail). Mais en prenant que le simple exemple de django, j’ai fait le test aujourdh’ui de demander à un dev compétant de django de m’expliquer comment fonctionne base.py et form.py ! Faut dire que c’est pas simple quand tu as des metaclass qui hérite (multiple) d’autres metaclass et qui sont appliqué via un décorateur à d’une méthode de ta classe utilisateur (comme pour les CBV).

    plus généralement, je pense que sérieusement la vie n’est que compromis :

    – un orm qui utilisera de la magie noire (metaclass et autre) sera facile à utiliser pour l’user qui aura l’impression de manipuler des objets alors qu’il fera des requêtes à une db ect mais deviendra hyper fermé à la lecture du code source

    – un programme en fonctionnel, sans POO sera très facile à debuger (on a pas à se poser la question de quelle fucking methode abstraite je dois hériter pour mettre mon breakpoint) mais va faire un truc modulaire (sous forme de plugins) sans aucune notion de classe abstraites et classe fille, sans design pattern ect

    De la même facon :

    – certains language ont des gourous (python) qui imposent une rigueur dans la manière de programmer

    – d’autre language sont beaucoup moins strict (js par exemple) et du coup c’est au programmateur et au outils de linting (genre eslint) de faire la tache du “oui tu écris un code propre”.

    Enfin chaque paradigme (fonctionel/POO) et chaque language à ses pour et ses contres et souvent les pour d’un truc sont les contre d’un autre, tout dépend de l’utilisation, de la formation du dev ect

    Par exemple haskell en bon language fonctionelle ne manipule que des fonctions ! Autrement dit, tu ne peux pas de base modifier l’existant, juste prendre une pomme et créer une nouvelle tarte au pomme. Donc pour écrire dans un fichier, interagir avec le clavier ect ça coince puisque ça modifie un état existant ! Haskell vient à la ressource en proposant de délimiter cette espace de modification de l’existant dans une structure curriée ce qu’il lui permet “aux erreurs de modification de l’existant que j’ai cantonné dans mon monad” près de continuer à faire de la composition de type ect. en résumé pour comprendre un code source un peu compliqué en haskell il faut avoir une bonne base de théorie des groupes (monoides, loi ensembliste ect). et dans mon cas je peine encoreà utiliser mais mon frère qui fait un cursus math info à ulm ça lui semble peanuts bien plus que de la POO.

    Anyway, c’est cool de ne pas avoir un esprit fermé, de savoir test des nouveauté et se disant que si tu défend à tout prix un language, alors c’est que soit tu viens de le découvrir et donc tu vois pas les défaults (mon cas pour rust) soit tu fanboyise à mort par peur du nouveau, de l’intérêt d’apprendre ect… Pour reprendre l’exemple du noSQL je suis tombé amoureux (fanboy et conscient) d’OrientDB (http://orientdb.com/docs/last/index.html) pour plusieurs raisons : car j’ai déjà fait du RDBMNS et que je sais apprécier les gains qui vont suivre ; car j’ai besoin dans différents cas de ce sharding/replication dont parlais @sam ; car j’ai conscience du benefice algorithmique sur des relations N-N ; car avoir un message queue et un full text search lucene intégré me simplifie la vie en temps que syadmin. Mais je ne conseillerais pas car user ce grne de produit bleeding edge requiert : de savoir aller voir dans le code source (on revient à nos moutons) et de savoir parler à des dev sur des issues github, ect. Deux qualités bien rares aujd.

  • Sébastien

    Bonjour,

    merci pour vos astuces et plus généralement votre retour d’expérience.

    Toutefois j’utilise Mac OS X et la distribution Anaconda

     
    import os
     
    print(os.<strong>file</strong>[:-1])

    donne

    //anaconda/envs/py3k/lib/python3.3/os.p

    alors que

     
    print(os.<strong>file</strong>)

    renvoie bien

    //anaconda/envs/py3k/lib/python3.3/os.py

    (avec le y à la fin)

    L’astuce

    !editeur module.__file__

    ne semble pas suivre les chemins de ce type, en effet :

    !emacs os.__file__

    Affiche un fichier vide

    En allant dans Bash et en faisant

     
    open //anaconda/envs/py3k/lib/python3.3/os.py

    j’ai par contre bien accès au code du module en question.

    Merci quand même

    Cordialement

  • Sam Post author

    Le but de l’article n’est pas un tutorial sur comment lire le code source mais de parler de l’habitude de lire le code source. L’astuce donnée est juste une mention d’un moyen de lire un code source dans un contexte, et ne fonctionnera que de ce contexte.

  • Benjamin Delespierre

    C’est tristement vrai, peu de développeur s’intéressent aujourd’hui au code source. Il est plus fréquent de voir une techno abandonnée par un dev que de le voir ouvrir la source pour savoir pourquoi elle ne fonctionne pas. Cet état de fait créé un lit pour un autre vice: certains développeur ne codent pratiquement plus. La densification des libs / frameworks / snippets / et facilitateurs en tout genre rend de plus en plus la production de “bon vieux code” obsolète. Pourquoi réfléchir et apprendre quand on peut copier coller ?

  • Un jeune dev

    Heu, s’il vous plaît, les gens qui commentent, arrêtez d’être suffisant.

    L’autre, là, il veut se faire passer pour un developpeur alors qu’il est même pas capable de parler français tellement il raccourcis les mots. J’aimerai bien voir ses noms de variables.

    Vous avez un souci je crois, vous remettez le problème sur les autres. Peut être que si on (nous, les jeunes) ne lit pas votre code, c’est parce qu’il est tout simplement incompréhensible !?

    Oui, on est a l’aise avec des contextes et des concepts complêtement abstrait, et je préfère croire que si quelqu’un ne parviens pas a comprendre quelque chose, c’est qu’on lui a mal expliqué – au vu de toute la jalousie qui nous entoure, la distribution d’info dans une entreprise c’est carrément la guerre. Alors bon, oui, je veux bien essayer de comprendre du code, mais commencez par y mettre la forme, hein ? Souvent, de la doc, ça vaut mille fois mieux qu’essayer de comprendre un mec qui, en plein rush, a simplifié son code au strict minimum.

    Reprocher a un petit jeune de pas savoir, c’est stupide, tu devrai te sentir débile de pas lui avoir appris, d’avoir été assez naïf pour croire qu’il saurait, ou de considérer que ce savoir est une évidence parce qu’en temps qu’informaticien tu sais que l’évidence n’existe pas.

    Vous, vous êtes vieux, si on vous t’écoute, un informaticien doit connaitre les trucs par coeur, connaitre a fond les rêgles métiers.

    Vous avez un sérieux problème : vous n’arrêtez pas de nous (me) repeter qu’il faut réutiliser, ne pas réinventer la poudre, et là je lit quoi ? Que vous nous en voulez d’apprendre un framework avant le langage ? Arrêtez, là, la branlette de l’égo ça rends sourd. Toi, quand t’es né, y’avais pas de framework, t’es jalou ? Les dev d’aujourd’hui, ils code peut être dans des langages pseudo-compilo-rterprété, là, de vrai assisté et tout, mais je les trouve bien plus malin qu’un mec qui essaye de déchirer la peau d’une bête avec ses ongles pour montrer qu’il est un vrai dur, alors qu’on a distribué les couteaux y’a 3 semaines.

    Moi, je préfère me dire qu’un bon informaticien est curieux, qu’il aime apprendre plus que savoir, et si il se demerde sans rien savoir, a construire une application en pêchant le minimum sur internet, en réutilisant le maximum de ce qui a été créé, il aura été bien meilleur qu’un mec qui fait toujours la même chose, qui code toujours dans le même langage, et qui cherche 1h par jour des trucs inutiles qui viendront polluer son cerveau quand il programme, et s’avéreront parfoit inutile quand il voudra les utiliser. A quoi ça sert de savoir résoudre un problème ? A rien. Les dev ils sont là pour résoudre les problèmes qu’ils n’ont jamais rencontré. Avec quelle logique tu parviens a croire qu’il faut tout accumuler dans sa tête pour savoir résoudre des problèmes que tu n’a jamais rencontré ? Celle d’un developpeur ? lol

    Un bon informaticien il optimise son code, mais il optimise encore plus son cerveau c’est ça que vous saisissez pas.

    Et “un bon informaticien” est un génie de l’information et de la logique, c’est a dire qu’il sait mieux qu’un philosophe comment rester subjectif et ne pas se laisser emporter par des trucs personnel comme l’ego ou les biais cognitifs qui vous font passer ici a mes yeux pour de parfaits abrutis.

    Je prends les choses a moitié personnellement parce qu’après je lis qu’il est difficile de trouver des jeunes compétents, alors que j’ai toujours eu l’impression que c’étais les vieux qui savent pas évaluer un developer.

  • Sam Post author

    Il serait bon de savoir à qui s’adresse ta réponse, car ce n’est pas clair en te lisant.

  • 7c

    Je viens après la bataille mais je voudrais faire part de ma petite expérience.

    Je travaille chez un éditeur de logiciel et le C/C++/JAVA est notre pain quotidien pour des raisons historiques + perf CPU & MEM. En entretien d’embauche on voit passer des CVs ++ (grande école, stageS valorisantS, exp pro à l’étranger) et la première question que l’on pose pour s’échauffer c’est de proposer plusieurs solutions pour… permuter deux chiffres. Oui oui simplement permuter deux int et rien d’autres. Au final très peu savent le faire et on découvre alors qu’ils n’ont fait que du putain de LEGO avec des frameworks (je prends la sortie de la brique tutu et je branche sur l’entrée de la brique tata).

    Après ca on ose difficilement aborder l’algo de base, les designs patterns ou encore des trucs un peu plus utiles/nécessaires en C/C++. Le génie logiciel (organisation de travail en équipe, de projet, etc) c’est terra incognita: leur vision se limite a etre chef de projet ou architecte (si tu codes encore après 2 années d’exp pro c’est que tu as raté ta vie).

    De l’aveu de nos RHs recrutement on a un ratio 10/1000 entre les candidatures et les candidats qui arrivent aux entretiens avec les devs. Ensuite ce ratio tombe a 1/1000 pour les embauches, ratio qui tombe encore quelques mois après car quelques uns s’en vont pour faire comme les autres de leur promo: javascript/node.js & Co + app ios/android (it’s the place to be, man). Le fait que notre application/plateforme fasse plusieurs millions de ligne de code (naturellement au quotidien on navigue que dans un sous ensemble) est un facteur aggravant 8-)

    Pourtant les salaires sont très très très confortables + cadre de travail sympa + secteur qui offre des défis au quotidien. Mais bon voila on fait has been…

    • Benjamin Delespierre

      Ah ça, le code à l’ancienne ça se perd ma bonne dame. Moi d’mon temps on apprenait aux jeunes la débrouille dans le code avec une lib standard aussi pauvre que le Bangladeshi moyen à la fin du mois, mais ça forge le tempérament et surtout ça aide à voir les composants / frameworks et autres modules next gen à la fois pour ce qu’ils sont mais surtout ça permet d’avoir un regard très critique sur tout ça et de prendre (selon moi) de meilleures décisions. Mais que veux tu, aujourd’hui c’est noraj si tu vois tes collègues tirer inutilement une dep vers un composant lourd pour s’économiser 3 lignes de code simple sinon tu te feras pas beaucoup d’amis et tu vas pas pouvoir recruter. C’est une dure réalité. Aussi dure que ma

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.