Leçons apprises en tant qu'ingénieur logiciel débutant
Publié: 2022-08-30Si vous m'aviez demandé il y a un an ce qu'un ingénieur logiciel faisait, j'aurais répondu quelque chose comme « résoudre des problèmes grâce au code ». C'est une réponse simple qui indique comment le travail que nous produisons est évalué. Pour les ingénieurs des équipes axées sur les produits, ces problèmes peuvent inclure la manière d'implémenter une nouvelle fonctionnalité demandée par les clients ou la manière d'améliorer les performances des fonctionnalités existantes.
Si vous me posiez la même question aujourd'hui, je donnerais une réponse légèrement différente. Les ingénieurs logiciels sont chargés de résoudre les bons problèmes grâce au code et, lorsqu'ils sont résolus efficacement, ils atteignent les objectifs commerciaux. Déterminer quels problèmes résoudre et comment les résoudre est la partie la plus importante du métier de développeur, les détails de mise en œuvre réels étant secondaires.
Mon parcours vers le génie logiciel
Je me suis intéressé à la programmation après avoir suivi un cours à Upperline Code l'été précédant ma première année d'université. J'ai eu cette opportunité grâce à un programme de préparation à l'université et à la carrière dont je faisais partie et qui s'appelle The Opportunity Network.
Upperline Code a été ma première introduction à la programmation, et j'ai rapidement réalisé que j'étais intéressé à apprendre à coder. Plus tard cet été-là, j'ai reçu mon dossier d'inscription à Notre Dame et je suis passé du College of Arts and Letters au College of Engineering afin de pouvoir me spécialiser en informatique (CS).
Certains de mes cours CS préférés étaient la conception/analyse d'algorithmes, le cloud computing et les défis de programmation. Les problèmes étaient intéressants et les professeurs étaient excellents pour présenter de nouvelles idées et expliquer des concepts.
Tout au long du premier cycle, je savais que je voulais travailler comme ingénieur logiciel et utiliser les compétences techniques que j'avais acquises. Heureusement, l'été précédant ma dernière année, j'ai eu l'opportunité de faire un stage en tant qu'ingénieur logiciel chez Kantata et de programmer en binôme avec d'autres ingénieurs pour aider à fournir des fonctionnalités.
Mon expérience de stage, ainsi que les discours d'encouragement de mes professeurs, m'ont donné la confiance nécessaire pour ne pas me contenter d'un autre rôle lorsque j'ai commencé à postuler pour des emplois. Après avoir passé beaucoup de temps dans les heures de bureau, j'ai obtenu un diplôme en informatique en 2021 et j'ai accepté une offre pour devenir ingénieur logiciel associé chez Sprout Social.
S'installer dans Sprout Social
Une partie du fait d'être nouveau dans le rôle et nouveau dans l'entreprise consistait à développer à la fois des compétences générales en génie logiciel et des connaissances de domaine spécifiques à Sprout. J'ai trouvé que les tâches qui nécessitaient des connaissances générales en programmation pour être comprises étaient les plus faciles à résoudre pour moi. Cependant, les tâches qui nécessitaient une connaissance de l'architecture de Sprout m'ont pris du temps et j'ai dû compter sur mon équipe pour obtenir de l'aide. Bien qu'il existe certains problèmes que vous pouvez résoudre en lisant la documentation en ligne, vous ne pouvez pas toujours trouver des informations pertinentes pour le travail que vous faites - il est crucial de pouvoir demander conseil aux autres.
L'une des premières choses qui m'a frappé lorsque j'ai rejoint Sprout a été à quel point le processus de développement est collaboratif. Je savais qu'il fallait des équipes entières pour développer des fonctionnalités, mais je ne savais pas à quoi cela ressemblait en pratique. J'ai rapidement réalisé que la publication d'une fonctionnalité réussie nécessitait la collaboration de nombreuses personnes occupant différents rôles, des chefs de produit définissant les exigences du projet aux concepteurs créant des maquettes et aux ingénieurs mettant en œuvre des fonctionnalités. La collaboration n'était pas quelque chose d'optionnel, mais une nécessité pour atteindre les objectifs de notre équipe.
Apprendre à naviguer dans les différentes bases de code et construire un modèle mental de la façon dont les différents services interagissent les uns avec les autres était une courbe d'apprentissage abrupte. Étant donné que l'activité principale de Sprout est le logiciel, son architecture est fortement façonnée par ses besoins commerciaux. Au fur et à mesure que je montais en puissance, je devais être conscient des problèmes commerciaux que les développeurs essayaient de résoudre et pourquoi les décisions architecturales précédentes avaient été prises.
Au départ, j'étais un peu intimidé par le fait que les demandes d'extraction nécessitaient des révisions avant de pouvoir être fusionnées dans la base de code. Comprendre que l'objectif principal des révisions de code est le partage des connaissances et le maintien des normes de code m'a aidé à changer de point de vue.
Passer par des revues de code m'a permis d'aiguiser mes compétences techniques et d'améliorer la qualité de mes pull requests. Le fait que des pairs me donnent des conseils sur ce qu'il faut changer, me présente de nouveaux modèles et m'indique des domaines pertinents de la base de code a été très utile. La lecture des pull requests d'autres ingénieurs m'a également donné une visibilité précieuse sur d'autres services sur lesquels je ne travaille pas directement.
Vos expériences précédentes comptent
Il y a une idée qui prévaut qu'à mesure que vous entrez dans de nouvelles étapes de la vie, vos expériences antérieures n'ont plus d'importance. Une fois que vous entrez à l'université, vos expériences au lycée n'ont plus d'importance. Une fois que vous entrez sur le marché du travail, vos expériences universitaires n'ont plus d'importance.
Mais quelque chose qui est souvent négligé, c'est que nos expériences, nos connaissances et nos habitudes ont un effet cumulatif. Nous ne pouvons généralement réaliser de nouvelles choses que grâce au travail que nous avons effectué auparavant. Les connaissances et les compétences que j'ai acquises précédemment ont grandement influencé ma façon d'aborder les nouveaux défis en tant qu'ingénieur logiciel débutant.
Les cours du premier cycle qui ont eu l'impact le plus direct sur mon travail quotidien chez Sprout étaient les défis de programmation et les concepts de base de données. Le premier m'a appris à décomposer de grands problèmes en plus petits morceaux pour les résoudre plus efficacement. Cela m'a aidé à devenir plus intentionnel sur la façon dont j'ai structuré mon code et amélioré la lisibilité de mon code.
Database Concepts m'a appris les concepts fondamentaux des bases de données relationnelles et a couvert des sujets tels que la conception de schémas de bases de données et SQL. J'ai appris à écrire des requêtes, ce qui m'a été extrêmement utile puisque j'ai fréquemment besoin d'interroger nos bases de données pour résoudre des problèmes ou répondre à des questions.
Les opportunités que j'ai eues en dehors de la salle de classe étaient tout aussi précieuses. Java n'était pas un langage abordé dans la plupart de mes cours, cependant j'ai eu l'opportunité de travailler dessus pour un projet d'entreprise que dirigeait un de mes professeurs. J'ai acquis une expérience pratique en écrivant Java, en travaillant avec des bases de données MySQL et en créant des images Docker. L'apprentissage de Java a été particulièrement utile car la plupart des services de Sprout y sont écrits.
Il y a beaucoup d'autres compétences que j'ai acquises au cours de mes études de premier cycle et que je tiens pour acquises, comme la navigation dans la ligne de commande et la compréhension des concepts de programmation de base. C'est une idée fausse courante que, puisque la plupart des sujets abordés au premier cycle sont de nature théorique, ils ne vous prépareront pas à des carrières en génie logiciel. Cependant, je crois que le contraire est vrai - les compétences que vous apprenez au premier cycle sont importantes, même si elles ne sont pas directement applicables à votre travail quotidien.
L'informatique est un domaine extrêmement vaste
CS couvre une variété de spécialisations telles que l'intelligence artificielle, l'apprentissage automatique et la science des données. L'expérience que vous acquérez au premier cycle sert de connaissances fondamentales qui peuvent bien vous servir dans une variété de rôles d'entrée de gamme non exclusifs au génie logiciel. Passer du premier cycle à un poste à temps plein offre l'occasion d'explorer le type de rôle et de spécialité qui vous convient le mieux.
Si vous cherchez à démarrer une carrière en génie logiciel, Sprout est un excellent point de départ.