Article original : No such thing as “real programming”

Par Barry Jones

J'ai lu un article plus tôt aujourd'hui intitulé The self-hating Web Developer que j'ai trouvé sur Hacker News et cela m'a dérangé. Cela a résonné en moi comme quelque chose que j'ai professionnellement intériorisé au cours de ma carrière, mais cela m'a dérangé parce que Joseph a rencontré des difficultés financières personnelles pour lui-même et sa famille en raison de cette lutte. Pour cette raison (et l'insomnie), je me sens obligé d'écrire ceci comme référence pour toute personne qui pourrait lutter contre la même chose.

Titres de compétence, droit d'avoir une opinion, etc.

Je programme depuis 1998, professionnellement depuis 2000, donc à l'heure où j'écris, j'ai environ 15 ans d'expérience professionnelle. J'ai une licence et un master, j'ai programmé professionnellement (pas bricolé) dans 9 langages différents, j'ai travaillé intensément avec les quatre grandes bases de données relationnelles et quelques bases de données NoSQL. Je gère l'infrastructure et je travaille extensivement sur le côté DevOps des choses. J'ai construit des applications monopage avant que jQuery ou Prototype n'existent, à une époque où personne ne savait ce qu'était JSON. J'ai enseigné une classe de programmation, je parle régulièrement de programmation, d'architecture, de bases de données et de prévention de la fraude.

Et tout cela est important parce que la raison de chaque goutte de cela est...PHP.

Oui. Ce PHP. Le langage terrible. Le langage que tout le monde aime détester. Le langage avec lequel l'auteur de ce post gagnait sa vie, subvenait aux besoins de sa famille et se sentait inadéquat à cause de cela.

J'ai traversé exactement la même chose, lisant à quel point c'était mauvais malgré la livraison miraculeuse de projets pour les clients, et cela est devenu vieux. Vraiment, vraiment vieux.

Vraie programmation ?

Les programmeurs système disant aux développeurs web que leur travail est facile ou que cela ne compte somehow est similaire à un ingénieur aérospatial disant à un ingénieur civil que leur travail n'est pas de la "vraie ingénierie".

La programmation est un domaine vaste. Il y a de nombreux problèmes différents à résoudre et de nombreuses façons différentes de résoudre ces problèmes. Chaque langage a des compromis qui affectent d'une manière ou d'une autre sa viabilité pour ce cas de problème. Chaque discipline a différents facteurs impliqués.

Si je fais de l'analyse de données avec R, les problèmes que je résous seront très différents de ceux d'un administrateur système cloud, et différents encore de ceux d'un administrateur système d'entreprise. Je vais utiliser différents outils. Je vais avoir différentes contraintes. Je vais avoir différentes personnes qui me paient pour livrer un résultat qui répond à leurs besoins.

Certains domaines sont très larges, où vous devez tenir compte d'un certain nombre de facteurs différents qui s'entremêlent. D'autres sont très profonds où X années d'expérience avec un langage deviennent une vraie mesure de votre capacité à le manier correctement.

Le développement web est large, surtout le développement web contractuel. Vous ne rassemblez pas seulement le code côté serveur et la base de données, mais vous gérez également le HTML et le CSS pour le design. Le JavaScript pour l'interactivité. Vous travaillez en va-et-vient avec les clients pour traduire leur vision et leurs objectifs en un livrable dans un laps de temps qui vous permet de rester en affaires en réalisant un profit avec des budgets aléatoires. Cela n'est pas exclusif au développement web, c'est juste une illustration de ce qui se passe lorsque les gens se concentrent sur une partie de ce que vous faites tout en ignorant tout le reste.

Vous devez être capable de communiquer avec de nombreux types de personnes différents. Le degré auquel vous vous souciez de la présentation et du polissage vs "ça marche" augmente considérablement. Vous devez tenir compte des considérations d'hébergement, de la délivrabilité des emails, des chemins de mise à jour et des correctifs de sécurité pour une liste constamment croissante de personnes. Les chances sont bonnes que pour beaucoup de ces clients, la priorité absolue sera d'atteindre les clients, donc vous devrez connaître le SEO et comment structurer tout ce HTML pour être lu par les crawlers et, espérons-le, par les lecteurs d'écran également. Vous devrez savoir comment utiliser correctement les outils pour webmasters, les outils d'analyse, construire des sitemaps XML, les organiser et les mettre à jour. Vous devrez très probablement être capable de construire des rapports à partir de SQL ou d'agréger des données à partir de quelques services cloud. Si le site prend de l'ampleur, vous apprendrez rapidement l'optimisation des performances, la mise à l'échelle et l'identification des goulots d'étranglement.

Cela ne sera basé que sur les demandes des clients. Si vous vous souciez un tant soit peu de vos clients, vous devrez également apprendre à leur dire tactiquement où se situent les problèmes avec leurs plans et leur donner des révisions sans les offenser ou insulter leur intelligence. Vous devrez probablement leur parler des choses qu'ils devront faire pour la sécurité et pour lesquelles ils ne veulent pas dépenser d'argent. Vous deviendrez la première personne qu'ils appelleront lorsque quelqu'un commencera à leur dire qu'ils doivent payer des frais mensuels pour les analyses de conformité PCI.

Mais attendez... il y a plus. Vous allez également devenir un chef de projet parce que lorsque vous avez plusieurs clients sur une liste croissante, ils n'attendront pas patiemment que vous finissiez votre liste actuelle de choses à faire pour un autre client jusqu'à ce que leur tour arrive. Vous apprendrez le triage. Vous apprendrez le recrutement parce qu'après un certain temps, vous n'aurez pas d'autre choix que d'enrôler de l'aide pour gérer les demandes concurrentes.

Ensuite, vous apprendrez le droit des contrats de travail en supposant que vous ayez somehow improvisé jusqu'à ce point. Si vous ne connaissiez pas le droit de la propriété intellectuelle au départ, éventuellement vous apprendrez cela aussi, ne serait-ce que pour les mots "travail à la commande". Vous avez un client mécontent qui ne veut pas payer pour tout le travail que vous venez de faire pour lui ? Félicitations, maintenant vous pouvez apprendre les recouvrements et/ou le tribunal des petites créances.

Tout cela en supposant que vous travaillez juste par vous-même et sans tenir compte de tous les détails qui accompagnent le travail sur une équipe de programmation. Communication, documentation, gestion des tâches, décisions basées sur la courbe d'apprentissage/bassin de recrutement/formation/turnover, conventions, tests, processus de déploiement et pipelines de construction.

Mais hey... que sais-je ? Retournez à l'écriture de ce pilote de périphérique. La programmation en C est de la "vraie programmation". Tout le reste que je viens de décrire et dont vous n'avez pas à vous soucier... c'est du jeu d'enfant.

Savoir combien vous ne savez pas

Avez-vous vu cette pique que j'ai faite sur les pilotes de périphériques ? Je n'écris pas de pilotes de périphériques, donc il est facile pour moi de faire une déclaration généralisée dédaignant ce qui entre dans l'exécution de ce travail.

Plus vous restez longtemps dans ce domaine, plus vous réaliserez l'impossibilité de tout savoir. C'est simplement un domaine trop vaste. Vous gelerez votre propre productivité en essayant de peser tant de facteurs dans chaque décision de programmation. Idéalement, vous trouvez quelque chose qui vous intéresse et vous le poursuivez parce que vous l'appréciez... ce qui vous aide à acquérir une connaissance plus approfondie.

Ce qui me ramène à PHP. Je n'ai presque pas touché à PHP depuis les 2 ou 3 dernières années. Toute ma carrière avant cela était très axée sur PHP. Maintenant, je fais beaucoup de travail d'infrastructure, Ruby on Rails, un peu de Go et de C#. Je suis également un intervenant régulier à UpstatePHP à Greenville. Je ne suis jamais allé à un groupe de rencontre pour aucun des autres langages. Ce n'est pas un biais contre ces langages, simplement que le groupe UpstatePHP tend à avoir les sujets les plus intéressants. Nous parlons de PHP mais surtout nous parlons de "développeur web"... ce qui garde le sujet très large et intéressant (pour nous, programmeurs prétendus).

PHP m'a permis de faire tout ce que je fais parce que je n'ai pas eu à investir beaucoup de temps dans l'apprentissage de PHP. PHP m'a permis de faire rapidement ce que je devais faire pour interagir avec la base de données, présenter les informations au navigateur et m'en aller.

Cela m'a permis de me concentrer sur toutes ces choses périphériques AUTOUR du développement web d'une manière que je n'ai jamais expérimentée avec d'autres langages. Cela m'a permis de passer beaucoup plus de temps avec la base de données et, à ce titre, j'ai beaucoup d'expérience avec les bases de données. Cela m'a permis de passer beaucoup plus de temps sur la communication. Les développeurs web traitent de nombreux problèmes orientés vers les personnes qui ne s'intègrent pas facilement dans un algorithme et communiquer efficacement est une partie critique de cela.

Lorsque j'ai commencé à utiliser CakePHP, je n'étais pas conscient de la quantité de temps que j'ai commencé à investir dans la réalisation des choses "à la manière CakePHP" au lieu de simplement les faire. Lorsque j'ai eu besoin d'optimiser les performances d'une application lente avec beaucoup de trafic, cela m'a forcé à aller bien au-delà des limitations du langage et à me pencher sur les configurations du serveur, les systèmes de cache, l'optimisation du byte-code, la réduction des E/S disque.

La boucle de sauvegarde-rafraîchissement naturelle pour le développement m'a permis d'itérer vers des solutions et d'expérimenter différentes choses très rapidement. Cela a rendu le travail AJAX/SPA significativement plus facile à une époque où mon autre choix aurait été de développer avec Java et de travailler à travers un cycle de sauvegarde, compilation, déploiement, rafraîchissement qui, à lui seul, pouvait transformer un problème d'une heure en un problème de huit heures.

PHP m'a permis d'apprendre beaucoup plus parce qu'il a retiré mon attention de PHP et l'a gardée fermement dirigée vers les problèmes commerciaux qui devaient être résolus. Cela a de la valeur. Vraiment, juste à peu près tout ce que vous pouvez faire et pour lequel les gens vous paieront régulièrement assez pour justifier d'y passer votre temps a de la valeur. Cela n'a pas vraiment d'importance qui pense ou ne pense pas que c'est difficile. C'est de l'économie. Offre et demande.

Sans parler du fait que PHP se met à l'échelle mieux que la plupart des "vrais langages". C'est pourquoi l'hébergement PHP est si bon marché. Vous pouvez remplir un disque dur d'un téraoctet sur un serveur avec 512 Mo de RAM et chaque bit de code PHP s'exécutera lorsqu'il sera demandé. Cela ne s'exécutera peut-être pas tout en même temps, mais cela s'exécutera et c'est une énorme raison pour laquelle l'hébergement PHP est si peu coûteux et abondant. Cela en fait un ajustement parfait pour tant de sites et projets à trafic modéré. Cela et la nature presque sans maintenance du déploiement permettent aux projets de ne pas drainer perpétuellement votre temps par la suite.

Chaque langage a un but

Cela peut sembler un choc si vous aimez critiquer d'autres langages, mais les langages existent et deviennent populaires parce qu'ils répondent à un besoin. La popularité vient du fait qu'ils le font bien. Cela peut ne pas être la meilleure solution pour votre cas d'utilisation, mais pour quelqu'un d'autre... c'était probablement le cas. Si vous ne l'avez pas encore appris, une grande partie de votre travail en tant que programmeur consiste à peser les compromis pour livrer des solutions à temps et dans les limites du budget.

Autant que je donne du fil à retordre à Node.js et Java pour des raisons complètement différentes, tous deux viennent également avec de grandes forces qui répondent aux besoins de beaucoup de gens. Il y a une raison pour laquelle Wordpress n'a pas été écrit en Java. Il y a une raison pour laquelle il n'y a pas de gagnant clair parmi les frameworks pour PHP. Il y a une raison pour laquelle les systèmes à haute concurrency ne sont pas écrits en Ruby. Il y a une raison pour laquelle aucun de ces articles de blog sur les histoires de succès de Go ne parle de la rapidité avec laquelle ils ont mis un site web full stack sur le marché.

Gardez la tête haute

PHP n'est définitivement pas la bonne solution pour de nombreux problèmes en programmation. J'ai même donné une présentation détaillant beaucoup des raisons POURQUOI ce n'est pas le cas. C'est un outil qui résout efficacement de nombreux problèmes en peu de temps. Selon vos besoins, cela pourrait être une solution carrément mauvaise.

Mais ne laissez jamais quelqu'un vous dire que ce n'est pas de la "vraie programmation" parce que toute personne qui serait prête à affirmer une telle chose illustre exactement à quel point elle en sait peu sur ce que vous avez réussi à faire une carrière. Si l'ego de quelqu'un ressent le besoin de battre ce tambour, laissez-le faire, mais ne laissez jamais cela vous tirer vers le bas.

Vous avez des clients qui attendent.

Publié à l'origine sur www.brightball.com.