2018 yılında hala PHP öğrenmeye değer mi?

https://dev.to/mporam/is-php-relevant–1np

Dev.to platformunda Mike Oram tarafından yayınlanan “Is PHP relevant?” adlı yazının Türkçe çevirisidir.

Bana akademisyenler, iş başvurusu yapanlar hatta diğer geliştiriciler tarafından en sık sorulan sorulardan biri “Neden PHP öğretiyorsun?” hatta bazen “PHP ölü bir dil değil mi?” sorusudur.

En başından bu konuda gayet açık olayım. PHP ÖLÜ BİR DİL DEĞİLDİR.

2017 yılının aralık ayında, PHP internette server tarafında kullanılan programlama dillerinin %83’ünü oluşturuyordu. Bu sonucu PHP tabanlı WordPress gibi içerik yönetim sistemlerine borçluyuz, ama bu hazır içerik yönetim sistemlerini bu orandan çıkarsak dahi, PHP web’in %54’ünden fazlasına güç vermekte. Zaten, aşağıdaki grafiğe bakarsanız, PHP’nin market payı 2017 yılında gayet tutarlıymış hatta artış göstermiş.


Eylül ayında ‘IT endüstrisi için uygun’ yetenek ve teknolojiler hakkında bir blog yazısı yazmıştım. O blog yazısını yazdığım sırada, PHP ve Javascript iş pazarında açık ara aranan özelliklerdendi. Hala da böyledir. Tesadüfi olmayan bir şekilde, akademide en çok vakit ayırdığımız iki dil de PHP ve JavaScript’tir.

Şimdi, yeni programcılara en çok öğretilen diğer dillerin kullanım istatistiklerine bir göz atalım. Üniversiteler Java veya C’ye odaklanmaya yatkınlar. Bunun sonucunda bir çok girişim uygulamalarını bu dilleri kullanarak geliştirmekte. Tüm bu çabaların sonucunda Java server tarafındaki uygulamaların %2.5’una güç veriyor. C hiç bir yerde görülmemekle beraber, bazen üniversitelerde öğretilen ASP.NET %14.2 oranına ulaşabilmiş. Programlama workshoplarında en popüler olan Python, Ruby veya sunucu tabanlı JavaScript dillerinin hepsini birden topladığımıza, internettin sadece %1.2’sine güç verebilmişler. Sunucu taraflı JavaScript (node.js) en hızlı artan sunucu taraflı teknoloji olmasına rağmen halen az kullanılıyor ancak tabiiki öğrenilmeli. (Biz akademik takvimimizde Node.js öğretmeye 1 hafta ayırıyoruz)

Techrepublic kısa bir zaman önce 2018 yılında öğrenilmesi gereken “top” dilleri sıraladığı, PHP ve JavaScipt’in ilk 6 ya girdiği, PHP’nin 2017 yılında 9’unculuktan 6’ncılığa yükseldiği bir makale yayınladı.

Peki neden bir sürü kişi PHP’nin uygunsuz ya da ölü bir dil olduğunu iddia ediyor?

Bunun, benim gördüğüm iki ana nedeni var. Birincisi, bu geliştiriciler arasında dolaşıp duran bir söylentiden ibaret. PHP, ilk zamanlarında görece olarak yavaş, nereye gittiği belli olmayan ve bir sürü tutarsızlığa sahip bir dildi. Yıllar boyunca PHP bayağı bir gelişti, hatta 2009 yılında 5.3 sürümünün yayınlanmasından beri, eski şikayetlerin çoğu düzeltildi. En son sürüm (7.1) son derece hızlı, modern ve güçlü bir şekilde nesne yönelimliliğe odaklanan bir dildir.

