Kaliteli PHP Projesi Üretmek İçin Nereden Başlamalı

4 Nisan 2011 Pazartesi - Unknown
Dikkat: Bu yazı teknik bir yazıdır. Hala teknik yazılarım ile diğer yazılarımı iki ayrı blog'a bölmek konusunda kararsızım.

Diyelim ki piyasadaki PHP kitaplarından bir ya da birkaçını okudunuz ya da hiç kitap okumadınız internetten bulduğunuz blog yazıları ile yetinerek PHP yazıyorsunuz. Maaşınızı alıyorsunuz, işinizi sordukları zaman bilgisayar programcısıyım diyorsunuz. Hayat devam ediyor ve siz arada bir kendinize soruyorsunuz acaba facebook, yahoo, digg ve flickr'daki yazılımcılardan farkınız ne?

Farkınız şu: eğer Java ya da C# kitaplarından nesne tabanlı programlamayı öğrenmediyseniz -tüm Java ve C# kitapları değil ama bazıları gerçekten iyi- ya da aşağıda bahsedeceğim kitabı okumadıysanız, nesne tabanlı tasarım yapmayı ne yazık ki öğrenmiş olamazsınız. Üzgünüm, bu gerçeği size belki ilk söyleyen benim ama Türkçe yazılmış "dandik", toplamda nesnelerden 20 sayfa bahseden PHP kitapları ile ya da ingilizce yazılan "daha az dandik" nesnelerden 25 sayfa (belki biraz daha fazla :) bahseden kitaplarla bu işi öğrenemezsiniz. Elma class'ı ve armut objesi ile verilen örnekler gerçek hayata uygun olmadığı gibi, o kitapların yazarlarının bile nesne tabanlı programlama bilmediğini ortaya koyuyor.

Peki gelelim ne yapacağımıza. Çetin  Altan'ın dediği gibi "Enseyi Karartmayın". PHP 5.0 ile birlikte dil artık nesne tabanlı tasarım oluşturmak için uygun hale geldi ve mükemmel bir kitaba sahibiz: PHP Objects, Patterns and Practice. Hatta Türkiye'de pek revaçta olmasa da bu kitap dünyada çok tutuluyor ve  3. baskısı çıktı. Kitabın yazarı Matt Zandstra, Yahoo'da çalışıyor ve bize öğretecek çok şeyi var.

Bu kitabı neden beğeniyorum: PHP programcılarının bilgi düzeyinin ne olduğunu iyi biliyor ve kitap gerçekten nesne tabanlı programlamanın temelleri ile başlıyor. İlk 150 sayfadan sonra siz biraz ısınınca design pattern'leri (tasarım desenleri) anlatmaya başlıyor. Design pattern'leri  öğrenebileceğiniz iki tane daha kaynak var (Design Patterns: Elements of Reusable Object-Oriented Software, Head First Design Patterns) fakat ben bu kitabın PHP programcılarına daha uygun olduğunu düşünüyorum. Çünkü bu kitapta öteki kaynaklarda bahsedilmeyen database pattern'lerini ve web için uygun mimarilerin anlatıldığı enterprise pattern'leri de bulabilirsiniz. Ayrıca profesyonel PHP projesinde kullanmanız gereken araçların anlatıldığı practise bölümü de bonus olarak geliyor.

Eğer Java, C#, C, Python, Ruby ya da herhangi bir programlama dili için konuşuyor olsaydık çok fazla seçeneğimiz olurdu, fakat şimdilik benim incelediğim türkçe ve ingilizce neredeyse 30 kitap arasında yazılım tasarımı üzerine bir şeyler söyleyen tek kitap bu.

Not: Lütfen Codeigniter gibi PHP4 destekleyen framework'leri kullanmayı bırakın. Abstract class ve interface olmadan nereye kadar gidebilirsiniz.

Not 2: PHP In Action da ciddi güzel bir kaynak, en yakın zamanda okumayı planlıyorum.

8 yorum:

Cihan Okyay dedi ki...

