Bir Tasarım Kalıpları Eğitimi Sonrası Düşünceler
Design Pattern üzerine eğitim verdiğim bir grup arkadaştan bir tanesi sağ olsun üşenmeyip eğitim ile ilgili aldığı notları benimle paylaştı. Ben de bu notlar üzerinden giderek sizlerle, hem eğitim hem de tasarım şablonlarını ögrenme üzerine bir şeyler paylaşmak istedim.
Arkadaşımın notlarını, noktasına, virgülüne dokunmadan, kendi izni ile yayınlıyorum:
Eğitimdeki Pozitif Yönleriniz
1. Design patternlar konusunda tam ve donanımlı bilginiz.
2. Design patternlardan once object oriented principlelar ile başlayıp temeli güzelce vermeniz.
3. Ödevler vermeniz, ve bir gun sonra takip etmeniz. bu mutlaka olmalı derse katılımı ve disiplini artırıyor.
4. yazılımcılar arasındaki konuşmaların çözüm tartışmalarının tasarım şablonu ismi vererek soylemenin ne kadar büyük bir soyutlama saglayarak kaliteli bir komuşma oldugu soylediniz. bence bunu mutlaka her egitimde soylemelisiniz, yazılımcıları bu yonde teşvik etmek için.
Olursa daha güzel olabilecekler.
1. her zaman ayakta olmayabilinir ama dinleyenlerin koptuğunu gördüğünüz an ayağa kalkıp anlatabilirsiniz.
2. sunum cihazi ya da kullandıgınız bilgisayardan olabilir, bazı seyler okunabilir degildi sunumda. egitim oncesi bunlar ayarlanabilir.
3. ister istemez bazı kişiler dersde pasif kalabiliyorlar. derse katılım saglamayanlara karsı strateji geliştirebilirsiniz, derse katılıp dersden kopmasın diye.
4. Programınız 5 günlük için bence uygun. Ama bizim gibi 4 ya da 3.5 gün alacaklar için önem derecesine göre bazı patternlara önem verip bazıları ise sona bırakabilir bazılarını ise sadece bahsedip geçebilirsiniz. 3.5 ya da 4 gun için sizin çıkarıp eğitim alacaklara eğitim öncesi vereceğiniz bir program olabilir.
5. Bir tane sunum dosyasında tüm patternlara ile ilgili uml diagramlarni koyabilirsiniz anlatırken kolay erişim olur. Bu sunum dosyasında herbir pattern için sizin örneğinizin,head first ün ve Özcan acar in ayrı ayrı uml diagramlarni konulabilir. “
Ben de değerlendirmeye “Eğitimdeki Pozitif Yönleriniz”deki ilk maddeden başlayayım. Tasarım kalıpları bilgi ve tecrübesi, ne pratik dünyada çalışmakla ne de sırça saraylarda kutucuklar seviyesinde düşünülerek kazanabilecek bir yetkinliktir. Evet tasarım kalıplarını kavramak için soyut düşünce gücüne çok ihtiyaç vardır ama uygulamalar arasında kodlarla boğuşmadan sadece soyutlama gücüyle ancak uygulanamaz düşünceler geliştirilebilir. Benzer şekilde, yapılan işler ve yazılan kodlar üzerine soyut seviyelerde düşünemeyen, tümevarımsal çıkarımlarda bulunamayanlar da ancak kodlarla boğuşmaya devam ederler. Eğer ben bu konuda yetkin isem bilin ki bu duruma, soyut düşünce kabiliyetlerimi destekleyecek şekilde matematiği, felsefeyi sevmem, yazılım tasarımı ve mimarisi üzerine düşünmem ve uygulamalarda bulunmam yanında hala kod yazmam, iyi kötü pek çok kodu review etmem ve eğitim vererek kendimi bu konularda daima zinde tutmaya çalışmamla geldim.
Bu ülkede soyut düşünce kabiliyetleri yüksek çocuklar tabii olarak var ama pek çoğu “bu matematik bizim ne işimize yarayacak” sorusunu aşamıyor, aşmasını sağlayacak bir eğitimden de geçemiyor. Aşabilecek olanları önce ilk, orta ve lise eğitimimiz, hala direniyorsa üniversite eğitimimiz, örneğin İTÜ, hallediyor zaten. Yetmediyse, hala o doğuştan gelen düşünce gücünü kendisinde bulanlar için yazılım endüstrimiz karabasan gibi çöküyor üstüne genç yaşında insanın. Dolayısıyla, satır aralarında, debuggerla boğuşarak seneler geçiyor, sağına gitse ağaç, soluna baksa ağaç görüp de ormanda olduğu sonucunu çıkaramayan, detayda boğulan kişiler oluyoruz.
İkinci maddedeki gerçeklik şu: Sağlıklı bilgilenme, nasıl alttan yukarıya doğru, temellerden başlayıp sistematik olarak ileri konulara doğru gidiyorsa, sağlıklı bir tasarım kalıplarını eğitimi de işe öncelikle, yazılımın en temel özellikleri olan karmaşıklık ve değişimi anlayarak başlamalıdır. Böyle bir eğitim karmaşıklık ve değişim yönetimini nasıl yapabileceğini, birliktelik (cohesion) ve bağımlılık (coupling) kavramlarını son derece pratik örnekler ile ele alarak anlatmalıdır. Ve nihayetinde tek sorumluluk, yerine geçebilirlik, compositonu miras devralmaya tercih etme, değişime kapalı ama genişlemeye açık olma (single responsibility, substitubility, prefer composition over inheritance, closed for modification open for extension) gibi prensipleri yine pratik bir şekilde katılımcıya kazandırmalıdır ki tasarım şablonlarına zihin hazır hale gelsin.
Bu tipten eğitimlerde teoriyle pratiği dengede tutmak çok önemlidir, ikisi de birbirine kurban edilmemeli. Karmaşıklık kavramını ne zamandır düşünüyordum örneğin, eğlenceli bir şekilde nasıl anlatırım diye, sonunda onu da muzikle anlatmaya karar verdim 🙂 Sanırım ilk uygulamam başarılıydı. Sonrası zaten bu prensipler üzerine rahatça bina edildi.
Ödev başarılı oldu çünkü sınıf genel olarak istekliydi, yönetici arkadaşımızın da yönlendirmesiyle, akşam bazı okumalar ya da çalışmalar yapıp ertesi gün derste tartışmak müthiş güzel oldu.
İyi eğitim alan insanlar olmamıza rağmen, genel dili kullanmada, var olan kültürü ister istemez uyuyor ve çok teknik konularda bile çok özensiz ve sanki pazarda karşılaştığımız birisiyle sohbet ediyormuşcasına konuşuyoruz. Tasarım kalıpları, bize sadece bir düşünme yöntemi öğretmekle kalmıyor aynı zamanda dilimizi de dönüştürüyor. Tasarım kalıpları ile artık cohesion, coupling, state, interface, implementation, delegation, strategy, command vb. kavramlar üzerinden düşünüp konuşmak, çok daha kesin ve anlaşılır bir dille derdimizi ifade etmemizde bize çok faydalı oluyor. Tabi ki karşı tarafın da böyle bir kültürü olduğunu kabul ediyoruz.
Yazılım projelerindeki teknik insanların konuşmanalarındaki ifade gücü, sokaktaki insanlarınkinden çok daha yüksek olmalı ki anlaşmamız için illa kod yazmaya gerek olmasın. Analiz, tasarım, kodlama ve test safhaları için geçerli bir durum bu. Ben sadece tasarım şablonları eğitiminde değil, her türlü faaliyetimde buna önem vermeye çalışıyorum. Böyle davranmanın zaman zaman ukela yaftası yeme riski yok değil, farkındayım. Ama sanırım samimiyet bunu da aşıyor.
Gelelim, arkadaşımızın büyük bir nezaketle “olursa daha güzel olabilecekler” diye nitelediği taraflara:
1- Doğru, sınıfa hakim olmak için hareket şart. Bu bazen ayağa kalkmak, bazen ters bir soru sormak, bazen de iyi bir espri yapmakla başarılır. Tüm bunları doğru karışımla harmanlamak önemlidir.
2- Kahretsin!!! Retina display Mac’ime uyumlu bir projektör bulmakta zorluk çekiyorum hep 🙂 Bundan sonra projektörümü de yanım da mı gezdirmeliyi yani 🙂
3- “Derse katılım” meselesi, evet öğrenciler kadar eğitimcilerin de sorumluluğu. Açıkçası bu gibi durumlar için kendime örnek aldığım kişi, Cem Yılmaz. Pek fena da sayılmam sanırım, çünkü çok değişik vesilelerle insanlar bu durumu ifade ediyorlar. Ama her şeye rağmen, derse makinasız gelen, kollarını göğsünde bağlayıp, tavır olarak, “ben derse katılmayacağım” diyen kişiler için henüz, onlara özel espri yapmak dışında bir formül geliştiremedim. Lisede ya da üniversitede hoca olsaydım belki ama yaşı 30’u geçmiş kişilerde bu durumu aşmak için aşırı gayret göstermek riskli ve yorucu geliyor bana.
Katılım durumunun, tamemen o kurumun kültürüyle alakalı olduğunu düşünüyorum. Kurumundan, pozisyonundan, yaptığı işlerden memnun olmayan kişilerin 5 gün eğitim boyunca bir tek soru sormadan ve alaka eseri gostermeden eğitimi tamamladıklarını ve sonunda da değerlendirmelerinde benim konuyu bilmediğimi iddia ettiklerine geçmişte şahit oldum ben. Bu gibi ortamlar konusunda kamu-özel sektör ayırımı da çok geçerli değil bence. Geçerli olan şey, bence liderlik. Özel sektörden ya da kamu kurumlarından, birden çok eğitim verdiğim yerlerde, farklı sınıfların son derece farklı davranışlar gösterdiğini biliyorum. Farklılığın o gruptaki insanlar arasindaki liderlik, muhabbet, güven vb. etkenlerden kaynakladığını çok sık gözlemliyorum.
4- GoF’da 23 pattern var ve bu patternların hepsini ele almak, katılımcıların da ciddi örnekler yapmasını sağlamak ancak 5 gün yani 30 saatlik bir eğitimle mümkün olabiliyor. Aksi taktirde önceliklendirme önemli hale geliyor.
5- Bu doğru. Ben kendi örneklerimin UML class diyagramlarını çizmeye başladım. Her derste tahtaya ayrı ayrı çizmektense standart çizimler üzerinden anlatmak çok daha güzel oluyor.
Evet değerlendirmeleri değerlendirmem bu kadar. Keşke her eğitim sonrası böyle verimli, cesaretlendirici ve yönlendirici değerlendirmeler alabilsem.
Toplam görüntülenme sayısı: 1087
Soydan Ozcelik
07 Haziran 2014 @ 18:41
Neden Tasarim Kaliplari demeyi tercih etmedigini merak ettim sadece?
Akin
07 Haziran 2014 @ 20:48
Valla “kalıp”in Turkce bir kelime olusundan hareketle bunu diyorsun sanırım. Haklisin, alişkanlıktan o akdar uzerinde durmadim. Degistirsem mi? 🙂 Sence?
Soydan Ozcelik
07 Haziran 2014 @ 23:03
Bence daha iyi olurdu. Senin nasil adlandirdigin etki alanini dusunce onemli.Malesef isin kolay degil 🙂
Akin
07 Haziran 2014 @ 23:23
Haklisin :), degistirdim.