Чи може система на 100% керувати даними?


44

Мій новий начальник вже багато років працює над цим проектом. Я тут лише кілька тижнів, але не впевнений, що це можливо. Він хотів би розробити систему, яка керується даними на 100%.

Отже, якщо ми вкладемо достатньо даних, ми можемо визначити та генерувати будь-яку програму. Мені вдалося принаймні змусити його визнати деякі речі, такі як користувачі, або програми повинні мати заздалегідь задані значення, але йому подобається концепція структури системи, інтерфейсу користувача та логіки, які зберігаються як дані.

Існують деякі демонстрації простих речей, і він, в основному, знову розкрив кілька простих ідей об'єктно-орієнтованого програмування та ваших основних систем шаблонів, але я думаю, що загалом ця мета може бути насправді неможливою.

Я не знаю, як ви можете визначити логіку за допомогою даних, без того, щоб система стала настільки складною, що ви все одно займаєтесь програмою.

Я думаю, що теоретично це не тому, що те, що інтерпретує дані, в кінцевому підсумку потребує вдосконалення для опису програми, так що ви просто перенесли проблему на один рівень вище до чистої вигоди.

Чи можлива така 100-відсоткова програма, керована даними?


4
Тільки якщо ви пишете власну мову програмування. Якщо у вас дійсно є необхідність написати багато подібних додатків, можливо, вам знадобляться кращі бібліотеки, краща архітектура або, в крайньому випадку, доменна мова (DSL).
Майкл К

6
Я думаю, що вам потрібно визначити, що ви маєте на увазі під "керованими даними" більш конкретним чином.
ГрандмайстерB

9
У деяких мовах, як-от Lisp, немає чіткої межі між кодом і даними. Це може призвести до таблиць баз даних або стовпців, які містять інструкції щодо дії даних, що живуть поруч, але я не впевнений, чи це обман.
Роб

20
Звичайно, ви можете це зробити! Дані зберігаються як вихідні файли Java у файловій системі. Ми просто компілюємо та розгортаємо і ось ти йдеш. 100% гнучкість, 100% керування даними.
Джеремі Штейн

6
@JeremyStein бив мене до цього. Я збирався сказати, що мої дані зберігаються в Subversion, і зміни до моєї 'конфігурації' застосовуються через систему безперервної інтеграції та інші процеси розгортання.
Містер Міндор

Відповіді:


46

Ваш начальник повинен прочитати цей твір: Bad Carma: Проект "Vision", попереджувальну розповідь про ефект внутрішньої платформи або другий системний ефект.

Анотація

Ті з нас, хто працює в галузі інформаційних технологій (ІТ), були в проекті, де щось важливе просто не так. Ми це знаємо, більшість це знає, але ніхто не може переконливо поставити свій палець на проблему.

Ця історія стосується такого ІТ-проекту, найбільш вражаючого провалу, який я коли-небудь переживав. Це призвело до повного звільнення середнього ІТ-департаменту і, врешті-решт, призвело до знищення зростаючої компанії у зростаючій галузі. Компанія, яку ми будемо називати "Upstart", була успішним і прибутковим бізнесом підписки на телебачення.

Проект стався на початку 1990-х, і це був створений на замовлення додаток для замовлення та обслуговування клієнтів, що дуже нагадує те, що зараз називають управлінням взаємовідносин із клієнтами або CRM. Основна функціональність системи включала:

  • Замовлення запису та інвентаризації
  • Обслуговування клієнтів, служба підтримки
  • Основна книга, дебіторська заборгованість, виставлення рахунків та кредиторська заборгованість

Додаток отримало назву "Vision", і це ім'я було як офіційно заявленим обіцянком для Upstart, так і самоагрегуючим кивком архітектору. Додаток було інноваційним, оскільки він був побудований таким чином, щоб він був досить гнучким, щоб прийняти будь-які майбутні зміни в бізнесі. Не просто будь-які передбачувані майбутні зміни в бізнесі, але абсолютно будь-які зміни в будь-якій формі. Це було надзвичайно чудовим твердженням, але Vision мав бути останньою програмою, яку коли-небудь будували. Цю повну гнучкість вона досягла, будучи повністю керованою даними, забезпечуючи безмежну абстракцію та використовуючи об'єктно-орієнтовані методи програмування, які були на той час передовими.

