Üniversite 1. ve 2. Sınıf Öğrencileri İçin Yazılım Mühendisliği

Mehmet Tuğrul Kaya
8 min readNov 6, 2022

Yazılım Mühendisliği Yol Haritası — Kapsamlı Kılavuzlar

Bu yazı dizisinde neler yer alacak kısaca bahsedeyim;

  • Üniversite 1. ve 2. Sınıf Öğrencileri için Yol Haritası
  • Üniversite öğrencileri için ‘Başlangıç’ ​​ve ‘İleri Düzey’ seviyeleri için yol haritası
  • Hizmete Dayalı Şirketlerden Ürüne Dayalı Şirketlere
  • Geliştirici Olmayandan Yazılım Geliştiricisine Yol Haritası
  • Mülakat Hazırlığı Yol Haritası — Makine ve yeni alanlar vb.

Yazılım mühendisi olmaya hazırlanırken üniversite hayatınızdan maksimum fayda mı elde etmek istiyorsunuz?

Bu makale şunları kapsayacaktır:

  • Maksimum fayda için: Kurulum
  • Yazılım Mühendisliği (+ farklı alanlar)
  • Mythbusters (Akademik Hayat, Öğrenme, Deneyimlere Açık Olmak)
  • Kodlama dışında yapmanız gerekenler (Bonus)
  • Öğrenilecek Programlama Dilleri (nedenleriyle birlikte)

Her şeyden önce buradaki tavsiyelerin bir kısmı değerli meslektaşım Gaurav Çandak fikirler ve bilgilerinden alıntı olduğunu bilmenizi isterim. Farklı deneyimlerden kılavuz çıkarmak önemlidir. Yazılım sektörüne giriş yapıp yavaşadımlarla ilerlemeye karar verdiyseniz öncelikle kendi sisteminizi kurmanız gerekiyor. Çünkü kendi disiplininizi sağlamak diğer disiplinleri öğrenirken hızlı ilerlemenize yardımcı olacaktır. Kendi sisteminizi kurarken en önemli adımda ise planlama ve tasarımdır. Planlama ve tasarım süreci bir sanattır. Bununla birlikte ancak gereksinimler yerine geldikten sonra daha doğru bir şekilde ilerlenilebilir.

Son bir sene içerisinde değerlendirdiğim mülakat ve görüşme deneyimlerimin sonucunda doğru yapılmaya çalışılan yanlışları (tabi kendimce) gördüm. Sektöre giriş yapan genç arkadaşların altyapısız bir şekilde taklit ve kopyalamayla özgeçmişlerini doldurduklarına şahit oldum. Birçok arkadaşa programları kopyalamak yerine doğrudan kendi yazdıkları kodlar üzerinden çözüm bulmalarını istedim. Başkasının uygulamalarını kopyalayarak tecrübe edinemeyeceklerini ve bunun onlara hiçbir şey katmayacağını açıkladım.

Yazılımla hiç uğraşmadıysanız bu sizin açtığınız ilk gedik olacaktır. Kimse nasıl başlamanız gerektiğini size söylemeyeceği gibi ekipleşme sürecinde ve yeni bir başlangıç yaparken 40’lı yaşlara kadar uzanan insanlar tarafından akran zorbalığına maruz kalacaksınız. Ama siz siz olun biri sizin vasıfsız olduğunuzu hissettiriyor ve bu nedenle öz güveninizi kırıyorsa o kişi ile iletişim kurmamalısınız hatta hayatınızdan çıkarmalısınız. En az maaş alan insanların en berbat işleri yaptığı, tepetaklak bir sistemimiz var.

Sanayi çağından kalma bir montaj hattı zihniyetimiz var. Yazılım daha çok bir zanaattır. Değiştirilebilir bir dişli olduğunuza inanarak ömrünüzü heba etmeyin. Whiteboarding uygulamalar üzerinden tek beden herkese uyar sürecine bence kanmayın. Bu tarz görüşmeler yakında tarih olacak ve sorulan sorulara verdiğiniz cevaplar asla sizin bilgi seviyenizi ölçmeyecek. Bunlar, bireyselliğinizi ortadan kaldırmaya ve kendinizi bir montaj hattı çalışanı gibi hissetmenize neden olur. Bu yüzden tüm bu yazılanları kısa bir süre düşündüğünüzde aslında kimsenin fikirlerimizi umursadığı yok. Birçok insan prototipinizi görmekle ilgileniyor. John Mayer bir röportajında; başarılı olmak için tek yapması gerekenin şarkılarını bitirmek olduğunu söyledi. Öyleyse şarkıları yazmayı bitirmeye odaklanıp sistemimizi inşa etmeye başlayalım.

