Kod Yazmaya Başlayacaklara Tavsiyeler

Photo credit: Yancy Min

Kod Yazmaya Başlayacaklara Tavsiyeler

uzun zamandır hakkında bir şeyler yazmak istediğim bir konu bu. hazır internet altyapısında bakımlar yapılırken gecenin geçmek bilmezliğini değerlendirmek için fırsat bulup zihnimi biraz boşaltayım.

baştan söyleyeyim; bu yazı içerisinde herhangi bir kaynak paylaşımı olmayacağı gibi “gidin şunu öğrenin.” de demeyeceğim. daha çok: kod yazmanın, geliştirici olmanın, ortaya kaliteli ürünler çıkarmanın, kendini gerçekleştirme tatmininin yani bu başlığı okuma nedeninizin temelleri üzerine yazacağım. en başta anlaşılması gereken de budur. söyleyeceklerim kendini bu alanda geliştirmesine destek olduğum ve birlikte kariyer planlaması yaptığımız, yeri geldiğinde eşli programlama seanslarıyla problem çözme üzerine tartıştığımız birkaç öğrencimin bakış açılarını gözlemleyerek ortaya çıkan şeyler.

  • ilk önce neden kod yazmayı öğrenmek istediğinizi kendi kendinize mantıklı ve kabul edilebilir bir şekilde cevaplamalısınız. bu bir hobi mi, iş mi, kişisel projeleri gerçekleştirmek mi ya da artık ne ise. size bu motivasyonu sağlayacak ve bunu diri tutacak cevabı kendinize vermelisiniz. arapça’da çok güzel bir kelime var: sebat. cevabınız sizi sebatlı olmaya yönlendirmiyorsa ve bu alanda başarılı olmak istiyorsanız oturup ciddi ciddi düşünün ve gerekirse vazgeçin. bu sadece bu alanda değil bir hayat felsefesi olarak bakılması gereken bir şey. yoksa mutsuz, başarısız ve kendini yetersiz gören biri olmanız kaçınılmaz. hiçkimse bu motivasyona sahip değilken saatlerce bir ekrana bakarak gelişme kaydedemez. aslında verilebilecek en iyi tavsiye bu. mevzunun özü de bu. cevabınızı bulduğunuzda ve o motivasyonu sağladığınızda gecenin bir yarısı aklınıza daha iyi bir çözümün gelmesiyle yataktan fırlayıp kod yazmak için can atacak, yorgun düşmenize rağmen sırf henüz tatmin olmadığınız için geliştirmeyi sonlandırmayıp devam edebilecek, yeni bir şey bulduğunuzda onu keşfetmenin merakıyla derinlere dalmak isteyeceksiniz. bu duruma geldiğinizde size bir başkasının kaynak sunmasına gerek olmadığını da göreceksiniz. çünkü siz onu bulmaya, keşfetmeye ve anlamaya açık biri oldunuz. ilk önce cevabınızı bulun.

  • öğrenmenin bir süreç olduğunu kabullenin ve hiçbir zaman artık ben bunu biliyorum demeyin. kendi öğrenme sürecinize set çekip sürekli gelişmeyi engellemeyin. gerçek şu ki maalesef hiçbir zaman her şeyi bilecek yetkinlikte olmayacaksınız. fakat ihtiyacınız olan bilgiye erişmeye ve onu kullanabilme becerisine sahip olmayı öğrenmelisiniz. değerli olan da budur. yanınızda bir kütüphane taşımaktansa kütüphaneye gidip neyin nerede olduğunu bilmek ve onu anlamak daha değerli. insanlar bunun için doküman yazıyorlar, referans kitaplar bu yüzden var.

  • problem çözme yeteneklerinizi geliştirin. problemlere farklı açılardan bakmayı, alternatif çözümler üretmeyi, ürettiğiniz çözümleri analiz etmeyi, onları çözerken içinden çıkabilecek alt problemleri keşfedebilmeyi öğrenin. bir problemin içinden çıkamadığınızda uzaklaşmayı da bilin. bazen problemlerin çözümleri olmadık yerlerde aklınıza gelebilir.

  • kod yazmanın geliştirme sürecinde bir adım olduğunu bilin. geliştireceğiniz yapının tasarımı, mimarisi, mantığı, iş akışı, kritik noktaları vesaire gibi iş süreçlerinin kod yazmaktan önce geldiğini ve bu çalışmaları yapmadan kervan yolda düzülür diyerek yapacağınız başlangıcın kod yazarken aynı zamanda bu süreçleri de işin içerisine katmak zorunda kaldığınız için kaynaklarınızı verimsiz kullanmanıza ve yapınızın karmaşıklığını arttırmanıza sebep olacağını anlayın.

  • zihninizde tasarladığınız şeyleri kağıda dökün. yazacağınız kodu olabildiğince somut bir şekilde ifade edin. ifade edilmemiş ya da kod yazarken yapılır diye havada bırakılmış konular kod yazma ritminizi bozacaktır. tekrar tekrar aynı problemlerin üzerinde gereksiz yere düşünmek zorunda kalacaksınız.

  • programlama dillerini ve bunlara bağlı teknolojileri gözünüzde büyütmeyin. bunların bir araç olduğunu ve sizin yapmak istediğiniz şeye hizmet etmesini sağlamak için kullandığınızın farkında olun. bir dilin ya da teknolojinin taraftarı olmayın. ihtiyacınıza uygun olan ne ise onu öğrenip kullanın. nasıl ki edebi bir eser yazmak için sadece okuma ve yazma yetmiyor, aynı şekilde bir programlama dilini öğrenmiş olmak sizin mükemmel yazılımlar yapmanıza yetmeyecektir. aynı uygulamayı farklı dillerle yazabilirsiniz fakat aslolan fikir ve sizin onu nasıl hayata geçirdiğinizdir.

  • öğrenme sürecinde başarısızlıklarla, hatalarla, olmayışlarla sık sık karşılaşacaksınız. bunların sizi yıldırmasına izin vermeyin. her hatadan bir şeyler öğrenmeye çalışın. bazen kasıtlı olarak hatalı programlar bile yazın ki gözden kaçırma ihtimaliniz olan noktaları da keşfedebilesiniz.

  • iyi bir gözlemci olun. programlamanın sadece bilgisayar dünyasıyla değil hayatın kendisiyle ilişkili olduğunun farkına varmayı öğrenin. aradığınız çözümlerin, yeni problemlerin, bakış açılarının, algoritmaların, tasarım desenlerinin hayatın içerisinde bir yerlerde keşfedilmeyi ve anlaşılmayı beklediğini düşünerek bunları görebilmek için gözünüzü açın.

  • matematiğinizi geliştirin. yazdığınız kodların temelinin matematiğe dayandığını aklınızdan çıkarmayın. kullandığınız programlama dilinin söz dizimi ve veri yapıları sizi ne kadar matematik işlemlerinden, algoritmadan, mantıktan soyutlayarak çoğu işi kendi içinde halletse de matematiği göz ardı etmeyin. böylece önünüze gelen bir problemi önce matematiksel olarak çözeceksiniz. geriye kullandığınız dil bu matematik işlemlerini nasıl yapıyorsa ona uyarlamak kalacak sadece. bu konuyla alakalı çok beğendiğim bir örnek var:

