Mengapa kerangka kerja web tidak sederhana, elegan, dan menyenangkan seperti bahasa pemrograman? [Tutup]

10

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?

Ryan
sumber
2
"Saya luar biasa, saya ingin mengembangkan aplikasi komputer menggunakan bahasa-bahasa itu." Dan apakah Anda menguasai bahasa-bahasa itu? Karena siapa pun yang tahu apa yang mereka lakukan akan memberi tahu Anda tidak ada bahasa yang elegan atau menyenangkan. Mereka hanyalah alat untuk mencapai tujuan Anda, dan sebagai alat memiliki masalah dan kekurangan mereka.
Euforia
14
@Ehhoric Dengan 10 tahun pengalaman, saya tidak setuju. Beberapa bahasa yang menyenangkan untuk bekerja dengan; yang lain sakit. Dan ada beberapa yang dirancang dengan baik yang juga elegan. Namun, saya setuju bahwa mereka semua memiliki masalah sendiri.
Izkata
@Izkata 10 tahun dengan masing-masing dari mereka?
Euforia
5
@ Euphoric Sekitar 10 tahun dalam beberapa bahasa, tetapi semua jenis yang cukup berbeda (pada urutan C versus Javascript), dan sekitar 3 tahun lebih banyak. Saya telah menggunakan sepertiga dari yang disebutkan dalam pertanyaan, dan banyak lagi yang tidak disebutkan (termasuk favorit saya, Rebol). Bagi saya, misalnya, Javascript dan Rebol adalah bahasa yang "menyenangkan", sedangkan Rebol dan Lisp "elegan" (dan saya pernah mendengar Haskell juga, tapi saya tidak tahu itu). Jika Anda menggunakan bahasa yang cukup, dan berlari melawan kekuatan dan kelemahannya, pendapat "menyenangkan" dan "anggun" ini dengan cepat terbentuk dengan sendirinya.
Izkata
4
Jumlah dasar, konsep atom dalam bahasa pemrograman kecil dan mudah dipahami, oleh karena itu mudah untuk membangun alat yang elegan di sekitar konsep tersebut. Jumlah konsep tak tereduksi yang diperlukan untuk mengoperasikan interaksi web paling sederhana adalah cara yang jauh lebih besar. Masalah kompleks tidak dapat dihindarkan menghasilkan solusi yang rumit dan jelek.
SK-logic

Jawaban:

19

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.

Roman Susi
sumber
3

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.

Justin
sumber
2

Secara umum, penyebabnya mungkin beragam:

  1. Kesenjangan abstraksi lebih besar dalam kasus kerangka kerja. Bahasa prosedural / OOP modern memberikan abstraksi atas mesin tetapi membuat beberapa konstruksi mesin (seperti menetapkan variabel beberapa data / menulis beberapa data dalam unit memori, atau memanggil prosedur dll); kesenjangannya tidak sebesar itu, sementara sebuah kerangka kerja berusaha memberikan abstraksi untuk mengembangkan aplikasi web yang beroperasi dengan lebih banyak konsep.
  2. Kerangka kerja bisa lebih kompleks dari sudut pandang programmer; ini seperti konsekuensi dari poin pertama. Bahasa pemrograman agak sederhana, ia memiliki konstruksi sederhana (jika, untuk, variabel, prosedur dll.). Juga pustaka standar abstrak hal-hal sederhana seperti menulis ke IO, atau menggunakan koleksi. Pustaka standar juga sangat termodulasi, dengan sedikit atau tanpa koneksi antara modul dengan yang lain; Anda tidak perlu tahu IO untuk menggunakan koleksi atau sebaliknya. Perlu dicatat bahwa jika beberapa bagian dari perpustakaan standar agak rumit, mereka ditempatkan dalam mini-framework (mis. Java Collections Framework atau framework Executors). Dalam hal kerangka Anda perlu tahu seluruh aliran, semua bagian untuk menggunakan kerangka pada kekuatan penuhnya. Juga, kerangka kerja adalah aplikasi yang sudah dibangun;
  3. Tidak banyak sumber daya dimasukkan ke dalam kerangka kerja seperti dalam bahasa pemrograman. Saya percaya ini tidak perlu dijelaskan.
m3th0dman
sumber
0

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.

davidk01
sumber
1
Saya memberi +1 karena terlepas dari sifat postingan yang bertele-tele, itu benar dalam kerangka kerja yang belum tentu Turing-lengkap. Itulah salah satu daya tarik dari bahasa tujuan umum lengkap, kemampuan untuk melakukan apa saja jika Anda tahu caranya.
Izkata