“İnternet hızla yaygınlaşmakta ve bu durum yazılımcıları kara kara düşündürmekteydi.”
Bu belki 10 sene öncesinin bilim kurgu romanından bir alıntı; belki de 10 sene sonrasından bugün için yapılmış bir saptama.
Önceleri her şey çok güzelmiş aslında; kullanıcıdan bilgileri alır, iki tane döngü, üç tane kontrol koyarak veritabanına kayıt atardık. Web sunucularından pek anlamaz; HTML, Javascript ve CSS bilmemiz bizim için birer artılardı.
İnternet programcılığının temelinde yukarıda anlattığımdan fazlası yok; küçük bir proje için fazlasının bilinmesine de gerek yok. Yalnız, daha büyük bir kitlenin kullanımına açık bir projede çalışmaya başlıyorsanız bu temelin güçlendirilmesinin gerektiğini tahmin ediyorsunuzdur. Bu yapı ile beraber kendimizde de güçlendirmemiz gereken özellikler olacaktır. PHP’den başka dile hakim olmadığımdan (ama aslında iyi bir yazılımcı için PHP’miş Java’mış çok fark etmemeli) PHP “notasyonları” ile aktaracağım düşüncelerimi ama benzer ifadeler farklı diller için de teknoloji isimleri değiştirilerek aktarılabilinir.
Ön Not: PHP’ci = PHP ile yazılım geliştiren kişi
Ortam : Bir PHP’ci artık Linux kullanmalı. Çok da dert değil en azından bunun üzerine tartışmaya girmemeli.
(bkz : Ubuntu)
OOP : PHP5.3.2 ile birlikte (ki yeni bir projenin bu sürümden düşük bir sürümden başlamaması gerekli artık) PHP ile diğer dillerdeki OOP kavramı arasında büyük fark kalmadı. İyi bir PHP programcısının PHP 5.3.2 ile getirdiği yeniliklerin neler olduğunu; bunların nasıl kullanıldığını yavaş yavaş anlaması gerekli.
(bkz: PHP OOP)
Tasarım Kalıpları : İyi bir yazılımcı olmak için mutlaka tasarım kalıbı kavramından haberdar olmak gerekli. En azından en önemli 3-5 kalıbın neler olduğunu, neye çözüm getirmek için nasıl kullanıldığını anlamak gerekiyor. Bu; çalışırken görülecek örnekler ile zihinde yerine oturacak bir kavram daha çok. Gidip bütün kalıpları ezberleseniz bile, gerçek bir projede nasıl kullanıldığını farkedene kadar tam oturmayacaktır kafanızda. (En azından benim için öyle; kendimi de en eksik hissettiğim konudur.)
(bkz: Design Patterns)
Framework’ler : Kısaca bir kaç önemli tasarım kalıbının düzgün olarak birleştirilmesi ve kütüphanelerle desteklenmesi ile oluşan; işlerin hızlı ve doğru bir şekilde çıkmasına yardımcı olan yazılımlar olarak tanıtabiliriz sanırım.
PHP için Zend Framework, Symfony, CakePHP, CodeIgniter, Kohana, Yii, Lithium en çok duyulan frameworklerdir. Bunlardan söz ederken Doctrine’in ismini de anmak gerekir. Doctrine bir MVC framework değil; bir ORM/DBAL’dir. (O kadar Türkçe’den sonra bu son cümle olmalıydı artık.) Kullanırsınız kullanmazsınız önemli değil; en azından ne zaman ve ne şekilde kullanıyor insanlar, bununla ilgili bilgi sahibi olmak gerekli diye düşünüyorum.
Kısa Not : Bu frameworklerin çoğunun yavaş yavaş “2.0″ı çıkmakta; bu “2.0″ etiketi “PHP 5.3.2 ve sonrasını kullanıyorum; namespace vs. dikkat ediyorum; OOP’nin doruklarındayım” demek bilginiz olsun.
Ayrıca WordPress ve Drupal gibi cms frameworklere de göz atmalı.
(bkz: MVC, Front Controller, Zend Framework, Symfony, CakePHP, CodeIgniter, Kohana, Yii, Lithium, ORM, DBAL, WordPress, Drupal)
Caching : “Bir birleşen daha az yorulsun ki daha hızlı cevap döneyim istemciye” derdine çözümlerdir. Bir PHP’ci APC nedir bilmelidir, memcached nedir “nasıl kullanılır ne işe yarar” bir okumalıdır. Büyük bir projenin “cache”siz olması çok düşük bir ihtimaldir. Veritabanı sonuçları nasıl cache’lenir ? vs.. Daha bunun Hiphop’u falan da var..
(bkz: APC, memcached, Hiphop)
Web Sunucuları : Apache’den başkasını kullanmadım. IIS7′nin büyük iddiaları vardı bir ara Php’yi çalıştırmak üzerine. Hala büyük PHP konferanslarına sponsor oluyorlar, Zend ile aralarında varmış bir anlaşma. İleride windows hosting üzerinde PHP geliştiriyor olursak şaşırmam. (Yok şaşırırım sanırım..) Nginx’imiz var mesela; ne zaman kullanmak avantaj sağlıyor ?
(bkz: Apache, nginx)
Veritabanları : Bizim için veritabanı demek MySQL demek olmuş bir kere.. Daha önce çalıştığım işten dolayı bir çok veritabanı ile kullandık PHP’yi. Oracle, MSSQL, DB2 ya da başka biri, sorunsuz çalışırdı. Çok büyük bir yazılım olmadığından genel performansları hakkında bilgim yok. MySQL’e neden bu kadar bağlı kaldık bilmiyorum; muhtemelen ilk bağlantıyı çok rahat kurmamızdan kaynaklanıyordu. (Oracle için bir gün uğraşıyordum
) Tabi diğer önemli detay da MySQL’in ücretsiz olması. Hem ücretsiz hem diğerlerinin yaptığı her işi yapınca sonuç kaçınılmaz sanırım. Diğer veritabanlarında nasıldır bilmiyorum ama MySQL’in yanlış index kullanımından nefret ediyorum. Evet bir PHP’ci aynı zamanda doğru SQL yazmayı bilen olmalı.. İstediğiniz kadar güzel kod yazın; en iyi framework ü en iyi şekilde kullanın, APC’yi de memcache’i de kurun; en sonunda yazdığınız SQL’in dönüş süresi 5sn ise.. Ne diyeyim; “hayrettin yapma..”
Güzel SQL yazmalıyız (rubai tadında), MySQL’in saçmalıklarını tecrübe etmeliyiz; Postgresql ile de hafiften tanışmalıyız.
(bkz: Mysql, PDO, PostgreSQL, yapma hayrettin)
NoSQL Veritabanları: “no SQL” mi “Not Only SQL” mi “non-relational SQL” mi bilmiyorum. Bizler için yeni bir kavram; relational olmayan veritabanı mı olur text dosyası mı bu diyorsun ilk başta. Sonra da farkediyorsun ki; “eh işte öyle birşey” (Yanılmıyorum di mi. Neyse; genel olarak farkettiğiniz gibi “balık veren değil, olta nasıl yapılmalı” konusuna değinmeye çalışan bir yazı bu. Zaten bendeki balık kısıtlı.) Hakkında yazılan tutorial’lardan olacak; PHP ve MongoDB arası bu aralar pek sıcak. mongodb’nin PHP için native driverını hızlı çıkartma daha sonra Doctrine’de mongodb adapter’ine yer verilmesi bu süreci hızlandırdı. Şu an için NoSQL ile bilgi ve tecrübe sahibi olmayı isteyen PHP’ci; MongoDB ile haşır neşir olmalı ilk başta gibi geliyor bana. Daha sonra, NoSQL demek sadece Document Store demek değilmiş; CouchDB’si varmış Cassandra’sı varmış diyebilir.
(bkz: NoSQL, MongoDB, CouchDB, Cassandra)
Sürüm Kontrol : CVS varmış ben onu görmedim; ilk svn (Subversion) ile tanıştım. Daha sonra mercurial ve git. Bana Git kullanmak zor gelmişti; hali hazırda “git clone” dan ileri gidemedim pek; ama bence ileriye o kalacak; onun üzerine birşeyler eklenecek ne eklenecekse. git-hub gibi bir koca oluşum var zaten hali hazırda. Bir PHP’ci de “version control system” nedir bilse fena olmaz; git “distributed”mış acaba ne oluyor öyle olunca diye kendi kendine sorsa (bence google’a sorsa daha iyi) güzel olur.
(bkz: subversion, mercurial, git, git-hub)
Diğerleri : Diğerlerini ben de pek bilmiyorum. Thrift var; facebook’un şeytan icatlarından
RabbitMQ var; cron yerine mi kullanıyormuşuz; bu Erlang ile yazılmış her şey önemli diye bakıyorum artık zaten. Hudson var; büyük projelerin, büyük ekiplerin eninde sonunda “continuous integration” ile ilgili ne yapabiliriz derken karşılaştıkları çözümlerden.
Ayrıca “Comet” kavramı incelenmeli; apache ve php ile comet yapmaya çalışıp başarısız olmayı tecrübe etmeli. HTML5′de neler geliyormuş bir Php’ci yi etkiler mi acaba? sorusu sorulmalı. (Web Sockets ile etkileyecek umarım)
(bkz: Thrift, RabbitMQ, Hudson CI, Comet, NodeJS, Erlang, HTML5)
Sonuç olarak; internet eski internet olmadığı için; yazılım geliştirmek de eskisinden farklı. Reel bir sonuç olarak; bunları bilirseniz, sektörü yakından takip ederseniz, çok güzel işler yaparsınız.