Geçenlerde bir Abap kitabı aldım. Güya Abap ögreneceğim! Abap SAP tarafından geliştirilmiş bir programlama dili ve SAP’nın ERP sistemlerini programlamak için kullanılıyor.
İlk yüz sayfayı hızlıca geçtim. İlk “Merhaba Dünya” programımı yazdım. Diğer dillerden fazla bir farkı yok. İşte bildiğin bir dil. Geriye 1150 sayfa kaldı. Gel de oku bakalım. Movitasyonum dibe vurmuş durumda. Masamda kitap bana bakıyor, ben kitaba bakıyorum. “Sana o kadar para verdim, en azından masamda durma şerefine nail oluyorsun” diyorum kitaba ara sıra. Okunacak diğer kitaplar yanında Abap kitabı zaten çok soluk kalıyor. İlgimi çeken o kadar başka çok sey var ki! Uğraşacak mutlaka başka bir şeyler buluyorum. Kitabın masamın üzerinde bir yerlerde duruyor olması bana yetiyor. “Bir gün mutlaka geriye kalan 1150 sayfayı okuyacağım ve bu işi çözeceğim” diyorum kendi kendime. Kitap da bana “sen kendini kandırmaya devam et bakalım, beni kesinlikle bir sefer daha eline alıp, Abap’a bir şans daha vermeyeceksin” diyor. Kitap rafında o kitap bir süs olarak kalacak. Bir şarkı sözünde denildiği gibi “sevemedim karagözlüm seni doyunca“.
Yeni bir dil ögrenmek istiyorsanız kitapları ya da kursları unutun! Yeni bir dil ya da teknoloji büyük bir buzdağı gibidir. Okuduğunuz kitaplar ya da katıldığınız kurslar buzdağının su üstünde kalan kısmını anlatırlar. Çoğu bunu bile beceremez. Çoğu programcının yeni bir dile giriş mecarası, buzdağının su üstünde kalan kısmı seviyesinde kalır. İşin kötü tarafı, su üstünde kalan kısma hakım olmanın programcıda “sen bu işi çözdün, artık gurusun” hissini uyandırmasıdır. Bu dilin müstakbel programcısı ne kadar büyük bir yanılğı içindedir.
1999 senesinde BizimAlem.com’u kafamda tasarlamaya başladığımda dünyadan haberi olmayan, Java dünyasından habersiz çaylak bir programcıydım. Bu durum çok kısa bir zamanda değişti, çünkü BizimAlem’in gelişebilmesi için değişmek zorundaydı.
BizimAlem.com yayın hayatına başladıktan kısa bir zaman sonra popüler oldu. Tabi o zamanlar feysbuk, meysbuk yok. Herkes balıklama BizimAlem’e atladı (Facebook çıktıktan sonra da balıklama oraya atladılar; Eye- ya da Hairbook çıktığında da oraya atlayacaklar; yani sazan gibi Facebook’a yatırım yapanlar bu yatırımın üstüne bir bardak soğuk limonata içsinler). Kullanıcı sayısı birden tavana vurdu. Binlerce insan eşli zamanda online olmaya başladı. Bununla birlikte benim baş ve karın ağrılarım da başladı. Uykusuz sunucuların başında çok geceler geçirdim. Ne yapsam yetmez oldu. Program hataları ile boğuşmaktan, uygulama sunucularının bir müddet sonra takılıp işlemez hale gelmesinden, kullanıcılardan gelen şikayetlerden bıktım usandım.
Bu olup bitenler bana bambaşka bir dünyanın kapılarını açtı. Yaşadıklarımı BizimAlem.com – Bir Sistemin Tasarlanış Hikayesi başlıklı yazımda okuyucularımla paylaşmaya çalıştım. Bir programcı olarak dünyayı başka türlü algılamaya başladım. Anladım ki programcı olma yeteneği sorun çözmekle pekişmekteymiş. Bir konuda uzmanlaşmak istiyorsanız başınıza BizimAlem.com gibi bir bela almanız gerekiyor. Hayal bile edemeyeceğiniz işlerle ugraşmak zorunda kaldığınızda bakın bakalım buzdağının dibine doğru nasıl yolculuğa çıkıyorsunuz ve kullandığınız programlama dilini yiyip, yutuyorsunuz.
Kısa bir zaman önce BTSoru.com isimli projem hizmet vermeye başladı. BTSoru.com hazır ve açık kaynaklı bir yazılım kullanıyor. Python dili ve Django çatısı kullanılarak oluşturulmuş. İkisinden de haberim yok. Ne şimdiye kadar Python kodu yazdım, ne de Django ile bir web projesi geliştirdim. “Neden anlamadığınız bir teknoloji yığınını kullanıyorsunuz” sorusunu sorduğunuzu duyar gibiyim. Cevabı çok basit: Python ve Django’u öğrenmek için.
Bir dili ya da teknoloji yığınını öğrenmenin en kolay yolu, bu dil ya da teknoloji yığını ile herkesin kullanabileceği bir proje geliştirmekten geçer. Kimsenin kullanmadığı bir program parçası suskundur. Programcıya geribildirim sağlamaz. Daha da kötüsü sorun yaratmadığı için programcının başını ağrıtmaz. Başı agrımayan programcı buzdağının derinliklerine doğru yolculuğa çıkmaz. Bu yüzden mutlaka kullanıcılardan geribildirim almak gerekir. Onlar çok kısa bir zamanda gidişatın yönünü belirlerler. İstekleri ve şikayetleri bitmediği için programcı devamlı sorun çözmek zorunda kalır. Bu şekilde kullandığı programlama dilinin ya da teknoloji yığınının derinliklerine dalmak zorunda kalır. Gerçek anlamda öğrenim ve hakimiyet bu noktadan itibaren başlar.
Şimdiden BTSoru.com kullanıcılarından bir sürü istek gelmeye başladı. Yani beni Python dilini öğrenmeye zorluyorlar. Platformu geliştirmek için Python’u ve Django çatısını öğrenmem, anlamam ve kullanabilmem gerekiyor. Ben ne yaptım? İlk önce Python kodunu yazabilecegim bir araç (DIE – Integrated Dev. Environment) aradım. Bir Eclipse kullanıcısı olduğum için, öncelikle Eclipse için bir Python plugini var mı, onu araştırdım. PyDev isminde bir Eclipse plugini buldum. Daha sonra internette Django örnek uygulamalarını araştırdım. Django ile ilk uygulamanı geliştir pratiğini yaptım. Şimdilerde BTSoru.com için ufak defek değişiklikleri yapabiliyorum. Acemiyim, ama bu durum yakında değişesek. Sayfaların yüklenme hızını artırmak için caching mekanizmaları kullanmam gerekiyor. BizimAlem’de Memcached kullanmıştım. Aynı şekilde gerekli değişiklikleri Django içinde de yapmam gerekiyor. Django’nun içinde şimdiden gezinmeye başladım bile. Bunları bir kitapta okumuş olsaydım, gerçek hayatta pratiğini yapmadan “caching faydalı bir şeymiş” deyip geçiştirirdim büyük bir ihtimalle. Ama şimdi bir ihtiyaç haline geldiği için bu konuya yoğunlaşmam gerekiyor.
Bu şekilde bir dili öğrenmek, kitap okuyarak öğrenmekten çok daha zevkli ve verimli. Kitaplar genelde “merhaba dünya” örneğinden çok ileri gidemedikleri için benim ilgimi çekmiyorlar. Kitaplarda yer alan örneklerin çoğu gerçek hayatla ilişkili değil. Örnek olmaktan ileri gidemiyorlar. Bu örnekleri kullanarak gerçek problemleri çözmek mümkün değil. Ayrıca kısa bir zaman sonra bu tür kitapları bir kenara koyup, daha enteresan bulduğum şeylere yoğunlaşıyorum. Bu şekilde bir dili verimli öğrenmem çok zorlaşıyor. Oysaki BizimAlem.com ve BTSoru.com örneklerinde olduğu gibi bir şeyleri ögrenmeye zorlandığımda durum değişiyor.
Benim için BizimAlem.com halen büyük bir laboratuvar. Öğrenmek istediğim herhangi bir teknoloji yığınını BizimAlem’e entegre ediyorum ve kenara çekilip seyretmeye başlıyorum. Oluşan hataları gidererek ve kullanıcılardan gelen geribildirimi değerlendirerek gerçek şartlarda çalışan bir uygulama hakkında öğrenmem gereken herşeyi çok kısa bir zamanda öğreniyorum. Bu bana kullandığım teknoloji yığınını ya da programlama dilini çok değişik açılardan inceleme fırsatı veriyor. Hangi iş için neyi kullanmam gerektigini daha iyi anlayabiliyorum. Bu tür bilgileri bir kitaptan okuyarak ögrenmek imkansız. Öğrenmek için gerçek şartlarda pratik yapmak gerekiyor. Bu konudaki verimliliğinizi artırmak için birilerinin sizi zorlamasını sağlayın.
Bir sonraki web projem ya Lisp ya da Clojure tabanlı olacak. Bu dilleri ögrenmem lazım ;-)
Sevgiyle Kalın…
EOF(End Of Fun)
Özcan Acar
C#, WPF, WCF ögrenmenin zamani ne zaman gelecek? :)
Microsoft lisans politikasini degistirmedigi sürece biraz zor ;-)
masadaki diğer kitabın yeni çıkan Java Performance olduğunu görüyüorum, son makalalerinizin neden hafıza ve performans içerikli olduğunu güzel açıklıyor :)
Dikkatinizden kacmamasi güzel. Isim geregi calistigim projede performans konularinda calisma yapmam gerekiyor. Bu da yazdigim makalelere yansiyor. Java Performance kitabini herkese tavsiye ederim.
Merhaba Hocam
Yeni bir dil öğrenmek için proje yapmak oldukça güzel bir düşünce bencede.Bu konu ile alakalı olarak bende farklı bir taraftan bakarak soru sormak ve sizinde konu ile ilgili fikirlerinizi almak istiyorum.Farklı yazılım dilleri öğrenmek ve onlarla yeni projeler geliştirmek kişisel gelişim için süper ama bir programcı için farklı dilleri öğrenmenin sizce bir meslek yılı varmıdır? Mesela yazılımcının ana seçtiği dalda iyice uzmanlık kazandıktan sonra farklı dilleri öğrenmesi mi daha faydalıdır veya bir çok dili aynı anda öğrenmeye çalışmasımı?
Benim kişisel fikrim yazılımcısına göre uzmanlık alanında en az 2 – 5 yıl geçirilmesi lazım ondan sonra diğer yazılım dillerini öğrenmeye gayret etmeli çünkü sizinde belittiğiniz gibi yazılım dilleri buz dağı gibidir öğrendikce dahada derinine inilebilir.
İyi çalışmalar
Tabi kolleksiyon yapar gibi dil ögrenmenin bir anlami yok. Degisik paradigmalara sahip dil ögrenmenin faydasi daha büyük diye düsünüyorum. Örnegin Java ile nesneye yönelik programlama yapilabilirsken, Clojure gibi bir dille fonksiyonel programlama yapilmaktadir. Bu iki dil birbirlerinden cok farkli yapidalar. Programci bu iki degisik dünyayi da tanirsa, programcilik yeteneklerine büyük zenginlik katar.
Özcan hocam bu yorumu görecek misiniz bilmiyorum ama sorayım yinede.
ABAP öğrenmek için nasıl bir proje geliştirebiliriz ki mesela? Burda değinmek istediğim nokta şu ABAP felan biraz daha spesifik bir alanda kullanılan diller yani bunlarda geliştirdiğimiz projeleri web’te kullanıma açmak mümkün olmayabilir. Bu gibi dillerde nasıl bir taktik önerirsiniz?
ABAP gibi diller kapali sistemler, ägrenmek icin ABAP kullanan firmalarda calismak lazim, tek basina proje yaparak ögrenebilecegini zannetmiyorum. Benim tavsiyem acik sistemlerin kullanimi ile ilgiliydi.
Hocam öyle bir proje planlaması yapın ki size katkıda bulunmak isteyenlerede bir imkan olsun Clojure projeniz :)
Pardon ama ABAP kodunu test etmeyi nasil becerdiniz? Developer keyiniz yok anladigim kadariyla. Hangi enviorimenti kullandiniz yadiginiz programi kullanmak icin?
Ne yazik ki cok zaman gecti, hatirlamiyorum :(
Merhaba ;
KTÜ Yazılım mühendisliği bölümünde hazırlık öğrencisiyim bölüm derslerimiz seneye başlayacak ve seneye göreceğim derslere hazırlık yapmak istiyorum sizce hangi programları kullanmam gerekir veya ileride bana yararı olur teşekkürler.
Hocam 11 yaşındayım proglamlama yapmak istiyorum android platformu için uygulama geliştirmek istiyorum eclipse programınımı yoksa android studio programını kullansam arada kaldım bir java dili ni kolayca nasıl öğrenebilirim
Teşekkürler….
Hocam bu yazınız da bizim gibi acemi programcılar için gerçekten çok ama çok faydalı bir yazı olmuş.Teşekkür ederim.Ellerinize sağlık..