Ketika saya memikirkan hampir semua bahasa pemrograman - seperti C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java, dll - Saya sangat senang saya ingin mengembangkan aplikasi komputer menggunakan dari bahasa-bahasa tersebut.
Tetapi ketika saya memikirkan kerangka kerja web (saya kebanyakan menggunakan PHP) - seperti Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django, dll - Saya seperti tuhan tidak.
Mengapa tidak ada kerangka kerja web yang memberi saya konstruksi sederhana, menyenangkan, dan kuat seperti bahasa pemrograman?
Jawaban:
Saya punya pertanyaan ini selama bertahun-tahun juga, meskipun saya berada di sisi Python. Saya tidak punya penjelasan tunggal untuk fenomena ini, tapi di sini ada pemikiran saya tentang masalah ini:
Kerangka kerja web harus berurusan dengan bahasa markup XMLish - HTML, bagian dari web-triad saat ini HTML-CSS-JavaScript dengan cara client-server. Ini berarti tiga bahasa, yang saling berinteraksi, DOM peramban dan model eksekusi (dan model keamanan). Akibatnya, setiap bagian dari fungsionalitas ("modul") harus memiliki kode dalam ketiga bahasa. Untuk menambah ini, bahasa pemilih jQuery menjadi satu bahasa lagi untuk diurus.
HTML + CSS tidak memiliki model yang intuitif dan matematis untuk menempatkan objek. Bahkan Tcl / Tk adalah IMHO lebih baik dalam mendefinisikan manajer geometri. Ini mencegah programmer dari mendefinisikan rendering HTML dalam istilah yang ketat dan mengandalkan keberuntungan sebagai gantinya: "mungkin div ini akan bekerja sebagian besar waktu di sebagian besar browser". Ada beberapa perkembangan positif di sisi ini, misalnya, HTML5 dan Twitter Bootstrap.
Teknologi web telah tumbuh secara organik dan kerangka kerja telah berkembang dengannya, sehingga bentuknya tidak perlu elegan. Ini berarti programmer harus mengingat API, yang tidak optimal, akan usang, dan sebagainya
Browser web masih memiliki sedikit ketidakcocokan, dan menambahkan kompleksitas yang tidak perlu ke kerangka kerja web
Arsitektur keseluruhan berantakan. Ini adalah pemikiran terpisah dari back-end dan frontend, yang diikat bersama dengan permintaan / respons di sisi backend dan rendering berbasis data di sisi front-end. Urutan eksekusi tidak didefinisikan dengan sangat baik (sinkronisasi membutuhkan upaya) dan menempatkan gaya, skrip ke slot yang tepat diperlukan (hampir semua skrip js perlu ditempatkan sebelum akhir tag body, dan sebagainya). Caching adalah aspek lain, yang membentang dari backend ke proxy (ies) ke front-end. Dan saya bahkan tidak menyebutkan penanganan formulir!
Kerangka kerja web harus berurusan dengan sebagian besar kompleksitas ini dengan menambahkan banyak konsep dan pipa pemrosesan.
Dalam industri web, tenaga kerja biasanya dibagi antara desainer grafis, desainer web / programmer web dan programmer backend sebagai sekumpulan peran minimum. Kedua mantan tidak harus memiliki keterampilan pemrograman, sehingga mereka membutuhkan abstraksi dan alat yang berbeda, dan kerangka kerja harus memfasilitasi mereka juga
Singkatnya, kerangka kerja web mencoba untuk mengabstraksi banyak kompleksitas (menumbuhkan kompleks itu sendiri), tetapi sangat sulit untuk dicapai karena perkembangan standar yang cepat dan bagian bergerak lainnya. Bahasa pemrograman jauh lebih matang, karena biasanya tidak masalah untuk tidak menggunakan fitur baru.
Saya pikir, membuat kerangka kerja web yang nyaman hanya dimungkinkan setelah standar GUI diterapkan (mencakup berbagai mode operasi, seperti perangkat seluler) dan teknologi yang mendasarinya akan cukup stabil.
Kerangka kerja web tidak memiliki konstruksi yang sederhana karena tidak ada hal seperti itu dalam domain teknologi web. Abstraksi level bawah tentu bocor ke level yang lebih tinggi.
sumber
Saya pikir banyak hal itu berkaitan dengan keterbatasan WWW. Secara khusus, tidak ada cara untuk menyimpan keadaan antara server dan klien. Seorang klien meminta beberapa data, server menyediakannya dan koneksi ditutup. Dengan demikian, semua platform web ini harus mengumpulkan metode mereka sendiri untuk menjaga keadaan di antara panggilan server.
Saya harus membuat aplikasi web kecil sekali dan pada saat itu saya tidak pernah melakukan pemrograman server / klien. Butuh beberapa minggu bagi saya untuk mencari tahu semuanya dan bagian tersulit adalah mencoba mencari tahu di mana klien dan server berada.
Apakah ini akan berubah? Aku meragukan itu. Ini akan membutuhkan perubahan mendasar dalam arsitektur web.
sumber
Secara umum, penyebabnya mungkin beragam:
sumber
Ah, tapi Anda tahu itulah masalahnya. Kerangka kerja Turing seharusnya tidak lengkap. Mereka seharusnya terdiri dari abstraksi yang lebih terbatas yang dapat dikomposisikan bersama untuk melakukan serangkaian tugas tertentu dengan cara yang ringkas. Jadi semua kerangka yang Anda sebutkan itu tidak menyenangkan persis karena mereka tidak menyediakan serangkaian abstraksi terbatas. Mereka memberikan abstraksi bocor daripada di dan dari diri mereka sendiri membuat mesin abstrak yang lebih dari mungkin Turing lengkap. Konsep " mesin aneh " adalah hal terdekat yang saya pikirkan. Semua kerangka kerja itu adalah "mesin aneh" untuk aplikasi web dan "mesin aneh" adalah kebalikan dari kerangka kerja yang seharusnya.
sumber