Wnioski wyciągnięte jako inżynier oprogramowania dla początkujących

Opublikowany: 2022-08-30

Gdybyś zapytał mnie rok temu, co zrobił inżynier oprogramowania, powiedziałbym coś w stylu „rozwiązywanie problemów za pomocą kodu”. To prosta odpowiedź, która wskazuje na to, jak oceniana jest nasza praca. W przypadku inżynierów pracujących w zespołach opartych na produktach problemy te mogą dotyczyć sposobu implementacji nowej funkcji, o którą prosili klienci, lub poprawy wydajności istniejących funkcji.

Gdybyś dzisiaj zadał mi to samo pytanie, udzieliłbym nieco innej odpowiedzi. Inżynierowie oprogramowania mają za zadanie rozwiązywać właściwe problemy za pomocą kodu — a po skutecznym rozwiązaniu realizują cele biznesowe. Ustalenie, które problemy należy rozwiązać i jak je rozwiązać, jest najważniejszą częścią bycia programistą, a faktyczne szczegóły implementacji są drugorzędne.

Moja droga do inżynierii oprogramowania

Zainteresowałem się programowaniem po zajęciach w Upperline Code latem przed pierwszym rokiem studiów. Dostałem tę szansę dzięki programowi przygotowania do college'u i kariery, w którym brałem udział, pod nazwą The Opportunity Network.

Upperline Code był moim pierwszym wprowadzeniem do programowania i szybko zdałem sobie sprawę, że jestem zainteresowany nauką programowania. Później tego lata otrzymałem pakiet rejestracyjny Notre Dame i przeszedłem z College of Arts and Letters do College of Engineering, aby móc studiować informatykę (CS).

Niektóre z moich ulubionych kursów CS to projektowanie/analiza algorytmów, przetwarzanie w chmurze i wyzwania programistyczne. Zagadnienia były ciekawe, a profesorowie znakomicie prezentowali nowe idee i wyjaśniali pojęcia.

Podczas studiów wiedziałem, że chcę pracować jako inżynier oprogramowania i wykorzystywać zdobyte umiejętności techniczne. Na szczęście latem przed ostatnim rokiem studiów miałem okazję odbyć staż jako inżynier oprogramowania w firmie Kantata i współpracować z innymi inżynierami, aby pomóc w dostarczaniu funkcji.

Moje doświadczenie ze stażu, wraz z rozmowami motywacyjnymi moich profesorów, dało mi pewność, że nie zadowoli się żadną inną rolą, kiedy po raz pierwszy zacząłem ubiegać się o pracę. Po wielu godzinach spędzonych w biurze ukończyłem studia w 2021 roku z tytułem CS i przyjąłem ofertę pracy jako Associate Software Engineer tutaj w Sprout Social.

Julius Boateng i grupa kolegów z Sprout Social

Osiedlenie się w Sprout Social

Częścią bycia nowym w tej roli i nowym w firmie było rozwijanie zarówno ogólnych umiejętności w zakresie inżynierii oprogramowania, jak i znajomości domeny specyficznej dla Sprout. Zauważyłem, że zadania, które wymagały ogólnej wiedzy programistycznej, były dla mnie najłatwiejsze do rozwiązania. Jednak zadania, które wymagały znajomości architektury Sprout, zajęły mi trochę czasu i musiałem liczyć na pomoc mojego zespołu. Chociaż istnieją pewne problemy, które można rozwiązać, czytając dokumentację online, nie zawsze można znaleźć informacje, które są istotne dla wykonywanej pracy — możliwość poproszenia innych o wskazówki ma kluczowe znaczenie.

Jedną z pierwszych rzeczy, które rzuciły mi się w oczy, kiedy dołączyłem do Sprout, była współpraca w procesie rozwoju. Wiedziałem, że tworzenie funkcji wymagało całych zespołów, ale nie wiedziałem, jak to wygląda w praktyce. Szybko zdałem sobie sprawę, że wydanie udanej funkcji wymagało współpracy wielu osób pełniących różne role — od menedżerów produktu definiujących wymagania projektowe po projektantów tworzących makiety i inżynierów wdrażających funkcje. Współpraca nie była czymś opcjonalnym, ale koniecznością w realizacji celów naszego zespołu.

Zdjęcie współpracowników Juliusa Boatinga i Sprouta przed posągiem Flaminga Caldera w centrum Chicago?

