Jangan katakan bahwa Anda tidak suka itu atau pandangan saya tentang belajar

Halo semuanya. Saya ingin menyampaikan pendapat saya tentang pelatihan pemrograman modern. Artikel ini akan berbicara tentang PHP, sedikit tentang kerangka kerja dan sedikit tentang sepeda. Tapi saya pikir itu berlaku untuk bahasa pemrograman apa pun. Mari kita mulai.


Ingat kode PHP pertama Anda?


Tidak, bukan yang ini:


<? echo "Hello world"; //       index.php :) ?> 

Dan yang ini:


 <? include "db.php"; if ($_GET['id'] > 0){ mysql_query("SELECT * FROM `posts` WHERE id = {$_GET['id']}"); }else{ mysql_query("SELECT * FROM `posts` ORDER BY `id` DESC"); } ?> 

Seiring waktu, kami tumbuh, kami mengembangkan pemahaman tentang OOP (ha ha) dan kami mulai menghasilkan sesuatu yang serupa dengan ini:


 <?php require "db.php"; if ($_GET['id'] > 0){ $db->query("SELECT * FROM `posts` WHERE id = {$_GET['id']}"); }else{ $db->query("SELECT * FROM `posts` ORDER BY `id` DESC"); } ?> 

Kemudian kami mendengar bahwa mysql_ * tidak dapat digunakan dan semua orang menggunakan mysqli_ *, karena ini lebih keren. Kami menulis ulang kode kami untuk menggunakan mysqli. Setelah beberapa waktu, kami belajar tentang PDO.


Secara paralel, kami bekerja dengan variabel global dan kelas seratus baris dalam setiap metode. Apakah Anda terbiasa dengan kelas Pengguna, yang dapat mendaftarkan pengguna, mengautentikasi (ya, tentu saja, kami masih belum tahu bedanya!), Pulihkan kata sandi? Saya tahu Kelas Pengguna kami dapat mengedit pengguna mana pun, karena kami memiliki metode super untuk ini:


 // PSR? ,  . class User { public function changeUserProfile($userId, array $userData){ global $db; //    $db->query("UPDATE `user` SET ...."); } public function login($userId){ } public function logout(){ //     <a href="/logout.php"></a> :) } } 

Dan saya juga punya kelas Db, Posting dan Komentar.


Kami terbiasa dengan injeksi SQL, serangan XSS, dan:


  DROP TABLE `posts` 

SOLID, PSR, MVC dan pola bukan hanya kata-kata


Kami pergi dengan cara ini sendiri, belajar tentang SOLID, PSR, MVC. Bagi kami, ini bukan hanya kata-kata, tetapi kebutuhan mendesak, terutama setelah warisan yang mengerikan dan tumpukan kode, masing-masing kelas yang ditulis dalam gayanya sendiri. Kami menginjak ribuan garu, menulis sebanyak sepeda, dan sebagai hasilnya, mulai menulis kode yang kurang lebih memadai.


Kami tidak lagi menggunakan variabel global dan superglobal di kelas kami, untuk SQL kami menggunakan kueri yang disiapkan dan tidak menempatkan SQL di pengontrol (kami juga tidak lagi memiliki UserModel :: login ()). Kami mengimplementasikan objek yang diperlukan menggunakan DI, tetapi tidak membuatnya di dalam kelas. Kami menggerakkan Permintaan / Tanggapan, bukan gema "halo dunia" dan kami tahu mengapa kami melakukan ini. Kami menguji kode kami tidak hanya menggunakan browser, tetapi juga menulis tes sintetis. Berapa harga ini? Saya memiliki masa kanak-kanak dengan komputer, puluhan malam tanpa tidur, karena banyak fakap dan database yang rusak.


Dan saya juga mengerti sejak awal mengapa $ _POST dalam model buruk.


Bukankah kamu orang seperti itu? Saya telah.


Jadi itu sebelumnya. Tapi tidak sekarang


Sampai sekarang, saya tidak dapat mengerti apakah mod baru untuk kursus pengembangan PHP jahat atau tidak. Di satu sisi, orang ditawari dalam waktu singkat untuk segera belajar cara menulis kode mereka dengan benar, tetapi di sisi lain, orang tidak mengerti mengapa ini adalah cara yang benar untuk menulis. Seluruh lapisan pengetahuan hilang, dasar, yang kemudian harus dibuat dengan cepat.


Sekarang mereka menawarkan banyak kursus. Hanya dalam beberapa jam, Anda akan belajar cara menulis di Laravel, Yii2, atau kerangka kerja lainnya. Tidak tahu dasar-dasar PHP dan OOP? PSR untuk Anda Prosto Sdelay Raboty? Tidak masalah, kami akan mengajari Anda, hanya 19.990 rubel. Seseorang membayar dan berpikir bahwa ia akan diajar untuk menulis dengan segera. Apakah Anda langsung menulis?


