22 Nisan 2006

Bir platform olarak Windows.

Her şey benim son stajımda linux kullanmak zorunda kalmam ile başlamıştı... Staja gittiğim ilk gün elime debian CD sini tutuşturup "hadi kur bakalım" demişlerdi. Benim için çok zor olmamıştı zaten. Bilmediğim bir şey değildi Debian kurmak. Bilmediğim şey, bu kadar zamandır öğrenmeye üşendiğim işletim sisteminin hayatımı değiştireceği idi...

Staj başladıktan bir hafta sonra proje kodlarıma evde devam edebilmek için fedora kurdum. Bir kaç ay önce de SuSE 10.0 a geçtim. Başka hiç bir işletim sistemi kullanmıyorum artık, zaten ihtiaç duymuyorum. Zaten bu yazının linux ile alakası bu açıdan değil.

Bitirme projesinin önümüze konması da bu zamanlara denk geliyordu. Bir yandan konu üzerinde araştırma yapmak, bir yandan da projeyi yazacağımız dili seçmemiz gerekiyordu. Benim kalbimde yatan dil C++ olmasına rağmen, portable olmasını sağlamak çok zor olabilirdi. .NET kullanan arkadaşım C# diye tutturdu ama benim windows kurmama ve .NETi sevmeme fikirlerimi kıramadı. Ben ise yeni yeni java öğreniyordum ve Java'da yazalım dedim. Hem cross platform hem de senin çok sevdiğin o .NET diline benziyor. İkna çabalarım başarılı olmuştu. Arkadaşımın eline bir paket eclipse tutuşturup evine yolladım.

Proje gelişmeye başlıyordu... Düşe kalka ilerliyor, bir şeyleri çalışır hale getiriyorduk. Hiç bir sorun yoktu. Kodlar tamamen cross-platfom şekilde derlenebiliyor, çalışıyor, test edilebliyordu. Sevinçliydik... Ta ki, ben proje'nin dosya formatını ve yazma okuma sistemlerini yazmaya başlayana kadar. Sıkıştırma algoritmasının hesapları ile dosyaya yazılan boyutlar arasında durmadan sorunlar çıkıyordu. Zaten binbir zorlukla ve numara ile geliştirilen dosya formatı, nedense olması gerektiği gibi çalışmıyor; linux sistemde sıkıştırma elde ederken, windows sistemlerde dosya sadece şişiyordu. Sıkıştırma sadece yazı üzerine olduğu için dosyanın bazı yerlerine özel "karakterler" yazmak gerekiyordu ve ben bunları UTF-16BE (endian sırasını kendim belirlemiştim çünkü böylece java her harf başına byte-sırası karakterleri yazmıyordu) olarak gömüyordum dosyaya... Ayrıca aynı sorunlar dosya çözülürken de çıkıyordu. Benim koymadığım o karakterlerin dosyada ne işi vardı?

Biraz uğraşı biraz vi sonucu gördük ki, o karakterler byte-sıra karakterlerinden başka bir şey değildi. Yani kısacası; benim özellikle seçtiğim encoding; java'nın ve benim istediğim gibi çalışmıyordu. Windows yine bildiğini yapıyor, istediğini istediği gibi yazıyor, okuyordu... Dünyanın en popüler işletim sistemini yazan amcalar size istediğiniz gibi program yazma özgürlüğü de bırakmamışlardı anlaşılan...

Sonuç olarak, arkadaşın makinasına da SuSE kurup geliştirme işine o şekilde devam edip bitirdik ve ben Windows'dan bir program, bir işletim sistemi olarak iyice soğudum... Bu nedenle programcı olmak isteyenler bence hangi platformu kullanacağını, o platformun getirdiklerini iyi bilsinler, ona göre seçim yapsınlar.

İyi Akşamlar...

11 Nisan 2006

Bir eğitimcinin mühendislik görüşü üzerine denemeler

Bugün, mesleki sertifika eğitimi veren bir eğitimci ile biraz sohbet ettim. Kısa bir sohbet olmasına rağmen neden olduğunu anlayamadığım halde, ciddi şekilde sürtüşmeyi başardık. Sohbet, benim açık kaynak kodlu yazılım ve GNU/Linux sempatimin ortaya çıkması ile alevlenmeye başladı ve bu insanın ağzından bir çok görüş öğrendim. Mesela....

Türkiye'de .net kullanılıyor çünkü; bu ülkede bundan para kazanılıyor. IBM ve büyük firmalar açık kaynak "kullanıyorlar" çünkü bundan ekmek yiyorlar. Yoksa açık kaynak ile bir gönül bağları yok. Açık kaynağa gönül verenler bir tek GNU cular ve komik şeyler söylüyorlar. Evet haklı ama; ikinci cümlenin başına kadar. IBM ve benzeri firmalar açık kaynaklı yazılım kullanmaktan öte, bu yazılımların üretimine, korunmasına (OIN, open innovation network) ve desteklenmesine (kendi yazılımlarını değil, genel olarak açık kaynağın desteklenmesine) ciddi anlamda para yatırıyorlar. Hiç bir ücret alınmadan dağıtılan bu yazılımların bütün teknolojilerinin açık olması ise bu adamların bunun üzerinden para kazanmalarını engelliyor. Peki, bu adamlar nereden ve nasıl para kazanabiliyorlar?

