Mes regrets pour toute ma carrière de programmeur

Tout d'abord, que je m'appelais moi-même un "ingénieur logiciel"





Du traducteur:

Nous qui coupons de simples pierres, devons toujours envisager des cathédrales. Nous, qui coupons de simples pierres, devrions toujours voir des cathédrales derrière elles. Nous nous souvenons tous de cette merveilleuse citation du livre d'Andrew Hunt «The Pragmatist Programmer. Le chemin de l'apprenti au maître. " Le post ci-dessous, à mon avis, est à ce sujet. Son auteur - responsable technique et architecte Dave Taubler, raconte comment sa carrière et ses vues sur son travail en général se sont développées: de la déception du marketing à ce qu'il en est arrivé aujourd'hui, de nombreuses années plus tard. L'auteur fait part de certaines recommandations qu'il considère utiles pour le développement de carrière et, comme indiqué dans le titre, parle de ce qu'il changerait dans sa propre carrière s'il le pouvait.



Ma carrière n'a pas commencé dans le développement de logiciels, mais dans le marketing. Je suis une personne créative et je pensais que l'art des slogans et des harmonies me conviendrait. Mais le monde du marketing s'est avéré plus mécanique que je ne l'imaginais. Étonnamment (ou peut-être sans surprise), j'ai réalisé que la programmation - jusque-là un passe-temps - me donnait l'énergie créative dont je rêvais. Donc, après quelques emplois dans le marketing, j'ai trouvé un emploi dans le développement Web. Ce poste a été le début de ma carrière en tant qu'ingénieur logiciel, depuis je ne suis pas retourné au marketing.



Le métier était génial. Elle a bien payé, bien sûr, et j'ai gardé mon emploi pendant le ralentissement économique. Le développement Web m'a permis de travailler avec différentes entreprises et de rencontrer des gens formidables. Et avouons-le, le codage est amusant, donc j'ai peu de regret. Mais il y a encore quelque chose que je regrette. À savoir:



Je voudrais ne pas me considérer comme un "ingénieur logiciel".


Je ne parle pas de vous appeler un "programmeur" ou un "architecte logiciel" ou autre; spécifiquement ces deux mots ne me dérangent pas beaucoup. Je veux dire, je suis désolé d’avoir défini tout mon objectif professionnel dans la vie: concevoir des logiciels et écrire du code. Pourquoi? Il y a en fait plusieurs raisons.



Je me considérais comme un obstacle à supprimer



Je me considérais comme un interrupteur [env. trad. - bien sûr, le facilitateur est "une personne ou une chose qui rend quelque chose possible": une personne ou une chose qui rend quelque chose possible. Mais dans ce cas, l'auteur parle à regret de lui-même comme un élément d'une chaîne, ce qui signifie que ce type de littéralisme est ici approprié, il reflète clairement l'humeur et l'intention de ce qui a été dit], un maillon nécessaire dans la chaîne de développement produit qui traduit les concepts en réalité. C'est aussi important pour les affaires que l'eau l'est pour la vie. Mais dernièrement, je ne suis plus aussi sûr d'une telle autodétermination.



Réfléchissez au fonctionnement du développement de produits. Quelqu'un a une excellente idée. Par exemple, offrez un financement aux personnes qui ne peuvent pas obtenir de prêt ou aidez les artisans à vendre leur travail en ligne. Mais pour transformer une idée en réalité, l'auteur de l'idée a besoin de quelqu'un d'autre qui possède l'expérience et les compétences nécessaires pour que l'idée devienne réalité. C'est là que j'interviens en tant qu'ingénieur logiciel. Payez-moi et je contribuerai à votre idée. Droit? Oui. Sauf ce qui m'est apparu: je ne suis pas vraiment un assistant. Je suis un obstacle. Je suis ce qui se situe vraiment entre l'idée et son incarnation. Ce qui doit être supprimé. En d'autres termes: pensez-vous qu'ils veulentles gens embauchent-ils quelqu'un d'autre pour mettre en œuvre des idées? S'ils pouvaient, disons, appuyer simplement sur un bouton ... ne choisiraient-ils pas un bouton à la place?



Bien sûr, ce bouton n'existe pas. Pas encore. Mais l'industrie se dirige lentement vers elle. Il y a longtemps, pour créer un site Web simple, il fallait engager quelqu'un comme moi. Et maintenant, avec des outils comme Wix, presque tout le monde peut faire glisser et déposer son chemin vers un site assez avancé ... Aucun programmeur requis! Les plates-formes de développement low-code réduisent également le besoin d'ingénieurs logiciels.