Saya mulai memperhatikan bahwa karena alasan tertentu orang berhenti memahami database (bekerja dengan database, fungsi, OOP, startup, refleksi, bekerja dengan file, jaringan, dan sebagainya), dan mereka beralih langsung ke kerangka kerja. Mereka tidak tahu cara kerjanya dari dalam, mereka hanya menulis tentang kerangka kerja, dan tidak dengan bantuan. Mereka tidak khawatir tentang apa yang dilakukan File :: save (), kekuatan enkapsulasi adalah sama. Dan itu tidak menarik. Dan jika ada sesuatu yang tidak ada dalam kerangka kerja ini, maka fungsi ini tidak dapat dilakukan.


Tetapi saya tidak setuju dengan pendekatan belajar ini. Bersepeda adalah cara terbaik untuk memahami teknologi apa pun (well, itu akan dimulai sekarang). Berbicara entah bagaimana sambil minum kopi, saya berkata dengan pikiran konyol: jika Anda ingin memahami PHP, tuliskan CMS Anda dengan plugin, permisi, ext. bidang dan panel admin. Dan kemudian saya berpikir. Atau mungkin idenya sama sekali tidak bodoh?


Bagaimana cara belajar melalui kerangka kerja?


Jadi, kami menggunakan komposer create-project ...., lalu kita pergi ke .env, kita memperbaiki akses untuk DB, lalu kita letakkan kelas controller di sini, kelas model di sini, kelas templat di sini. Kami sepertinya telah belajar, tetapi kami tidak mengerti cara kerjanya dari dalam. Sedikit berlebihan, tapi apa adanya.


Saya bertemu dengan beberapa orang yang mengatakan bahwa mereka menulis pada kerangka kerja. Tetapi pada saat yang sama mereka tidak tahu dasar-dasarnya. Satu orang, dengan sangat serius, mengatakan kepada saya bahwa dia tidak tahu fungsi array_map.


Oke, apa yang akan diberikan motor kita?


Setidaknya kita akan berkenalan dengan autoload file dan kelas. Kami belajar bahwa ini dapat dilakukan dengan menggunakan komposer, daripada menulis spl_autoload_ Anda ... Kami akan belajar cara membuat koneksi database, menggunakan refleksi kita akan belajar bagaimana membangun sistem plug-in kami dan memahami mengapa \ $ _ DAPATKAN dan \ $ _ POST dalam logika bisnis buruk. Kami akan pergi jauh dari Request to Response. Kerangka kerja seperti ini bagi kita.


Ya, hampir semua kerangka kerja ditulis dengan sempurna. Dalam proses belajar, Anda harus memperhatikan bagaimana ini atau hal-hal lain yang telah mereka lakukan. Jika Anda menulis "kerangka kerja mega" Anda, Anda harus melakukan rekayasa balik dan memahami cara kerja Yii2 atau Laravel yang sama. Dan mungkin Anda akan terpana ketika mengetahui bahwa Laravel hanyalah sekelompok komponen. Efek sampingnya adalah pemahaman yang mendalam tentang kerangka kerja dan arsitektur internalnya. Dan dalam mode ini, menurut saya, pemahaman datang jauh lebih cepat. Setidaknya secara pribadi bersamaku.


Setelah menginjak semua penggaruk, kami akan memahami secara mendalam mengapa pendekatan dan pola desain ini atau yang digunakan, terutama ketika Anda perlu memperluas, memelihara, dan menguji kode Anda.


Di forum dan jejaring sosial, mereka hanya membahas bahwa sepeda itu buruk. Ketika saya melihat artikel di beberapa situs di mana seseorang berbicara tentang proyek rumahnya, apakah itu jejaring sosial, blog atau situs dengan katalog kucing, yang ia tulis dari awal atau pada komponen individual, saya sedikit senang. Seseorang belajar dari pangkalan dan itu bagus!


Lagi pula, bagaimana lagi belajar? Apakah Anda segera mulai menulis kode yang berfungsi dan akurat tanpa kesalahan? Saya tidak, saya menulis ribuan baris kode sebelum saya menyadari apa yang terjadi. Meskipun mungkin saya tidak mengerti, tetapi apakah itu semua tampak bagi saya?


Tetapi lebih baik menulis sepeda Anda di rumah, memahami teknologinya, memahami apa itu, bahkan mungkin menemukan solusi siap pakai pada pembuat paket, daripada menulis sepeda Anda saat produksi.


Artikel dari mail.ru sangat dekat dengan saya: PHP modern tanpa kerangka kerja , di mana penulis ingin menunjukkan perangkat semua kerangka kerja dan apa itu sebenarnya.


Baru-baru ini, banyak kode Legacy dari tahun 2000 telah menjadi dalam hidup saya. Proyek ini sudah tua, tetapi menarik. Yang juga perlu ditransfer ke rel baru (jika menarik, saya pasti akan memberi tahu). Itu terlihat hampir sama dengan kode di awal artikel: tata letak, sql dan logika dalam satu file. Tapi saya memiliki suntikan warisan. Saya tahu bagaimana cara bekerja dengannya dan bagaimana cara memperbaikinya. Tapi apa yang akan dilakukan seseorang yang hanya bisa menulis tentang kerangka kerja?


Dia tidak akan menghadapi proyek seperti itu :)

Source: https://habr.com/ru/post/id470087/


All Articles