Як і багато подібних проектів, які мали на меті створити важливу для місії програму, зусилля з розробки тривали два роки, приблизно на рік довше, ніж спочатку планувалося. Але це було прийнятно, оскільки це була програма, яка триватиме вічно, адаптуючись до будь-яких майбутніх вимог, забезпечуючи необмежену рентабельність інвестицій (ROI). Коли програма нарешті вийшла "наживо", майже всі в компанії вклали в неї стільки, що буквально доля компанії залежала від її успіху.

Однак, у випадку тотальної несправності проекту, критично важливим для місії додаткам, що працюють в основному бізнесі багатонаціональних корпорацій, заборонено розкіш типу швидкого спалаху, продемонстрованого тисячами компаній «dot-com» в епоху Інтернет-бульбашки. Протягом місяця, коли Бачення пройшло "вживу", всім, крім тим, хто найбільше покладався на його будівництво, було очевидно, що це був провал.

Дивитися також

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


3
+1 ефект внутрішньої платформи. Я думаю, що цей TDWTF добре підсумовує це: thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx

4
Це смішно, коли люди не бачать, що вартість написання трохи коду набагато менше, ніж побудова цілої платформи.
Brianfeucht

9
@brianfeucht: Ідея нескінченно настроюваної платформи спокуслива.
Роберт Харві

1
Внутрішній ефект платформи нагадує мені такі бібліотеки Google, як Guava, де замість використання операторів if код заповнюється тоннами екземплярів предикатів. Це просто жахливо.
luke1985

3
@RobertHarvey і цікаво будувати. Тільки до тих пір, поки мені не доведеться підтримувати кінцевих користувачів;)
brianfeucht

17

Відповідь - так, можна створити повністю керовану даними систему, і так, зазвичай це дуже погана ідея.

Програма, повністю керована даними, - це та програма, в якій вся логіка та конфігурація обробляються значеннями, збереженими таким чином, що в іншому контексті вони розглядаються як дані. У 1980-х роках було вироблено багато продуктів 4GL, які надавали можливість генерувати звіти, форми, таблиці та логіку за допомогою елементів даних, введених у безліч форм, що зберігаються в таблицях та доступні через звіти. Раніше я називав такі системи як "фарба за номерами", але я бачу, що це стало відомо як "внутрішня система". Добре ім’я.

Люди, які створюють ці системи, намагаються (чи знають вони це чи ні) створити нову мову програмування. Оскільки у них немає навичок, вони роблять це погано. З точки зору JVM / CLR, складена програма Java / C # - це просто дані. У цьому випадку це було зроблено добре. В будь-якому випадку програмістам потрібно використовувати мову, якою б вона не була.

Є один конкретний спосіб зробити цю роботу, про яку я знаю. Ви будуєте каркас кожного з необхідних компонентів: форми, звіту, таблиці тощо. Ви надаєте механізм налаштування різних частин цих компонентів, встановлюючи елементи даних. Для обраного набору функцій ви приймаєте рішення та заморожуєте їх у системі, а конкретно відмовляєте у можливості налаштувати ці функції.

Ви також реалізуєте мову, яка має можливість кодувати логічні операції. Моя рекомендація - використовувати існуючу мову, наприклад, луа чи, можливо, Python. Ви вставляєте фрагменти цього коду, де не потрібні логічні операції.

Тим самим ви значно зменшуєте кількість письмових текстів, необхідних для впровадження кожної форми, звіту, таблиці тощо. Система, здається, керована даними, але лише до певного моменту.

На даний момент ви тільки що реалізували новий 4GL. Якщо у вас трапляється робити це успішно, будь ласка, повідомте мене про це. Більшість людей зазнають невдач. Я першим привітаю вас із досягненням.


2
Приємний запис. Класичний приклад такої системи - SAP (система ERP). Ви не програмуєте в ньому, ви "налаштовуєте" його. Що настільки кривавий комплекс, щоб зробити щось істотне, що він створив навколо себе цілу консультаційну галузь.
Тонні

@Tonny: Дякую У мене немає досвіду роботи з SAP, але я розумію, що SAP / R3 і ABAP наближаються до цього опису і є головним генератором історій війни: що не так і скільки разів бюджет вичерпався. Все-таки компанія робить купу грошей.
david.pfx

Як хтось, хто мав досвід роботи з SAP, я просто хотів би прокоментувати ... (Чи може мені хтось показати мені шлях до притулку?)
shawty

6

