Berker‘in paylaşımından denk geldiğim ve görüşlerime tercüman olan Shalin Shekar Mangar‘ın bu yazısını Türkçe’ye çevirme ihtiyacı hissetim. Kendi görüşlerimi eklemiyorum, bu yüzden tartışmaya oldukça açık. İleride çok sayıda insanı yönlendirebilecek bir yazı bulunması umuduyla çevirdim. Umarım faydalı olur. Keyifli okumalar. Not: Aşağıdaki yazı ve sunum Allahabad-Hindistan Bilgi Teknolojileri Enstitüsü’ndeki (IIIT) öğrencileri açık kaynaklı projelere, özellikle Apache Lucene, Solr ve Hadoop üzerine katkıda bulunmak konusunda teşvik etmek için hazırlanmıştır. Birinci konuşma bu iken ikincisi “Apache Software Foundation ile Tanışın” konuludur ve 2., 3. ve 4. sınıf öğrencilerine Lucene, Solr, Hadoop projeleri hakkında kısmen teknik bilgi vermek için hazırlanımştır.

İstediğiniz zaman istediğiniz üzerine çalışın

Herkes havalı projelerde çalışmak ister. Lakin gerçek hayatta büyük ihtimalle maaşı iyi olsa bile bir işte veya pozisyonda takılıp kalırsınız ve çok düşük ihtimalle bu iş üzerine çalışmak istediğiniz konularla ilgilidir. Derslerde algoritmalar, dağıtık sistemler, doğal dil işleme, bilgi temini (information retrieval), biyoinformatik ve birçok bilgisayar bilimi ve uygulamaları hakkında konular öğrenirsiniz; fakat gerçek hayatta yazılım şirketlerinin çoğunda yapılan  işlerin sadece küçük bir miktarının derslerinizde öğretilenlerle alakası vardır.

Çoğu zaman şirketin işleri gereği başkalarının kullandığı araçları kullanıyor ve onların kodlarını düzenlemekle uğraşıyor olursunuz. Bu, bilgilerinizin çöpe gittiği anlamına gelmez, kesinlikle iyi bir programcı olmanıza yardımcı olacaktır.

Açık kaynaklı projeler size başkalarının üzerinde çalışmanızı istediği şeyler yerine kendi istediğiniz bir şeyler üzerinde çalışabilme imkanı sunar. Bu şekilde hem işe yarar, hem büyük markaların bile kullanabileceği, hem de iyi niyet gözetilerek hazırlanmış büyük projeler sizin elinizden çıkabilir. Açık kaynak camiasındaki binlerce projeden birini seçmekte özgürsünüzdür. Üstelik, ne kadar katkıda bulunacağınız da size kalmıştır. Açık kaynaklı projelerde patronunuz yoktur ve teslim tarihleri, takvimler gibi konular üzerinizde baskı oluşturmaz.

“Gerçek” Dünyada Geliştirmek

Okuldaki akademik projeler, tam zamanlı yazılım geliştirmek için bilmeniz gereken geliştirme yeteneklerini kazanmanıza yardımcı olmaz. Bu yeteneklerin çoğu doğası gereği teknik değil “sosyal” yeteneklerdir fakat en az teknik yetenekler kadar önemlidir.

Çoğu akademik proje “oyuncak” projelerdir. Bunu demekle projenin yaşam devrinin (life cycle) sizin etrafınızda döndüğünü kastediyorum. Projenin  tasarımcısı, geliştiricisi, testçisi ve kullanıcısı siz olursunuz. Sonuç olarak, bu projelerde bir çok önemli nokta eksik kalır:

  • Build sisteminin olmaması - Makefile, Ant, Maven? Çok az öğrenci bu sistemlerle tanışıktır. Sıfırdan build dosyaları yaratmayı sormayın bile. “Hey, bu dosyalaları bir yazı düzenleyicide veya IDE’de aç ve derle” cümlesini duymak hiç de olağan dışı değildir.

  • Kaynak sürümlendirme olmaması - CVS? SVN? Git? Genelde bütün kodu (veya %80’inden fazlasını) tek kişi yazar, bu sebeple ihtiyaç duyulmaz.

  • Hata (bug) takip sistemi olmaması - “Hocalara sunduktan sonra asla kullanılmayacak ki.”

  • Kullanıcı için dokümantasyon olmaması - Belki çalışmanız sonunda bulgularınızla bir araştırma kağıdı yazacaksınız fakat “başka” insanlar için neredeyse hiç yazılı dokümantasyonunuz olmayacak.

  • Destek için e-posta listesi veya forum olmaması - Çünkü bu projeyi ileride kimse kullanmayacak. Dahası, bu şartlar altında şunları asla öğrenemeyeceksiniz:

  • Teknik kısımlarla ve tasarım seçimleriniz ile ilgili başka insanlarla tartışmak

  • Projenin tasarımı, mimarisi ve yol haritası ile ilgili anlaşmazlıkları çözmek

  • Kullanışlı arayüzler hazırlamak (komut satırı seçenekleri, grafik arayüzü veya API)

  • Doğru hata yakalama ve kayıt tutma (logging) kodları yazmak

  • Çalışan sistemleri izlemek için başka yazılımların işlemler arasına kod (hook) yerleştirmek

  • Yedekleme ve geri dönüştürme hakkında çözümler üretmek

  • Sistemin işlevselliği için ileride genişletilebilecek, değiştirilebilecek ve eklenebilecek bileşenleri düşünüp uygun planı yapmak Açık kaynaklı projeler gerçek işlerdir. Eğer uzun süre ilgilenirseniz bu konularla ilgili bir çok tartışma ve anlaşmazlığı görebilir veya bu tartışmaların bir parçası olabilirsiniz. Yukarıdaki yeteneklerin tümü gerçek dünyadaki yazılım geliştirme işlerinde ihtiyaç duyacağınız şeylerdir.

