Bir yandan bunları düşünürken bir yandan da Bildem´den sürekli "Bakın çok güzel UML eğitimleri veriyoruz" bağlamında mesajlar alıyordum. Buna ek olarak bugün Dr. Dobb´s Journal sitesinde gezinirken UML ile model geliştiren yazılım mimarlarının doğrudan kod geliştiren ekiple sorunsuz bir şekilde çalışabileceğini iddia eden Borland´ın Together isimli iddialı bir ürünü ile karşılaştım.
Yine de kafam karışık, biliyoruz ki nesneye yönelik programlama, UML, RUP filan sihirli değnek değil ve bazı durumlarda işler arapsaçına da dönebiliyor. İşte böyle düşünürken aklımın bir köşesindeki Domain Specific Modelling kavramını bir araştırayım dedim ve konu ile ilgili http://www.dsmforum.org sitesini ziyaret ettim. Bir hayli radikal ve çarpıcı bir alıntı dikkatimi çekti:
`` Software Productivity Research´´e göre Java kullanan bir programcının üretkenliği BASIC kullanan bir programcıya göre yaklaşık %20 daha fazladır. C++ dili de üretkenlik konusunda Java´dan daha iyi değildir. Aslında Smalltalk haricinde, günümüzde genel amaçlı olarak kullanılan hiçbir popüler programlama dili üretkenlik bakımından BASIC´in çok ötesine geçememektedir.
Dil savaşalarından, nesnelerden, bileşenlerden ve çatılardan sonra, 20 yıl öncesine kıyasla çok daha verimli ve etkin olduğumuz söylenemez. Ancak birkaç onyıl öncesine bakacak olursak o günlerde çok ciddi, radikal bir değişikliğe şahit olduğumuzu hatırlayabiliriz: Assembler´dan BASIC´e geçişte %400´lük bir verimlilik artışı sözkonusu idi. Peki neden böyle büyük bir sıçrama olmuştu ve benzer bir yükselişi bugün nasıl sağlayabiliriz?
%400´lük bir artış olmuştu, bunun sebebi çok ciddi bir soyutlama mekanizması idi. Bir sonraki soyutlama seviyesine geçiş yapmıştık. C++, BASIC ya da Java´daki her ifade Assembler ortamındaki pekçok ifadeye denk gelir. Daha da önemlisi bu diller otomatik olarak Assembler´a dönüştürülebilir. Verimlilik açısından bakılacak olursa, bu, bir satırlık kod maliyetine 5 satırlık kod elde etmiş olduğunuz anlamına gelir.
UML verimliliği artırdı mı?
UML gibi geleneksel modelleme dilleri verimliliği artırmamışlardır çünkü çekirdek modellerin soyutlama düzeyi destekledikleri programlama düzeyi ile aynıdır. Bir günlük bir UML modellemesinin sonunda bir günde üretilebilecek kod çıkar ancak sonuç itibari ile programcının gidip kodu elle düzenlemesi ve pek çok değişiklik yapması gerekir. Aynı bilgiyi iki farklı yerde senkronize olarak tutmanız gerekmektedir, hem model verisinin içinde hem de program geliştirme ortamında ve bu da belaya davet anlamındadır. Bir yandan Assembler düzenleyip bir yandan da C++ kodunu senkronize tutmaya çalışan birini gördünüz mü?
DSM kavramı ile ilgili araştırma yapmaya devam ederken karşılaştığım şu makale de ilgimi çekti: Is UML really the best tool for the job?. DSM deyip durduğumuz şey ise şöyle tanımlanıyor:
``Domain-Specific Modeling´´ soyutlama seviyesini programlamanın üzerine yükseltmekte ve çözümü doğrudan içinde çalışılan alanın terimleri ile tanımlamaya olanak sağlamaktadır. Sonuç ürün ise bu yüksek seviyeli spesifikasyondan üretilmektedir. Bu otomasyon mümkün olabilmektedir çünkü hem dil hem de üreticiler belli bir alanın gereksinimlerine uymaktadır. O alanın uzmanı bunları tanımlamakta ve geliştiriciler de yine bu tanımlananları kullanmaktadırlar.Bu konularda düşünen kafası karışık bir yazılımcı olarak fazlamesai.net´i takip eden diğer yazılım geliştiricilere sormak istedim. Belki ortaya çıkan tartışma sonucunda hepimiz bir şeyler kazanabiliriz.
Endüstriyel DSM deneyimleri mevcut uygulamalara kıyasla 5-10 kat daha verimli ve hızlı geliştirme durumlarına işaret etmektedir.
RUP hakkinda cok guzel bir elestiri, Extreme Programcilik yazari Martin Fowler'dan gelir. Bir sure once sitemizde tercumesini vermistik.
http://www.bilgidata.com/yazi.jsp?dosya=a_yeni_metod.xml
Fowler'in RUP'a belki en aci elestirisi, RUP'in bir metadoloji bile olmamasi :) Bir metadoloji altyapisiymis! Yani, "size oyle seyler veriyoruz ki, bir metadoloji yaratabiliyorsunuz". Fowler'da der ki :"Ben, bana tavsiyeler, yon gosterecek seye metadoloji derim. RUP, lapa gibi girdigi her kaba uyum sagliyor".
Fowler'in kendi sitesi www.martinfowler.com. Diger tercume ettigimiz yazilari :
http://www.bilgidata.com/yazi.jsp?dosya=a_continous_integration.xml
http://www.bilgidata.com/yazi.jsp?dosya=a_enterprise_transforming.xml
Yanlis metadolojilerden agzim cok yandi. 96-99 arasinda ooonceeee deziggnn, sooonnraaaa kodlama desturuna muazzam sIkI yapismis olan bir sirkette calistim. Projeleri sagdan soldan surekli patliyordu. Cok yetenkli programcilar hatta teknik liderleri vardi, fakat metadoloji hizimizi azaltirdi ve acaip dusunce kaliplarini zorlayarak bazen yanlis teknik cozumlere sebebiyet verirdi. Bir gereklilik tanimi (requirement definition) toplantisinda musteri ile oturdugumuzu hatirliyorum, ve bizim teknik sef illlaaaa ki uzerinde konusulan seyi UML kutulari ile yazacakti, bunda karar kilmisti, ve toplanti sonunda birseyler yazildi, fakat, isin komigi konusan musteri, muazzam SQL bilgisine sahip ender teknik musterilerden birisiydi ve ne istedigini veri yapisi ve SQL olarak cok iyi biliyordu. "Gercekten" ne istediginin ortaya cikmasi icin projenin tamamen gocmesi ve bir tekrar tasarlama (re-design) fazina girilmesi gerekti. Gocme sebebi, aylarca calismadan sonra elde olanin sadece altyapi (infrastructure) turu kodlari olmasiydi, bir ara yeni bir uygulama servisi (app server) yaziyorduk. Ve hala elde gosterilecek "islevsel" kod (functionality) yoktu. Herneyse, o toplantidan 7-8 ay sonra (o noktada eski metadoloji tamamen atilmisti) ayni islevi artik kodlamak icin gorevli olan ben, ayni musteri ile tablolar, vs uzerinden konusmaya basladigimizda, birden sunu farketmistim. "Sen yani su-su-su sekilde GROUP BY lar yapilmasini istiyorsun!". Bu soruya evet cevabi aldigimda, takip edilmis olan metadolojiye olan dus kirikligimi tarif bile edemem.
Belki de 20 senelik, tecrubeli ellerde, metadoloji bu kadar patlayici olmayabilirdi, fakat, iste butun sorunda iste burada degil midir? Metadolojileri, eksiklerimizi azaltip, guclu taraflarimizi arttirsin ve bir disiplin saglasin diye takip ediyoruz. Sersemgecirmez (foolproof) bir metadoloji, projeye net bir yon saglar. Fakat kotu metadoloji, bir ibadet gibi zorunlulukla yapilan ama hicbirsey getirmeyen acaip bir rituele donusuyor.
Neyse; Ben bu sebeplerden Extreme Programming yontemini takip ediyorum. Bir diger bu isin kivamini bilen bir sirkette de, guzel bir gereklilik belgesi urettikten sonra, bir teknik dokuman hazirlardik, ve genelde altyapi mimarisinden, final donanim yapisindan, olcekleme gibi "somut" konulardan bahsederdik. Butun nesne modelini UML ile tamamlama gibi bir takintiya bu sirkette asla kapilmadik.