Dizüstü Bilgisayar Kurulumu++

Henüz bir dizüstü bilgisayar satın almadıysanız, bir Free DOS dizüstü bilgisayar satın alın (SSD’li ve en az 8 GB RAM’li). DOS/Ubuntu dizüstü bilgisayarlar genellikle bir Windows Dizüstü Bilgisayardan daha ucuzdur. Artık Windows kullanmayı bırakmanın zamanı geldi.

UNIX tabanlı bir işletim sistemi kullanmaya başlamanız gerekir. Bir Macbook’unuz varsa, zaten UNIX tabanlı bir işletim sisteminiz var demektir. Windows veya DOS dizüstü bilgisayarınız varsa Ubuntu’yu kurun.

Kullanılacak E-posta Hizmeti

Başka bir e-posta hizmeti kullanıyorsanız Gmail’e geçin. Mail adresinizi telefonunuzdan da izleyeceğiniz uygulamayı kurun.

Kurulacak Yazılımlar

Dizüstü bilgisayar kurulumunu aldıktan sonra, dizüstü bilgisayarınıza aşağıdaki yazılımı yükleyin:

Oluşturulacak hesaplar

Google hesabınız/Gmail adresinizle aşağıdaki web sitelerinde hesap oluşturun:

Her yerde aynı (veya benzer) kullanıcı adını kullandığınızdan emin olun. Profesyonel bir şey tercih edin. Ad-Soyad gibi bir mail adresiniz olsun. Havalı, plaka kodlu veya sıfat taşıyan kullanıcı adları uzun vadede iyi bir fikir olmayabilir.

Odaklanın, Öğrenin ve Büyüyün

Yazılım Kısmı

Bir mobil uygulama, bir web sitesi veya bir masaüstü uygulaması aracılığıyla kullandığımız her yazılımın belirli bileşenleri vardır. Onlardan ve bu bileşenlerle ilişkili rollerden bahsedelim.

Ön Uç Geliştirici (Frontend Developer) + Mobil Geliştirici

Kullanıcı olarak etkileşimde bulunduğunuz şey, ön uç veya istemci tarafı uygulaması olarak bilinir. Web sitesinin/uygulamanın etkileşimini ve görünümünü bu rollerdeki kişiler geliştirir.

Çoğu şirketin farklı uygulama türleri için ayrı ön uç rolleri vardır:

Arka Uç Geliştirici (Backend Developer)

Arka uç geliştirme, web sitesinin, uygulamanın veya programın çalışmasına izin veren yazılım süreçleriyle ilgilenir. Ayrıca, arka uç geliştirici, üzerinde çalıştıkları web sitesinin veya uygulamanın sunucularında ve veritabanlarında ne olduğuyla da ilgilenir. Arka uç, sunucularda çalışan kod veya hizmettir. Bu nedenle bu hizmetler sunucu tarafı uygulamaları olarak da bilinir.
Bu kod, genellikle verileri bir veya daha fazla veritabanı ile istemciler (web sitesi/uygulama) arasında çok sayıda işlem ve mantıkla iletir. Şirketler bu iş için server-side kiralar.

Tam Yığın Geliştirici/Yazılım Geliştirme Mühendisi —
Full Stack Developer/Software Development Engineer (SDE)

Birçok şirket, işe alım yaparken hem frontend hem backend kısmında çalıştırmak için yazılımcı istihdam eder. Hemen hemen tüm en iyi ürünü olan şirketler, yalnızca SDE’leri işe alır.

Arka Uç + Ön Uç = Tam Yığın. Tam yığın geliştirici olmak için hem arka uçta hem de ön uçta iyi olmanız gerekir. Genel olarak, birinde uzman, diğerinde acemi de olabilirsiniz.

Bir SDE veya arka uç geliştiricisi olarak işe alınmak için, Problem Çözme, Veri Yapıları ve Algoritmalara da çok odaklanmanız gerekir.

DevOps Mühendisi/Site Güvenilirlik Mühendisi (SRE) -DevOps Engineer/Site Reliability Engineer

Şirketler ayrıca sorunsuz bir deneyim yaşamanızı ve sunucuların ve diğer sistemlerin sağlam ve kararlı olmasını sağlayan DevOps Mühendisleri veya Site Güvenilirlik Mühendisleri (SRE’ler) işe alır. Bu geliştiriciler arka uç sistemlerinin her zaman çalışır durumda olmasını sağlarlar.

Diğer özel roller

Makine Öğrenimi/Yapay Zeka Mühendisi, Veri Bilimcisi, Blok Zinciri Mühendisi, Oyun Geliştiricisi, vb. gibi belirli başka özel roller de vardır. Eğer bu yolda ilerlemek istiyorsanız çok fazla emek harcamanız gerekmektedir.