En iyi olandan öğrenin

Kaç tane muhteşem geliştirici tanıyorsunuz? Kaç tanesi şu anda açık kaynaklı bir projede çalışıyor veya daha önce çalışmış? Bahse varım ki çoğu isim bu iki listede de olacaktır.

Açık kaynaklı geliştirme, tecrübeli geliştiricilerin nasıl çalıştıkları, onların farklı tasarım, kodlama ve çözümleri tartışma yöntemlerini gözlemlemenize yardımcı olur. Asıl ve belki de daha önemli kısmı şu ki çok sayıda zeki programcı kodunuzu inceliyor ve yorumlar bırakıyor olacaklardır. Haliyle bu da size aynı problemi daha verimli veya daha kısa (veya ikisi de) şekilde nasıl çözmeniz gerektiğini  öğretecek ve kendinizi geliştirmenize olanak sağlayacak. Bu tip geri bildirimler (feedback) kendini geliştirmekte olan bir programcı için paha biçilemezdir.

Apache Solr projesine katkı sağlamaya başladığımdan beri çok önemli tecrübeler edindiğimi söyleyebilirim.

Doğrulanabilir öz geçmiş hazırlayın

Öz geçmişinizde (veya CV’nizde) bahsedeceğiniz şeyler iletişim bilgileriniz, akademik geçmişiniz ve performansınız, bildiğiniz programlama dilleri, üzerine çalıştığınız projeler ve benzer şeyler üzerine olacaktır. Bu bağlamda öz geçmişinizde doğrulanabilir çok az miktarda bilgi olacaktır. Bu hem sizin adınıza hem de müstakbel işvereniniz adına bir sorun. Çünkü,

  • Verdiğiniz bilgiler becerilerinizi, yoğun ve büyük çaplı çalışmalarınızı temsil etmeyebilir

  • İşe alım konusunu bir şans oyunu haline getirir ve işvereninizin daha bilinçli ve farkında kararlar vermesini önler Açık kaynaklı bir projeye katkı yapmak hakkındaki en iyi şey yaptığınız her şeyin herkes tarafından görülebilir (umumi) olmasıdır. Bu sebeple yaptığınız katkıyla ilgili şu tip şeyler söyleyebilirsiniz:

  • Bu proje üzerine son iki yıldır çalışıyorum.

  • P projesinin X, Y ve Z özelliklerini ben yazdım.

  • Projenin forumunda ve e-posta listesinde 200’den fazla yazım var.

  • Projeye katkı yapma erişimine sahibim

  • Ben uzmanım çünkü bu projenin bu kısımlarını “ben yazdım” Bu şekilde müstakbel işvereniniz bunları arayabilir ve kolayca doğrulayabilir. Tebrikler, şimdiden sizin öz geçmişiniz CV yığınının en üstüne kondu bile.

Şirketler sizi bulacaktır

Bir şirket açık kaynaklı X projesini kullanmanın onları büyük para harcamaktan kurtaracağına karar verirse büyük ihtimalle X projesinde uzman ve bu konuda destek verecek birkaç kişiyi işe alacaktır. Bu tip şirketlerin çoğu şirketin asıl işinin yanında mesai süresince X projesine katkı yapmalarına da izin verir. Şimdi söyleyin, bu proje üzerinde çalışmak için kim sizden daha kalifiye olabilir ki, siz zaten o projenin geliştiricisisiniz!

Bir açık kaynaklı proje doğrudan şirketin içinde kullanılmasa bile çoğu teknoloji firması açık kaynak katkıcılarını işe alır. Çünkü,

  1. Açık kaynaklı geliştiricileri işe almak onları başka geliştiricilerin gözünde daha havalı gösterir

  2. Açık kaynaklı projelere katkı yapanlar tecrübeli ve iyi programcılardır Eminim ki burada saydıklarımdan başka daha bir çok neden vardır. Sonuç olarak, açık kaynaklı bir projeye katkıda bulunmak değerli zamanınızı iyi bir işe yatırmak demektir ve iyi bir iş bulmak için biletiniz olabilir. İyi şanslar!

_Yazıdan sonra konunun sunumuna da göz atabilirsiniz. Sizin bu konudaki düşünceleriniz neler? _