İkincisi, PHP esnek ve “loosely typed” yani kesin tür belirtilmemiş bir dildir. Bu, metin editörünü açıp hızlı yazılım geliştirmeye olanak verse de, kolayca kötü kod üretmeye de yol açmakta. Yani kendi başarısının bir kurbanı olduğunu söyleyebilirsiniz. Ancak, düzgün bir şekil yazıldığında, ve DRY, SOLID ve MVC gibi (bizim de akademide öğrettiğimiz) metodolojiler kullanıldığında, PHP gerçekten güçlü, iyi bir çeşitliliğe sahip, bir çok şeyleri sunabilecek hızlı bir dildir.

Yani, PHP ölmedi. Her dilde olduğu gibi kendine özgü kusurları olsa da, bırakalım istatistikler bizim yerimize bu iddialara cevap versin.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-11 Bileşenler, Composer ve JSON

Bu yazı Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-10 Sayfa Düzeni yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bileşen Bir önceki yazıda View yani görünüm sınıfını her türlü şemayı kullanabilecek şekle dönüştürdük ve kullandık. Şimdi teker teker public dizini altında oluşturduğumuz index.html dosyasını parçalayalım ve tema dosyalarına dönüştürelim. Daha önceden oluşturduğumuz Template yani şablon klasöründe tek tek ismini vereceğim dosyaları oluşturun ve kodlarını içine kopyalayın. layout.php: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title><?= $title ?></title> <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> <link rel="stylesheet" href="public/css/universal.css"></head><body><?= $content ?><script src="public/js/main.js"></script></body></html> Bu şablon bi...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-10 Sayfa Düzeni