Ancak bu tür roller için çok fazla iş yok. İyi bir arkaplanınız olmadıkça bu konuda takıntı yapmamalısınız. Sadece güçlü temellere sahip olduktan sonra buralara yönelmeyi tercih edin.

Okul Hayatı

Akademik Hayat

  • İyi bir genel not ortalamasının korunması gereklidir. Alaylı olarak kariyerinizde devam edebilirsiniz ama iyi şirketler iyi mühendisleri işe alırlar ve iyi mühendisler iyi not ortalaması tuttururlar. Türkiye’de birçok savunma sanayi firması not ortalamasına göre eleme yapmaktadır.
  • Sosyal topluluklar önemlidir. İsterseniz bilgisayar biliminin temellerini her zaman öğrenebilirsiniz. O kadar da önemli bir mesele değil. Çoğu teknoloji şirketi muhtemelen sizin bulunduğunuz bölgede olmadığı için sizin bu kurumlarla irtibat kurmanız çok mümkün değil. Bu yüzden iyi bir GitHub klasörünüz varsa bazı şirketlere üniversiteniz aracılığıyla sosyal geziler düzenleyebilir ve bu kurumları tanıyıp ağınızı genişletebilirsiniz. İnanın bu yöntem iş başvurusunu internette yapmaktan çok daha iyi olacaktır.

Öğrenme

  • Birden fazla dil öğrenme konusunda takıntılı olmanıza gerek yok . İhtiyacınız olduğunda her zaman bir tane öğrenebilirsiniz. Kaç dil bildiğiniz kimsenin umurunda değil ve olmayacak da. Önemli olan bir projeyi bitirebilmeniz.
  • Şu anda piyasada trend olanı yapmak size en yüksek işi veya geliri kazandırmaz. Yazılım Mühendisliği hızlı hareket eden bir endüstridir. Şu an trend olan şey bundan 3–4 yıl sonra olmayabilir.
  • Yetenek yeterli değildir. Çalışkan olmak da önemlidir. Doğru yöne gitmedikçe sıkı çalışma da yeterli değildir. Doğru insanları ve doğru kaynakları takip edin. Kalabalığın arkasına geçmeyin. Devlerin omuzlarından bakmaya çalışmayın.
  • İçeriği pasif olarak tüketmek yerine aktif öğrenme yapın, aksi takdirde durmadan bir şeyleri öğrenme cehenneminde kalırsınız. Uygulamalı öğrenme ve yaparak öğrenme anahtardır.

Deneyimlere Açık Olmak

  • Mülakatlara girin. Mülakatlarda bilgi savurmayın anlatmak istediğinize becerilerinize ve öğrendiklerinize odaklı olun. Doğru ve sakin adımlar atın ve şirketlere sizi işe alması için sebep verin.
  • Akademik alanda başarılı olmak, iyi bir iş bulmak için yeterli olmayacaktır. Bir yazılım mühendisinden beklenen şeylerin çoğu, herhangi bir okulda sınıf içinde öğretilmez. Uygulama ve pratik esastır.
  • Herkes ilan edildiği gibi yüksek maaşlı bir iş bulamıyor ve yüksek bir maaş ile işe başlamıyor. Bundan dolayı önce çırak olmayı göze almalısınız ve taleplerinizde makul olmalısınız.

Kodlama dışında denemeniz gerekenler

Üst düzey beceri için öneriler

Öğrenmek için konfor alanından çıkmalısınız. Eksiklerinizi başkasından önce kendiniz görmelisiniz. Yani kendinize her zaman meydan okumalısınız. Örneğin bu dönemde olmazsa olmaz İngilizce ’de iyi olmak büyük bir avantajdır. Eğer bu konuda iyi değilseniz, üzerinde çalışmak için üç yılınız var. Doğru yönde tutarlı bir çabayla, bunu birkaç ay içinde yapabilirsiniz.

Kişisel Gelişim

  • En az bir kulüp/topluluğun parçası olmaya çalışın. Genel gelişiminizde size yardımcı olabilir. Google Developers, Patika, Huawei Developers vs.
  • Mümkünse, ilgi alanınıza göre bir topluluk oluşturmaya çalışın ve işbirliği yapmak için benzer düşünen insanlar bulun.
  • Etkinliklere ve yarışmalara katılın. Sertifikalar için değil, eğlenmek ve öğrenmek için.
    Şirketler sertifikaları umursamıyor. Hackathonlar iyi bir deneyimdir.
  • Uyarı: Vaktinizin çoğunu bu şeylerle harcamaktan kaçının.