Même les langages de programmation eux-mêmes sont progressivement (quoique lentement) simplifiés; l'écriture devient plus facile. Après tout, quel est l'intérêt d'un langage de programmation sinon de combler le fossé entre les instructions humaines et la manière dont l'ordinateur exécute les instructions? Ne te méprends pas. Je ne pense pas que la demande d'ingénieurs logiciels disparaîtra bientôt. Mais ... vous doter de compétences dont la valeur diminue progressivement? Une telle carrière a commencé à me paraître peu fiable. Et cela m'a conduit à mon deuxième problème:



J'ai développé un cynisme injustifié



Quand j'ai commencé, Java était un nouveau produit très populaire. Alors j'y ai plongé tête baissée. Et je me souviens de certains programmeurs C et C ++ qui détestaient absolument Java. Bien sûr, ils avaient des raisons. Mais il me semblait que ces raisons, dans de nombreux cas, masquaient simplement la menace existentielle ressentie par les programmeurs. La capacité de programmer leur est venue avec beaucoup de difficulté. Puis est venu Java, qui a éliminé de nombreuses difficultés de C et C ++. Soudain, il s'est avéré que tout un flot de nouveaux programmeurs pouvaient faire leur travail.



Avance rapide de quelques années quand j'ai commencé à me sentir à la place de ces programmeurs. Par réflexe, j'ai trouvé et accentué des défauts dans n'importe quel langage ou technologie qui étaient censés être plus simples que ce que je savais. Bien sûr, j'avais et mes raisons de faire cela. Mais souvent, ils ressemblaient davantage à des rationalisations créées plus tard. Alors qu'est-ce qui m'est arrivé? Cela faisait longtemps que je n'avais pas pris racine dans mon ensemble préféré d'outils de programmation et je ne voulais pas y renoncer. Mon objectif n'était pas d'appliquer la technologie pour résoudre des problèmes, mais d'appliquer des compétences spécifiques en développement logiciel que j'avais déjà perfectionnées. «Si ces compétences deviennent inutiles, mes objectifs ne seront pas non plus nécessaires», ai-je pensé. Et donc j'ai construit un mur défensif par cynisme. Le même sur lequel dans d'autres programmeurs, il y a de nombreuses années, je me suis demandé.



Le fait est que maintenir un tel cynisme en vous-même peut être angoissant et épuisant. En fait, j'ai remarqué un cercle vicieux: plus je me défends contre mes propres compétences, moins j'ai envie d'apprendre de nouvelles choses.



J'ai limité mes horizons professionnels



J'ai travaillé dans de nombreux secteurs tout au long de ma carrière. Médias sociaux, streaming musical, technologie financière (fintech) et même retouche photo. Bien que j'aie de l'expérience dans de nombreux secteurs, je ne suis pas toujours bien familiarisé avec un domaine particulier. En même temps, j'ai remarqué que certains de mes collègues ingénieurs sont restés dans le même secteur tout au long de leur carrière. Un collègue, par exemple, avait une passion pour la photographie, il s'est donc spécialisé dans les logiciels de retouche photo. D'autres collègues ont consacré toute leur carrière à la technologie financière.



Le fait est que, tout d'abord, ils s'intéressaient à leurs industries. La programmation était simplement un moyen par lequel mes collègues participaient à leurs industries et gagnaient leur vie.



Au début, cela me semblait un peu étrange. Si vous écrivez du code, je me suis demandé, ne devriez-vous pas vous définir comme un ingénieur logiciel? Bien sûr, je ferais un effort pour étudier tous les domaines dans lesquels mon entreprise actuelle opère. Mais souvent, je pensais que c'était un mal nécessaire et que je devais accorder plus d'attention pour perfectionner mes compétences techniques. Alors pourquoi est-ce important? Bien sûr, de nombreux ingénieurs ont connu des carrières fructueuses axées presque exclusivement sur les logiciels et la technologie, n'est-ce pas?



Évolution de carrière



Avec le recul, j'ai réalisé qu'une partie du problème était la façon dont je pensais. Quand je pensais à mon rôle au travail en tant que programmeur, j'avais tendance à être d'accord. D'autres personnes connaissent le métier , je l'ai défini pour moi-même, et peuvent donc prioriser le travail de mon équipe . J'étais dans l'entreprise juste pour faire mon travail. En me concentrant sur le développement de logiciels, il m'est rarement venu à l'esprit que j'avais des aspirations plus élevées.



