Giriş seviyesi bir yazılım mühendisi olarak öğrenilen dersler

Yayınlanan: 2022-08-30

Bir yıl önce bana bir yazılım mühendisinin ne yaptığını sorsaydınız, "problemleri kodla çözme" çizgisinde bir şeyler söylerdim. Ürettiğimiz işin nasıl değerlendirildiğine işaret eden basit bir cevap. Ürün odaklı ekiplerdeki mühendisler için bu sorunlar, müşterilerin istediği yeni bir özelliğin nasıl uygulanacağını veya mevcut özelliklerin performansının nasıl iyileştirileceğini içerebilir.

Aynı soruyu bugün bana sorarsanız, biraz farklı bir cevap verirdim. Yazılım mühendisleri, doğru sorunları kod aracılığıyla çözmekle görevlendirilir ve etkili bir şekilde çözüldüklerinde iş hedeflerine ulaşırlar. Hangi sorunların çözüleceğini ve bunların nasıl çözüleceğini bulmak, gerçek uygulama ayrıntıları ikincil olmak üzere geliştirici olmanın en önemli parçasıdır.

Yazılım mühendisliğine giden yolum

Üniversitedeki birinci yılımdan önceki yaz Upperline Code'da ders aldıktan sonra programlamayla ilgilenmeye başladım. Bu fırsatı, The Opportunity Network adlı parçası olduğum bir kolej ve kariyer hazırlık programı sayesinde elde ettim.

Upperline Code, programlamaya ilk girişimdi ve kodlamayı öğrenmekle ilgilendiğimi hemen fark ettim. O yazın ilerleyen saatlerinde Notre Dame kayıt paketimi aldım ve Bilgisayar Bilimleri (CS) alanında uzmanlaşmak için Sanat ve Edebiyat Fakültesi'nden Mühendislik Fakültesi'ne geçtim.

En sevdiğim CS kurslarından bazıları Algoritmaların Tasarımı/Analizleri, Bulut Bilişim ve Programlama Zorluklarıydı. Problemler ilginçti ve profesörler yeni fikirler sunma ve kavramları açıklama konusunda harikaydılar.

Lisans boyunca, yazılım mühendisi olarak çalışmak ve kazandığım teknik becerileri kullanmak istediğimi biliyordum. Neyse ki, son sınıfımdan önceki yaz, Kantata'da yazılım mühendisi olarak staj yapma ve özelliklerin sunulmasına yardımcı olmak için diğer mühendislerle eş program yapma fırsatım oldu.

Staj deneyimim ve profesörlerimin moral konuşmaları, iş başvurularına ilk başladığımda başka bir göreve razı olmayacağım konusunda bana güven verdi. Ofis saatlerinde bolca zaman geçirdikten sonra 2021'de Bilgisayar Bilimi derecesi ile mezun oldum ve burada Sprout Social'da Yardımcı Yazılım Mühendisi olma teklifini kabul ettim.

Julius Boateng ve Sprout Social'dan bir grup meslektaş

Sprout Social'a Yerleşmek

Rolde yeni olmanın ve şirket için yeni olmanın bir parçası, hem genel yazılım mühendisliği becerilerini hem de Sprout'a özgü alan bilgisini geliştirmek zorundaydı. Anlamak için genel programlama bilgisi gerektiren görevlerin benim için çözmesi en kolay olanı buldum. Ancak, Sprout'un mimarisi hakkında bilgi gerektiren görevlerin üstesinden gelmem zaman aldı ve yardım için ekibime güvenmek zorunda kaldım. Çevrimiçi belgeleri okuyarak çözebileceğiniz bazı sorunlar olsa da, yaptığınız işle ilgili bilgileri her zaman bulamayabilirsiniz; başkalarından rehberlik isteyebilmek çok önemlidir.

Sprout'a katıldığımda dikkatimi çeken ilk şeylerden biri, geliştirme sürecinin ne kadar işbirlikçi olduğuydu. Özellikleri geliştirmenin tüm ekipleri gerektirdiğini biliyordum, ancak pratikte bunun nasıl göründüğünü bilmiyordum. Başarılı bir özelliği yayınlamanın, proje gereksinimlerini tanımlayan ürün yöneticilerinden, maketler oluşturan tasarımcılara ve özellikleri uygulayan mühendislere kadar farklı rollerde birçok kişinin birlikte çalışmasını gerektirdiğini hemen anladım. İşbirliği isteğe bağlı bir şey değildi, ancak ekibimizin hedeflerini gerçekleştirmede bir gereklilikti.

Julius Boating ve Sprout iş arkadaşlarının Chicago şehir merkezindeki Calder'ın Flamingo heykelinin dışında fotoğrafı

