시스템을 100 % 데이터로 구동 할 수 있습니까?


44

저의 새로운 상사는 수년간이 프로젝트를 진행해 왔습니다. 나는 단지 몇 주 동안 여기에 있었지만 그것이 가능한지 확실하지 않습니다. "100 % 데이터 기반"시스템을 설계하려고합니다.

따라서 충분한 데이터를 입력하면 모든 응용 프로그램을 정의하고 생성 할 수 있습니다. 나는 적어도 그와 같이 사용자 또는 일부 앱이 미리 정의 된 값을 가져야한다고 인정했지만 시스템 구조, 사용자 인터페이스 및 논리가 모두 데이터로 저장되는 개념을 좋아합니다.

간단한 것들에 대한 데모가 있으며 기본적으로 객체 지향 프로그래밍과 기본 템플릿 시스템에 대한 간단한 아이디어를 재발견했지만이 목표는 실제로 불가능할 것이라고 생각합니다.

어쨌든 실제 프로그래밍을 수행하는 시스템이 너무 복잡하지 않고 데이터를 사용하여 논리를 정의하는 방법을 모르겠습니다.

이론적으로는 데이터를 해석하는 것이 응용 프로그램을 설명하기 위해 완전히 터져 나갈 필요가 없기 때문에 문제를 한 단계 높은 순이익으로 전환했습니다.

이러한 100 % 데이터 기반 애플리케이션이 가능합니까?


4
자신의 프로그래밍 언어를 작성하는 경우에만. 이와 비슷한 응용 프로그램을 많이 작성해야하는 경우 더 나은 라이브러리, 더 나은 아키텍처 또는 극단적 인 경우 DSL (Domain Specific Language)이 필요할 수 있습니다.
Michael K

6
더 구체적인 방식으로 '데이터 기반'의 의미를 정의해야한다고 생각합니다.
GrandmasterB

9
Lisp와 같은 일부 언어에서는 코드와 데이터 사이에 명확한 선이 없습니다. 그 결과 데이터베이스 테이블이나 열과 함께 존재하는 데이터에 대한 지침이 포함 된 열이 생길 수 있지만, 부정 행위인지 확실하지 않습니다.
Rob

20
물론 할 수 있습니다! 데이터는 파일 시스템에 Java 소스 파일로 저장됩니다. 우리는 단지 컴파일 및 배포하고 거기에 있습니다. 100 % 유연성, 100 % 데이터 중심.
Jeremy Stein

6
@JeremyStein이 나를 이겼습니다. 데이터가 Subversion에 저장되었다고 말하고 '구성'에 대한 변경 사항이 지속적인 통합 시스템 및 기타 배포 프로세스를 통해 적용됩니다.
Mr.Mindor

답변:


46

상사는이 내용을 읽어야합니다. Bad Carma : "비전"프로젝트, 내부 플랫폼 효과 또는 두 번째 시스템 효과에 대한주의 사항.

요약

IT (정보 기술)에서 일하는 사람들은 모두 중요한 것이 옳지 않은 프로젝트에 참여했습니다. 우리는 그것을 알고 있습니다. 대부분의 사람들은 그것을 알고 있지만 아무도 설득력있는 방식으로 문제에 손가락을 댈 수는 없습니다.

이 이야기는 제가 경험 한 것 중 가장 놀라운 실패 인 IT 프로젝트에 관한 것입니다. 그 결과 중간 규모의 IT 부서가 완전히 해고되었으며, 성장하는 산업에서 성장하는 회사가 파괴되었습니다. "업 스타트"라고 부르는이 회사는 성공적이고 수익성 높은 구독 텔레비전 사업이었습니다.

이 프로젝트는 1990 년대 초에 이루어졌으며 현재 고객 관계 관리 (CRM)라고하는 것과 매우 유사한 주문 제작 주문 입력 및 고객 서비스 응용 프로그램이었습니다. 시스템의 핵심 기능은 다음과 같습니다.

  • 주문 입력 및 재고
  • 고객 서비스, 헬프 데스크
  • 총계정 원장, 채권, 청구 및 채무

이 응용 프로그램은 "비전"이라고하며 그 이름은 공식적으로 Upstart에 대한 약속뿐만 아니라 건축가에게 자체적으로 고개를 끄덕였습니다. 이 응용 프로그램은 미래의 비즈니스 변경 사항을 수용 할 수있을만큼 유연하게 구축되었다는 점에서 혁신적이었습니다. 비즈니스에 대한 예측 가능한 미래의 변화뿐만 아니라 어떤 형태로든 비즈니스에 대한 변화는 절대적으로 없습니다. 상당히 주목할만한 주장 이었지만 Vision은 마지막으로 구축 된 응용 프로그램이었습니다. 완전히 데이터 중심적이며 무한한 추상화를 제공하고 당시에는 최첨단의 객체 지향 프로그래밍 기술을 사용하여 이러한 유연성을 달성했습니다 .

