Serimizin ilk kısmında, yazılımcılığın sadece kod yazmaktan çok daha fazlası olduğunu gösterdik.
Yazılım şirketindeki ilk günlerden, okul ile gerçek projeler arasındaki farktan ve deneyimin esas olarak pratik yaparak kazanıldığından bahsettik.
Bugün neredeyse her Junior'ın kendine sorduğu soruya geçiyoruz. Aslında ne öğrenmeliyim?
İnternet her şeyi söylüyor. Bazıları mutlaka React öğrenilmesi gerektiğini söylüyor. Diğerleri geleceğin Rust olduğunu iddia ediyor. Bir kısmı ise Docker, Kubernetes ve beş sertifika olmadan CV göndermenin anlamsız olduğunu savunuyor.
Gerçek çok daha sakin görünüyor...
Çerçeveleri öğrenme. Programlamayı öğren.
Bu cümle garip gelebilir.
Sonuçta şirketler React Developer, Java Developer veya PHP Developer ilanları veriyorlar.
Peki neden çerçevelerle başlamamayı söylüyoruz? - Çünkü çerçeve bir araçtır. Ve araçlar çok hızlı değişir.
Birkaç yıl öncesine kadar birçok kişi AngularJS'in onlarca yıl hakim olacağına inanıyordu. Bugün durum tamamen farklı görünüyor.
Çerçeveleri kariyerin boyunca öğreneceksin. Ancak bir yazılımcının düşünme biçimi seninle hep kalır.
Bu yüzden önce şunları öğren:
- problemleri çözmeyi,
- gereksinimleri analiz etmeyi,
- çözümler tasarlamayı,
- başkasının kodunu okumayı,
- okunaklı kod yazmayı.
Teknoloji sadece bir amaca ulaşmanın aracıdır.
Bir dili gerçekten iyi öğren
Sanırım bu, başlangıç seviyesindekilerin en sık yaptığı hata.
Bugün JavaScript. Yarın Python. Ertesi gün Go. Haftaya Rust. Bir ay sonra C#...
İki ay sonra hiçbiri iyi seviyede öğrenilmemiş oluyor. Bir dili seçip gerçekten öğrenmek çok daha iyidir.
Şunu anlamalısın:
- belleğin nasıl çalıştığını,
- referansların ne olduğunu,
- istisna yönetiminin nasıl olduğunu,
- koleksiyonların nasıl çalıştığını,
- eşzamanlı programlama ile eşzamansız programlama arasındaki farkı,
- debugging'in nasıl işlediğini.
Bir dili gerçekten iyi öğrendiğinde, sonraki dilleri çok daha hızlı öğrenirsin.
Dokümantasyon okumayı öğren
Gösterişli değil mi? Çok.
Çok faydalı mu? Çok daha fazla.
İyi bir yazılımcı her şeyi ezberlemez. İyi bir yazılımcı güvenilir cevabı nerede bulacağını bilir.
Framework veya kütüphane üreticisinin dokümantasyonu neredeyse her zaman altı yıl önceki rastgele bir forum gönderisinden daha iyi bir bilgi kaynağı olacaktır.
Bilgi arama becerisi, gelişen kişiler ile internette buldukları çözümleri sürekli kopyalayanları ayıran şeydir.
Git bir "Gönder" düğmesi değildir
Eğer en erken öğrenilmesi gereken tek bir yetenek gösterecek olsaydık, bu Git olurdu. Modaya uyduğu için değil. Çünkü neredeyse her geliştirme ekibi kullanıyor.
Git sadece değişiklikleri kaydetmek değildir. İş birliği şeklidir. Branching. Pull Request. Merge. Çakışmaları çözmek. Değişiklik geçmişi.
Bunlar olmadan profesyonel bir ekipte çalışmayı hayal etmek zor.
Bir de tavsiye: Projeyi asla ZIP dosyasıyla göndermeyin. Cidden.
SQL - veri tabanı yöneticisi olmak istemesen bile
Birçok Junior SQL'den kaçınıyor. Bu bir hata.
Çoğu iş uygulaması veritabanları kullanır. Sorgu optimizasyonu uzmanı olman gerekmez.
Ama şunları anlamalısın:
- ilişkisel veritabanı nedir,
- ilişkiler nasıl çalışır,
- indeks nedir,
- LEFT JOIN ile INNER JOIN arasındaki fark nedir,
- kötü yazılmış bir sorgunun nasıl tüm uygulamayı yavaşlatabileceği.
Bu bilgi neredeyse her projede işe yarar.
Linux ısırmaz
Hemen Windows'tan vazgeçmek zorunda değilsin. Ancak terminalde temel işleri yapmayı öğrenmek faydalıdır.
Çoğu sunucu Linux tabanlı çalışır.
Temel komut bilmek:
- ls,
- cd,
- grep,
- cat,
- chmod,
- ssh,
çok fazla zaman kazandırabilir.
Başta garip görünebilir. Birkaç ay sonra terminal olmadan çalışmayı hayal etmek zor.
Docker - neden herkes bundan bahsediyor?
Birkaç yıl önce geliştirme ortamını kurmak tüm günü alabiliyordu.
Herkesin farklı PHP versiyonu vardı. Farklı veritabanı. Farklı kütüphaneler.
Docker bu sorunu çok basitleştirdi. Uygulamayı her bilgisayarda aynı ortamda çalıştırmaya izin veriyor.
Bir Junior hemen konteyner uzmanı olmalı mı? - Hayır.
Ama konteynerin ne olduğunu ve neden neredeyse her modern projenin Docker kullandığını anlamak faydalıdır.
Yapay zeka mükemmel bir mentor. En iyi geliştirici değil.
Bugün atlanamayacak bir konu bu.
ChatGPT, GitHub Copilot ve diğer AI araçları öğrenmeyi çok hızlandırabilir. Tek şart: kodu anlamadan kopyalamayın.
Bunun yerine sormak daha iyi:
- Neden bu çözüm daha iyi?
- Bu algoritma nasıl çalışıyor?
- Bunu nasıl optimize edebiliriz?
- Bu yaklaşımın dezavantajları neler?
AI çok iyi açıklar.
Ancak bağımsız düşünmenin yerini almamalı.
Debugger senin arkadaşın
Başlangıçta çoğumuz şöyle yapar: var_dump($zmienna);
Sonra: echo $zmienna;
Ve biraz sonra: console.log(dane);
console.log(dane2);
console.log(dane3);
console.log(dane4);
Hepimiz böyle başladık. Ancak mümkün olan en kısa sürede debugger kullanmayı öğrenmek iyi olur.
Debugger programı istediğin yerde durdurmana, değişkenlerin değerlerini görmene ve kodun çalışması sırasında gerçekten neler olduğunu anlamana olanak sağlar.
Bu, geliştirmeyi çok hızlandıran yeteneklerden biridir.
Hangi donanımı seçmeli?
Birçok kişi burada on binlerce liralık bilgisayar listesi bekler. Gereksiz.
Başlangıçta en yeni işlemciden daha önemli olanlar:
- rahat bir klavye,
- hızlı bir SSD disk,
- yeterli miktarda RAM,
- kararlı bir çalışma ortamı.
Renkli RGB aydınlatma derlemeyi hızlandırmaz. Üç monitör de kodu daha iyi yapmaz.
İyi bir donanım çalışmana yardımcı olmalı. Fotoğraflarda etkilemek için değil (ama itiraf edelim - görünüş de önemli ;))
Terimler sözlüğü
Framework
Belirli kurallar doğrultusunda uygulama geliştirmeyi kolaylaştıran hazır araçlar ve kütüphaneler seti.
Git
Kod değişikliklerini izlemeye ve bir projede birden çok geliştiricinin birlikte çalışmasına izin veren sürüm kontrol sistemi.
Docker
Uygulamaların izole konteynerlerde çalıştırılmasını sağlayan platform; böylece ortam farklı bilgisayarlarda aynı şekilde işler.
Debugger
Bir programın adım adım çalışmasını incelemeye ve hataları bulmaya yarayan araç.
SQL
İlişkisel veritabanlarıyla iletişim kurmak için kullanılan dil.
Özet
İyi bir yazılımcı tüm teknolojileri bilmez. Tüm çerçeveleri bilmez. Tüm dokümantasyonu ezberlemez.
İyi bir yazılımcının sağlam temelleri vardır.
Problemleri nasıl analiz edeceğini bilir.
Bilgiyi nerede bulacağını bilir.
Teknolojilerin çalışma prensiplerini anlar.
Ve bu yüzden yeni araçları hızla öğrenebilir.
Çerçeveler değişecek.
Diller evrilecek.
Düşünme biçimi kariyerin boyunca en değerli yetenek olarak kalacaktır.
Bir sonraki bölümde, Senior Developer'ın günlük işinin nasıl göründüğünü, neden Code Review'in en iyi okul olduğunu, Clean Code'ın aslında ne olduğunu ve neden "benim bilgisayarımda çalışıyor" cümlesinin birçok geliştiricide gergin bir gülümseme yarattığını göstereceğiz.



