Programlamada Yardım Almak
Kod yazarken yardıma ihtiyacı olmayan yok, bu İngilizce, Türkçe her blogta, forumda, videoda bahsedilen bir gerçek. Yeni başlayan ya da uzman herkesin bir noktada birine ya da bir şeye danışması gerekiyor.
Yardım alan tarafta sık sık bulunan, yardımcı olan tarafta da bulunmaya çalışan biri olarak, bu sürecin iki taraf için de kolaylaşmasını ve hızlanmasını sağlayacak olan bazı fikirlerim var. Yazının hedef kitlesinin programlamaya yeni başlayanlar olduğunu, bu süreci kendileri için kolaylaştırmayı hedeflediğimi belirtmek isterim.
Yapay zeka kullanımı
Programlama dünyasındaki dominant konumu dolayısıyla bu alandaki her tartışma mutlaka bir şekilde yapay zekaya değinmek durumunda. O yüzden ilk başlıkta bunu aradan çıkaralım.
Yapay zeka destekli kod yazma araçları kod yazmayı elbette kolaylaştırdı. Tecrübeli yazılımcıların yapay zekayı nasıl kullandıkları da buradaki bağlamın dışında. Ben yeni başlayanların biraz dikkatli yaklaşmaları görüşündeyim.
Yeni başlayan birinin ilk refleksinin yapay zekaya soru sormak olması, öğrenme sürecini hızlandırmak yerine çoğu zaman daraltıyor. Çünkü araştırmak süreci sadece doğru cevabı bulmak değildir, problemi farklı açılardan görmeyi, kullanılan kavramları, alternatif çözümleri ve yan konuları keşfetmeyi de içerir. Klasik yöntem diyebileceğimiz, google araması yapıp stack overflow okuyarak yapılan araştırmalarda insan, farkında olmadan bu keşif sürecinin içine girer. Farklı yazılara, farklı yaklaşımlara, hatta bazen yanlış ama düşündürücü çözümlere denk gelir.
Yapay zeka ise çoğu zaman bu süreci tek bir cevaba indirger. Bağlamı sizin yerinize seçer, çözümü sizin yerinize şekillendirir ve sizi düşünme sürecinden çok tüketime iter. Bu da özellikle temeli oturmamış kişiler için kalıcı öğrenmeyi zorlaştırır.
Bu yüzden yapay zekaya, başlangıç aşamasında en son çare olarak başvurmak gerektiği görüşündeyim. Effort heuristic (efor sezgisi) denilen bir olguya göre, insanlar bir şeyin ne kadar değerli ya da kaliteli olduğunu, o şey için ne kadar emek harcadığına bakarak yagılar. Özetle, daha uzun sürede ya da daha fazla çabayla üretilmiş şeyleri, otomatik olarak daha değerli görme eğilimimiz vardır. Bize direkt cevapların sunulmadığı, araştırma yaparak öğrendiğimiz soruları beynimiz daha değerli gördüğü için daha çok sahip çıkacaktır. Araştırma yolculuğunda öğrendiğimiz ek bilgiler, sektör gelenekleri, kayank çeşitliliği, kimi zaman edindiğimiz bağlantılar da yanımıza kar kalacaktır.
Bunu aradan çıkardıysak, sorunları yapay zekaya sormadan nasıl çözebiliriz onu konuşmaya başlayalım.
Hatanın anlaşılması ve analiz edilmesi
İkinci bir kişiye başvurmadan önce yapabileceğimiz çok fazla şey var ve bunlar herkesten önce bize zaman ve beceri kazandıran adımlar. En önemlisi karşılaştığımız hatanın aslında ne olduğunu bilmeliyiz.
Hata ayıklama (debugging)
Hata ayıklama, programlamanın bir parçası. Hatta bir parçası bile değil ya direkt kendisi diyeceğim. Hataya sebep olan kodu da programlayan kişi yazdı sonuçta. En kolay düzeltebilecek kişi de o.
Bu adım hatanın çözülebileceği en kolay adım aslında. Özellikle yeni programlama öğrenenler doğru debuglamayı da öğrenirlerse hataların %90’ında arama motoruna gitmezler bile. IDE’lerin özel debug araçları var ve bunlar kullanışlı ama ondan önce çok basit print, log ifadelerini doğru yerlere koymak ve çıktılarını görmek baş ağrılarını baştan önleyebilir. “Loop çalışmıyor” geçerli bir hata tarifi değildir. Loop başına, sonuna, işlemin yapıldığı noktalara birer log atarız. Bunun sonucunda hatayı, “loopa girmiyor, looptan çıkmıyor ya da loopta işlem yapılmıyor” diye küçültebiliriz. Uğraşacağımız kısım çok daha dar bir alan oldu artık.
Kod tekrarları
Aynı kodu başka bir yerde yazdınız, oradaki çalışıyor ama bu çalışmıyor. Demek ki burada bir problem var. Orayla burası arasında ne fark var? Aynı dosyalar mı import ediliyor, aynı değişkenler tanımlanmış mı, aynı noktaya varıyorlar mı? Orada çalışan kodun burada çalışmamasının tek sebebi farklı bir şeylerin olmasıdır. O farkı bulmalı ve hatayla ilişkilendirmeliyiz.
Hata mesajları
IDE veya editorler eğer bariz bir hata yapıldıysa mutlaka hata mesajı veriyor. Onları boşuna vermiyor. Bazen “missing }” hatası yardım platformlarında soruluyor. Bilgisayar aslında açık ve net bir şekilde x. satıra bir tane ” } ” koy diyor. Yani nereye ne koyacağına kadar söylüyor bunlara dikkat edebiliriz.
Hata mesajlarını anlamak bazen çok kolay olmuyor. Özellikle geliştirme platformu Türkçe ise benim kafamı çok karıştırıyor, sebebi de teknik terimlerin çevrilmesi. Uç arabirim beklenmedik şekilde sonlandırıldı cümlesi beynimde okuduğum anda bir anlam ifade etmiyor. Bu tür yardımcı araçları anlamak için ekstra efor sarf etmemize gerek olmamalı diye düşünüyorum.
Araştırma adımı
Programcının bana göre EN büyük becerisi arama motoru kullanabilme becerisidir. Benim 4 yıllık öğrenciliğim boyunca internette aratıp da bulamadığım birkaç tane problem olmuştur. Bunların belki bir iki tanesi gerçekten spesifik sorular olduğu için bulunmamıştır, diğerlerinde eminim ki ben doğru anahtar kelimelerle araştırmamışımdır. Eğer gerçekten internette çözümü olmayan bir şey bulduysanız gerçekten iyi bir şeyler bulmuş olabilirsiniz. 🙂
Anafikre odaklanmak
Diyelim ki basit bir “to-do list” mobil uygulaması yapıyoruz. Görevleri bir liste yapısında tutuyoruz. Listelere ögeleri ekleyecek kodu yazdık ama kaldırmayı yapamadık. İnternette araştırdığımız cümle “yapılacaklar listesinden öge kaldırma” olursa herhalde üretkenlik içerikleri falan çıkar. “x programlama dilinde yapılacaklar listesinden öge kaldırma” dersek evet biraz daha amaca uygun ama yine de başkalarının implementasyonlarına dayalı, dinamiği bizim programımıza uymayacak çözümler buluyoruz.
Bizim ihtiyacımız “listeden öge silmek, x dili” şeklinde bir arama. Anafikir yapılacaklar listesi değil, anafikir liste yapısı.
İngilizce konusunda çok tutucuyum, her lafımda geçer bu muhtemelen. Araştırmaları da İngilizce yapmak nokta atışı çözümlere ulaştıracaktır. Bana güvenin ve tüm ortamlarınızı İngilizce’ye geçirin.
Yardım isteme adımı
Hata analiz edildi, ne olduğu az çok anlaşıldı. Hata mesajı yok ya da çözüm sunmadı, problem internette de aranamayacak kadar spesifik ya da karmaşık. Sonuçta sadece programlama hataları konusunda değil algoritma ve mantık konusunda da yardıma ihtiyacımız oluyor. Tam olarak ihtiyacımızı belirtmek zorunda kalabiliriz.
Bu adımlar belirli bir kişiye soru sorarken iki taraf için de kullanışlı olacak ama daha da güzeli, toplu bir platforma sorarken cevap alma olasılığını kat kat arttıracak. Çünkü yardımcı olacak kişi hatayı anlamak için ekstra efor harcamayacak, çözüm odaklı yaklaşabilecek.
Girebildiğin kadar detaya gir
“xx yaparken kod hata veriyor” cümlesi eksik. Gereksiz yere süreci uzatacak derecede eksik. Ne hatası veriyor? Çalışmıyor mu, çalışıp duruyor mu, hiç tepki vermiyor mu, kapanıyor mu, hata fırlatıyor mu? Problem açık ve net tarif edilmeli. Yine (o bağlamda mümkünse) anafikre odaklanarak sorulmalı.
Probleme dair mümkün olduğunca çok detay verilmeli. Hangi işletim sistemi, hangi platform, hangi dil, hangi framework, hangi modüller her şey önemli.
Hata mesajlarını varsa paylaşılmalı. Siz anlamamış olabilirsiniz ama başkası anlayabilir. İşe yaramıyor diye düşünmemek lazım.
Kodların ekran görüntüsünü ya da daha da kötüsü fotoğrafını atmak yerine direkt yazılı olarak kod paylaşılmalı. Hem okuması hem de gerekirse kopyalayıp denemesi kolay oluyor.
Eğer analiz etme kısmında problemi doğru bir şekilde daralttığınızdan eminseniz sadece hatalı olan kısmın kodunu paylaşın. Değilseniz ve tüm kodu paylaşıyorsanız da hatanın nerede olabileceğini belirtin.
Fikir isterken
“Yapılacaklar listesi programı nasıl yapılıır?” sorusu da eksik. Kimse oturup sıfırdan bunu anlatmaz, anlatmamalı da zaten. Hangi platforma, hangi araçlar kullanarak yapılacağı gibi detaylar verildikten sonra programın ana yapısı ve nereden başlayacağınıza dair fikir istemek çok daha verimli olacaktır.
Bonuslar
Bu maddelere bonus dedim ama diyecek daha iyi bir kelime aklıma gelmediği için. Yoksa olmasa da olur maddeler değil bunlar. Olmazsa olmazlar.
Kibarlık
Belirtmeme gerek olmadığını düşünüyorum fakat hızlıca üzerinden geçelim. Kimse kimseye yardım etmeye mecbur değil, birçok insan gerçekten kendisine faydası olmasa bile, bilgi becerisinin çok altında olsa bile tamamen iyilik ve yazılım dünyasına katkı olsun diye yardımcı oluyor sorularımıza. Sorunun tartışması boyunca net, temiz cümleler kurup karşımızdakinin bize vakit ayırdığını aklımızdan çıkarmamalıyız. Sorun çözüldükten sonra bir teşekkürü çok görmemeliyiz. Yarın öbür gün aynı kişiye yine danışacağız, yüzümüz olmalı bunu yapmaya.
Topluluğa geri verme
Programlama serüveninde bence en önemli şeylerden biri topluluk. Open source gibi bir kültürün olduğu bir sektördeyiz. Bu topluluk sayesinde öğrenip bu topluluk sayesinde gelişiyoruz. Yazılım/teknoloji topluluğuna her anlamda borçluyuz ve bunu geri ödeyerek döngüyü devam ettirmeliyiz.
Okuduğunuz için teşekkürler. Konuyla ilgili ekleme, düzeltme yapmak ya da tartışmak isterseniz memnuniyetle karşılık veririm.