Açık kaynak kodun en büyük özelliklerinden biri, program ile beraber desteğinin indirilemiyor oluşu. Yani sizin yeterince yetenekli ve bu işi seven bir ekibiniz yoksa; bu adamlardan destek ve eğitim almalısınız. Adamlar bu noktada yazılımdan para kazanıyorlar. Adamlar kodu satarak daha çok para kazanabilecekken neden peki daha az para kazanıyorlar? Cevabı basit. Çünkü adamlar kodu açarak maliyetten düşüyorlar. Açık kaynaklı yazılımların belli bir ekibi ve belli gönüllüleri var. Gönüllüler, böcek ayıklama ya da geliştirme yapıyorlar. Sonuç olarak programın kodu daha geniş bir kitleye yayılıyor ve daha kolay böcek temizleme (kod ve tasarım seviyesinde) ve alana göre özelleştirilme / yerelleştirme çalışmaları yapılıyor. Bu değişiklikleri uyarlayan insanlar bunu firmaya geri gönderdiği zaman bunlar da firmanın sistemine göre (eğer böyle şeyler kabul ediliyorsa) koda ekleniyor. Böylece çift yönlü döngü başlıyor. Profesyonel programcılar, diğer gönüllü "code hacker" lardan görüş, öneri ve destek de alabiliyorlar böylece. Sonuç olarak yazılım hızlı evriliyor, hızlı gelişiyor ve daha stabil bir noktaya geliyor.

Türkiye'de .net kullanılıyor çünkü; bu ülkede bundan para kazanılıyor. IBM ve büyük firmalar açık kaynak "kullanıyorlar" çünkü bundan ekmek yiyorlar. Yoksa açık kaynak ile bir gönül bağları yok. Açık kaynağa gönül verenler bir tek GNU cular ve komik şeyler söylüyorlar.


Bu kadar paralel şey söyledikten sonra benim bu adamla ne diye anlaşamadığımı da merak edeceksiniz, eminim. Sorun şu: bana göre açık kaynak dünyasını bu kadar dinamik, firmaları da bu işe bu kadar istekli tutan bir şey var. Bu işin amatörlüğü. Plana programa bağlı olsa bile bir kültürü var. Kişisel hırslardan çok ortak geliştirme ve anlaşabilme disiplinine dayalı, saydam ve eğlenceli. Programcı ekibiniz sürekli değişken. Mutlaka işi iyi bilen biri var ve en önemlisi severek yapılıyor (en azından gönüllüler tarafından). Bana göre ayrıca bir yazılım profesyonel bir sekreterlikten (özel bir dilde özel bir metni şekline uygun şekilde yazmak) çok gönüllü bir sanatçılık. Kendi imzanı kendi kodlama stilin ile birleştirip ortaya istenilen işi yapan ama senin zeka ve anlayşını yansıtan bir ürün çıkarmak. Bu ürünü çıkartırken karşılaştığın sorunlarla kendi çözüm anlayışını ve bilgini uygulayarak metodoloji olarak bu kodu bir kere daha imzalamak. Böylece hem kendini hem çalıştığın yeri memnun edip hayatına devam etmek.
Bugün konuştuğum insana göre ise programcılık daha basit. Yapılması istenen işi, eğitim ya da çözüm dökümanlarındaki en popüler yöntemle yazıp, karşılaşılan sorunları internetten ulaşılabilen çözümlerden basitçe devşirmek. Bu tamamen yeniden kullanılabilir kod konseptine otursa bile bu kadar saf şekilde bu yöntemin uygulanması sadece ve sadece günü kurtaran, n. revizyonda "sphagetti code" olup, programınızı hazmedilemez bir pelteye çeviren bir metodoloji. Benim özel sektör ve şu zamanlarda çok popüler olan yazılım mühendisliği (otomatikleştirilmiş programcı yetiştirme bölümü de diyebiliriz) ile anlaşamamaktaki temel nedenim bu.

Bir de GNU cuların komik olmak gibi bir özellikleri olduğunu öğrendiğimden bahsetmiştim. GNU cuların komik olmalarının sebebi ise idealist olup, bir şeyi gönülden desteklemek ve diğer firmalara bu ciddi alternatifi kabul ettirebilmeleri sanırım. Eğer bir insan 70lerdeki iyi niyeti özleyip bu hayalini gerçekleştirip IBM gibi bir firmaya eclipse gibi bir teknolojiyi açtırıp, kocaman bir işletim sistemi yazıp bunu dünyanın en büyük firmasının karşısına çıkarabilecek bir örgütlenme yaratabiliyor ise, buna "komiklik" diyen insanların aynaya bakıp "lan acaba..." demelerinde fayda olduğunu da düşünüyorum.

Ayrıca bir insanı "bu ülkede" "ar-ge" yapmak istediği için ve "her şey para değil, yaşayabileceğim kadar para kazanıp sevdiğim işi yapıp dünyanın en mutlu insanı olabilirim" dediği için, "küçüksün sen, 25 ine gel konuşalım." Diyerek aşağılamasını da tasvip etmiyor, bu konunun kişisel olması ve karşı tarafa cevap hakkı verdiği için ise bu yazıda yeri olmadığını düşünüyor, kendisini aynaya davet edip yazımı bitiriyorum...


Unutmadan size iyi bir geceler küpesi: "Hayalleri olmayan insanlar yaşayamazlar." (ya da onun gibi bir şeydi, hatırlayamadım şimdi.)