Bu yazı Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-9 Şablonlar yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Alexey Brodovitch Web sayfalarında veya basılı mecralarda, hiçbir zaman veriyi, yazıyı resmi olduğu gibi okuyucuya sunmuyoruz. İnsanların yazıları rahatça okuyabilmeleri için, ya da web sayfamızda kaybolmadan dolaşabilmeleri için sayfamızdaki verileri, belirli bir düzen kullanarak sayfaya yerleştirmemiz ve biçimlendirmemiz gerekiyor. Burada web tasarımı yapmanın ilkelerine girmeyeceğim, ancak merak ediyorsanız bu konuyu araştırabilirsiniz. Örneğin dümdüz veriyi ekrana bastığımızda, bunlardan bir anlam çıkarmak neredeyse imkansızdır. Arjantin Enflasyon Verisi Bu yüzden bu verileri mesela grafikler kullanarak anlamlı hale getirmeye çalışırız. Arjantin Enflasyon Grafiği Yani amacımız sadece verilerimizin güzel gözükmesi değil, anlaşılabilir olması, uygulamamızın kolay kullanılabilmesi, okunaklı olması, belli amaçlar için aynı veriyi farklı şekilde görüntüleyebilmemiz (yeniden kullanılabilirlik) de aynı zamanda. Sayfa düzeni, vey...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-7 —Sınıfları Kullanmak ve API meselesi

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-6 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bu yazıya kadar, bir programı sınıflar kullanarak nasıl tasarlayacağımızı, nasıl temiz kod yazacağımızı, kodlarımızı nasıl hatalara karşı kontrol edeceğimizi, sınıflarımızın sorumluluklarının ne olacağını anlattık. Peki programımızı kim nasıl kullanacak? Sınıflarımızı yazdık ve app.php dosyası içinde de kullandık, ama son kullanıcı bu programı nasıl kullanacak? Bu yazıda bu konuyu detaylıca işleyeceğiz. Ayrıca programımıza arama, sıralama, üyelik gibi ek özellikler eklemek istediğimizde ne yapacağız? Bu meseleye de bu yazıda kısaca değineceğiz. Kullanıcılar Genel olarak programların amacı Bu konuyu bu seride defalarca açıklamıştık ancak şimdi tıpkı başta sınıflarımızı tasarladığımızda yaptığımız gibi, programımızın nasıl çalışacağını ve amaçlarının ne olduğunu kısaca anlamamız gerekiyor ki, sınıflarımızı kullanacak program kodumuzu da nesne yönelimli bir şekilde tasarlayabilelim. Genellikle programların amacı kullanı...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-6— Girdi Sınıfı

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-5 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bir önceki yazıda girdi sınıfımızı kullanan sözlük sınıfımızı yazdık. Deneme/Yanılma yani Try/Catch bloklarını kullanarak hatalara dayanıklı kod yazmayı ve kod tekrarlarını önlemekten bahsettik. Bu yazıda Entry yani girdi sınıfımızı oluşturacağız. Sözlük girdisi Dictionary.php sınıfımızın bulunduğu dizinde Entry.php adlı bir dosya oluşturalım. Artık bir sınıfın aşağı yukarı nasıl olması gerektiğini biliyorsunuz. İçi boş sınıfımızı şu şekilde yazalım. <?phpnamespace MidoriKocak;class Entry implements EntryInterface{public function __construct(){}public function setKey(string $key){}public function getKey(): string{}public function setValues(array $values){}public function getValues(): array{}public function getValue(int $order): string{}public function setValue(int $order, string $newValue){}public function addValue(string $value){}public function deleteValue(int $order){}} Her sınıfın __construct metodu olması ger...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-5 — Sınıfı inşa etmek

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-4 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Önceki yazılarda nesne yönelimli programlama mantığını, sınıflarımızı nasıl oluşturacağımızı, tek sorumluluk prensibini, bilgi gizlemeyi, sihirli yaratıcı metotları kavramaya çalıştık. Bir önceki yazıda sadece metot isimlerini içeren arayüzler yani interface’ler yazdık. Önümüzde iki yol var: Harala gürele kullanıcıyı düşünmeden sınıfların içlerini doldurmaya başlamak. Ya da bu sınıfları kullanacak uygulamayı yazmak. Yani bu sınıfları uygulamayı yazarken test etmek ve çıkabilecek hatalara önceden önlem almak. Biz arayüz yazdığımız için kullanıcının kullanacağı kodları zaten belirtmiş olduk. PHP’de test konusuna bu yazıda basitçe değineceğim. Çünkü kodumuzu insanlar kullanacak. Daha sonra phpUnit konusuna geldiğimizde detaylıca anlatacağım da. Bu insanların neye ihtiyaçları olduğunu, neler yapabileceklerini az çok tahmin edebiliyorsak, sınıflarımızın içlerini bu kullanıcıların yapacakları hatalara karşı dayanıklı bir ş...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-4

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-3 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Bir önceki iki yazıda şu soruları sormuş ve kısmen cevap vermiştik: Eklemek istediğimiz başlık sözlükte yoksa ve çağırdıysak bu sorunu bildirim göstermeden nasıl hallederiz? Başlık zaten varsa ve değiştirmek istemiyorsak, aynı başlığa yeni bir açıklama değerini nasıl ekleriz? Bir başlığı silmek ya da düzenlemek istediğimizde ve başlıkta birden fazla açıklama varsa, tüm açıklamalara mı etki edeceğiz yoksa sadece birine mi? Bir başlığa, tarih bilgisini nasıl girebiliriz? Bu tarih bilgisine dayanarak nasıl sıralama işlemi yapabiliriz? Arama, filtreleme işlerini nasıl yapacağız? Önce, bir önceki yazıda spagetti usulüyle bir takım değişiklikler yapmıştık. Bu değişiklikleri Dictionary.php dosyasındaki sınıfa taşıyarak işe başlayabiliriz. Dictionary.php dosyamızın içine şu metodu ekleyelim: public function getEntry(string $key): string{if (array_key_exists($key, $this->entries)) {return $this->entries[$key]; }} 2. sor...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-3

Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-2 yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Nasıl kullanacağımızı şekliyle anlayan bir nesne Nesneyi Kullanmak ve Arayüz Kavramı Daha önce information hiding, yani bilgi gizleme kavramından bahsederken şöyle demiştik: araba kullanırken, motorun, katalitik konvertörün, alternatörün o anda ne yaptığı ile ilgilenmiyoruz. Araç kullanıcısı olarak bizim amacımız bir yerden bir yere gitmek, ve bunu aracın direksiyonunu, vitesini, pedallarını vb. kullanarak gerçekleştiriyoruz. Eğer araba kullanmayı biliyorsak, her türlü arabayı kullanabiliriz. Çünkü otomobiller üretilirken belirli standartlara uyularak üretilmekte. Çok fütüristik değilse, bir aracın, direksiyonunun, vitesliyse debriyajının gaz pedalının, sinyal kolunun vb. olduğunu önceden tahmin ediyoruz, çünkü daha önce sürücü kursunda öğrendiğimiz ve hayatımızda gördüğümüz tüm otomobillerden edindiğimiz tecrübe bilgisiyle böyle bir beklenti oluşturduk. Bu ne ki şimdi? Yani mesela bir otomobilde, vites sağ alt köşe...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş-2

