Bisakah suatu sistem menjadi Data Didorong 100%?

44

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?

Penyu Hebat
sumber
4
Hanya jika Anda menulis bahasa pemrograman Anda sendiri. Jika Anda benar-benar perlu menulis banyak aplikasi yang serupa, Anda mungkin perlu perpustakaan yang lebih baik, arsitektur yang lebih baik, atau dalam kasus yang ekstrim, Domain Specific Language (DSL).
Michael K
6
Saya pikir Anda perlu mendefinisikan apa yang Anda maksud dengan 'data driven' dengan cara yang lebih spesifik.
GrandmasterB
9
Dalam beberapa bahasa, seperti Lisp, tidak ada garis yang jelas antara kode dan data. Itu mungkin menghasilkan tabel atau kolom database yang berisi instruksi untuk bertindak pada data yang hidup bersamanya, tapi saya tidak yakin apakah itu curang.
Rob
20
Tentu saja kamu bisa melakukannya! Data disimpan sebagai file sumber Java pada sistem file. Kami baru saja mengkompilasi & menyebarkan dan ini dia. Fleksibilitas 100%, 100% digerakkan oleh data.
Jeremy Stein
6
@ JeremyStein mengalahkan saya untuk itu. Saya akan mengatakan bahwa data saya disimpan di Subversion, dan perubahan pada 'konfigurasi' saya diterapkan melalui sistem integrasi berkelanjutan, dan proses penyebaran lainnya.
Mr.Mindor

Jawaban:

46

Bos Anda harus membaca bagian ini: Bad Carma: Proyek "Vision", sebuah kisah peringatan tentang efek platform dalam atau efek sistem kedua.

Abstrak

Kita semua yang bekerja di bidang Teknologi Informasi (TI) semuanya berada di proyek di mana sesuatu yang penting tidak benar. Kita tahu itu, kebanyakan orang mengetahuinya, tetapi tidak ada yang bisa menggerakkan masalahnya dengan cara yang meyakinkan.

Kisah ini adalah tentang proyek IT semacam itu, kegagalan paling spektakuler yang pernah saya alami. Hal ini mengakibatkan pemecatan total departemen TI berukuran sedang, dan akhirnya menyebabkan kehancuran perusahaan yang sedang tumbuh dalam industri yang sedang tumbuh. Perusahaan, yang kami sebut "Pemula," adalah bisnis televisi berlangganan yang sukses dan menguntungkan.

Proyek ini terjadi pada awal 1990-an, dan itu adalah aplikasi pesanan-masuk dan layanan pelanggan yang dibangun sesuai pesanan, sangat mirip dengan apa yang sekarang disebut sebagai Customer-Relationship Management atau CRM. Fungsionalitas inti sistem termasuk:

  • Memesan entri dan inventaris
  • Layanan pelanggan, meja bantuan
  • Buku besar, piutang, tagihan, dan hutang

Aplikasi itu disebut "Visi" dan nama itu adalah janji yang secara resmi dinyatakan untuk Upstart serta anggukan yang membesar-besarkan diri sendiri kepada arsiteknya. Aplikasi ini inovatif, dalam hal ini dibangun agar cukup fleksibel untuk mengakomodasi perubahan bisnis di masa depan. Bukan sembarang perubahan di masa depan yang dapat diperkirakan untuk bisnis, tetapi juga perubahan apa pun pada bisnis, dalam bentuk apa pun. Itu klaim yang cukup luar biasa, tetapi Visi dimaksudkan untuk menjadi aplikasi terakhir yang pernah dibuat. Itu mencapai fleksibilitas ini dengan menjadi sepenuhnya data-driven, menyediakan abstraksi tanpa batas, dan menggunakan teknik pemrograman berorientasi objek yang mutakhir pada saat itu.

Seperti banyak proyek seperti itu yang dibuat untuk membuat aplikasi misi-kritis, upaya pengembangan berlangsung selama dua tahun, sekitar satu tahun lebih lama dari yang diproyeksikan semula. Tapi itu bisa diterima, karena ini adalah aplikasi yang akan bertahan selamanya, beradaptasi dengan persyaratan di masa depan, memberikan Return On Investment (ROI) yang tidak terbatas. Ketika aplikasi akhirnya menjadi "hidup," hampir semua orang di perusahaan telah berinvestasi begitu banyak di dalamnya sehingga nasib perusahaan bergantung pada keberhasilannya.

Namun, jika terjadi kegagalan total proyek, aplikasi misi-kritis yang menjalankan bisnis inti perusahaan multinasional tidak diizinkan kemewahan jenis pemadaman api cepat yang ditunjukkan oleh ribuan perusahaan "dot-com" di era gelembung Internet. Dalam satu bulan Visi akan "hidup", tampak jelas bagi semua orang kecuali mereka yang paling yakin dalam konstruksinya bahwa itu adalah sebuah kegagalan.

Lihat juga

http://en.wikipedia.org/wiki/Inner-platform_effect

