Philosophie de la Programmation Complète : Principes, Pratiques et Croissance Professionnelle | Original, traduit par l'IA
Table des matières
- Programmation
- La programmation comme activité créative
- Développement de projets personnels
- Tendances technologiques et apprentissage par curiosité
- Philosophie de débogage et résolution de problèmes
- Développement axé sur l’utilisateur
- Qualité du code et simplicité
- Intégration de l’IA et automatisation
- Devenir un ingénieur sans limites
- Travailler avec les contraintes corporatives
- Maximiser les ressources internes
- Création d’outils à l’ère de l’IA
- Transformation des mentalités
- Briser les limites perçues
- Avantages de l’accumulation de logs
- Gestion des logs en entreprise
- Contexte historique et résolution de problèmes
- Stratégies d’organisation des fichiers de logs
- Maintenance à long terme des projets
- Préservation et partage des connaissances
- Méthodes automatisées de collecte de logs
Programmation
-
Il est acceptable de faire de la programmation compétitive tant que cela vous motive.
-
La programmation est comme l’écriture. C’est une activité créative.
-
Faites vos propres projets. Écrivez votre blog technique. Programmez pour un projet que vous maintiendrez pendant des années, comme un blog que vous tiendriez pendant 10 ans.
-
En général, vous n’avez pas besoin de suivre les tendances technologiques du moment, car beaucoup disparaîtront après quelques années.
-
Suivez votre curiosité et programmez pour vous-même.
-
Essayez de créer des programmes pour vous. Ce ne sont pas des tâches professionnelles.
-
Si vous vous sentez souvent malheureux en programmant, vous le faites mal.
-
iOS, Android, Backend, Frontend, IA, tout est bon. On peut au moins essayer de faire un petit projet avec ou apprendre pendant quelques mois.
-
Le débogage consiste à être méfiant. Ne faites pas confiance à chaque ligne de votre code ; vous pouvez trouver une meilleure façon de faire.
-
En programmation, même un caractère ou une ligne de log est important. Ils vous disent quelque chose.
-
La programmation permet de créer des produits pour les autres. C’est intéressant d’avoir des utilisateurs.
-
Vous n’avez pas besoin d’être sévère. Quelques centaines d’utilisateurs qui adorent votre produit valent mieux que des mille qui l’apprécient simplement.
-
Souvenez-vous pourquoi vous avez commencé la programmation et ne l’oubliez jamais.
-
Appliquez les connaissances en programmation à tous les aspects de la vie. Ils sont les mêmes. Faire les choses par lots ou une à une. Comment diviser les tâches en unités. La technologie derrière chaque application. Les détails subtils derrière les requêtes réseau.
-
L’abstraction et la pensée logique. La pensée orientée vers les détails. La recherche de solutions.
-
La vérité est la vérité. En général, l’ordinateur ne se trompe pas. Le circuit électrique ne se trompe pas. Le compilateur ne se trompe pas. Ne vous inquiétez pas s’il y a un bug.
-
Recherchez des solutions élégantes et simples. La simplicité est la sophistication ultime. Vous devez réfléchir dur pour garder l’essentiel et supprimer le superflu.
-
Pour les langages de programmation, ceux qui font le travail sont bons. Je recommande personnellement Java et Python.
-
Suivez Yin Wang sur https://www.yinwang.org. C’est un des rares génies de la programmation, bien qu’il dise que les génies n’existent pas.
-
Les connaissances et principes de la programmation peuvent être facilement appliqués à l’apprentissage des langues, la réparation de matériel, le “life hacking” et la recherche scientifique.
-
Pour la plupart des tâches de programmation, vous n’avez pas besoin de mathématiques avancées, juste du niveau lycée.
-
Revenez sur votre ancien code après des années ou maintenez un projet de code longtemps. Cela vous apprendra beaucoup.
-
Si vous perdez votre passion pour la programmation, faites autre chose pendant un temps.
-
Le moment des tests est important. Faites-le naturellement. Souvent, vous n’avez pas besoin d’écrire des tests pour votre projet. Essayez de ne pas écrire de tests, écrivez des tests unitaires, des tests d’intégration, des tests API. Comparez-les judicieusement.
-
Essayez les éditeurs de code IA. Utilisez ChatGPT ou d’autres chatbots souvent. Comme les outils IA sont faciles à utiliser maintenant, vous pouvez vous concentrer sur des parties plus créatives ou importantes.
-
Lors du débogage, vérifiez si vous utilisez la dernière version des bibliothèques. Si une bibliothèque n’est plus maintenue, cherchez des clones ou forks actifs.
-
Pour améliorer quelque chose comme la vitesse du réseau ou le temps d’exécution, il faut une métrique quantitative. Sinon, vous ne saurez pas exactement s’il y a eu une amélioration ou une dégradation.
-
Pour les projets personnels, il est acceptable de ne pas écrire de tests, mais il vaut mieux faire des tests locaux après avoir modifié une quantité importante de code. Pensez au code affecté, au temps d’exécution dans le pipeline cloud et à la fréquence des erreurs, puis écrivez les tests en conséquence. Utilisez des méthodes permettant des tests faciles sans nuire à l’expérience utilisateur.
-
Écrivez un code simple et élégant. Minimisez la duplication, bien que parfois elle mène à une solution plus simple. Minimisez les cas particuliers. Facilitez les tests. Refactorisez pour utiliser des fonctions ou processus communs, utilisez la récursivité ou les boucles, cherchez des motifs.
-
Gérez les erreurs correctement. Pensez à la cause racine, à la responsabilité, et si nous pouvons la changer ou si c’est une erreur externe. Réfléchissez à la méthode de récupération, à la portée de l’impact, où la gérer, si nous devons catégoriser les erreurs, leur probabilité et les pires scénarios.
-
La différence entre utiliser
replace
oustartWith
suivi deslice
est que le premier ignore la position de la chaîne. Appliquez une pensée similaire à chaque détail de la programmation. -
Minimisez les valeurs possibles pour un élément ; utilisez une seule valeur pour un cas. N’utilisez pas
null
si nous avons déjàfalse
. Si nous avons un indicateur traduit vrai ou faux, nous devons nous assurer que chaque fois que nous avons un indicateur traduit, nous ne traitons pas l’absence d’indicateur comme faux. -
Utilisez GitHub ou Sourcetree pour examiner fréquemment les blocs de code modifiés. Ils sont plus pratiques pour lire le code.
-
En programmation, il n’y a souvent rien de trivial. Chaque caractère, l’ordre des éléments d’une liste, chaque chaîne, chaque nombre et chaque nom de variable compte. Chaque ordre d’exécution et chaque log compte.
-
Faites ce qui vous passionne le plus. Pas besoin de s’inquiéter de ne pas suivre la tendance.
-
Utilisez souvent les commandes, car elles peuvent aider à automatiser des tâches ou à assister les LLM. Les opérations d’interface utilisateur sont plus difficiles à automatiser.
-
Sauvegardez les logs d’un programme, y compris les logs locaux, UAT, microservices et pipelines, dans un répertoire. Ces logs contiennent de nombreuses connexions. Fouillez-les pour identifier des relations, collectez des données ou contextes pertinents.
-
Avec les logs collectés, lorsque vous rencontrez un problème, il est plus facile de déterminer si vous l’avez déjà rencontré. À partir des logs précédents, vous saurez peut-être comment le résoudre. Les logs donnent une meilleure compréhension du fonctionnement et de l’exécution des programmes. Contrairement au code, les logs sont liés au temps et offrent plus d’informations sur l’état d’exécution. Ils sont aussi plus légers pour le débogage.
-
Le débogage montre beaucoup d’informations, y compris les valeurs des variables environnantes, les noms des threads et les piles d’appels.
-
Automatisez tout, comme les mises à jour de proxy et la sélection du meilleur serveur proxy. Utilisez Python pour écrire des scripts en masse.
-
Gardez les choses simples, faites des fonctions petites et des fichiers petits. Cela les rend faciles à tester, vérifier et vérifier avec un échantillon.
-
C’est l’ère de l’IA, alors utilisez des outils IA pour faire des tests approfondis et rendre tout aussi parfait que possible. Lancez des exceptions plus tôt. Ajoutez des tests pour le code et exécutez-les dans le pipeline tous les jours. Les erreurs sont normales, mais ne faites pas la même erreur deux fois. Évitez cela avec des vérifications de code.
Devenir un ingénieur sans limites
-
Les grandes entreprises appliquent des politiques de sécurité strictes : les employés ou sous-traitants reçoivent un ordinateur portable la première semaine et le rendent en partant.
-
Les projets impliquent beaucoup de détails, mais les employés oublient souvent des informations pendant leur travail, surtout après avoir quitté pendant un an ou plus.
-
Les souvenirs incluent les grandes lignes du projet, les interactions d’équipe et les connexions LinkedIn, mais aucun document ne reste en raison des contrôles stricts.
-
La première expérience de sous-traitance dans ces entreprises peut être décourageante, rendant l’ingénierie logicielle plus difficile et impactant significativement le travail.
-
Récemment, j’ai trouvé comment rendre l’environnement illimité en utilisant les ressources internes, même si ce n’est pas vraiment sans limites.
-
Des milliers d’options logicielles sont disponibles, surtout des compilateurs sous Windows, permettant de créer des scripts et petits outils.
-
Apprenez autant de bibliothèques et langages que possible ; maximisez l’utilisation des ressources internes.
-
Il y a du support pour des langages comme Go, Rust, C/C++, JavaScript avec npm et C#, ce qui augmente la flexibilité avec plus de connaissances.
-
À l’ère de l’IA, créez des outils personnalisés comme Postman avec des scripts Python ou écrivez des scripts de base si les outils manquent de fonctionnalités.
-
Utilisez l’IA pour automatiser des tâches, comme des scripts Selenium pour les tests ou des scripts de test de performance.
-
Le sentiment initial de limitation dans les grandes entreprises venait de l’état d’esprit, car les politiques n’empêchent pas de construire ou de travailler efficacement.
-
Dans la vie, les limites perçues viennent souvent d’un manque de réflexion profonde ; essayer plus peut mener à des idées uniques.
-
Devenir un ingénieur sans limites dans les grandes entreprises signifie devenir une personne sans limites en général.
Avantages de l’accumulation de logs
Quand je travaillais comme sous-traitant pour une banque auparavant, nous utilisions une plateforme d’application multi-cloud pour les microservices. À cette époque, j’ai commencé à accumuler des logs en travaillant dans l’entreprise.
Plusieurs années ont passé, et je pense toujours que c’est une des meilleures façons de m’aider à travailler ou à faire de l’ingénierie logicielle. Au fil du temps, dans mon répertoire de logs, il y a des centaines de fichiers de logs.
Je n’ai pas de sous-répertoires spécifiques ou de noms formels pour ces fichiers. Parfois, j’utilise juste le nom de la tâche JIRA comme préfixe ou celui de la fonctionnalité. Puis j’ajoute un numéro en suffixe. Par exemple, mutual-fund-1.log, mutual-fund-2.log, etc. Cela signifie que dans le microservice mutual fund, j’ai ce log lors de son exécution.
Parfois, sur des projets desservant plusieurs régions, j’ajoute le pays en suffixe, comme mutual-fund-cn-1.log, mutual-fund-sg-1.log. Les noms des fichiers de logs sont assez informels. Car à ce moment-là, je devais me concentrer sur les piles d’erreurs ou les appels de fonctions environnants.
Les logs des programmes sont importants. Tout le monde le sait. Mais je veux souligner l’importance de les accumuler plutôt que de juste les regarder dans la console et les laisser partir. Vous verrez plus de commodité au fil du projet. Vous aurez plus de temps pour retrouver les logs précédents. Vous pourriez avoir besoin de savoir si un appel de procédure stockée similaire s’est produit avant. Vous pourriez avoir besoin de vous souvenir comment résoudre ce problème la dernière fois.
Il y a des tonnes de détails dans un gros projet ou des dizaines de microservices. Et les erreurs, exceptions ou problèmes se répètent. Les logs sont comme le journal d’exécution d’un programme. Et ils sont générés automatiquement par le programme sans saisie humaine. Et pour les développeurs, ces logs sont lisibles. Donc quand vous commencez une nouvelle tâche ou corrigez un nouveau bug, vous avez des centaines de logs sous la main. Vous n’êtes pas seul.
Pourquoi les accumuler ? Parce que les choses ou connaissances s’oublient facilement.
La civilisation humaine a progressé avec l’invention du papier. Et avec celle des ordinateurs, elle a atteint un autre niveau. Prendre des notes sur papier, c’est comme accumuler des logs sur ordinateur.
Pas seulement pour les humains, mais pour les chatbots IA, les outils LLM, ces logs deviennent de plus en plus importants. La GreptimeDB, une base de données pour la collecte unifiée et l’analyse des données d’observabilité (métriques, logs et traces), créée en 2022, n’est pas une coïncidence.
Pourquoi ne l’ai-je pas fait avant ? Après avoir travaillé comme sous-traitant pour de grandes banques, j’ai dû faire plus de collaboration et travailler sur des projets plus gros. Avant, la plupart du temps dans les startups ou mes périodes de startup, je travaillais seul. Quand je travaillais chez LeanCloud avant, j’ai travaillé sur l’application de messagerie LeanChat pendant environ la moitié du temps.
Et en entrant dans le monde corporatiste plus formel, le développement des projets était différent de mes projets personnels ou de startup. Ils avaient des environnements de test SIT, UAT. Et l’environnement de production est souvent accessible à seulement quelques pairs. Obtenir leurs logs et résoudre les problèmes devient long et un peu fastidieux. Et exécuter un projet prend du temps, le pipeline Jenkins a souvent besoin d’une demi-heure pour s’exécuter.
Donc je ne peux pas exécuter ou tester le programme comme une mouche. Je ne peux pas faire un déploiement en tapant simplement une commande sur mon ordinateur et en téléchargeant le code sur le serveur.
Alors cela m’a poussé à accumuler des logs pour avoir plus de contexte pour gérer les tâches. Nous devons mieux résoudre les problèmes du premier coup. Nous devons mieux vérifier nos corrections en quelques essais. Nous ne pouvons pas facilement obtenir les logs du programme qui s’exécute dans le cloud ou sur le serveur de l’entreprise, alors nous devons les copier et les sauvegarder sur l’ordinateur portable pour les analyser.
Et maintenant, pour mes projets personnels, j’accumule aussi les logs. C’est devenu une habitude. Après avoir travaillé dans de grandes entreprises pendant quelques années, j’ai plus de patience ou de stratégie pour rendre mes projets plus grands et plus longs. Donc je sais que j’aurai besoin de ces logs avec le temps.
Certains diront que vous avez juste besoin d’avoir un code élégant et un projet fonctionnel. Vous n’avez pas besoin d’accumuler les logs ou les traces d’erreurs. C’est acceptable. Quand nous avons un bug ou une nouvelle fonctionnalité, nous pouvons exécuter le programme pour obtenir les logs actuels. Nous n’avons pas besoin des logs du processus de développement. Ils sont comme les dossiers détaillés d’expériences scientifiques. À première vue, ça semble correct. Mais à long terme, si un jour vous voulez y travailler à nouveau, ou le partager, ou le transférer, ce n’est peut-être pas bon.
Je pense qu’il y a des opportunités ici. Dans les entreprises, pourquoi ne pas encourager chaque développeur à partager ses logs accumulés ? Dans les projets open source, nous devrions aussi le faire. Nous ne trouvons pas les logs des autres attrayants parce que nous ne les connaissons pas. Nous perdons le contexte en sauvegardant ces logs. Et dedans, il y a des tonnes de messages sans rapport ou triviaux.
Mais l’effort pour accumuler les logs est trivial. C’est juste copier-coller chaque fois que nous voyons des logs, surtout ceux d’erreurs. Et si nous le faisions de manière automatisée ? C’est une bonne idée d’enregistrer les logs dans un répertoire chaque fois que nous exécutons un projet, comme ceux des projets Spring Boot.
Le monde devient de plus en plus numérique, donc accumuler les logs des programmes numériques, c’est comme accumuler des livres dans le monde physique.