16 points par GN⁺ 2024-05-21 | 5 commentaires | Partager sur WhatsApp
  • UNIX, Git, Emacs, Boost.Graph, Bazel
  • En tant que programmeur, on interagit chaque jour avec des outils logiciels, mais la plupart ne servent qu’à accomplir tout juste la tâche demandée
  • Il arrive parfois de tomber sur des logiciels qui vont au-delà de la simple utilité, stimulent l’imagination, ouvrent de nouvelles possibilités et influencent la manière de concevoir des systèmes
  • J’appelle ce type de logiciel de l’« enlightenmentware »
  • Pour les programmeurs, la source d’éveil la plus fréquente est le langage de programmation qu’ils utilisent, y compris ceux appris comme hobby
  • J’ai connu de nombreuses révélations en pratiquant des langages comme MASM, C, Prolog et Idris
  • Comme l’effet de l’apprentissage des langues sur l’élargissement de la pensée est connu depuis longtemps, cet article choisit de ne pas se concentrer sur les langages, mais uniquement sur les logiciels qui provoquent cet éveil

UNIX

Unix est convivial — il choisit simplement bien ses amis.

Anonyme, "Art of unix Programming" par Eric S. Raymond

  • En 2008, pendant mes études à l’université, j’ai commencé à chercher mon premier emploi en programmation.
  • La plupart des offres demandaient des connaissances en UNIX et en sockets.
  • Comme le cursus universitaire ne proposait aucun cours sur Unix ni sur les systèmes d’exploitation, j’ai décidé de l’apprendre en autodidacte.
  • C’est avec le livre "The unix Operating System" d’Andrey Robachevsky et al. que je suis entré dans l’univers Unix.
  • L’installation de Mandriva Linux m’a permis d’explorer l’environnement Unix.
  • Depuis, Unix m’a accompagné à chaque étape de ma vie.
  • La majorité des logiciels fonctionnent dans un environnement Unix, et je consulte encore aujourd’hui le livre "Advanced Programming in the unix Environment".

Git

Avec Git, il est facile de se tirer une balle dans le pied, mais il est aussi facile de revenir à son pied précédent et de le fusionner avec sa jambe actuelle.

Jack William Bell

  • Début 2009, j’ai découvert les systèmes de gestion de versions en utilisant Rational ClearCase.
  • ClearCase était extrêmement déroutant et ne couvrait que le strict minimum.
  • J’ai ensuite utilisé Subversion, que j’ai appris grâce au livre "Version Control with Subversion".
  • Subversion était facile à comprendre et à utiliser, mais peu pratique pour les projets personnels.
  • Puis j’ai découvert Git.
  • Git avait une courbe d’apprentissage raide et était déroutant, mais d’une tout autre manière que ClearCase.
  • Git a supprimé la friction liée à l’usage du versioning, au point de permettre de versionner tout ce qui en vaut la peine.
  • La conception de Git était séduisante par son élégant mélange de système distribué, de graphe acyclique et de stockage adressé par le contenu.
  • Étudier les entrailles de Git était si amusant que cela m’a donné envie de m’intéresser à d’autres systèmes de gestion de versions.
  • Le principal défaut de Git est son approche orientée snapshot, qui rend les fusions plus difficiles à comprendre.

Emacs

N’importe quel éditeur de texte peut enregistrer des fichiers, mais seul Emacs peut sauver votre âme.

Per Abrahamsen

  • J’ai édité mes premiers programmes dans les accueillantes fenêtres bleues de Turbo Pascal 7.0.
  • À l’université, j’ai appris la programmation en Pascal, puis j’ai utilisé C++ et Java.
  • Dans mon premier poste de programmeur, j’utilisais NEdit, mais je me suis vite intéressé à Vim et Emacs.
  • Vim était exigeant mais amusant, comme jouer d’un instrument de musique.
  • Emacs est une machine Lisp qui offre des fonctions d’édition de texte et de gestion des fenêtres.
  • Sa structure interne est propre, bien organisée et bien documentée.
  • L’étendre avec Emacs Lisp est bien plus simple qu’avec la plupart des autres éditeurs.

Boost.Graph

J’ai un fort préjugé contre la mode du code réutilisable. Je pense que le "code rééditable" est bien meilleur que les boîtes noires ou les toolkits.

Donald Knuth, entretien avec Andrew Binstock

  • Lors du réveillon du Nouvel An 2013, j’ai lu la Boost Graph Library.
  • La plupart des bibliothèques d’algorithmes dépendent d’une représentation de données particulière, ce qui les rend difficiles à intégrer dans des projets existants.
  • La bibliothèque Boost.Graph résout ce problème grâce à la programmation générique.
  • Je ne l’ai jamais utilisée en pratique, mais sa conception a approfondi ma compréhension du design de la STL et de la programmation générique.

Bazel

Si make ne fonctionne pas comme prévu, il y a de fortes chances que le Makefile soit incorrect.

