Arda Çetinkaya Yazılım ve arada kendim ile ilgili karaladıklarım…

Karmaşık problemleri yazılım ile çözerken, teknik olarak ne kadar fazla bilgiye sahip olsak da, çeşitli noktaları atladığımızda daha fazla karmaşıklık yaratan çözümler ile karşı karşıya gelebiliyoruz. Java’nın JDK’sını çok iyi bilmemize  ya da .NET Framework’ün tüm özelliklerini gözü kapalı sayabilmemize ya da javascript ile client’lar da takla atıp, avuda kalkmamıza rağmen, neden hala yazılım sorunları ile uğraşıyoruz? Ya da geliştirme süresince neden sorunlar ile karşılaşıyoruz?

Teknik yetkinlik dışında, temel bazı prensip ya da tecrübeleri anlama konusunda eksik kaldığımızda, bir çok sorun karşımıza “dann” diye çıkacaktır, çıkıyor da hatta… Bu yazıda yazılım geliştirirken, düşünme şeklimize yön verecek, yol gösterecek bir kaç prensipten bahsetmek istiyorum, -ki eminim bir çoğunuz da adı gibi biliyordur, ya da en azından duymuştur. KISS,YAGNI,SOC,TDD,WET….

overengineeringKISS – Keep It Simple, Stupid

KISS, basitlik ve sadeliğin altını çizen, bence, en önemli yazılım geliştirme prensibi. Basitlik, kulağa olumsuz bir durum çağrıştırsa da, karmaşık problemleri çözmek adına çoğu zaman çok kritik olabiliyor. Basit düşünmek, düşünebilmek problemin temel sebebini görebilmek adına oldukça önemli. Kolay bir yol ile çözülebilecek problemleri ya da başka bir ifade ile, bir kaç satır kod ile geliştirilebilecek bir metodu,  gereksiz ifadeler ile karmaşık hale sakın getirmeyin der bu prensip basitçe. Bunu derken, ihtiyacı en basit şekilde düşünerek, gerçekten ihtiyaca yönelik özellikleri öne çıkarmanın da altını çizer.  Bir sistem ne kadar karmaşık olursa, onun sürdürebilirliğini sağlamak o kadar zor olur.  Tabi, bu prensibi ele alırken, kalite özelliklerini mutlaka dikkate almak gerek. Basit olacak diye kalite özelliklerini görmezden gelirseniz sonuçta ortaya çıkan şey “basit” değil “sığ” olur.

YAGNI – You Ain’t Gonna Need It

YAGNI, ihtiyacımız olmayacak şeyleri sisteme dahil etmemeyi söyleyen bir prensip. KISS’e oldukça benziyor belli noktalardan aslında.  Geliştirme aşamasında, bazen öngörülü(?) davranıp ileride lazım olabileceğini düşündüğümüz sınıfları,metodları yazarız. Bu, hem ileride lazım olabilir(?) öngörüsü, hem de yaptığımız geliştirmeyi daha büyük görmek istememizden kaynaklanıyor aslında.  E-mail atabilmemizi sağlayan bir sınıf ihtiyacımız olduğu zaman “Öyle bir sınıf yazdım ki, hem SMS atıyor, hem e-mail, hem de Push Notification gönderiyor” diye havalara girdiğimizde, zamanı geldiğinde gerçekler tokatı yapıştırır. YAGNI, bu tokatın gelmemesini sağlayan en önemli prensip.  Yazılımlara, sanatsal yönümüzü de kullanarak geliştirdiğimiz/eklediğimiz her özellik, temelinde ekstra maliyet olarak karşımıza çıkacaktır. Talep edilmemiş olmasına rağmen, geliştirdiğimiz bu özellikler ek test eforu, dökümantasyon ve sonrasında da bakım kavramlarını da dikkate almamızı gerektirecektir.  Ek özellikler ile alengirli bir yazılım yapalım derken, aslında daha karmaşık ve daha da karmaşıklığa giden bir yazılım geliştirme ihtimalimiz o kadar artar. O yüzden, ihtiyaç olarak belirtilmemiş geliştirmelerden kaçıyoruz…

Çok fazla karambole gitmemesi için bu prensiplerden parça parça bahsediyor olacağım…O yüzden KISS ve YAGNI ile şimdilik bu kadar. Devamı çok yakında…