Nauka poruszania się po różnych bazach kodu i budowanie mentalnego modelu interakcji między różnymi usługami było stromą krzywą uczenia się. Ponieważ podstawową działalnością firmy Sprout jest oprogramowanie, jej architektura jest silnie kształtowana przez wymagania biznesowe. Kiedy się rozkręcałem, musiałem zdawać sobie sprawę z problemów biznesowych, które programiści próbowali rozwiązać i dlaczego podjęto wcześniejsze decyzje architektoniczne.

Początkowo byłem nieco przestraszony, że pull requesty wymagały sprawdzenia, zanim mogły zostać włączone do bazy kodu. Zrozumienie, że głównym celem przeglądów kodu jest dzielenie się wiedzą i utrzymywanie standardów kodu, pomogło zmienić moją perspektywę.

Przeglądanie kodu pomogło mi wyostrzyć moje umiejętności techniczne i poprawić jakość moich żądań ściągnięcia. Bardzo pomocne było to, że rówieśnicy doradzali mi, co zmienić, wprowadzali mnie w nowe wzorce i wskazywali odpowiednie obszary bazy kodu. Czytanie żądań ściągnięcia innych inżynierów dało mi również cenny wgląd w inne usługi, nad którymi bezpośrednio nie pracuję.

Twoje wcześniejsze doświadczenia mają znaczenie

Panuje przekonanie, że kiedy wkraczasz w nowe etapy życia, twoje poprzednie doświadczenia przestają mieć znaczenie. Kiedy wejdziesz do college'u, twoje doświadczenia w szkole średniej nie mają już znaczenia. Kiedy wejdziesz na rynek pracy, twoje doświadczenia na uczelni nie będą już miały znaczenia.

Ale coś, co często jest pomijane, to fakt, że nasze doświadczenia, wiedza i nawyki mają złożony efekt. Zwykle jesteśmy w stanie osiągnąć nowe rzeczy tylko dzięki pracy, którą wykonaliśmy wcześniej. Wiedza i umiejętności, które wcześniej zdobyłem, w dużym stopniu wpłynęły na to, jak podchodzę do nowych wyzwań jako inżynier oprogramowania dla początkujących.

Zajęcia na studiach, które najbardziej bezpośrednio wpłynęły na moją codzienną pracę w Sprout to Wyzwania Programistyczne i Koncepcje Baz Danych. Ten pierwszy nauczył mnie, jak rozbijać duże problemy na mniejsze części, aby skuteczniej je rozwiązywać. Pomogło mi to bardziej świadomie uporządkować kod i poprawić jego czytelność.

Koncepcje baz danych nauczyły mnie podstawowych pojęć dotyczących relacyjnych baz danych i obejmowały takie tematy, jak projektowanie schematów baz danych i SQL. Nauczyłem się pisać zapytania, co jest niezwykle przydatne, ponieważ często muszę przeszukiwać nasze bazy danych, aby rozwiązać problemy lub odpowiedzieć na pytania.

Animowany gif zestawu robota TurtleBot.

Równie cenne były możliwości, które miałem poza szkołą. Java nie była językiem, który był omawiany na większości moich kursów, jednak miałem okazję pracować nad nim przy projekcie biznesowym, który prowadził jeden z moich profesorów. Zdobyłem praktyczne doświadczenie w pisaniu Javy, pracy z bazami danych MySQL i tworzeniu obrazów Docker. Nauka Javy była szczególnie pomocna, ponieważ większość usług Sprout jest w niej napisana.

Jest wiele innych umiejętności, które zdobyłem podczas studiów, które uważam za oczywiste, takich jak nawigacja po wierszu poleceń i zrozumienie podstawowych koncepcji programowania. To powszechne błędne przekonanie, że ponieważ większość tematów poruszanych na studiach licencjackich ma charakter teoretyczny, nie przygotują cię do kariery inżyniera oprogramowania. Uważam jednak, że jest odwrotnie – umiejętności, których uczysz się na studiach licencjackich, nawet jeśli nie mają bezpośredniego zastosowania w Twojej codziennej pracy.

Informatyka to niezwykle szeroka dziedzina

CS obejmuje różne specjalizacje, takie jak sztuczna inteligencja, uczenie maszynowe i data science. Doświadczenie, które zdobywasz na studiach licencjackich, służy jako podstawowa wiedza, która może ci dobrze służyć na różnych stanowiskach na poziomie podstawowym, nie tylko w inżynierii oprogramowania. Przeskok z poziomu licencjata na stanowisko w pełnym wymiarze godzin daje możliwość sprawdzenia, jakie stanowisko i specjalność są dla Ciebie odpowiednie.

Jeśli chcesz rozpocząć karierę w inżynierii oprogramowania, Sprout to świetne miejsce na rozpoczęcie.