Açıklama: Webrazzi'de yeni bir yazı dizisiyle karşınızdayız. Türkiye internet sektörünün tecrübeli yazılım geliştiricilerini teker teker Webrazzi.com'da konuk edip, kendilerinden genç yazılım geliştiricilere olan tavsiyelerini ve tecrübelerini dinliyoruz.
Konuk yazarımız Osman Yüksel; sahibinden.com, Kartaca, Tart New Media ve Rocket Internet gibi şirketlerde yazılım geliştirme üzerine çalışmış, şu an kendi kurduğu Sonsuzdöngü'de çalışmaktadır.
Gözlemlediğim kadarıyla, iki ana tip yazılım geliştirici grubu var. Birinci grup açık kaynak yazılım dünyasına daha yakın olan, startup kültürüne daha yakın firmalarda çalışanlar. İkinci grup ise kurumsal dünyaya daha yakın çalışanlar. (bankalar, askeri projeler, sağlık sektörü yazılımları vs.)
Sanırım üniversite yıllarımda birinci gruba daha yakın olduğumdan, profesyonel yaşantımda açık kaynak dünyasının içinde buldum kendimi. Startup kültürüne yakın şirketlerde çalıştım.
30'una gelmiş bir geliştirici olarak da, haddim olmayarak, genç geliştiricilere, en azından birinci gruptan edindiğim tecrübelerle bazı tavsiyeler vermek isterim.
Normalde burada, herkesin duymak istediği şu tip şeyler söylemem gerek:
- Eğer okuyorsanız, o zamanınızın kıymetini bilin. Okuldaki, başta yazılım kulüpleri olmak üzere kulüplerde görev alın, etkinliklere katılın
- Açık kaynak projeleri inceleyin ve elinizden geldiğince kod veya çeviri desteği yapmaya çalışın. Çeviri yaparken bile ne çok şey öğreneceğinizi tahmin dahi edemezsiniz.
- Kendinizi sadece okulda gördüklerinizle sınırlamayın, eğer bir konuyu merak ediyorsanız dersi almayı beklemeden araştırıp öğrenmeye çalışın
- İmkanınız varsa yurt dışındaki büyük şirketlerde staj yapmayı deneyin
- Google Summer of Code gibi organizasyonlara katılın, "büyük topluluklar bu işi nasıl yapıyor" daha yakından görün.
- Yazılım geliştirici toplulukları içinde aktif olarak görev alın
- HackerNews, reddit, stackoverflow gibi sitelerden sektörü takip etmeye özen gösterin.
- Bir şirkette çalışıyorsanız; şirketi sahiplenin, sorumluluk almaya çalışın
- Sadece çalışmak için bir şirkette çalışmayın. Gelişiminize katkısı olacak, şirket kültürünü önemseyen bir şirketi tercih edin.
- Kendinizi her zaman teknik olarak geliştirmeye çalışın
- Kod yazarken düzenli olmaya ve kullandığınız dilin kurallarına bağlı kalmaya özen gösterin. Temel yazılım mühendisliği prensiplerine bağlı kalın. KISS, DRY prensiplerini benimseyin.
- Mümkünse kodlarınızın testlerini yazın
- İşinizle ilgili verdiğiniz sözlere sadık olun. Dürüstlük her zaman kazandırır
- Öğrendiğiniz şeyleri içinde bulunduğunuz yerel topluluklarda paylaşın (konferans, meetup, vs.)
- Kodunuzu, sizden sonraki geliştiricilerin de geliştirmeye devam edeceğini unutmayın. Sürdürülebilir kod yazmaya özen gösterin.
- Sürüm kontrol yazılımlarını kullanmayı tercih edin. git/mercurial/svn/bazaar gibi araçları tanıyın; mümkünse tüm yazdıklarınızı açık kaynak olarak github, jsfiddle vb. sitelerde paylaşın.
- Kendinize ait bir web siteniz olsun
Süper bir geliştirici değilim, profesyonel iş yaşantımda, çok iyi bir geliştirici olmasam da yukarıdaki prensiplere olabildiğince sadık kalmaya çalıştım. Üniversite yıllarımda çeviriler yaptım zaman buldukça, açık kaynak topluluklarda aktif görevler aldım. İş yaşantımda, görev tanımımda hiç olmayan sorumluluklar aldım, kendimi teknik olarak her zaman geliştirmeye çalıştım. Dökümanlar yazdım, çeşitli etkinliklerde yukarıdaki maddeleri aşılayan sunumlar yapmaya çalıştım.
Yakın zamana kadar da tavsiye isteyen gençlere yukarıdaki maddeleri sıraladım. Ta ki tavsiyeyi verdiğim gençlerden birisi "Neden?" sorusunu duyuncaya kadar:
- "Neden bu kadar çabalamalıyım?"
- "Neden üniversite okumalıyım? Üniversite okumak bana bir şey kazandıracak mı?"
- "Neden şirketi sahiplenmeliyim? Şirket beni gerçekten sahiplenecek mi?"
- "Neden düzgün kod yazmalıyım? Düzgün kod yazınca daha fazla mı maaş alacağım?"
- "Bu kadar çabanın karşılığını alabilecek miyim?"
Cevab veremedim :(
Yazılım maalesef, ölçümü çok zor olan bir alan. Yabancıların "You can't manage what you don't measure" lafına istinaden de "yönetimi" zor bir alan. Ölçümü zor olsa da nispeten mümkün olduğu halde bu ölçüm çoğu yerde yapılmıyor. İşin "Business" tarafı için de, çoğu zaman haklı olarak hızlı çıkan ürün her zaman kaliteli üründen daha kıymetli oluyor.
Ama biz yazılım geliştiriciler bunu anlamakta biraz zorlanıyoruz, zira bizi bu işe bağlayan en büyük şey "güzel bir şeyleri, son teknolojilerle dökümanlarda kitaplarda okuduğumuz şeyleri uygulayarak üretme hazzı". "Kendimizi geliştirelim, daha iyi kod yazalım!" aslında business dünyasının çok da umrunda değil. Startup Business'lar, az önce de söylediğim gibi, her zaman hızlı çıkan ürüne değer veriyor, ve bunda oldukça haklı sebepleri var. Sizin hangi dili, hangi teknolojiyi, hangi metodolojiyi kullandığınız onların umurlarında değil. Business tarafı, işin ne kadar sürede ortaya çıktığı ve ne kadar iyi olduğu ile ilgileniyor. Böyle olunca analiz ve test süreçleri de bir "gereklilik" olarak öngörülmüyor ve günün sonunda kaliteden ödün veriliyor.
"Peki hızlı ve kaliteli ürün mümkün değil mi?" sorusunu sorduğumuzda da bu işin ölçümünü yapmanın, kısaca kaliteyi belirlemenin ne kadar zor olduğunu ve bunun çoğu yerde yapılmadığı/yapılamadığını görüyoruz.
Ve tekrardan soruyoruz:
- "Neden düzgün kod yazmalıyım? Neden düzgün kod yazmak için kendimi geliştirmeliyim? Neden buna zaman harcamalıyım?".
- "Kimse düzgün kod yazdım diye daha fazla para vermiyorsa neden bu işe emek harcamalıyım?"
- "Daha fazla sorumluluk alınca kimse daha fazla para vermiyorsa neden sorumluluk almalıyım?"
- "Daha sonra karşılığını alamayacağım bir yatırımı neden yapayım?"
Başka bir konu da şu ki; bu işin ölçümü yapılıyor olsa bile, 10 kat daha iyi geliştirici maalesef 2 kat bile fazla ücret alamıyor. O zaman:
- "10 kat iyi geliştirici olmak için çaba sarfetmeye gerek var mı?"
Bu sorulara "Ee gerek yok o zaman?" cevabı veren yazılımcılar bir anda kendini yazılımın karanlık tarafı olan DGOP dehlizinde buluyor. Böyle bir durumu görünce de maalesef tavsiye isteyen gençlere verdiğiniz cevaplar değişmeye başlıyor. Onlara ister istemez "10 kat iyi geliştirici olmayın, karşılığını alabileceğiniz kadar kendinize yatırım yapın. Çalıştığınız işi sahiplenmeyin. Şirketler sahiplerinindir. Onlar hancı, siz yolcu. Patronunuz babanız, işiniz eviniz değildir." gibi dark side'dan öğütler vermeye başlıyorsunuz.
Ve sektör, bir şekilde ölçümlemeyi, ölçümledikten sonra düzgün yönetmeyi ve ödüllendirmeyi başaramadığı sürece de karanlık tarafın oldukça güçleneceğini görüp hüzünleniyorsunuz. Halbuki, genç geliştiriciler, Obi-Wan'ın da dediği gibi "güce dengeyi getirecek seçilmişler olmalı".