Я думаю, ви в принципі правильні. Виконання мови - це вже повністю гнучка система, керована даними. Він займає один фрагмент даних (програма) і використовує їх для визначення того, як він повинен діяти на інші дані. Можливо, навіть є багатокористувацька схема для зберігання коду для повторного використання іншими програмами (починаючи від шляху включення до правильного управління встановленням).

"Мова сценаріїв", грубо кажучи, є мовою виконання, коли цей вхід коду читається людиною. Компілятор розміщує додатковий крок між користувачем та програмою. Мови "жарту", такі як Malbolge та APL, не повинні читатись у будь-якій формі. Але все це одне й те саме на одному рівні, і в будь-якому випадку читабельне для людини не означає, що всі потенційні користувачі мають навички його читати чи писати, або можна очікувати їх розвитку.

Є вагомі причини, чому ви зазвичай не піддаєте мовленнєвому виконанню безпосередньо кінцевим користувачам. Основним є те, що видалення гнучкості збільшує зручність.

Якщо я хочу ввести повідомлення SO, я просто хочу ввести його. Я цілком здатний замість цього написати програму C ++, щоб вивести її, але я б не використовував веб-браузер, який відкривав редактор програм C ++ замість звичайного текстового поля. Люди, які не знають C ++, не тільки не використовували б браузер, вони не могли.

Якщо я хочу налаштувати певні параметри бізнесу, то я не обов'язково хочу це робити за допомогою мови специфікації повного Тюрінга, і навіть якщо я це зробив , мабуть, це не відрізняється від "жорсткого кодування" тих самих бізнес-параметрів у будь-якому іншому програмуванні мова. Вам ще потрібно врахувати, чи означає те, що ви пишете, те, що ви хочете. Вам все-таки потрібно перевірити правильність змін. Тобто, вам все ще потрібні навички програмування для будь-яких завдань , які не є тривіальними і не ганьблять кого - то , хто дійсно є навички програмування , які підготували спеціальну підсистему ( «додаток») для вас налаштувати ( «використання»).

Отож, якщо ви збираєтеся взяти участь у 100% керованій даними системі, яка може зробити все, що задається потрібними даними, у вас є два запитання:

  1. Ми займаємось винаходом мов програмування чи ми повинні бути ними?
  2. Чи буде наша нова мова програмування кращою (для наших цілей), ніж ті, які ми вже маємо, і чи будемо ми підтримувати та розвивати її як потрібно?

Іноді відповіді - так, і ви пишете якусь доменну мову. Або навіть справжню мову програмування загального призначення, якщо ви Sun / Microsoft / Stroustrup / van Rossum / багато інших. Іноді відповіді - ні, і у вас є ефект "внутрішньої платформи" - після великих зусиль, спроб і помилок ви щось закінчите. Якщо вам пощастило, він лише трохи поступається мові програмування, якою ви написали, і не простіший у використанні.

Деякі мови більш складні або простіші, ніж інші, зокрема, якщо вони спеціалізовані для такої мети, як R, то деякі користувачі знайдуть їх набагато простіше. Можливо, те, що ви, мабуть, не зробите, - це істотно спростити програмування загальних програм. У будь-який час, мабуть, у світі є декілька людей / організацій, які мають можливість зробити це, але ваш начальник / компанія має чесно розглянути питання про те, включає його чи ви.

Для ігор часто використовується хитрість, яка полягає в тому, щоб викрити прив’язки Луа до ігрового двигуна. Це дозволяє дизайнерам програмувати на відносно легкій мові, але все ж залучати "справжнього" програміста там, де це необхідно для роботи або отримати доступ до певної функціональності двигуна чи платформи. Отримані скрипти Lua - це "дані", що стосується двигуна. Їм не все потрібно включати велику частину того, що ви називали б "логікою", на відміну від конфігураційних даних, і часто вони в значній мірі визначають весь сюжет і середовище, але не весь геймплей. Це не 100% керування даними, і це, звичайно, не 100% без помилок, але це цікавий практичний компроміс.


Добре кажучи. Найближчим до 100% керованих даними системою є мова програмування. І ми вже маємо їх, тому тепер наша робота - надати одному з них фактичні дані у вигляді текстових висловлювань, щоб отримати їх для надання фактичної функціональності, яка нам зараз потрібна.
RBarryYoung

4

Я працював у компанії, де це було метою. Фрагменти SQL зберігаються в таблицях баз даних, читаються під час виконання та виконуються. Виступ був жахливим, як ви можете собі уявити, а помилки були частими. Налагодити також було неможливо, без слідів стека чи нічого іншого, що полегшує життя.

