• 20-10-2015, 00:18:02
    #1
    Oncelikli tavsiye : Baslamayin.

    Bu makaleyi artik hezeyan haline gelmis bir durum icin yaziyorum.

    Hic programlama bilmiyorum ve PHP'ye baslayacagim, nereden baslayayim ?

    Baslamayin !

    Bunun bir kac nedeni var. Olumlu nedenlerden baslarsam henuz birsey bilmiyorsaniz

    PHP'den once ogrenmeniz gerekenler var. Bunlar kabaca nedir derseniz;

    - Ingilizce
    Ya ben nasi ogreneyim simdi onu diyip gecenler ogrenenelerin yarisi kadar maas alamayacak. Hep uyduruk yerlerde calisip, uyduruk isler yapacak. Buyuk bir ekibin parcasi olamayacaklar ya da olduklarinda cok gec olacak.

    - HTML
    Evet ogrenmelisiniz. Alternatif tabi ki var ama ogrenme surecinde isinize yaramaz. Zira bir sure cocuklar gibi yaptiginizi gorerek olcmek ve heyecanlanmak isteyeceksiniz. Alternatifi ne diyenleri duyar gibi oluyor. Duymazdan geliyorum simdilik kafaniz karismasin.

    - Jquery
    Ogrenin. JS ogrenmeyin bakin jquery ogrenin. Bu sizi eglendirecek sey. Aaa nasil yaptim ya diyeceksiniz. Zor falan da degil. Gayet eglencelidir.

    - SQL ve JSON
    SQL veritabanlarinin ortak dilidir denilebilir. Oracle sivesi vardir, o ayri. Bazi MySQL komutlari MsSQL'de calismaz o ayri. Onlari da PHP icinde ogreneceginiz ORM kavrami ile asmaya calisacaksiniz. Ama o da bir yerde calismaz olacak o da ayri. Her neyse bunu da ogrenmelisiniz.Bir hayli gicik durumlar olusturabilir. Bunun nedeni aslinda kotu tasarlanmis, normalizasyonu kotu yapilmis data structure yuzundendir. Ornegin bir magaza zincirinde kullanicilardan alinmis odemelerde magaza bilgisi degil kullanici bilgisi kaydedildigini dusunelim. Fakat kullanici magazasini degistirince yaptigi odeme hangi magaza icin gecerli sayilacak ? Hangi magazaya ne zaman gectigini kaydettiniz mi yoksa yeni magazasindaki ilk islem satirini bulup mu ondan oncekileri eski magazasinda sayacaksiniz ? iste bu garip sorunlarla karsilasmamak icin database tasarlamayi iyi bilmeniz gerekecek. Baslarda 100 saniye calisan sorgular yazip sub querylere siginacaksiniz elbet. Sonra temp table ve procedureler ile hayatinizi kurtardiniz sanacaksiniz ama yuk arttiginda yok artik diyip NoSQL ile tanisacaksiniz 10 kat hizli data yazacaksiniz o ayri. Cunku oncesinde muhtemelen key:value sistemlerden redis ile tanisirsiniz. JSON ise bir data tanimlama yapisi. Ayni abisi XML gibi ama SOAP bence Restful karisinda olmek uzere oldugundan ve antika java sistemler disinda yeni bir sistemde girmedigimden JSON diyorum. Ne oldugunu ve bir seyi nasil JSON ile formatlayip depolayacaginizi anlamalisiniz. Bu bilgileri google keyword edineceginize emin oldugumdan goy goy gibi geciyorum. Ha aramadiniz mi ? O zaman sarkidaki gibi aramazsan aramaa yar...

    - GIT
    Baska kardesleri, yasli abileri de var ama Linux'u yapan abi yapinca piyasayi domine ediyor. Dagitik, gercekten cok dagilabilen yapisi ile calismak icin sart. Evet bunu ogrenmesi hafif zor. Cunku senaryo olusturmak zorundasiniz. Hep ogrenecek yeni bir yani cikar. Fakat temel kisimleri mutlaka ogrenmeli ve github (benim tavsiyem bitbucket) gibi servisleri kullanabilmelisiniz. ( AWS ve Heroku ile simdilik ugrasmayin, hayir hayir onlar neymis diye acip bakmayin sirasi degil. )

    - Linux
    Eveeet, geldik windowsculuktan kurtulma zamanina. Ya bende MacOS var diyebilirsiniz. Hemen ikinci el fiyati iyi oldugu icin elden cikartip onu hypster kardesleriniz starbucksta ingiliz kis modasi bakabilsin diye satiyorsunuz. Adam gibi klavyeli bir PC tabanli alet aliyorsunuz. Ubuntu kuruyorsunuz. ( tamam debian da olur ama amac o degil su an ubuntu iyi ) Ayrica kusura bakmayin ama terminale hakim olmalisiniz. Dosya kopyalamaktan vs. degil, bir deb cakismasini cozmekten soz ediyorum.

    - Composer
    Evet. Erken ya ona hemen girmesinler diyebilirsiniz biraz PHP bilenler. Hayir efendim. Artik modern PHP dunyasindayiz. Hatta bunu ozellikle ve asiri vurgulu olarak soyluyorum. Artik muhendisligi cikmasi gereken is, dependency yani bagimlilik isidir. Eger isinizde iyi olacaksaniz bunun en muhim sartlarindan biri github trendingde harcadiginiz vakit ve buna bagli olarak bagimlilik yonetimi olacak. Bunu genis anlamda soyluyorum, sakin bir yerlerden duyduysaniz dependency injection ile karistirmayin. PHP surumlerini, yeri gelince server icin linux kerneli falan yonetirken bile basinize olmadik isler gelmesin diye paket yonetimine ciddi onem verin. PHP ogrenmeden composer yonetimini ogrenin. Ubuntu icinde de guili arac olarak synaptic etkilidir. Diger dpkg gibi terminal managerlari stackoverflow ile halledeceksiniz artik.

    - Bazi teorik standartlar
    Bunlar fizik kanunlari gibidir. Durduk yere ya da birinin fantazisi olarak ( hi ! uncle bob ) ortaya cikmazlar. Islerin akisi ve programlama dillerinin yapisinin teoride bulustugu noktalardir. Ornegin MVC. O neymis bir dil mi diyebilirsiniz. Sorun degil. Model-view-controller yapisidir. Kodlarinizi hangi dosyalara nasil yayacaginizi falan belirler. Fakat MVC sanildigi uzere en verimli falan yapi degildir. Eleman sayisi, proje boyutu vb. bir cok unsur bir araya geldiginde kullanilmasi mantikli bir hal alir ya da almaz. Ben seperation concern nedir onu da algilamanizdan ciddi sekilde yanayim. Ayrica SOA cok ciddi ( bakin cok ciddi gercekten saka degil ) bir mesela olacak. O yuzden API kavramini cok iyi anlayin. Oauth2 nedir onu bilmek lazim geliyor.

    Simdi bunlari ogrenmek yillar alir diyebilirsiniz. Evet efendim, alir. Fakat kendini oyalayip, bir sey yaptigini sanmak ise bir omur alir ve farketmezsiniz.

    Su an icin yoruldum. Hala elastic search ve capifony dokumanlarini okumam lazim. Hayir okudum ama bizim data yapisini ben kurmadigim icin go to bashi ayri oynuyor gercekten. O yuzden devamini siz bunlari ogrendikten sonra ( saka saka 2 yil sonra yazarmisim gercekten ogrenip hani devami diye gelirmissiniz ) yani yarin yazarim diye umuyorum. Yarin moralinizi de bozucam zaten hahahah... Haydi iyi aksamlar...
  • 20-10-2015, 20:24:29
    #2
    Hicte ilginizi cekmeyen ve hemencecik adsense paralarini cukka etmenizi saglamayan yazi dizimizin ikinci yazisindayiz. PHP'yi iki haftada cozup ise de giremeyeceginizi ogrendiginize gore bu yukardakiler hakkinda ciddi hazirliklar, ogrenme surecleri yaptiniz diyelim. Peki simdi PHP ile ilgili ne yapacaksaniz.

    PHP bir scripting dili. Yani calismak icin ( eger executable olarak derlenmediyse ) bir yorumlayiciya ihtiyaci var. Iste PHP dedigimiz sey o yorumlayici programin kendisi. PHP calistiran hosting diye de biliyor olabilirsiniz. PHP bir core ve etrafinda saz arkadaslari (extensions) olan bir program. Bakin yine dependency yani bagimli paket yonetimi ile karsilastik.

    Genelde debian ve turevi ubuntu gibi sistemlerde apt-get install php5 diyip yukleyebilirsiniz. Sonra extensionlari yuklemek icin apt-get install php5-curl php5-mcrypt vb. diyebilirsiniz. Bu sekilde linux sisteminiz PHP ozelliklerini kazanir. Zaten siz paket kurmayi linux ogrenirken cozmustunuz. Simdi bir de PHP'nin apache ile konusmasini saglamak icin libapache2-mod-php5 paketi kurmak sizi yoracak bir is degil.

    PHP bir suredir ( ben 15 yildir kullaniyorum ) built-in server diye bir ic sunucuya sahip. Bunu da terminalde php -S localhost:8000 gibi tetikleyip aktif edebiliyorsunuz. Fakat bu durumda apache2 veya nginx gibi sunucularin kutuklerinde tanimlayabileceginiz on degiskenler,loglar veya izin ayarlarini ayarlayamaz ve saglikli bir sunucu yayini yapamazsiniz. Bu yuzden linux ogrenirken apache2 ve nginx ogrenmis olmaniz cok iyi olacakti. Cok buyuk bir is degil korkmayin. Bir iki dizin tanimi o kadar.

    PHP ile beraber filecache modasinin coktan gectigini hatirlatip redis vb. bir cache database ogrenmeniz iyi olur onu da hatirlatayim. ( benim tavsiyem Redis)

    Simdi buraya kadarki bolumlerde anlattigim seyler artik python, ruby, nodejs, scala da ogrenseniz hemen hemen benzer isler. Bazen ruby'de oldugu uzere composer turevi paket yoneticisi gem otomatik yuklu gelir yuklemezsiniz, bazen de c# icin framework zaten default vardir.

    PHP naz eder
    PHP nazli bir dildir. Ornegin bir fonsiyonu ile bir degiskende bir yazi sinirlayacaksiniz. Buradaki aranacak, yeni hedef ve degiken siralamasi baska bir fonsiyonunda yer degistirebilir. Bu ciddi elestri alan yanlarindan ve haklida bence insanlar. Fonsiyon isimlerinde ve saz arkadasi extension fonksiyonlarinda cidden bir standart karmasasi var. Bu yuzden kendinizi PHP Storm gibi bir IDE ile desteklemeniz oldukca isinize yarayacaktir.

    ECHO, IF, WHILE, FOREACH vb. ivir zivirlar bu isin alfabesidir. Bunlari ogrenin. Iyi ogrenin. Akabinde atama operatorleri hakkinda bilginizi arttirin. Sonra diziler ve data objeleri hakkinda denemeler yapin. Diziler cok onemli beyler. Dizisiz adam akilli data kapsulleyip aktaramaz, databaseden gelen matrisleri duzgun okuyamazsiniz. Komutlar alfabe ise dizilerde sifat, ozne, yuklem gibi biraz basitte olsa isin grammeri diyebiliriz. Onlari sevin sayin.

    Function yazin. Bol yazin. Baslarda functionlar ile islerinizi nasil kisalttiginizi gorun. Sonra daha cok function ile basiniz agrimaya baslasin. O neydi bu neydi karistirin. Kod aciklama satirlarini sik kullanin. Sanki baskasi okuyacak gibi yorum yazin.

    PSR Standartlari

    Internette bir belge geziyor. FIG diye bir grup mu nedir bir kod standardi cikardilar. Guzel isler. Tab yerine bosluk olsun, parantez acilsin, thernatory ( kisa if ) soyle yazilsin falan diyorlar. Aslinda bu adamlarin dedikleri kodu yazana degil okuyacak adama yariyor. O yuzden onemli. Github'ta reponuza bir pull request geldiginde dur cekeyim makine merge edip okuyayim diyemeyebilirsiniz. O yuzden duzgun yazilmis kodu githubda okumak daha rahat olacaksa boyle standartlara ihtiyacimiz var. Ben ekipte cok kasmadim ama muhim mesele goz atin anlayin lutfen.

    Object Oriented Programming
    Pek cok isinizi bu tur bir programlama yapmadan PHP ile yaparsiniz. Fakat is biraz daha buyuyecek ve birden cok programci calisaksa orada bir nesne dunyasina goz atmali. Class, instance, method gibi kavramlari anlatin. Sonra inheritance, polymorphizm gibi temel object oriented kavramlarini cozun. Global, yerel, sinif degiskeni nedir anlayin. Bence PHP'de uygulamasi zor olsa da SOLID prensipleri mutlaka uyulmali. Onlara bakmalisiniz. Akabinde OOP icinde bazi oturmus kaliplar oldugunu farkedebilirsiniz. Bunlar desing patternler. Decorator, Factory vb. bir takim standart kod yapilari var. Bunlar yillarin tecrubesi ile olusturulmus ve cok iyi yapsaniz ortaya yine bu cikiyor OOP icinde diyebiliriz. O yuzden OOP yapilarinizi bu patternlari anlayarak daha mukemmel yapacaginizi hatirlatayim.

    Test Driven Development ve digerleri
    Isler buyudu. Koskoca garanti bankasinin tum sistemini aldiniz yaziyorsunuz. Nesneler classlar dolarlar havada ucuyor. Paralari say say diyorsunuz fakat bir bug var. Arkadas hangi senaryoda cikiyor bu bug bulamiyorsunuz. Iste orada bu isin basinda bir hata yaptik galiba diyebilirsiniz. Koca ekip is duruyor dusunsenize masrafi. Boyle buyuk islerde hayati kolaylastirmak icin iste once testi yaz sonra onu gececek kodu yaz demisler. Aslinda bu surec programcilara algoritmayi daha iyi anlatma yolu. Tam anlatma demiyorum cunku testleride bir programci yaziyor nihayetinde. Umarim hem testi hem kodu yazmak zorunda kalmazsiniz. Cok yorabilecek bir is cunku. Bence kodu yazmak daha eglenceli. Testler turlu turlu. Birisi Unit test ( PHP Unit iyidir ) otekisi Behavior Testleri. Ayrica bunlarin hepsi bir araya gelip aslinda bir Acceptance Test olusturmus oluyorlar. Muhtemelen buralara gelmeden programciligi birakacaksaniz. Fakat asil heyecan buralarda basliyor

    Framework Meselesi
    OOP iyi guzel, TDD yazdiniz aldiniz yurudunuz fakat ise her aldiginiz adama bir yazilim yapisi dokumantasyonu anlatmak yoruyor sizi. Kadere bak ki document driven development yapmadiniz ve once dokumani sonra testi sonra kodu da yazmadiniz. O kadar finans zaten yoktu firmada. Is cikacakti maglum burasi Turkiye. Iste o zaman bilindik yapilar ustunden adam aranmaya baslanir. OOP'nin MVC vb yapilara nasil uygulandigini iyi standardize eden yapilara framework diyoruz.

    Framework meselesi oldukca cafcafli bir mesela. Zira PHP dunyasi bos adamin bol oldugu ve ogrendigi ilk dilde kendini kanitlamak icin yanip tutusan adamlarin dunyasi. Onune gelen bir MVC framework patlatir.

    CodeIgniter, CakePHP, Laravel, Zend, Symfony. Yii ilk anda aklima gelenler ama PHP dunyasi bu konuda cok genis. Hatta performansi makine diline yakindasayip kazaniriz diyen ve PHP extension framework yazan ( benim hiiiic desteklemedigim ) Phalcon gibi fwlerde var. Isi cok karmasiklastiran Flow3 gibi pek cogunuzun duymadigi alman isi yapilarda var. Ben kendi adima PHP dunyasi icin Symfony ve Silex diyorum. Fakat siz Kariyer.netteki ilanlarda bol bol Laravel goruyorsunuz. O da sektorumuzun bana gore sigligi, populer kulturun halt etmesi.

    Laravel tayfasi ve kankileri envatocular. Burada bir uyari yapayim. Bu arkadaslar zamaninda wordpress vb. sistemlerin temasini plugini sata sata ( ki hala oyle ) zengin oldular. Cakma ajans programcilari veya tasarimcilari hosting panelinden wordpress kurup sonra icine theme, plugin ekleyip musterilerine janjanli fiyatlardan satip nasilda isler yaptik diye eglendi bunlar sayesinde. Fakat bunlar bos durmayip pazari genisletmek icin bir atak yaptilar. Adi da Laravel framework. Aslinda PHPnin kendisinin de yaptigi uzere tamamen taklite donuk bir yapiydi ama oyle cafcaflayip sundularki Laravelle her isi yaparim abiciler cikti ortaya. Sonra saniyorum 5. surumde isler 4. surumdeki gibi olmayinca bir kitle kaybi yasadi. Bunlari anlatmamin nedeni neden sana gore laravel degil demeyin diye. Bu frameworkten para kazanma isini daha usturuklu ve mantikli konseptte yapan ise Symfony oldu. Hem arkasina bir firma, egitim destegi koydu. Hem de dogru duzgun yapisini composer gibi araclarla saglikli sekilde desteklemeyi basardi. Ozetle PHP temel komutlari sonrasinda hic bir MVC yapisi framework ogrenmeyip hemen Symfony'e daliyorsunuz. Biraz ilerleyip dependency injection veya service nedir ogrenince ardindan Silex neymis diyorsunuz. Zaten icerlerinde doctrine ORM ile karsilacaksiniz. Kocaman bir ORM'in aative cache desteginin Redise bir kac yml dosyasindaki ayarla nasil baglandigini gorecek uuu baby diyeceksiniz. Bunlar PHP dunyasi icinde en kallavi ve is goren yapilar su anda. Zend super, Yii harikacilara aldanmiyorsunuz. Bu ikisi ile PHP kullanacaginiz her boyutta isinizi yaparsiniz.

    Bu iki yazida PHP ogrenirken ve isler ilerlediginde basiniza neler gelecegine dair size alternatif bir bakis acisi kazandirmaya calistim. Fakat isler bunlarla bitmiyor. Deginmedigim veya bilmedigim cok konu da var ama suraya yazdigim satirlarin anlamlarini ogrenmek ve bir proje icinde denemek yillarinizi alir arkadaslar. Aslinda bence. 10 yil sonra geriye donup baktiginizda nereden nereye geldinizi gorur buyuk isler yapmaya olan gercek cesaretiniz artar.

    Simdi gelelim asil neden BASLAMAYIN dedigim yere. Cunku burada anlattigim kavramlar esliginde ( symfony'i rails, silex'i sinatra olarak degistirin ) Ruby ogrenin. Ayni surecler ayni ogrenme metodu zaten. Fakat dilin kullanilabilirligi bence bir harika. Isterseniz once PHP ogrenin para kazanicam diyorsaniz sonra Ruby ogrenin. Ama 10 yil sonra bile olsa Ruby ogrenin derim. Cok canavar bir dil ve framework. Ayrica kitlesi de cok zeki insanlardan olusuyor.

    Surcu lisan ettiysem affola mi deniyordu ?

    Kalin saglicakla...