Çeşitli kod tabanlarında nasıl gezinileceğini öğrenmek ve farklı hizmetlerin birbirleriyle nasıl etkileşime girdiğine dair zihinsel bir model oluşturmak, dik bir öğrenme eğrisiydi. Sprout'un ana işi yazılım olduğundan, mimarisi ağırlıklı olarak iş gereksinimlerine göre şekillenir. Hızlanırken, geliştiricilerin çözmeye çalıştığı iş sorunlarının ve neden önceki mimari kararların verildiğinin farkında olmam gerekiyordu.

Başlangıçta, kod tabanına birleştirilmeden önce çekme isteklerinin gerekli incelemeleri yapmasından biraz korktum. Kod incelemelerinin asıl amacının bilgi paylaşımı ve kod standartlarını korumak olduğunu anlamak, bakış açımı değiştirmeye yardımcı oldu.

Kod incelemelerinden geçmek, teknik becerilerimi geliştirmeme ve çekme isteklerimin kalitesini artırmama yardımcı oldu. Meslektaşlarımın bana neyi değiştireceğim konusunda tavsiyeler vermesi, beni yeni kalıplarla tanıştırması ve beni kod tabanının ilgili alanlarına yönlendirmesi gerçekten yardımcı oldu. Diğer mühendislerin çekme isteklerini okumak da doğrudan üzerinde çalışmadığım diğer hizmetler hakkında bana değerli bir görünürlük sağladı.

Önceki deneyimleriniz önemlidir

Hayatta yeni aşamalara girerken, önceki deneyimlerinizin artık önemli olmadığına dair yaygın bir fikir var. Üniversiteye girdikten sonra, lise deneyimleriniz artık önemli değil. İşgücüne girdikten sonra, üniversite deneyimleriniz artık önemli değil.

Ancak genellikle gözden kaçan bir şey, deneyimlerimizin, bilgilerimizin ve alışkanlıklarımızın bileşik bir etkiye sahip olmasıdır. Genellikle daha önce yaptığımız çalışmalar sayesinde yeni şeyler başarabiliriz. Daha önce kazandığım bilgi ve beceriler, giriş seviyesi bir yazılım mühendisi olarak yeni zorluklara nasıl yaklaştığımı büyük ölçüde etkiledi.

Lisans sırasında Sprout'taki günlük çalışmalarım üzerinde en doğrudan etkiye sahip olan dersler Programlama Zorlukları ve Veritabanı Kavramlarıydı. İlki bana büyük problemleri daha verimli bir şekilde çözmek için nasıl daha küçük parçalara ayıracağımı öğretti. Kodumu nasıl yapılandırdığım konusunda daha bilinçli olmama yardımcı oldu ve kodumun okunabilirliğini geliştirdi.

Veritabanı Kavramları bana temel ilişkisel veritabanı kavramlarını ve veritabanı şeması tasarımı ve SQL gibi konuları öğretti. Sorunları çözmek veya soruları yanıtlamak için sık sık veritabanlarımızı sorgulamam gerektiğinden son derece yararlı olan sorgu yazmayı öğrendim.

TurtleBot robot kitinin hareketli gif'i.

Sınıf dışında sahip olduğum fırsatlar da bir o kadar değerliydi. Java, derslerimin çoğunda ele alınan bir dil değildi, ancak hocalarımdan birinin önderlik ettiği bir iş projesi için üzerinde çalışma fırsatım oldu. Java yazma, MySQL veritabanlarıyla çalışma ve Docker görüntüleri oluşturma konusunda uygulamalı deneyim kazandım. Java öğrenmek, Sprout'un hizmetlerinin çoğu içinde yazıldığından özellikle yardımcı oldu.

Komut satırında gezinmek ve temel programlama kavramlarını anlamak gibi, lisans eğitimim boyunca kazandığım ve kabul ettiğim birçok başka beceri var. Lisansta kapsanan konuların çoğunun doğası gereği teorik olduğu için, sizi yazılım mühendisliği kariyerlerine hazırlamayacakları yaygın bir yanılgıdır. Ancak, bunun tam tersinin doğru olduğuna inanıyorum - günlük işinize doğrudan uygulanabilir olmasalar bile, lisansta öğrendiğiniz beceriler önemlidir.

Bilgisayar Bilimi son derece geniş bir alandır

CS, yapay zeka, makine öğrenimi ve veri bilimi gibi çeşitli uzmanlıkları kapsar. Lisansta kazandığınız deneyim, yazılım mühendisliğine özel olmayan çeşitli giriş seviyesi rollerde size iyi hizmet edebilecek temel bilgiler olarak hizmet eder. Lisanstan tam zamanlı bir pozisyona geçiş yapmak, sizin için ne tür bir rol ve uzmanlığın uygun olduğunu keşfetme fırsatı sunar.

Yazılım mühendisliğinde bir kariyere başlamak istiyorsanız, Sprout başlamak için harika bir yerdir.