"Програмування на основі даних" є наслідком принципового нерозуміння того, що ми робимо, як програмісти; будь-які дані, які здатні зробити алгоритм , насправді є "програмуванням", навіть якщо вам якимось чином вдалося змішати (погладити?) дві ідеї в інтерфейсі користувача. Тепер це не означає, що ви не можете поєднати дві ідеї з іншого напрямку, так що весь код є даними; ось це передумова за ліпом, яка забезпечується його гомоніконічністю та експлуатується її макросистемою. Так, ці поняття звучать схоже, але їх наслідки та застосування на практиці дуже різні.

Крім того, це може бути редакційним, але місця, з якими я стикався, хочуть "повністю керованого даними" програмування, дійсно не цінують їхніх програмістів. Вони вважають код коштом як центром витрат, чимось піднести або знехтувати.


Я працював із системою, яка значно спростила формувати форми, звіти тощо з системою мови, що визначається конкретним доменом. Це дало можливість деяким експертним користувачам навчитися робити ці речі самостійно. Це також означало, що я можу виправляти помилки на всіх сайтах, вносячи виправлення в модуль виконання, і не потрібно возитися ні з чим, налаштованим спеціально для різних клієнтів. Я погоджуюся з думкою, що зробити програмування центром витрат є правильною діловою причиною кодування аутсорсингу, або кращим способом знищити компанію.

4

Ви маєте на увазі, що ваш начальник хоче, щоб ви написали це:

[
  {
    "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"
          ]
        }
      ]
    }
  }
]

Щоб створити це:

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

Перший - JSON, а другий - JavaScript .

Очищення

Я думаю, що теоретично це не тому, що те, що інтерпретує дані, в кінцевому підсумку потребує вдосконалення для опису програми, так що ви просто перенесли проблему на один рівень вище до чистої вигоди.

Чи можлива така 100-відсоткова програма, керована даними?

Тут я тільки почав. Своєю відповіддю я намагаюся погодитися з початковою публікацією, що: Це можливо, але ти прав, це просто пересуне проблему на один рівень вище без жодної [очевидної] користі .


Програмісти - це концептуальні питання туру, і очікуються відповіді, щоб пояснити речі . Викидання скидів коду замість пояснення - це як копіювання коду з IDE на дошку: це може здатися звичним і навіть іноді бути зрозумілим, але це виглядає дивно ... просто дивно. У дошці немає компілятора
gnat

@gnat Дякую за коментар; Я оновив свою відповідь, намагаючись зробити її більш зрозумілою. Будь ласка, дайте мені знати, якщо це все ще здається недостатньо зрозумілим.
Махді

0

Ви можете переконливо стверджувати, я думаю, що будь-яке додаток для веб-браузерів може вважатися 100% керованим даними 1 .

Звичайно, це не робить простішим або простішим створення додатків в Інтернеті, адже це робить їх набагато складніше.

Скажіть своєму начальникові, що він винаходить веб-браузер, і він, зрештою, повинен буде винаходити JavaScript, щоб створити щось досить складне.

1 Добре, якщо ви ігноруєте плагіни, JavaScript та HTML5 .


-1

Так. Наскільки я знаю, система на зразок Mathematica , яка є так званою потужною мовою програмування, але по суті є оболонкою, будується на подібній ідеї, яку очікував ваш начальник. Вольфрам Математика зараз стає досить складною, тому багато обчислювальних завдань можна легко виконати.

Дані, керовані даними, - це поняття. Якщо ми, програмісти, будемо маніпулювати даними простим способом, нам потрібна оболонка, яка нам легко грати з даними. Спробуйте зрозуміти, що як тільки ми починаємо говорити про вивчення мови програмування на основі синтаксису, ми фактично вивчаємо інтерфейс програми або просто його оболонку. Якщо ми розуміємо оболонку, можемо запускати програми.

Що стосується 100% керованих даних, якщо компілятор або інтерпретатор можуть зрозуміти оболонку, обчислення ведеться. Якщо дані мають таку саму базову структуру, що і оболонка або інтерфейс, що є, вони можуть також керуватися компілятором або інтерпретатором. Я думаю, що Mathematica - це гарне пояснення того, чому я відповідаю вам так.


1
цю публікацію досить важко читати (стіна тексту). Ви б не хотіли відредагувати його в кращій формі?
гнат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.