Geçen sene de gerçekleşen,  SQLSaturday etkinliğinin İstanbul ayağı bu sene 6 Aralık‘da İstanbul’da gerçekleşecek. Microsoft’un İstanbul ofisinde 1 gün boyunca farklı oturumlar ile SQL’le alakalı bir çok konu anlatılacak. Yerli ve yabancı, SQL konusunda uzman kişilerin oturumları ile yoğun bir gün olacağını şimdiden söyleyebilirim. Tam olarak etkinliğin programı belli değil ancak konular şimdiden belli olmaya başladı. Programın son hali ve katılım için burayı ziyaret edebilirsiniz.

SQL ve SQL Server ile yoğun bir şekilde çalışıyorsanız kaçırmamanızı şimdiden tavsiye ederim.

Title Speaker Level
SQL Server Deep Dive Denis Reznik Intermediate
AlwaysOn Unplugged: Scalability Solutions with SQL Server 2012/2014 Yigit Aktan Advanced
Building abstract layers for data protection and business logic Uwe Ricken Intermediate
Common TSQL Mistakes Kevin Boles Intermediate
Connection – Session – Request Uwe Ricken Advanced
Correcting Database Corruption: Advanced Techniques Yigit Aktan Advanced
Data quality with DQS components in Integration Services Alexander Karl Intermediate
Database Recovery: Backup and Restore Basics Andrey Zavadskiy Beginner
Deadlocks. Everything that developer needs to know Denis Reznik Intermediate
Deep dive to SQL Server configuration for SharePoint Server Gokan Ozcifci Advanced
Developerlar için SSDT kullanımı Çağlar Özenç Beginner
Dive into the Query Optimizer-Undocumented Insight Benjamin Nevarez Advanced
DMV for administration of indexes Uwe Ricken Advanced
DQS step-by-step with Domain Management, Knowledge Discovery and Matching Policies Alexander Karl Intermediate
Effective T-SQL. To be effective or not to be. Denis Reznik Intermediate
Execution Plans Detail From Zero to Hero Ismail ADAR Beginner
Handling data types in SQL Server tomaz kastrun Intermediate
INSERT / UPDATE / DELETE – deep dive Uwe Ricken Advanced
Introducing Microsoft Azure HDInsight Belkis Ozhorasan Intermediate
Introduction to Reporting Services for SharePoint Gokan Ozcifci Beginner
Let’s cook ‘best SQL Server DBA practices’ Satya (SQLMaster) Shyam Jayanty Intermediate
Making customer segmentation using SQL Server SSAS tomaz kastrun Advanced
Optimizing SQL Server 2012 for SharePoint 2013 Gokan Ozcifci Advanced
Query Processing in In-Memory OLTP (Hekaton) Benjamin Nevarez Intermediate
Replay your workload and save the business! Boris Hristov Intermediate
SharePoint – from distrust to acceptance Gokan Ozcifci Intermediate
SQL Injections and Penetration Testing on SQL Server 2014 Ismail Adar Advanced
SQL Server 2014 New Features Kevin Boles Intermediate
SQL Server AlwaysOn and Clustering,Mirroring and Log Shipping Yusuf Kahveci Advanced
SQL Server Data platform upgrade Techniques, best practices & notes from the field Satya (SQLMaster) Shyam Jayanty Intermediate
SQL Server Query Design and Optimization Recommendations For Developers Ismail ADAR Intermediate
SQL Server: Performance Tuning and Troubleshooting Denis Reznik Advanced
The nightmare of locking, blocking and isolation levels! Boris Hristov Intermediate
Transaction Isolation Levels Deep Dive Yigit Aktan Intermediate
Transaction Log Basics Andrey Zavadskiy Intermediate
Understanding Parameter Sniffing Benjamin Nevarez Intermediate
Unit Testing SQL Server Kevin Boles Intermediate
Unit Testing with SQL Server Data Tools Andrey Zavadskiy Intermediate
Usage of R in SQL Server for better data understanding tomaz kastrun Intermediate
Useful Dynamic Management Views and Functions for SQL Server 2014 Ismail Adar Intermediate
Windowing Functions: THE Reason to Upgrade to 2012+ Kevin Boles Advanced
Write Quick, Readable and High Performance Queries Using Window Functions with SQL Server 2014 Ismail Adar Intermediate
You want rules? You want Policy-Based Management! Boris Hristov Intermediate

Servis kavramının, teknolojik olarak çeşitlenmesi ve gelişmesi ile yeni kavramların hayatımıza girmesi, ya da daha çok karşımıza çıkıyor olması bazı karmaşıklıklara yol açıyor gibi. Son zamanlarda gördüğüm, duyduğum ve yaşadığım en büyük karmaşıklık WCF(Windows Communication Foundation) ve ASP.NET Web API‘ın karşılaştırılması. WCF’in kullanımına göre, belki bir noktada ASP.NET Web API ile karşılaştırılabilir ama genel çerçevede ikisi de farklı sepette olan elma ve armut…Haa ikisi de meyve, o ayrı 😀

