Monthly Archives: July 2007

Yazılım Mühendisiği Rehberi-Design Patterns

Nasıl daha iyi bir yazılım mühendisi olabiliriz? Geçen yazıdan hatırladığımız gibi araştırmalarımız devam ediyordu. Bu yazıda meşhur Design Patterns konusuna değineceğiz.

Design Patterns aslında Object Oriented Design, Object Oriented Programming konularını uygulamalı olarak anlatıyor aslında. O yüzden bu konuya açıkçası OOP, OOD nin uygumalı olarak problemler üzerinde öğrenimi olarak bakıyorum. Günümüzde modern Yazılım mühendisliğinin temelindede bu konular yatmaktadır. O yüzden bu konu yazılım mühendisliğinde oldukça önemli bir yer tutmaktadır.

Yazılım mühendisiliğine ilk olarak merak salmamı sağlayan alanlardan biriydi Design Patterns. İlk olarak öyle sitelerde yazılımla alakalı makaleler okurken bahsediliyordu sonra biraz araştırayım dedim ve genelde herkesin referans olarak tavsiye ettiği ve yazılım dünyasında çığır açan Design Patterns, Elements Of Reusable Object Oriented Software kitabını e-book olarak edindim. İlk bölümleri okumaya başlayınca önce kısa süreli beyin sarsıntısı geçirip ardından "Vay bee" anı yaşamıştım. Çünkü benim yazılım geliştirirken karşılaştığım problemleri gösteriyordu ve ardından nasıl bu problemlere uygun çözümler getirilir onları adım adım anlatıyordu.Ve çözümler klasik mantıktan, alıştığımdan çözümlerden oldukça farklıydı. Çok iyi anlamasamda ilk okuduğumda edindiğim izlenim yazılım geliştirmeyi kod yazmayı, Object Oriented felsefese adına hiçbirşey bilmediğim oldu. Gerçekten okulda öğretilen Yazılım Mühendisliği, Object Oriented Programming vb.. derslerde açıkçası hiçbişey gösterilmemiş. Daha önceden interface, abstract class kavramlarını bilsemde gerçekten ne işe yaradıklarını hangi durumlarda kullanıldıklarını o kitabı okuduktan sonra öğrendim. Bu benim için Yazılım Mühendisliği dünyasına ilk ve iyi bir giriş oldu, ama sadece giriş….Buz dağının görünen ucuydu yani.

Yazılım geliştirmeyi,kod yazmayı bilmediğimi anlamamı erken sağladığı için kendimi çok şanslı hissediyorum. Burada Design Pattern nedir ne değildir diye anlatmayacağım. Zaten internette bir dünya kaynak mevcut. Ama Yazılım mühendisliği adına öğrenilmesi gereken en önemli konulardan biri olduğunu düşünüyorum. Kaynak olarakda yukarıda yazdığım orjinal GOF’un kitabını kullanabilirsiniz . Kitap C++ ile örnekleri anlatıyor fakat OOP mantığı diğer bütün dillerde aynı olduğu için çok fazla fark etmiyor. Bu bakımdan eğer C++ bilginiz iyi değilse ya da C++ diliyle proje geliştirmiyorsanız Java ile örnekleri anlatan Head First Design Patterns kitabını öneririm. Açıkçası bu kitap sonrada okumama rağmen orjinalinden daha çok hoşuma gitmişti.

Ayrıca benimde ilk olarak yapmaya çalıştığım bütün Pattern’ları tek tek öğrenmeye çalışmaktı. Pattern ezberlemek gibi bişey oldu yani. Tabi çok fazla faydası olmadı sadece hangi Pattern ne işe yarar nerede kullanılır gibi şeyleri birde havalı Pattern isimleri öğrenmiş oldum:) . Bir anda Pattern manyağı oldum çıktım :) . Etrafta deli gibi hangi Pattern’ı kodlarımın neresinde kullanabilirim onu arıyorum. Tabi bunun da çok fazla faydası olmadı. Gerçek anlamda kafamda Design Patterns kavramını oluşturmam yeni bir projeye başlamamla oldu. Kodda meydana gelen tasarım problemlerini daha önceden adlarını ve ne iş yaptıklarını bildiğim Pattern’ları kullanınca taşlar yerli yerine oturmaya başladı. Örnek olmadan bir tasarım,design problemi ile karşılaşmadan tasarım kalıbı kullanmanın verimli olmadığını o zaman anladım.