Robert Harvey
sumber
3
+1 efek platform dalam. Saya pikir TDWTF ini merangkumnya dengan baik: thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
4
Ini lucu ketika orang gagal melihat biaya penulisan sedikit kode jauh lebih sedikit daripada membangun seluruh platform.
brianfeucht
9
@ Brianfeucht: Gagasan tentang platform yang dapat dikonfigurasi secara tak terbatas sangat menggoda.
Robert Harvey
1
Efek platform bagian dalam mengingatkan saya pada pustaka Google seperti Guava, di mana alih-alih menggunakan pernyataan if, kode diisi dengan banyak instance Predicate. Itu hanya mengerikan.
luke1985
3
@RobertHarvey dan menyenangkan untuk dibangun. Asalkan saya tidak harus mendukung pengguna akhir;)
brianfeucht
17

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.

david.pfx
sumber
2
Langgan yang bagus. SAP (sistem ERP) adalah contoh klasik dari sistem seperti itu. Anda tidak memprogram di dalamnya, Anda "mengkonfigurasi" itu. Yang sangat rumit untuk menyelesaikan sesuatu yang signifikan, yang telah menciptakan seluruh industri konsultasi di sekitarnya.
Tonny
@ Tony: Terima kasih. Saya tidak punya pengalaman langsung dengan SAP, tapi saya mengerti bahwa SAP / R3 dan ABAP mendekati deskripsi ini, dan merupakan generator utama cerita perang: apa yang salah dan berapa kali anggaran meledak. Perusahaan masih membuat banyak uang.
david.pfx
Sebagai seseorang yang memiliki pengalaman langsung dengan SAP, saya hanya ingin berkomentar ... (bisakah seseorang menunjukkan saya jalan ke rumah sakit jiwa sekarang?)
shawty
6

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 APL tidak 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:

  1. Apakah kita dalam bisnis menciptakan bahasa pemrograman, atau seharusnya?
  2. Akankah bahasa pemrograman baru kita lebih baik (untuk tujuan kita) daripada yang sudah kita miliki dan akankah kita mendukung dan mengembangkannya sesuai kebutuhan?

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.

Steve Jessop
sumber
Baik. Hal yang paling dekat dengan 100% data-driven adalah sistem adalah bahasa pemrograman. Dan kami sudah memilikinya, jadi sekarang tugas kami adalah menyediakan salah satu di antaranya dengan data aktual, dalam bentuk pernyataan tekstual, agar dapat memberikan fungsionalitas aktual yang saat ini kami butuhkan.
RBarryYoung
4

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.

asthasr
sumber
Saya bekerja dengan sistem yang membuatnya lebih mudah untuk membangun formulir, laporan, dan sebagainya dengan sistem Bahasa Domain Khusus. Ini memungkinkan beberapa pengguna ahli untuk belajar melakukan hal-hal ini sendiri. Ini juga berarti bahwa saya dapat memperbaiki bug di semua situs dengan membuat koreksi ke modul runtime dan tidak perlu mengacaukan dengan apa pun yang dikonfigurasi secara khusus untuk pelanggan yang berbeda. Saya setuju dengan gagasan bahwa menjadikan pemrograman sebagai pusat biaya adalah alasan bisnis yang tepat untuk melakukan outsourcing pengkodean, atau cara terbaik untuk menghancurkan perusahaan.
4

Maksud Anda bos Anda ingin Anda menulis ini:

[
  {
    "statement": "Assignment ",
    "variable": "App",
    "value": {
      "type": "Function",
      "arguments": [],
      "function-body": [
        {}
      ]
    }
  },
  {
    "statement": "Assignment",
    "variable": "App.prototype.action",
    "value": {
      "type": "Function",
      "arguments": [
        "data"
      ],
      "function-body": [
        {
          "statement": "Call",
          "function-name": "console.log",
          "arguments": [
            "data"
          ]
        }
      ]
    }
  }
]

Untuk menghasilkan ini:

var App = function () {};
App.prototype.action = function ( data ) {
    console.log( data );
}

Yang pertama adalah JSON dan yang kedua adalah JavaScript .

Klarifikasi

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?

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] .

Mahdi
sumber
Programmer adalah tur pertanyaan konseptual dan jawaban diharapkan untuk menjelaskan sesuatu . Melempar kesedihan alih-alih penjelasannya seperti menyalin kode dari IDE ke papan tulis: mungkin terlihat biasa dan bahkan kadang-kadang dapat dimengerti, tetapi rasanya aneh ... hanya aneh. Papan tulis tidak memiliki kompiler
nyamuk
@gnat Terima kasih atas komentarnya; Saya telah memperbarui jawaban saya, berusaha membuatnya lebih jelas. Tolong beri tahu saya jika masih belum cukup jelas.
Mahdi
0

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 .

Fred Anjing Ajaib Ajaib
sumber
-1

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.

Kehidupan
sumber
1
posting ini agak sulit dibaca (dinding teks). Maukah Anda mengeditnya menjadi bentuk yang lebih baik?
nyamuk