En basitinden WCF, servis odaklı uygulamalar geliştirmek için kullanılan bir geliştirme platformu ya da modeli. ASP.NET Web API ise HTTP, üzerinden RESTful servisler geliştirmek için kullanılan bir framework. Buradaki tek ortak nokta ikisinin de belli amaçlar doğrultusunda servis yaratmak için kullanılması.

serviceASP.NET Web API’den önce WCF’de de RESTful servisler geliştirmek mümkündü. ASP.NET Web API, WCF Web API’nin geliştirilmiş ve dönüştürülmüş hali. Bu dönüşümün sebebinin RESTful servislerinin, WCF’in ağır konfigürasyon alt yapısına gerek duymaması ve ASP.NET MVC modelinin, Web API kavramına daha yakın olması olarak söyleyebilirim.

WCF ile geliştirilen servisler, SOAP spesifikasyonu ile HTTP,TCP,MSMQ gibi transfer protokolleri üzerinden sunulmaktadır. ASP.NET Web API ise HTTP transfer protokolü üzerinden servisler sunmak içindir. Bu tip servislere RESTful servisler deniyor.Internet Media Type olarak adlandırılan veri formatları bu servislerin çıktılarıdır. JSON bunların en çok kullanılan ve en çok bilineni. Bunun dışında XML de olabilir tabi ki.

Genelde ikisinin tercih edilme sebebi, servisi kullanacak client’ların SOAP’ı yorumlayabilme ve yorumlama şekli oluyor. SOAP’ın, browser’lar tarafından direkt olarak yorumlanaması, web uygulamalarında RESTful servislerin biraz daha popüler olmasında önemli bir nokta desem çok da yanılmam sanırım. Client olarak nitelendirilebilecek browser’lar, üzerinde çalışan javascript kütüphanelerinin ve framework’lerinin RESTful servisleri kullanım kolaylığı, geliştirme kolaylığ ile de birleşince RESTful servisler doğal olarak daha çok tercih ediliyor.

WCF üzerinden sunulan servisler, WS-* standartlarına uygun olup, ekstra Transaction, Reliable Messaging Model gibi biraz daha yönetilebilir alt yapılara sahip olurlar. ASP.NET Web API ile geliştirilmiş bir RESTful serviste bunlar pek mümkün değildir. Ayrıca RESTful servisler stateless’dır. State’lerin(durumların) hep taşınmasına yönelik bir yaklaşımı vardır. REST’deki ST’de zaten State Transefer buna denk geliyor… 😀

WCF servisi mi ya da ASP.NET Web API ile RESTful servisi mi geliştirim kararı, tamamen ihtiyaca göre verilen bir karar olmalı. ASP.NET Web API ya da RESTful servisler, WCF’den daha iyi ya da onun yerini alacak kavramlar değil. WCF ya da ASP.NET Web API tercihi, servisi kullanacak client’a ve servisin sunulacağı yönteme göre verilmelidir. Aman diyim…

Devam…

Yaklaşık bir yıldır yelkene sarmış durumdayım. Aslında uzun zamandır istiyordum ama malum…İmkan konusunda oldukça sıkıntılı bir spor. Spor mu gerçi; bilemiyorum. Ama benim yaptığım, daha doğrusu yapmaya çalıştığım kesinlike keyif ya da hobby olarak adlandırılabilecek bir şey değil. Yarış ve mücadele kısmı olduğundan spor sanırım doğru bir ifade…Evet, evet…Spor…

Rotaİşimden dolayı tanışma imkanı bulduğum yelkenle, yaklaşık 4 aydır da yarışlara katılıyorum. Fenerbahçe-Garanti ilişkisi kapsamında, Fenerbahçe 1 teknesiyle, bu seneki TAYK trofesini takip ediyoruz. Dan-dun böyle girdim ama taaa başa dönersem, uzun…Yaz, yaz bitmez…Bu yazının olayı, “büyük yarış” ya da “aşağı yarışı” olarak adlandırılan, Türkiye’nin en uzun ve büyük yarışı olan “Deniz Kuvvetleri Kupası Yat Yarışı“. İstanbul’dan çıkıp, Ege denizinden, Sığacık,İzmir’e kadar yaklaşık 300 deniz mili…