미션 크리티컬 한 응용 프로그램을 만들기 위해 시작한 많은 프로젝트와 마찬가지로 개발 노력도 원래 예상보다 약 1 년 더 길었습니다. 그러나 이는 미래의 요구 사항에 적응하고 무제한의 ROI (Return On Investment)를 제공하여 영원히 지속되는 응용 프로그램 이었기 때문에 수용 가능했습니다. 응용 프로그램이 마침내 "라이브"상태가되었을 때 회사의 거의 모든 사람이 그에 많은 투자를 했으므로 문자 그대로 회사의 운명이 성공에 달려있었습니다.

그러나 전체 프로젝트가 오작동하는 경우, 다국적 기업의 핵심 비즈니스를 실행하는 미션 크리티컬 애플리케이션은 인터넷 버블 시대에 수천 개의 "닷컴 (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 : 무한히 구성 가능한 플랫폼의 아이디어는 유혹적입니다.
Robert Harvey

1
내부 플랫폼 효과는 구아바와 같은 Google 라이브러리를 상기시켜줍니다. 여기서 if 문을 사용하는 대신 코드는 수많은 Predicate 인스턴스로 채워집니다. 그건 끔찍 해요
luke1985

3
@RobertHarvey와 재미있는 빌드. 최종 사용자를 지원할 필요가없는 한;)
brianfeucht

17

대답은 그렇습니다. 완전히 데이터 중심 시스템을 만들 수 있으며 그렇습니다. 보통 나쁜 생각입니다.

완전 데이터 기반 프로그램은 모든 논리 및 구성이 다른 컨텍스트에서 데이터로 간주되는 방식으로 저장된 값으로 처리되는 프로그램입니다. 1980 년대에 생산 된 많은 4GL 제품이 다수의 양식에 입력되고 테이블에 저장되고 보고서를 통해 액세스 할 수있는 데이터 항목을 사용하여 보고서, 양식, 테이블 및 논리를 생성하는 기능을 제공했습니다. 예전에는 "숫자로 페인트"와 같은 시스템을 언급했지만 이제는 "내부 시스템"효과라고 알려져 있습니다. 좋은 이름.

이러한 시스템을 만드는 사람들은 새로운 프로그래밍 언어를 만들려고 노력하고 있습니다. 그들은 기술이 없기 때문에 잘못합니다. JVM / CLR의 관점에서 컴파일 된 Java / C # 프로그램은 단순히 데이터입니다. 이 경우 잘 수행되었습니다. 두 경우 모두 프로그래머는 언어에 관계없이 언어를 사용해야합니다.

내가 아는 한 가지 구체적인 방법이 있습니다. 필요한 각 구성 요소 (예 : 양식, 보고서, 테이블 등)의 골격을 작성합니다. 데이터 항목을 설정하여 이러한 구성 요소의 다양한 부분을 구성하는 메커니즘을 제공합니다. 선택한 기능 세트에 대해 의사 결정을 내리고 시스템에 고정시키고 해당 기능을 구성하는 기능을 구체적으로 거부합니다.

논리 연산을 코딩 할 수있는 언어도 구현합니다. 내 추천은 루아 또는 파이썬과 같은 기존 언어를 사용하는 것입니다. 논리적 작업이 필요한 모든 곳에이 코드를 포함시킵니다.

이렇게하면 각 양식, 보고서, 표 등을 구현하는 데 필요한 쓰기 양이 크게 줄어 듭니다. 시스템은 데이터 중심적인 것으로 보이지만 어느 정도의 수준입니다.

이제 새 4GL을 구현했습니다. 이런 일이 발생하면 알려주십시오. 대부분의 사람들은 음울하게 실패합니다. 나는 당신의 성취에 당신을 축하하는 첫 번째가 될 것입니다.


2
좋은 글씨. SAP (ERP 시스템)는 이러한 시스템의 전형적인 예입니다. 프로그래밍하지 않고 "구성"합니다. 중요한 일을하기에는 너무 피의 복잡한 곳으로, 주변에 전체 컨설팅 산업을 만들었습니다.
Tonny

@ 토니 : 감사합니다. SAP에 대한 직접적인 경험은 없지만 SAP / R3 및 ABAP가이 설명에 가깝다는 것을 알고 있으며 예산의 불황과 몇 배로 인해 전쟁의 주요 원인이됩니다. 여전히 회사는 돈을 낭비합니다.
david.pfx

SAP에 대한 직접적인 경험이있는 사람은 다음과 같이 말하고 싶습니다 ... (어떤 사람은 지금 망명으로가는 길을 보여줄 수 있습니까?)
shawty

6