codeigniter şu an php5 destekliyor diye biliyorum :)

Anıl Özselgin dedi ki...

Php5'i destekleyen http server'daki php interpreter'ı. Codeigniter yoksa php5 yazmamıza istese de engel olamaz. Ama kendini php5 uyumlu olarak düzeltmiyor. İç yapısını object oriented bir yapının içine almıyor. Object oriented demek abstract classlar ve interface'ler ile daha soyut yapılar tasarlamak demek bir bakıma. Codeigniter'ın class'larında ne encaptulation var, ne loose coupling, ne cohesion. Database classlarında prepared statement kullanmıyor, hem hız hem güvenlik problemi. Package mantığı yok (namespaceler).

DB_driver.php dosyasındaki CI_DB_driver class'ına bakalım mesela:

var $username;
var $password;
var $hostname;
var $database;
var $dbdriver = 'mysql';
var $dbprefix = '';
var $char_set = 'utf8';
var $dbcollat = 'utf8_general_ci';
var $autoinit = TRUE; // Whether to automatically initialize the DB
var $swap_pre = '';
var $port = '';
var $pconnect = FALSE;
var $conn_id = FALSE;
var $result_id = FALSE;
var $db_debug = FALSE;
var $benchmark = 0;
var $query_count = 0;
var $bind_marker = '?';
var $save_queries = TRUE;
var $queries = array();
var $query_times = array();
var $data_cache = array();
var $trans_enabled = TRUE;
var $trans_strict = TRUE;
var $_trans_depth = 0;
var $_trans_status = TRUE; // Used with transactions to determine if a rollback should occur
var $cache_on = FALSE;
var $cachedir = '';
var $cache_autodel = FALSE;
var $CACHE; // The cache class object

// Private variables
var $_protect_identifiers = TRUE;
var $_reserved_identifiers = array('*'); // Identifiers that should NOT be escaped

// These are use with Oracle
var $stmt_id;
var $curs_id;
var $limit_used;

-------------------

private variables diye comment düşmüşler, madem private niye private identifier'ı ile tanımlanmamış. Oracle ile ilgili değişkenler niye oracle için yapılan class'ta değil. Çünkü bu class abstract bir class olmalı, ama codeigniter abstract classlardan bir haber yazılmış bir framework.

Kendisi düzgün bir yapı içermeyen bir framework, size nasıl bir düzgün yapı sunacak. İşte javanın şu andaki başarısı frameworklerinin de çok süpersonik yapılarından kaynaklanıyor bu açıdan. Php'deki adı framework, kendisi bir kaç dosyadan oluşan kod yığınları da milletin daha kötü kod üretmesinden başka işe yaramıyor.

Adsız dedi ki...

cok biliyonuz amkim anca konuşun icrate geldin mi bi sik yaptığınız yok

Anıl Özselgin dedi ki...

web 2.0 paylaşım demek. yorumu silmiyorum, zaten yorum silinmesine karşıyım.
ama adını yazmaya çekinecek kadar korkmak şaşırtıcı.

Adsız dedi ki...

türkçe olarak php için önerebileceğiniz bir kitap var mı?önerdiğiniz kitaplar ingilizce ve maalesef kitap okuyabilecek kadar ingilizce bilmiyorum

Anıl Özselgin dedi ki...

Üzgünüm türkçe güzel kaynak maalesef yok. Bu ben de dahil olmak üzere çok kişinin kusuru, umarım güzel gelişmeler olur. Türkçe kaynak olmadan pek ilerleme kaydedemeyeceğimiz aşikar.

Adsız dedi ki...

Madem bu kitabı okudunuz, anladınız ayrıca piyasa tecrübeniz var neden Türkçe olarak yazıp bastırmıyorsunuz? Kodlab'a mesaj yazdım adam gibi bilgi sahibi birisini bulamadık dediler. Allah aşkına birileriniz şu meseleye el atında bizim gibi amatör ilgilenenler biraz daha seviyesini yükseltebilsin.

Anıl Özselgin dedi ki...

Ne desen haklısın.