11 Ağustos günü, saat 16.00’da, Çengelköy’den 61 yelkenli hareket ettik. Marmara Adası, Çanakkale Boğazı, Midilli Adası, Karaburun şeklinde kabaca bir rota ile Sığacık’a ulaşmamız gerekiyordu. Uzun bir yol yani… Öncesinde bol içecek ve tok tutacak yiyecek takviyesi yaptığımız yelkenli ile sürekli denizin üstünde, 2 gün…En iyi ihtimal bu da…

Start

11 Ağustos, saat 16.20 civarı start verildi ve 61 yelkenli hep beraber, boğazı selamlayarak yola koyulduk. Ekipteki çoğu kişinin ilk uzun yolcuğu olmasından dolayı, genel bir heyecan hepimizde vardı sanırım. Ekibe en yeni katılan ben olduğum için, bendeki heyecan bir parça daha fazlaydı galiba. Bu heyecan ve yeni yola çıkmamız bizi bayaa oyaladı. Sakin ve ideal bir havada seyir ediyor olmamız, keyif almamıza da yardım ediyordu. Balon ile kavançasız ilerliyor olmamız, ekipteki güçü de korumamızda başlarda yardım eden bir faktör oldu. Malum önümüzde kocaman 2 gece var…Minimum eforla, maksimum performansı almamız lazım dimi… Güneşi batırmamız ile beraber, etrafımızdaki 61 yelkenli ile aramız açıldı…Kimileri geride kaldı, kimileri teknelerinden dolayı rüzgarı daha iyi kullanıp ileri gitti…Kimileri de ilerideki rüzgarları düşünüp rotalarında değişiklik yaptı…

Güneşi batırdıktan biraz sonra, ayı çıkardık…Şansımıza yarışın yapıldığı dönem, dolunaya denk geliyordu ve geceleri kocaman bir ay ile seyir yapma şansını elde ettik…Manzaraydı, dolunaydı, yakamozdu falan bunları geçtim, gecenin köründe, denizin ortasında ay ışığı büyük nimet…Yoksa göz gözü görmüyor…Manzara

Oldukça sağlam bir içecek ve yiyecek erzağımız vardı diyebilirim. Filodaki diğer teknelerin hepsini bilmiyorum ama, konfor ve erzak konusunda en birinci bizim tekne olmuştur diye düşünüyorum. 13 kişilik ekibimiz için oldukça geniş bir menümüz vardı. Hatta böyle bir yarış için biraz abartmış bile olabiliriz belki… Sarma dolma, kuru köfte, yoğurtlu makarna ile “gün” formatında öğünlerimiz bile oldu…Arada “neşeli” birşeyler diye adlandırdığımız abur-cuburlar ile de bol bol neşelendik…Yaa ama olsun bunlarda, biraz da keyfini çıkaralım…300 mil, boru değil…Bunlarda olmasa, nasıl geçerdi bilemiyorum.Haaa bu arada, çay bile demledik… 🙂

 

Neyse, nerede kalmıştık…Dolunayı çıkarmıştık en son. Gece 12’yi geçirmemizle beraber yavaş yavaş yorgunluk belirtileri, dinlenme fasılları başladı. Bir kaç kişi stand-by moduna geçip dinleniyor, diğer kişiler balonla oynuyordu. Çok bilinçli olmasa da güzel bir iş bölümü yaptığımızı düşünüyorum. İlk gün olmasından ve bendeki ekstra heyecandan dolayı pek stand-by moduna geçemedim.

Kakara kikiri derken, güneşin ilk ışıkları ile yeni güne merhaba dedik. Çanakkale Boğazı’na yaklaşmış olmamız ve etrafımızdaki gemiler falan hepimizi canlandırdı. Gün ışığı ile beraber filodaki diğer tekneler ile de göz teması kurabilmemiz yarışın heyecanını da zaman zaman hatırlattı. Yoksa pek takdığımız yoktu galiba 🙂

Devam…

Yazılım geliştirme dünyasının en önemli ve önde gelen isimlerinden Martin Fowler, 11 Eylül 2014 tarihinde İstanbul’da “Continuous Delivery and Design” etkinliğinde olacak. HepsiBurada ve Scrum Turkey katkıları ile düzenlenen bu etkinlik, ThoughtWorks‘ün Türkiye ofisinin açılışını bir nevi resmileştirmiş olacak diyebilirim sanırım. Etkinlikte yine ThoughtWorks çalışanlarından, David Elliman, Cengiz Han, İsa Göksu ve Ben Kappler da çeşitli oturumlar ile tecrübelerini paylaşacak.

Etkinlik ile ayrıntılı bilgileri almak ve katılmak için burayı ziyaret ederbilirsiniz.

Program

thoughtworksevent

Sponsorlar

thoughtworksevent_sponsors