Problem: Harita üzerinde enlem ve boylamları belirtilmiş mağazalarınız mevcut ve kullanıcı kendisine en yakın mağazanın hangisi olduğunu bilmek istiyor.

eğer bu probleme sıradan bir yazılımcı gözüyle bakarsanız, problemi daraltmak isteğiyle mağazalarınızın enlem ve boylam bilgileri dışında başka bilgilere de ihtiyaç duyacaksınız. gereksiz kontrollerle bunu çalışır hale getirmek için uğraşacaksınız.

fakat probleme bir matematikçi gibi yaklaşarak, dünya üzerindeki iki nokta arasındaki mesafeyi nasıl hesaplayabilirim şekline dönüştüreceksiniz.

sonra dünya düz olmadığından bunun düz bir çizgi değil yay olması gerektiğini düşüneceksiniz. biraz araştırmayla karşınıza great circle distance çıkacak.

sonrasında geriye formül içerisinde veritabanındaki mağazaların enlem ve boylam değerleri ve kullanıcının konumunun enlem ve boylam değerlerini kullanarak mesafeyi azdan çoka sıralamak ve en kısa olanı seçmek kalacaktır. *

  • kullanmanız için size sunulan programlama dillerinin derinlerini kurcalayın. bir sayı dizisini sıralamak için kullanılan fonksiyonun sıralama işlemi yaparken hangi algoritmayı kullandığını ya da oluşturduğunuz bir sayı değişkeninin hafızada ne kadar yer kapladığını merak edin.

  • eğer bunu bir iş olarak görüyorsanız kurslara gitmek yerine üniversite okuyun. bir kursa gidip nasıl kod yazmanız gerektiğini öğrenebilirsiniz fakat kod yazarken seçtiğiniz yolların nedenlerini derinlemesine öğrenemezsiniz. burada bilim yaptığınızı unutmayın. üniversite nasıl sorusundan çok neden sorusuna cevap verir. sizi geliştirecek olan da bu sorudur.

  • merak edip derinlere daldıkça işin içinden çıkılmaz bir hale doğru gittiğini düşünebilirsiniz. çok doğal. sadece bir alanda çalışmak istediğinizde bile birbiri ile ilişkili olan o kadar çok disiplinle karşılaşacaksınız ki bunları öğrenmeye ömür yetmez gibi gelecek. adım adım giderek kendi öğrenmenizi bir ürün olarak görüp her adımda kendinize bir şeyler katarak ve bundan keyif alarak süreci yönetmeye çalışın. konudan konuya atlamaktansa “bugün python’da dosya işlemlerinin nasıl yapıldığını öğreneceğim.” deyin kendinize ve sadece o konuda çalışın.

  • dünyayı takip edin. yazılım dünyasının ünlülerini, blogları, haber akışlarını, bültenleri ne varsa organize hale getirip düzenli bir şekilde okuyun. burada ingilizce’den bahsetmeme gerek yok sanırım. mesajı aldınız.

  • sıradan bir geliştirici olmayın. dışarıda aynı şeyleri tekrar tekrar yapan, bir adım ilerleyememiş, kendini bu alanda uzman zanneden, yazılımı cms/eticaret/web sitesi vesaireden ibaret bilen, bir alana sıkışmış ve hayal gücünü kullanmaktan imtina eden, gelişmeyi ve yeniliği reddeden, yaptığı işe memur kafasıyla yaklaşıp farklılaştırmak için çaba sarfetmeyen, hazırcı insanlar var. farklı olun, farklılığınızı kodlarınıza yansıtın, hayal gücünüzü kullanıp yeni şeyler ortaya çıkarın.