나는 당신이 기본적으로 맞다고 생각합니다. 언어 런타임은 이미 완전히 유연한 데이터 중심 시스템입니다. 하나의 데이터 (프로그램)를 사용하여 다른 데이터에 대한 조치 방법을 결정하는 데 사용합니다. 포함 경로에서 적절한 설치 관리에 이르기까지 다른 프로그램에서 재사용하기 위해 코드를 저장하는 다중 사용자 체계가있을 수도 있습니다.

대략적으로 말하면 "스크립트 언어"는이 코드 입력을 사람이 읽을 수있는 언어 런타임입니다. 컴파일러는 사용자와 런타임 사이에 추가 단계를 배치합니다. Malbolge 및 APL 과 같은 "Joke"언어 는 어떤 형태로도 사람이 읽을 수있는 것은 아닙니다. 그러나 그것은 한 수준에서 모두 똑같으며, 인간이 읽을 수 있다고해서 모든 잠재적 사용자가 그것을 읽거나 쓸 수있는 기술을 가지고 있거나이를 개발할 것으로 기대할 수있는 것은 아닙니다.

일반적으로 최종 사용자에게 언어 런타임을 직접 노출시키지 않는 데는 충분한 이유 가 있습니다. 가장 큰 장점은 유연성을 제거하면 편의성이 향상된다는 것입니다.

SO 게시물을 입력하려면 입력하고 싶습니다. 대신 C ++ 프로그램을 작성하여 출력 할 수는 있지만 일반 텍스트 상자 대신 C ++ 프로그램 편집기를 노출시키는 웹 브라우저를 사용하지 않습니다. C ++을 모르는 사람들은 브라우저를 사용할뿐만 아니라 사용할 수 없었습니다.

그때 특정 비즈니스 매개 변수를 구성하려면 나는 반드시 튜링 완전한 사양 언어를 사용하고, 그렇게하고 싶지 않아 내가 한 경우에도 이 아마 다른 프로그램에서 "하드 코딩"그 같은 비즈니스 매개 변수에서하지 구별 언어. 당신은 여전히 ​​당신이 쓰고있는 것이 당신이 원하는 것을 의미 하는지를 고려해야합니다. 변경 사항이 올바른지 테스트해야합니다. 즉, 사소하지 않고 구성 할 수 있도록 특수한 하위 시스템 ( "응용 프로그램")을 준비한 프로그래밍 기술 있는 사람 예상하지 않은 작업에는 여전히 프로그래밍 기술이 필요 합니다 ( "사용").

따라서 100 % 데이터 중심 시스템을 시작하려고한다면 올바른 데이터가 주어지면 무엇이든 할 수 있습니다. 두 가지 질문이 있습니다.

  1. 우리는 프로그래밍 언어를 개발하는 사업을하고 있습니까?
  2. 새로운 프로그래밍 언어가 기존의 언어보다 더 좋을까요 (필요에 따라 지원하고 개발할 예정입니까)?

때로는 대답이 그렇습니다. 그리고 여러분은 어떤 종류의 도메인 특정 언어를 작성합니다. 또는 Sun / Microsoft / Stroustrup / van Rossum / 많은 다른 사람이라면 실제 범용 프로그래밍 언어 일 수도 있습니다. 때로는 대답이 '아니오'이고 '내부 플랫폼'효과가 있습니다. 많은 노력과 시행 착오 끝에 무언가가 생깁니다. 운이 좋으면 작성한 프로그래밍 언어보다 약간 열등하므로 사용하기가 쉽지 않습니다.

일부 언어는 다른 언어보다 사용하기가 어렵거나 더 쉽습니다. 특히 R과 같은 목적에 특화된 경우 일부 사용자는 훨씬 쉽게 찾을 수 있습니다. 아마 당신이하지 않을 것, 일반적인 응용 프로그램을 기본적으로 쉽게 만드는 것입니다. 언젠가는 세상에 여러 사람 / 조직이있을 가능성이 있지만, 상사 / 회사는 자신을 포함하는지 여부를 정직하게 고려해야합니다.

Lua 바인딩을 게임 엔진에 노출시키는 게임에 종종 사용되는 트릭이 있습니다. 이를 통해 설계자는 비교적 쉬운 언어로 프로그래밍 할 수 있지만 성능에 필요한 경우 나 엔진 또는 플랫폼의 특정 기능에 액세스 할 수있는 "실제"프로그래머를 참여시킬 수 있습니다. 결과적으로 Lua 스크립트는 엔진에 관한 한 "데이터"입니다. 구성 데이터와 달리 "논리"라고 부르는 부분을 모두 포함 할 필요는 없으며 모든 게임 플레이가 아니라 모든 플롯과 환경을 정의하는 경우가 많습니다. 이것은 100 % 데이터 중심이 아니며 확실히 100 % 오류가 없지만 흥미로운 실질적인 타협입니다.