Mais pour aller au-delà du rôle d'un ingénieur senior, nous devons comprendre l'entreprise. Que nous empruntions la voie du gestionnaire / directeur ou de l'ingénieur en chef / architecte, nous commencerons à prendre des décisions de haut niveau au nom de l'entreprise. Naturellement, lorsque j'ai pris un poste de direction pour la première fois, j'étais mal à l'aise de me concentrer sur les problèmes commerciaux. Mais quand je me suis habitué à penser au nom de l'entreprise, je me suis senti libre. C'était comme découvrir un tout nouvel ensemble de compétences. Si vous visez encore plus haut, l'accent est encore plus mis sur l'entreprise. L'expérience des ingénieurs de l'industrie devient vitale. Et qu'en est-il de mes collègues dont je vous ai parlé? Beaucoup d'entre eux ont complètement quitté le monde de l'ingénierie et ont été promus dans les affaires. Certains sont partis plus tard pour fonder leurs startups dans la technologie financière.



Bonheur de carrière



Même si j'aime le codage, j'ai du mal à entretenir une passion pour l'écriture de code jour après jour. Pour être vraiment heureux dans votre carrière, il est important de savoir qu'il est important d'avoir une vue d'ensemble de la façon dont mon travail change le monde pour le mieux.



De plus, j'aimerais faire ce que certains de mes collègues ont fait, c'est-à-dire prendre du recul et comprendre ce que j'apprécie vraiment dans ce monde. Beaucoup de choses sont importantes pour moi: la musique, l'éducation, le changement climatique, etc. Si je pouvais revenir en arrière et changer quelque chose dans ma carrière, voici ce que je changerais: je déciderais quelles sont mes valeurs et quels problèmes je veux résoudre dans ce monde. Et puis j'appliquerais toutes mes compétences, techniques et non techniques, pour résoudre ces problèmes.



Comment aller au-delà du génie logiciel



Cette histoire peut ne pas résonner avec tous ceux qui écrivent des logiciels pour gagner leur vie. De nombreux lecteurs aiment leur industrie plus que leur langage de programmation. Qui est assez à l'aise pour passer de C # à JavaScript et de là à Go. Qui sans problème renonce à ce qu'il a déjà appris lorsque la solution apparaît plus facile. Mais si cette histoire résonne avec vous, lisez la suite. Au fil du temps, j'ai changé d'attitude envers ma carrière et il n'y a aucune raison pour que vous ne puissiez pas faire de même. Voici quelques conseils que je trouve utiles.



Plongez dans d'autres technologies



Qu'est-ce qui guérira notre réticence à nous séparer de la technologie à laquelle nous sommes habitués et sur laquelle nous comptons? Immersion dans d'autres technologies. Le moyen le plus simple de faire cette plongée est dans un projet parallèle: le logiciel que nous créons nous-mêmes lorsque les heures de travail sont terminées. L'essentiel est de plonger profondément dans une langue que nous ne connaissons pas. Je parle de deux choses:



  • Choisir une langue complètement différente en dehors de notre zone de confort. Par exemple, si vous êtes à l'aise avec Java, ne vous contentez pas de passer à Kotlin; essayez plutôt Go, Python, Rust ou NodeJS.
  • Sur la définition du complexe au sens de l'achèvement du projet Ne travaillez pas uniquement avec le didacticiel. Fixez-vous un objectif ambitieux qui vous fera vraiment apprendre la langue pour y parvenir.


En effet, faites-en votre objectif d'apprendre une nouvelle langue si bien que vous pouvez obtenir un emploi avec cette langue pour de l'argent. Je l'ai fait il y a de nombreuses années. J'étais un architecte logiciel axé sur le backend Java. Mais en tant que projet parallèle, j'ai aidé un ami à créer une application iOS et une application de bureau Mac. Cela m'a donné les compétences nécessaires pour rejoindre plus tard une entreprise de diffusion de musique bien connue pour les aider à créer une application iOS.



Vous avez besoin de plus que de simples langages de programmation: vous devez vous plonger dans des outils indépendants du langage. Par exemple, je me suis sali autant que possible les mains dans Docker et Kubernetes. Au fur et à mesure que je progressais dans le déroulement et l'orchestration des images, je me souciais moins de ce qu'il y avait dans ces images.



Ou prenons les technologies cloud. Dans le passé, j'ai minimisé le rôle des technologies sans serveur car je n'avais aucune expérience avec elles. Mais pour la dernière fois, je les ai embrassés aussi. Par exemple, dans un travail récent, j'ai essayé d'implémenter AWS Lambda dans notre architecture de microservices. Et j'ai travaillé sur un projet parallèle où les fonctions GCP Cloud Functions sont largement utilisées.