Adam de Boor, "PMake—A Tutorial"

  • En 2009, j’ai écrit mon premier Makefile pour un projet de recherche.
  • La complexité de make m’a donné envie d’un meilleur outil.
  • J’ai essayé divers systèmes de build, sans jamais être satisfait.
  • En 2016, j’ai rejoint Google et j’ai commencé à utiliser blaze.
  • Bazel a été la dernière pièce du puzzle des systèmes de build.
  • Bazel est rapide, précis, facile à utiliser et indépendant du langage.

Conclusion

  • Les points communs des bons logiciels d’éveil :
    • Ils résolvent des problèmes profonds, tout en traitant des problèmes rencontrés au quotidien.
    • Ils offrent beaucoup de profondeur derrière une petite surface.
    • Ils invitent et encouragent à explorer leur fonctionnement interne.

L’avis de GN⁺

  • L’importance d’UNIX : UNIX est le système d’exploitation de base de nombreux environnements de programmation et il est essentiel pour comprendre les fondements de la programmation système.
  • La courbe d’apprentissage de Git : Git est difficile au début, mais c’est un outil incontournable de gestion de versions, particulièrement utile dans les environnements collaboratifs et les systèmes distribués.
  • La flexibilité d’Emacs : Emacs offre bien plus qu’un éditeur de texte et mérite d’être recommandé, surtout à ceux qui s’intéressent à la programmation Lisp.
  • La programmation générique de Boost.Graph : Boost.Graph est un exemple puissant de programmation générique, qui permet d’apprendre à implémenter efficacement des algorithmes complexes.
  • L’efficacité de Bazel : Bazel est un outil capable de maximiser l’efficacité des systèmes de build dans les projets à grande échelle, particulièrement utile dans de grandes entreprises comme Google.

5 commentaires

 
zihado 2024-05-23

Sous Windows, ce n’est peut-être pas Everything, haha.

 
bus710 2024-05-23

Magit est donc si bon qu’il rejoint ainsi le rang des logiciels de légende ? Comme je n’utilise pas Emacs, impossible pour moi de le savoir. Dans Nvim, on dit que Neogit a été influencé par Magit ; je devrais peut-être au moins essayer celui-là...

 
bbulbum 2024-05-23

Je recommande aussi lazygit hehe

 
bus710 2024-05-23

Merci.
Je vais installer superfile et lazygit ce week-end pour aller un peu voir ça.

 
GN⁺ 2024-05-21
Avis de Hacker News

Résumé des commentaires de Hacker News

  • Compiler Explorer :

    • Compiler Explorer a profondément transformé les discussions sur les compilateurs et l’optimisation des performances.
    • Il a eu un impact positif sur la qualité des échanges dans les forums.
    • Il permet de vérifier rapidement des affirmations audacieuses grâce à des liens.
    • Des outils comme llvm-mca et uiCA sont également utiles.
  • Avis sur l’utilisation de Windows :

    • Présente une vision équilibrée de Windows.
    • Windows de la lignée NT est un excellent système d’exploitation.
    • Windows est installé pour le jeu.
  • Docker :

    • Docker a fait gagner beaucoup de temps pendant une carrière dans le conseil.
    • Il permet de lancer rapidement d’anciens projets.
    • Il évite d’avoir à installer plusieurs serveurs de bases de données.
    • Il permet de reproduire des environnements Python et de les exécuter en parallèle.
  • Spring Framework :

    • Spring Framework gêne la compréhension du concept d’injection de dépendances.
    • Il amène beaucoup de développeurs Java à penser qu’un framework complexe est nécessaire.
    • Spring lui-même est utile, mais il peut rendre les logiciels plus complexes et moins portables.
  • Nix :

    • Nix et Nixpkgs permettent d’accomplir de nombreuses tâches complexes.
    • Ils facilitent notamment les builds statiques de binaires Rust.
    • Ils offrent diverses options de build et des fonctions de cache.
    • Nix est très utile, mais NixOS doit être abordé avec prudence.
  • Emacs :

    • Emacs transforme le travail de correction de bugs en exercice technique.
    • Il rend les tâches ennuyeuses amusantes.
  • Concept de « Round » :

    • Le concept de « Round » offre une surface d’interface maximale avec un volume central minimal.
    • Le cœur d’Emacs et de Git est petit, simple, mais puissant.
  • Magit :

    • Magit est un exemple classique de simplicité, d’efficacité et de découvrabilité.
    • Il expose mieux les fonctionnalités de Git.
    • Il n’introduit ni terminologie ni workflow propres.
  • Comparaison entre SVN et Git :

    • L’expérience avec SVN a été très négative.
    • Git s’est révélé bien plus intuitif et facile à comprendre.
    • L’utilisation de Git a amélioré le flux de travail.
  • Expérience avec Linux, Emacs, Bazel et Magit :

    • Le travail est effectué sur Linux avec Emacs et Bazel.
    • On consulte des blogs, on enregistre son travail dans Emacs, puis on rédige des messages de commit avec Magit.
    • Le tout est ensuite poussé vers un dépôt Git.