Yazılımcılar İçin Öğrenmeyi Öğrenmek

Mehmet Durmaz
Türkçe Yayın
Published in
6 min readMar 29, 2018

Hiç kimseye bir şey öğretemezsiniz, yapabileceğiniz tek şey içlerindeki öğrenme isteğini keşfetmelerine yardım etmektir.

Galileo Galilei

Okumaya başladığınız bu yazı, bir grup yazılımcının geliştirmesi sonucu ortaya çıkan bir blog’ta yayınlanmaktadır. Adeta hayatın değişilmez bir parçası haline gelen telefonlarda, uzaya çıkan rokette, “akıllı” adı verilen hemen hemen her sistemde; kısacası hayatın birçok alanında yazılımcıların parmağı olduğunu gözlemleyebiliriz. Heyacan verici bir mesleğe sahip olduğumuzu söyleyebilirim; zor bir meslek olduğunu ekleyerek.

Peki neden böyle bir yazı yazma ihtiyacı duydum ?

Bilgisayar mühendisliğine başladığım ilk yıllarda birçok şeyi internet üzerinden gerçekleştirebiliyorduk fakat bunun yetersiz olduğunun farkındaydık. Alışveriş, bankacılık işlemleri, sağlık hizmetleri, eğitim gibi birçok hizmetin sanal ortama taşınacağından bahsederdik. Mobil teknolojilerin yaygınlaşacağını konuşurduk.

10 yıl önce bunları tartışıyorduk ki…

Bugün, hastalara yüksek oranlarla doğru teşhis koyan yapay zekayı, eğlence, sağlık, savunma gibi birçok alanda kullanılan sanal gerçekliği, milyarlarca veriyi işleyerek anlamlı veriler elde eden veri bilimlerini, insansız savaş sanayi gelişmelerini ve daha birçok ileri seviye konuyu tartışır konuma geldik. Tüm bunlar için birçok yazılım dili, framework, teknoloji vb. geliştirildi ve yazılımcılara bu süreçlere olabildiğince adapte olma sorumluluğu geldi.

Kısa sayılabilecek iş hayatımda sıklıkla yeni şeyler öğrenmek ve kimi zaman öğrendiklerimi güncellemek durumunda kaldım, hala aynı süreçlerden geçiyorum. Bu süreçte ve geçmişte edindiğim tecrübeleri elimden geldiğince paylaşmaya çalışacağım. Konuyu başlıklar halinde anlatmaya çalışsam da aslında hepsinin birbirleriyle ilişkili ve bir bütün olduğunu belirtmekte fayda olabilir.

İngilizce

Yeni bir teknolojiye mi merak saldınız ? Kodunuzda çıkan hatanın çözümünü mü arıyorsunuz ? İşiniz gereği yurt dışıyla irtibat kurmak zorunda mı kaldınız ? Yeterli Türkçe kaynak bulamadınız mı ? İngilizce ayağınıza kadar geldi. Bu konuyla ilgili çok fazla detaya girmeye gerek duymuyorum. İngilizcenin yazılımcılar için ne kadar gerekli olduğu konusunda hemfikiriz diye düşünüyorum. En en azından okuduğunu anlayabilecek kadar olanının…

Öğrenme Süreci

Öğrenme kesinlikle lineer bir süreç değildir; döngüseldir. Başlangıçta soru işaretlerinizin olduğu kısımların ilerleyen aşamalarda cevap bulmasıdır. Herhangi bir konuyu öğrenmeye başladığınızda aklınıza yatmayan, zihninizde canlandırmakta zorlanacağınız kısımlar olabilir ki gayet doğaldır; ileri aşamalarda taşlar yerine oturmaya başlayacaktır. Bunun için ara ara geriye dönüşler yapabilirsiniz.

Öğrenmeye başlamadan “büyük resme” bakmak faydalı olabilir. Birkaç soruyla anlatmak gerekirse :

  • Bu teknoloji ne için kullanılır ?
  • Diğerlerinden farkı nedir ? Bu teknoloji olmadan önce benzer süreçler nasıl yürüyordu ? ( Öğrenmek istediğimiz şeylerin birbirlerine nasıl benzediklerinden çok nerede birbirlerinden ayırt edildiğini bilmemiz daha yerinde olacaktır. )
  • Hangi alt başlıklara ayrılmış ?
  • Örneklerini görebilme fırsatım var mı ?

Farklı Kaynaklardan Yararlanmak

Fikrimce, bir yazılımcının sahip olduğu en büyük avantajlardan biri erişebileceği kaynak sayısının fazla olmasıdır; Udacity, Codacademy, Code School, Udemy, Pluralsight, Coursera aklıma gelenlerden bazıları. Her kaynağın anlatım tarzını benimsemeyebilirsiniz, seviyesi yüksek veya düşük gelebilir, bazı konuları yeterince aydınlığa kavuşturamayabilirsiniz. Böyle bir durumda farklı kaynaklardan yardım alabilirsiniz, tek bir yere bağımlı değiliz.

Uygula - Değiştir - Ekle - Çıkar

Herhangi bir programlama dilinin — örnek kod parçasının dökümantasyonunu okuduğumuzu veya eğitimini izlediğimizi varsayalım. Aynı zamanda uygulamazsak akılda kalması pek mümkün değildir. Kısacası, “Bilmek uygulamaktır.” Öğrendiklerimizi uygulamak, sonra kurcalamak, ekleme-çıkarma yapmak hatta bozmak nasıl çalıştığını kavramamızı sağlayacaktır.

Düşünmek