Sınıf Bu yazı daha önce yazdığım Hiç Bilmeyenler İçin Nesne Yönelimli Programlamaya Giriş yazısının devamıdır. Önce onu okumanızı öneririm. Medium.com adresinde görüntüleyin Önceki yazıda, nesne yönelimli programlama mantığını anlamaya çalıştık. Özetlemek gerekirse kabaca şunları anlatmıştım; Nesne kelimesinin ne anlama geldiğini Felsefi, fiziksel, psikolojik ve dilbilimsel yönleri de olduğunu Programlamada nesne kavramının ne ifade ettiğini Neden nesne yönelimli programlama öğrenmemiz gerektiğini Nesnelerin birbirleriyle ilişkilerini Şimdi kavramları anlatmaya ve örnekler vermeye devam edeceğim. Tüm yazılarımda olduğu gibi kavramları kuru kuruya ve salakça tanımlar vermek yerine, işe yarar, elle tutulur örneklerle mantığı okuyucunun kafasında oturtmaya çalışıyorum. Bazen yazılarımın dili laubali olabilir, ama yazının eğlenceli ve anlaşılabilir olması, bence ciddi olmasından daha avantajlı. Ben çeşmeden kana kana su içmeyi çok severim mesela. Hayatta herşeyi yaparken bir amacımız var, örneğin su içerken amacımız susuzluk hissimizi gidermek. Bu işi yaparken de belli başlı yöntemler ku...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.

Nesne Yönelimli Sistemler Için Soyut Bir Nesne Modeli

Alan Snyder Yazılım Teknolojisi Laboratuvarı HPL-90–22 Nisan 1990 Çeviri: Midori Koçak — mtkocak (at) gmail (dot) com 30.12.2016 Anahtar kelimeler: nesne-yönelimli programlama, nesne yönelimli sistemler, nesne modelleri, veri modelleri, dağıtık sistemler, nesne yönetimi Bu rapor, nesne yönelimli sistemler için soyut bir nesne modeli tanımlamaktadır. Soyut nesne modeli temel kavramlar ve terminolojinin organize bir şekilde sunulmasını sağlamaktadır. (Soyut nesne modeli) dağıtık bir nesne yönetimi altyapısı üzerine kurulmuş uygulamalar tarafından görüldüğü şekilde kısmi bir hesaplama modeli tanımlamaktadır. Amacı, nesne sistemlerinin temel özelliklerini bünyesinde toplayan genel bir taslak sunmaktır. Bu çerçevede, genel modelin detaylandırılması (rafine edilmesi) ve doldurulması (genel modele ait belirli varlıkların tanımlanması) yoluyla, birçok belirli nesne modelini tanımlamak mümkün olmalıdır. Soyut model, Nesne Yönetim Grubu’nun kullanımı için, önerilen nesne teknolojilerini talep etmek, açıklamak ve değerlendirmek için ortak bir kavramsal çerçeve olarak geliştirilmiştir. © Telif H...
Patreon üyelerine özel içerik.
To view this content, you must be a member of Mutlu's Patreon at "Merakli Bilişimci Üye..." or higher tier
Already a Patreon member? Refresh to access this post.