Bu konuda tavsiyem tek tek Design Pattern’ları okuyup ezberlemek yerine geliştirdiğiniz bir projede karşılaştığınız bir probleme ait bir tasarım kalıbı varmı yokmu onu araştırıp ardından bulduğunuz tasarım kalıbını orada kullanmanızdır. bu şekilde çok daha oturaklı şekilde öğrenmiş olursunuz. Benim gibi aynı kitabı birkaç defa okumak zorunda kalmazsınız.

Yazılım Mühendisiği Rehberi – Kitaplar

kitaplar.jpgDaha iyi bir yazılım mühendisi olmak için neler yapmalıyız? Malesef ülkemizde yazılım mühendisliği kavramı pek oturmuş olmadığı için bu konuda kaynak bulmak gerçekten zor. Ülkemizdeki yazılım mühendisiliğini daha sonra enine boyuna tartışırız aslında yazmak istediğim çok şey var . Daha önceden iyi bir yazılım mühendisi olmak için neler yapmalıyım hangi kitapları okumalıyım baya bir araştırmıştım. Türkçe pek (aslında hiç) kaynak bulamamıştım. Bölüm bölüm burada nelerden faydalandım yazmaya çalışacağım. Aklıma gelmişken ilk olarak okunmasında fayda gördüğüm kitapları yazayım dedim

Object Oriented Design,Programming

  • Applying UML and Patterns – An Introduction to Object-Oriented Analysis and Design and Iterative Development
  • Agile Principles, Patterns, and Practices in C#

Desing Patterns

  • Head First Design Patterns
  • Design Patterns Elements of Reusable Object-Oriented Software

Test Driven Development

  • Test-Driven Development: A Practical Guide
  • Test-Driven Development By Example
  • Pragmatic Unit Testing

Refactoring

  • Refactoring: Improving the Design of Existing Code
  • Working Effectively with Legacy Code
  • Refactoring to Patterns

Agile,XP

  • Practices of an Agile.Developer Working in the Real World
  • Extreme Programming Explained
  • Extreme Programming Explained Embrace Change

Öncelikle belirteyim biraz fazla oldu ama gerçekten hepside çok faydalı kitaplar. Gerçekten okumanızı tavsiye ederim. Şimdi bana bu kadar kitabı sen nasıl okudun diyebilirsiniz. Valla üşenmedim okudum.Bazılarını sırf tren, vapur ile işe giderken vakit boş geçmesin diye PSP aldım, pdf olarak içine atıp öyle okudum. Unutmayın iyi bir yazılım mühendisi olmak için gerçekten çok ama çok okumanız ve pratik yapmanız gerekli. Kitap, blog, forum vs.. çok fazla araştırmak incelemek gerekiyor.Fazla uzatmadan kolay gelsin diyelim. Umarım iyi bir başlangıç olur..

Clean Code That Works

Test Driven Development by Example kitabını okurken Kent Beck’in

Ron Jeffries ‘den yazdığı söz "Clean Code That Works" Test Driven development’ın amacını çok güzel bir şekilde bir cümleyle açıklıyor. Gerçi sadece TDD değil yazılım geliştirmede kod yazarken bütün metodolijelerin amacının,kod yazmanın amacının bu olduğuna inanıyorum. Patterns,Katmanlı Mimari,Test, vs vs… hepsinin amacı gerçekten iyi yönetilebilir bir proje oluşturmak bunuda kesinlikle kolay anlaşılan basit kod yazarak sağlayabiliriz.Öyleyse hep beraber tek bir ağızdan tekrarlayalım. Amacımız : "Clean Code That Works" . :)

Classical Pachelbel Canon in D major

p>İlk defa My Sassy Girl filmini izlerken duyduğum ve resmen içime işlemiş olan müziği sonunda buldum. Johann Pachelbel‘in en ünlü bestelerinden biri Canon in D major‘miş. Kesinlikle dinlenmesi gereken bir müzik bence. İnsanın ruhunu okşayan bir melodisi var. İnsanın ruhunu alıp başka diyarlara götüren bir meloji. Açıkçası bugüne kadar dinlediğim en güzel melodi. Bugün arkadaşın düğününe gittim bir şarkı çalıyordu gelin ve damat içeri girerken ve içimden inşallah birgün evlenirsek düğünümde salona girerken bu melodinin çalması çok güzel olur diye düşündüm. Bu arada eğer My Sassy Girl’üde izlemediyseniz onuda kesinlikle tavsiye ederim. Bu müziği o filmle birlikte izleyince daha hoş oluyor.