Yazılım öğrenmenin kolay bir süreç olmadığını belirtmiştik. Bazen küçük bir konuyu yerine oturmak, çözüm bulmak için soğukkanlı bir şekilde düşünmek gerekmektedir. Bunu da doğru sorular sorarak ve neden-sonuç ilişkisi kurarak gerçekleştirebiliriz. Hatta duvarları parçalaya parçalaya ilerleyeceğimiz zamanlar olacaktır. Burada dikkat edilmesi gereken şey, bunun duvarları parçalamaya değecek bir konu olup olmadığıdır. Eğer ilerleme sağlayamıyorsak debelenmenin ve zaman kaybetmenin anlamı yoktur. Sorunun cevabını başka kaynaklardan veya bilen birilerinden öğrenmek akıllıca ve zaman kazandıran bir çözüm olacaktır.

Küçük Denemeler Yapmak

Bütün = parça + parça + …… + parça

Eski çalıştığım projede, elimdeki örnek XML dosyasının bazı kısımlarını güncelleyip yeni XML’ler yaratmam gereken zamanlar oluyordu. Bu durum hem zaman kaybına neden oluyordu hem aynı işi defalarca tekrar etmek bazen sıkıcı geliyordu. Ayrıca XML’deki element sayısı oldukça fazlaydı ve hata yapma ihtimalim de her daim vardı. Bu duruma şöyle bir çözüm buldum : Güncellenecek bilgileri belirli düzende bir excel dosyasına kaydettim. Excel’in her bir satırındaki bilgilerle örnek XML’deki ilgili element’in değerini güncelledim ve bu güncelleme sonrası oluşan XML’i yeni bir XML dosyası olarak türettim.

Peki bu işe nasıl başladım ?

Eclipse’te örnek bir proje oluşturdum ve araştırmaya koyuldum. Önce Java ile excel dosyasını açmayı, excel’deki her bir kayda ve belirli bir kolona ulaşmayı denedim. Daha sonra benzer süreçleri XML dosyası için gerçekleştirdim. Son olarak excel’den sıralı olarak okuduğum değerleri XML’deki belirli alanlara yerleştirdim ve yeni XML’in çıktısını almayı denedim.

Küçük ama oldukça etkili; yeni bir şey öğrenecekseniz boş bir proje oluşturun, deneyin, nasıl yapılır öğrenin ve uygulamaya geçirin. Aynı işlemi veritabanı işlemleri, socket programlama gibi konularda da yaptığımı ve oldukça faydasını gördüğümü söylemeliyim.

Süreklilik

“Taşı delen suyun gücü değil sürekliliğidir.”

Vücut geliştiren birini hayal edin. Birkaç günde bir 1–2 saat çalışması mı daha doğrudur yoksa tek seferde 10 saat çalışıp uzun süre ara vermesi mi ? Öğrenmek uzun ve yorucu bir süreç olabilir fakat unutmamak gerekir ki düzenli ve disiplinli ilerlendiği takdirde hem süreç kolaylaşır hem çok daha verimli çalışılır. Öğrenmenin verdiği haz ve kazandırdığı özgüven de gün geçtikçe artar.

Birlikten Kuvvet Doğar

Çevrenizde tecrübelerinden faydalanabileceğiniz kişiler varsa yardım almaktan kesinlikle çekinmeyin. İşin içinden çıkamazsanız fazla zaman kaybetmeye hiç gerek yok. Tabi ki öncesinde biraz uğraşın, araştırın. Biraz çaba sarf ederek bulabileceğiniz çözümler için sürekli destek istemek karşı taraf için de yorucu olabilir. Bildiklerinizi aktarmaktan da kaçınmayın; öğrenmenin en kestirme yollarından biri de konuyu başkalarına aktarmaktır.

Ne Kadar Az Düşünürsen / Tasarlarsan O Kadar Fazla Zorlanırsın

Öğrenciliğimde yaptığım en büyük hatalardan biri acele davranıp hemen uygulamaya geçmek istememdi. Bu durum daha fazla zorlanmama ve zaman kaybetmeme sebep oluyordu. Sonraları öğrendim ki sorunu ne kadar açık-net tanımlarsam, algoritmayı ne kadar iyi hazırlarsam uygulamaya o kadar rahat geçiyordum. Üstelik daha kaliteli ve daha az karmaşık ürünler ortaya çıkarıyordum.

Rastgele Öğrenmek Çok Verimli Olmayabilir

Görüntü İşleme konusuna merak saldınız diyelim ve bu konuyla ilgili de OpenCV kütüphanesini öğrenmek istiyorsunuz. Dökümantasyonu okuyarak, örnek projeleri inceleyerek ilerleme sağlayabilirsiniz. Fakat tüm bunları, aklınızda görüntü işlemeyele ilgili bir projeniz varsa ve bu projeyi uygulamaya geçirirken öğrenmeye çalışıyorsanız daha iyi ilerleyeceğinizi düşünüyorum. Android için uygulama geliştirmeyi bitirme tezimi yaparken öğrendiğimi söyleyebilirim. Kısacası, bir konu üzerinden veya bir sorunu çözmek için öğrenmek daha faydalı olabilir.

Tecrübelerimi, görüşlerimi elimden geldiğince aktarmaya çalıştım. Katılmadığınız kısımlar, kendinize uygun farklı çalışma yöntemleriniz veya görüşleriniz olabilir. Olumlu — olumsuz her türlü eleştirinizi ve tecrübelerinizi mehmetdurmazz@yahoo.com adresine e-posta göndererek veya yorum bırakarak paylaşabilirsiniz.

Podcast| Youtube | Slack | Facebook | Twitter | Instagram | Kodcular

--

--