잘 넣어 100 % 데이터 중심의 시스템에 가장 가까운 것은 시스템 프로그래밍 언어입니다. 그리고 우리는 이미 그것들을 가지고 있으므로 이제 우리가해야 할 일은 현재 필요한 실제 기능을 제공하기 위해 텍스트 문 형태로 실제 데이터를 제공하는 것입니다.
RBarryYoung

4

나는 이것이 목표였던 회사에서 일했다. SQL 스 니펫은 데이터베이스 테이블에 저장되어 런타임시 읽고 실행되었습니다. 상상할 수 있듯이 성능은 끔찍했으며 버그가 자주 발생했습니다. 스택 트레이스 나 인생을 편하게 만들어주는 다른 것들도없이 디버깅도 불가능했습니다.

"데이터 중심 프로그래밍"은 프로그래머로서 우리가하고있는 일에 대한 근본적인 이해 부족에서 비롯됩니다. 알고리즘수행 할 수있는 모든 데이터 는 사용자 인터페이스에서 두 가지 아이디어를 섞어 놓은 경우에도 실제로는 "프로그래밍"입니다. 그렇다고해서 두 가지 아이디어를 다른 방향에서 결합하여 모든 코드가 데이터가되도록하는 것은 아닙니다. 이것이 lisp의 전제입니다. 이것은 균질성에 의해 가능 해지고 매크로 시스템에 의해 이용됩니다. 예, 이러한 개념은 비슷하게 들리지만 그 의미와 응용 프로그램은 실제로 매우 다릅니다.

또한 이것은 편집 적 일 수 있지만 "완전히 데이터 중심"프로그래밍을 원하는 곳은 프로그래머에게 가치가 없습니다. 코드를 코스트 센터, 아웃소싱 또는 무시할 대상으로 생각합니다.


도메인 특정 언어 시스템을 사용하여 양식, 보고서 등을 훨씬 쉽게 작성할 수있는 시스템으로 작업했습니다. 이를 통해 일부 전문가 사용자는 이러한 일을 스스로 수행하는 방법을 배울 수있었습니다. 또한 런타임 모듈을 수정하여 모든 사이트에서 버그를 수정할 수 있으며 다른 고객을 위해 특별히 구성된 것을 망칠 필요가 없음을 의미했습니다. 저는 비용 센터를 프로그래밍하는 것이 코딩을 아웃소싱하는 올바른 비즈니스 이유이거나 회사를 파괴하는 가장 좋은 방법이라는 생각에 동의합니다.

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 댓글 주셔서 감사합니다; 더 명확하게하려고 답변을 업데이트했습니다. 여전히 명확하지 않은 경우 알려주십시오.
Mahdi

0

모든 웹 브라우저 응용 프로그램이 100 % 데이터 기반 1 으로 간주 될 수 있다고 확신 할 수 있습니다 .

물론, 웹에서 응용 프로그램을 더 간단하거나 쉽게 구축 할 수있는 것은 아니지만 실제로는 훨씬 어렵습니다.

상사에게 웹 브라우저를 재창조하고 있다고 말하면 합리적으로 복잡한 것을 구축하려면 결국 JavaScript를 재창조해야합니다.

1 플러그인, JavaScript 및 HTML5 를 무시하면 좋습니다 .


-1

예. 내가 아는 한, 소위 강력한 프로그래밍 언어이지만 본질적으로 쉘인 Mathematica 와 같은 시스템 은 상사가 기대했던 것과 비슷한 아이디어를 기반으로합니다. Wolfram Mathematica 는 이제 많은 계산 작업을 쉽게 수행 할 수있을 정도로 복잡해졌습니다.

데이터 중심은 개념입니다. 프로그래머가 간단한 방법으로 데이터를 조작하려면 데이터를 쉽게 재생할 수있는 쉘이 필요합니다. 구문을 기반으로 프로그래밍 언어 학습에 대해 이야기하기 시작하면 실제로 응용 프로그램 인터페이스 또는 단순히 셸을 배우고 있음을 이해하십시오. 쉘을 이해하면 프로그램을 구동 할 수 있습니다.

100 % 데이터 구동의 경우 컴파일러 또는 인터프리터가 쉘을 이해할 수 있으면 계산이 구동됩니다. 데이터가 가진 쉘 또는 인터페이스와 기본 구조가 동일한 경우, 데이터는 컴파일러 또는 인터프리터에 의해 구동 될 수 있습니다. 나는 Mathematica 가 내가 왜 당신에게 응답하는지에 대한 좋은 설명 이라고 생각 합니다.


1
이 게시물은 읽기 어렵습니다 (텍스트의 벽). 더 나은 형태로 편집 하시겠습니까 ?
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.