Plus je m'immerge dans les nouvelles technologies, plus je me sens libéré. Je ne me sentais plus obligé d'acquérir certaines compétences, mais je ressentais plus de flexibilité et de préparation pour résoudre les problèmes en utilisant les outils les plus appropriés disponibles.



Concentrez-vous sur la vue d'ensemble du design



Comme de nombreux ingénieurs en logiciel, j'ai commencé à accorder moins d'attention à la programmation pratique et plus concentré sur les problèmes généraux. Gérer d'autres ingénieurs et me concentrer sur l'architecture m'a aidé à me débarrasser de mon temps personnel investi dans certaines des technologies que l'équipe utilisait. De plus, cette approche permet de se concentrer sur d'autres domaines de l'entreprise. J'ai récemment fait partie d'une équipe interfonctionnelle qui a dirigé une nouvelle initiative de produit. Cela étant dit, j'ai passé plus de temps à travailler avec les chefs de produits et les concepteurs impliqués dans le développement de produits qu'avec le code.



Une petite mise en garde. En tant que responsable du département d'ingénierie, il est toujours important pour moi de ne pas perdre de vue les technologies que l'équipe utilise, d'être au moins un peu conscient. Bien entendu, notre équipe peut souhaiter utiliser des langages et des outils qui vont au-delà de vos compétences personnelles. Ce n'est pas mauvais; c'est plutôt une excellente occasion d'apprendre de l'équipe. Et croyez-moi, l'équipe va adorer si nous leur donnons l'occasion de nous apprendre quelque chose.



Devenez un homme d'idées



Plus tôt, j'ai présenté une vue simplifiée de la naissance des produits. Quelqu'un a une idée et quelqu'un d'autre la met en œuvre. Alors je me suis dit: quoi être développeur, pourquoi ne pas devenir auteur d'une idée?



Projets parallèles



Jusqu'à présent, l'objectif de mes projets parallèles était de suivre mes compétences d'ingénierie existantes ou d'apprendre de nouvelles technologies. Essentiellement, ces projets constituaient les exercices glorifiés de Hello World.



Maintenant, je commence par l'idée elle-même. Je propose quelque chose qui, je pense, sera utile, mais idéalement sera quelque chose de nouveau. Parfois, c'est une idée qui peut se transformer en produit. Dans d'autres cas, cette idée n'est utile qu'à moi. Le fait est que je me concentre principalement sur l'idée.



Ensuite, je me mets au défi de trouver la meilleure façon de donner vie à cette idée. Peut-être que l'implémentation est liée à l'écriture d'une application monolithique en Java. Ou peut-être s'agit-il d'une interface JavaScript / React, principalement prise en charge par les services cloud et liée à un peu de code Go. Peut-être parlons-nous de tâches qui ne sont pas du tout liées à la programmation.



Au travail



J'ai également commencé à exercer ce bon sens au travail. Il était une fois, je cherchais des projets dans lesquels je pourrais utiliser mes compétences spécifiques en programmation. Après tout, j'ai été embauché pour ces compétences spéciales, non? Mais petit à petit, j'ai réalisé que j'étais embauché principalement pour résoudre les problèmes de l'organisation. J'ai donc commencé à chercher les problèmes qui nécessitaient le plus une solution et j'ai trouvé comment les résoudre. Dans de nombreux cas, la solution est liée au logiciel. Mais j'ai commencé à apprécier les moments où la décision n'était pas liée au logiciel, car à cette époque, j'étendais ma portée et traversais les frontières, me concentrant davantage sur l'aspect commercial des choses.



Est-ce plus facile à dire qu'à faire? Peut-être. Bien entendu, cela dépend de la volonté de notre employeur d'abandonner la programmation à un rythme très rapide. Mais j'ai constaté que de nombreuses entreprises sont plus que heureuses lorsque les ingénieurs veulent prendre l'initiative de résoudre des problèmes qui dépassent le domaine de l'écriture de logiciels. Et si notre entreprise ne soutient pas l'initiative? Alors rappelez-vous que nous sommes des ingénieurs en logiciel ... Nous pouvons nous permettre d'être un peu pointilleux sur les personnes pour lesquelles nous travaillons.



Si vous souhaitez vous plonger dans d'autres technologies, comme le conseille l'auteur de l'article, nous sommes, pour notre part, prêts à vous aider avec nos connaissances, nos mentors expérimentés et notre soutien. Ce sera difficile, mais intéressant. Et n'oubliez pas le code promo toujours actif HABR - qui ajoutera 10% à la réduction sur la bannière.





Autres professions et cours
MÉTIER
















image



All Articles