Bos baru saya telah mengerjakan proyek ini selama bertahun-tahun. Saya hanya di sini beberapa minggu, tetapi saya tidak yakin itu mungkin. Dia ingin merancang sistem yang "100% didorong data".
Jadi jika kita memasukkan data yang cukup, kita dapat mendefinisikan dan menghasilkan aplikasi apa pun. Saya telah berhasil setidaknya membuatnya mengakui beberapa hal seperti pengguna, atau aplikasi seharusnya memiliki nilai yang telah ditentukan, tetapi dia menyukai konsep struktur sistem, antarmuka pengguna dan logika yang semuanya disimpan sebagai data.
Ada beberapa demo hal-hal sederhana dan dia pada dasarnya menemukan kembali beberapa ide sederhana pemrograman berorientasi objek dan sistem template dasar Anda, tetapi saya pikir secara keseluruhan bahwa tujuan ini mungkin sebenarnya tidak mungkin.
Saya tidak tahu bagaimana Anda bisa mendefinisikan logika menggunakan data tanpa sistem menjadi begitu rumit sehingga Anda melakukan pemrograman yang sebenarnya.
Saya pikir secara teoritis itu bukan karena hal yang menginterpretasikan data akhirnya perlu menjadi turing lengkap untuk menggambarkan aplikasi sehingga Anda baru saja menggeser masalah satu tingkat lebih tinggi menjadi tidak ada manfaat bersih.
Apakah 100% Aplikasi Berbasis Data itu mungkin?
sumber
Jawaban:
Bos Anda harus membaca bagian ini: Bad Carma: Proyek "Vision", sebuah kisah peringatan tentang efek platform dalam atau efek sistem kedua.
Abstrak
Lihat juga
http://en.wikipedia.org/wiki/Inner-platform_effect
sumber
Jawabannya adalah ya, mungkin untuk membuat sistem yang sepenuhnya berbasis data dan ya, itu biasanya ide yang sangat buruk.
Program yang sepenuhnya didorong data adalah program di mana semua logika dan konfigurasi ditangani oleh nilai-nilai yang disimpan sedemikian rupa sehingga dalam konteks lain mereka akan dianggap sebagai data. Ada banyak produk 4GL yang diproduksi pada 1980-an yang menyediakan kemampuan untuk menghasilkan laporan, formulir, tabel dan logika menggunakan item data yang dimasukkan ke dalam berbagai bentuk, disimpan dalam tabel dan dapat diakses melalui laporan. Saya biasa menyebut sistem seperti "cat dengan angka" tetapi saya melihatnya sekarang dikenal sebagai efek "sistem dalam". Nama yang bagus.
Orang yang membuat sistem ini mencoba (apakah mereka mengetahuinya atau tidak) untuk membuat bahasa pemrograman baru. Karena mereka tidak memiliki keterampilan, mereka melakukannya dengan buruk. Dari sudut pandang JVM / CLR, program Java / C # yang dikompilasi hanyalah data. Dalam hal ini telah dilakukan dengan baik. Dalam kedua kasus tersebut, programmer diperlukan untuk menggunakan bahasa tersebut, apa pun itu.
Ada satu cara khusus untuk membuat ini bekerja, yang saya tahu. Anda membangun kerangka masing-masing komponen yang Anda butuhkan: formulir, laporan, tabel, dll. Anda menyediakan mekanisme untuk mengonfigurasi berbagai bagian komponen ini dengan mengatur item data. Untuk serangkaian fitur yang dipilih, Anda membuat keputusan dan membekukannya ke dalam sistem, dan secara khusus menolak kemampuan untuk mengkonfigurasi fitur-fitur tersebut.
Anda juga menerapkan bahasa yang memiliki kemampuan untuk kode operasi logis. Rekomendasi saya adalah menggunakan bahasa yang sudah ada seperti lua atau mungkin Python. Anda menyematkan potongan kode ini di mana pun operasi logis diperlukan.
Dengan melakukan ini, Anda secara substansial mengurangi jumlah tulisan yang diperlukan untuk mengimplementasikan setiap formulir, laporan, tabel, dan sebagainya. Sistem tampaknya berbasis data, tetapi hanya sampai pada titik tertentu.
Pada titik ini Anda baru saja menerapkan 4GL baru. Jika Anda berhasil melakukan ini dengan sukses, beri tahu saya. Kebanyakan orang gagal total. Saya akan menjadi yang pertama untuk memberi selamat atas pencapaian Anda.
sumber
Saya pikir Anda pada dasarnya benar. Runtime bahasa sudah merupakan sistem yang didorong data yang sepenuhnya fleksibel. Dibutuhkan satu data (program) dan menggunakannya untuk menentukan bagaimana seharusnya bertindak pada data lain. Bahkan mungkin memiliki skema multi-pengguna untuk menyimpan kode untuk digunakan kembali oleh program lain (mulai dari jalur sertakan hingga manajemen pemasangan yang tepat).
"Bahasa scripting", secara kasar, adalah runtime bahasa tempat input kode ini dapat dibaca manusia. Kompiler menempatkan langkah ekstra antara pengguna dan runtime. Bahasa "Lelucon" seperti Malbolge
dan APLtidak perlu dibaca manusia dalam bentuk apa pun. Tetapi semuanya adalah hal yang sama pada satu tingkat, dan lagi pula yang dapat dibaca manusia tidak berarti bahwa semua pengguna potensial memiliki keterampilan untuk membaca atau menulisnya, atau dapat diharapkan untuk mengembangkannya.Ada alasan bagus mengapa Anda biasanya tidak mengekspos runtime bahasa secara langsung ke pengguna akhir. Yang utama adalah bahwa menghilangkan fleksibilitas meningkatkan kenyamanan.
Jika saya ingin mengetik posting SO, saya hanya ingin mengetiknya. Saya sangat mampu daripada menulis program C ++ untuk menghasilkannya, tapi saya tidak akan menggunakan browser web yang mengekspos editor program C ++ alih-alih kotak teks biasa. Orang yang tidak tahu C ++ tidak hanya tidak akan menggunakan browser, mereka juga tidak bisa.
Jika saya ingin mengkonfigurasi parameter bisnis tertentu maka saya tidak perlu ingin melakukan itu menggunakan bahasa spesifikasi Turing-complete, dan bahkan jika saya melakukan ini mungkin tidak dapat dibedakan dari "hard-coding" parameter-parameter bisnis yang sama dalam pemrograman lain bahasa. Anda masih perlu mempertimbangkan apakah apa yang Anda tulis berarti apa yang Anda inginkan. Anda masih perlu menguji apakah perubahan itu benar. Artinya, Anda masih memerlukan keterampilan pemrograman untuk tugas apa pun yang tidak sepele dan tidak diantisipasi oleh seseorang yang memang memiliki keterampilan pemrograman yang menyiapkan sub-sistem khusus ("aplikasi") untuk Anda konfigurasikan ("gunakan").
Jadi jika Anda akan memulai sistem berbasis data 100%, yang dapat melakukan apa saja dengan data yang benar, Anda memiliki dua pertanyaan untuk diri sendiri:
Terkadang jawabannya adalah ya, dan Anda menulis sejenis bahasa khusus domain. Atau bahkan bahasa pemrograman serba guna nyata jika Anda Sun / Microsoft / Stroustrup / van Rossum / banyak lainnya. Kadang-kadang jawabannya tidak dan Anda memiliki efek "platform dalam" - setelah banyak usaha dan coba-coba Anda berakhir dengan sesuatu. Jika Anda beruntung, itu hanya sedikit lebih rendah daripada bahasa pemrograman tempat Anda menulisnya, dan tidak mudah digunakan.
Beberapa bahasa lebih sulit atau lebih mudah digunakan daripada yang lain, khususnya jika mereka dikhususkan untuk tujuan seperti R maka beberapa pengguna akan merasa lebih mudah. Apa yang Anda mungkin tidak akan lakukan, adalah membuat pemrograman aplikasi umum secara fundamental lebih mudah. Pada suatu waktu mungkin ada beberapa orang / organisasi di dunia dengan potensi untuk melakukan itu, tetapi bos / perusahaan Anda harus dengan jujur mempertimbangkan apakah itu termasuk dirinya atau tidak.
Ada trik yang sering digunakan untuk gim, yaitu untuk mengekspos binding Lua ke mesin gim. Hal ini memungkinkan desainer untuk memprogram dalam bahasa yang relatif mudah, tetapi masih melibatkan programmer "nyata" di mana diperlukan untuk kinerja atau untuk mengakses fungsionalitas khusus dari mesin atau platform. Skrip Lua yang dihasilkan adalah "data" sejauh menyangkut mesin. Mereka tidak semua perlu memasukkan banyak dari apa yang Anda sebut "logika" sebagai lawan dari data konfigurasi, dan seringkali mereka cukup banyak mendefinisikan semua plot dan lingkungan, tetapi tidak seluruh gameplay. Ini bukan 100% berbasis data dan tentunya bukan 100% bebas kesalahan, tapi ini kompromi praktis yang menarik.
sumber
Saya bekerja di sebuah perusahaan di mana ini adalah tujuannya. Cuplikan SQL disimpan dalam tabel database, dibaca saat runtime, dan dieksekusi. Performanya mengerikan, seperti yang bisa Anda bayangkan, dan bug sering terjadi. Itu juga tidak mungkin untuk di-debug, tanpa jejak tumpukan atau apa pun yang membuat hidup mudah.
"Pemrograman berbasis data" hasil dari kurangnya pemahaman mendasar tentang apa yang kami lakukan, sebagai programmer; data apa pun yang mampu membuat suatu algoritma terjadi sebenarnya adalah "pemrograman," bahkan jika Anda entah bagaimana berhasil membaur (mangle?) dua ide di antarmuka pengguna. Sekarang, ini tidak berarti bahwa Anda tidak dapat menggabungkan dua ide dari arah lain, sehingga semua kode adalah data; itu adalah premis di balik cadel, yang diaktifkan oleh homoiconicity dan dieksploitasi oleh sistem makro. Ya, konsep-konsep ini terdengar mirip, tetapi implikasinya dan penerapannya sangat berbeda dalam praktiknya.
Juga, ini mungkin editorialisasi, tetapi tempat-tempat yang saya temui yang ingin pemrograman "sepenuhnya data-driven" benar-benar tidak menghargai programmer mereka. Mereka menganggap kode itu sebagai pusat biaya, sesuatu yang akan diserahkan kepada pihak luar, atau diabaikan.
sumber
Maksud Anda bos Anda ingin Anda menulis ini:
Untuk menghasilkan ini:
Yang pertama adalah JSON dan yang kedua adalah JavaScript .
Klarifikasi
Di sinilah saya baru saja mulai. Dengan jawaban saya, saya mencoba untuk setuju dengan posting asli bahwa: Itu mungkin, tetapi Anda benar, itu hanya akan menggeser masalah satu tingkat lebih tinggi tanpa manfaat [yang jelas] .
sumber
Anda dapat berdebat dengan meyakinkan, saya pikir, bahwa aplikasi browser web apa pun dapat dianggap 100% didorong data 1 .
Tentu saja, itu tidak membuatnya lebih sederhana atau lebih mudah untuk membangun aplikasi di web, pada kenyataannya itu membuat mereka jauh lebih sulit.
Beri tahu atasan Anda bahwa dia menciptakan kembali peramban web, dan dia akhirnya harus menemukan kembali JavaScript untuk membangun sesuatu yang cukup rumit.
1 Nah, jika Anda mengabaikan plugin, JavaScript dan HTML5 .
sumber
Iya. Sejauh yang saya tahu, sistem seperti Mathematica , yang disebut bahasa pemrograman yang kuat tetapi pada dasarnya adalah sebuah shell, dibangun di atas ide yang sama seperti yang diharapkan bos Anda. Wolfram Mathematica sekarang menjadi cukup kompleks sehingga banyak tugas komputasi dapat dengan mudah dilakukan.
Data driven adalah sebuah konsep. Jika kita para programmer akan memanipulasi data dengan cara yang sederhana, kita membutuhkan sebuah shell yang mudah untuk kita mainkan dengan data. Coba pahami bahwa begitu kita mulai berbicara tentang belajar bahasa pemrograman berdasarkan sintaks, kita sebenarnya mempelajari antarmuka aplikasi atau hanya cangkangnya. Jika kita memahami shell, kita dapat menjalankan program.
Sedangkan untuk data yang digerakkan 100%, jika kompiler atau interpreter dapat memahami shell, komputasi digerakkan. Jika data memiliki struktur dasar yang sama dengan shell atau antarmuka yang dimiliki, data dapat didorong oleh kompiler atau juru bahasa juga. Saya pikir Mathematica adalah penjelasan yang bagus mengapa saya menjawab Anda dengan jawaban ya.
sumber