Tutkunuzu takip edin

  • Üniversite birinci ve ikinci sınıf, başka türlü yapma şansınız olmayan şeyleri keşfetmek ve yapmak için en iyi zamandır. Yine de yedek tuttuğunuzdan emin olun.
  • Bir başlangıç ​​oluşturmayı deneyin. Üniversiteden sonra, başlamanın maliyeti çok yüksek olabilir. Okul, başlamak için en iyi zamandır. Başarılı veya başarısız olması önemli değildir. Bu noktada önemli olan öğrenmedir. Başarısızlık iyi bir öğretmendir.

Öğrenen bir insan olma

  • Okumaya zaman ayırın: Kitaplar, bloglar, belgeler üzerinden tarama yapın. Dünyanın en iyi içeriklerinden bazıları yazılı biçimdedir. Videolar, podcast’ler ve sesli kitaplarla destekleyin.
  • Öğrendiklerinizi paylaşın. Biraz yaratıcı olun.
  • Yazmak büyük bir beceridir. Bir blog oluşturun ve yazmaya başlayın. İşlem sırasında bir şeyler öğrenebilirsiniz. Twitter’da thread deneyin.
  • Bir YouTube kanalı oluşturun ve videolar oluşturmayı deneyin. Bu, keşfetmeniz gereken bir şey. Bunu asla kendim yapmadım. Keşke yapsaydım.
  • Kararında okumak, katılmak, oluşturmak, yazmak, uygulamak, tarama yapmak, iyi veya kötü tecrübe dinlemek ufkunuzu genişletir ve yaratıcılığınızı güçlendirir.

Öğrenilecek Programlama Dilleri

Öğrenmenizi önerdiğimiz bazı diller var. Bunların hepsini bir anda öğrenmenize gerek yok. Yazılım Mühendisliği Yol Haritası ile ilgili sonraki makalelerde daha fazla ayrıntıyla ele alınacaktır.

Birden fazla dili takıntı haline getirmeyin. İhtiyacınız olduğunda her zaman bir tane öğrenebilirsiniz. Kaç dil bildiğin kimsenin umurunda değil.

Israrla Tavsiye

Bunlar, önümüzdeki iki yıl içinde öğrenmenizi ısrarla tavsiye ettiğim dillerdir. Bunlar üzerinde uzmanlık geliştirirseniz, birkaç gün içinde diğer herhangi bir dili kolayca ve gerektiğinde öğrenebilirsiniz.

Bir dili birbiri ardına öğrenmenizi tavsiye etmem. İlk dille başlayın. Bir sonrakini yalnızca gerektiğinde öğrenin. Yol haritası bunu belirlemenize yardımcı olacaktır.

  • İlk Dil (kavramlar için)
    C ve C++
  • Nesneye Yönelik Programlama Dili (arka uç için)
    Java
  • Komut Satırı Dili (güç terminali kullanıcısı olmak için)
    Bash
  • Web’e Giriş Dili (web siteleri oluşturmak için)
    HTML
  • Stiller ve Pattern (siteleri şekillendirmek için)
    CSS
  • Web dili
    JavaScript

İsteğe bağlı

Bir alanda uzmanlaşmak istediğinizde veya proje yaparken öğrenebileceğiniz bazı isteğe bağlı diller vardır. JavaScript’i ve Java/C++/C# gibi nesne yönelimli bir dili biliyorsanız aşağıda söyleyeceklerim çok kolay öğrenilebilir.

Bunları yalnızca bir proje yaparken denemenizi öneririz. Bir süre kullanmadığınız sürece kafanızda süreci oturtamazsınız bu yüzden bol bol pratik yapmalısınız.

Projeler oluştururken öğrenebileceğiniz diller:

  • TypeScript (türleri olan JS)
  • React (UI bileşenleri oluşturmak için JS kitaplığı)
  • Python (temel komut dosyası oluşturma ve ML/DS öğelerini denemek için)
  • Kotlin (Android için)
  • Swift (iOS için)
  • Flutter/React Native (platformlar arası yerel uygulamalar için)
  • Go/Scala (yüksek düzeyde ölçeklenebilir sistemler için)

Burada belirtmediğim yazılım dilleri gereksiz değildir yalnızca bugün için üzerinde durmaya çok gerek olmadığını düşünüyorum. Gerektiğinde herhangi bir dili iş başında oldukça hızlı bir şekilde öğrenebilirsiniz.

Artık hazır olduğunuza göre, yazılım mühendisliği yol haritasının ikinci kısmına geçelim. Haritayı takip ederseniz, harika bir yazılım mühendisi olmamıza yardımcı olacaktır.

--

--