"스프레드 시트 프로그래밍"에 대한 사용이 보입니까? [닫은]


11

얼마 전에 저는 프로그래밍 로직을 지정하는 방법으로 스프레드 시트 (매크로 코드가 아닌 셀과 수식을 의미 함)를 사용한다는 개념을 우연히 발견했습니다. 아이디어는 다음과 같습니다.

  • 깔끔하게 정의 된 계산 흐름으로 스프레드 시트를 작성합니다 (프로 시저 또는 객체 지향 프로그래밍 스타일 대신 스프레드 시트의 "데이터 흐름"패러다임에 더 적합)

  • 입력 셀을 정의

  • 출력 셀을 정의

  • 전체를 독립형 실행 가능 클래스 (또는 함수, 프로 시저 등)로 컴파일

  • 광범위한 소프트웨어 프로젝트 내에서 일반 코드로 사용

  • 스프레드 시트를 소스 코드로 사용하여 시간이 지남에 따라 유지 관리

아이디어는 모델에 실제로 맞는 문제에 대해이 기술을 사용하는 것이며 자연스럽게 잘 문서화되고 유지 관리하기 쉬운 코드로 이어질 것입니다. 이 기술을 사용해 본 경험이 있는지, 무엇을 원하는지 알고 싶습니다. 내 마음에 들었던 응용 프로그램의 예는 일반적으로 Excel 시트의 보험 계리사에 의해 작성되고 유효성이 검사되고 유지 관리하기 어려운 프로그래밍 논리에서 나중에 코딩되는 (고통 한 과정 임) 보험료 계산기입니다.


이 질문을 마무리하는 것이 행복하지 않습니다. "yes"또는 "no"또는 "str_replace ()"와 같은 대답은 없지만 흥미로운 토론을 시작합니다. 여기에 우리가 간다 : meta.programmers.stackexchange.com/questions/5652/…
ern0

@ ern0 투어 페이지 를 확인 했 습니까? "프로그래머는 답을 얻는 것 입니다. 토론 포럼이 아닙니다 ..."
gnat

답변:


5

CLOS에 대한 Cells 데이터 흐름 확장 은 비슷한 형식을 사용합니다. 데이터 흐름과 변환을 표현하는 수식은 "소스 자료"/ "표현입니다. 객체 / 클래스 디자인의 경우 " 당신이 요구 한 것을 구축하는 다른 방법을 고려하십시오.

그리고 단지 재미를 위해 : 스프레드 시트 매크로


1
나는 이것이 OP가 생각한 것이 아니라고 확신합니다 .
zzzzBov

4
@zzzzBov는 OP의 설명과 완벽하게 일치합니다.
SK-logic

3

때로는 절차 적 또는 객체 지향 프로그래밍 스타일 대신 스프레드 시트의 "데이터 흐름"패러다임에 더 적합합니다.

솔직히, 나는 이것이 적용되는 실제 계산을 거의 생각할 수 없습니다. "데이터 흐름"프로그래밍은 많은 현대적인 프로그래밍 언어 (.NET 세계의 LINQ 또는 Perl과 Python의 목록 처리 연산자 참조)를 쉽게 수행 할 수 있으며 내 경험에 따르면 많은 것보다 훨씬 유지 보수가 쉬운 코드가 생성됩니다 유지하기 어려운 셀 참조가있는 "스프레드 시트 수식"

반면에 저와 제 동료들은 스프레드 시트 기반 (MS-Excel, 정확하게 말하면) 응용 프로그램을 많이 만들었습니다. 여기서 Excel은 입력 데이터 입력 / 입력 마스크 생성을위한 사용자 친화적 인 도구로 사용되었습니다. 또는 형식화 된 출력 또는 둘 다를 작성합니다. 이러한 모든 경우에 Excel Excel 수식을 사용하여 해당 데이터의 계산 또는 처리가 수행되지 않았거나 (부분적으로 만 수행됨) Excel 프로그램이 강력하지 않거나 완전히 잘못된 도구이기 때문에 프로그램 코드로 수행되었습니다. Excel 수식으로 가능한 것과 그렇지 않은 것에 대한 많은 지식).


2

이 기사를 읽은 이후로 나는 그 개념에 대해 생각하고왔다. 나는 확실히 있다고 생각 그것을 위해 사용.

그러한 것을 최적화하는 한 가지 방법으로 스프레드 시트는 메모리 공간과 매우 유사합니다. 또한 표시 및 인쇄 공간과 매우 유사합니다 (x, y에서와 같이). 거기에도 많은 이점이 있습니다.

유지 보수성에 주목하면 많은 아이디어가 생겼습니다. 언어 기능, 라이브러리 등으로 실제로 컴파일해야 할 것이 무엇인지 모르겠습니다. 여전히 어딘가에 미래가있을 수 있습니다.

스프레드 시트, 성적표 및 회계 "소프트웨어"에 대한 VB 스크립트 만 작성했습니다. C ++ 앱의 Excel 파일 인터페이스를 제외하고 스프레드 시트 기반으로 실행 가능한 앱을 만들지 마십시오.


1

예, 그러나 "스프레드 시트 프로그래밍"보다는 "스프레드 시트 테스트"라고 생각합니다. 예를 들어, 최근에 많은 데이터베이스 레코드에 대한 계산을 수행하는 프로젝트 기능을 작업 중이었습니다. 계산은 비교적 간단하지만 중요하므로 특별한 테스트주의가 필요했습니다. 또한, 우리가 사용하고 있던 공식은 우리의 상황에 적용하기 위해 약간의 적응이 필요했습니다.

단위 테스트를 작성하기 위해 수동으로 계산을 수행했지만 테스터와 함께 작업하면서 테스터가 엔드 투 엔드 테스트에 사용하기 위해 설명한 것과 같은 스프레드 시트를 만들었습니다. 소스 수식의 적용으로 인해 비교할 독립적 인 테스트 데이터가 없었으므로 스프레드 시트는 일종의 "이중 엔트리 부기"스타일 검사를 제공하여 코드가 정확하다는 확신을 갖게되었습니다.

예,이 기술이 스프레드 시트에서 구현하기 쉽지만 코드로 구현해야하는 경우 테스트 데이터 소스로 매우 유용하다고 생각합니다. 그러나 이러한 스프레드 시트는 "프로그래밍 로직"자체를 지정하는 데 사용되어서는 안되며 필요한 최종 결과 일뿐입니다.


1

스프레드 시트 "프로그래밍"은 일종의 데이터 흐름 프로그래밍입니다.

우리는 언어 문제가 있는데, 우리가 프로그래밍이라고 부르는 것보다 훨씬 적기 때문에 "프로그래밍"이라고 부르지 말아야합니다.

데이터 흐름 프로그래밍은 아키텍처 및 원칙으로서, 응용 프로그램이 독립 모듈의 네트워크 인 경우 서로 메시지 (데이터)를 보냅니다. 이 모델은 모든 문제에 적용 할 수있는 것은 아니며 처리 네트워크를 통해 소스 데이터 또는 스트림이 있거나 출력 데이터 / 스트림을 생성하는 소스 데이터 또는 스트림이있는 경우에만 해당됩니다. 아래 목록을 참조하십시오.

데이터 흐름 프로그래밍에는 몇 가지 유형이 있습니다.

  • 스프레드 시트 : 입력 번호는 수식으로 처리 된 다음 결과 번호와 그래프로 처리됩니다. 특수 특성 : 실행 시간은 "원샷"이며, 입력 값 (구성 요소)이 변경되면 처리 그래프의 해당 부분이 다시 실행되어 출력을 생성합니다.
  • 유닉스 파이프 : 쉘은 여러 프로그램을 시작하고 stdout-> stdin을 링크합니다. 특수 특성 : 파이프 스타일 연결 만 허용되며 그래프는 단일 대기열입니다.
  • 동기화 된 실행 : 지정된 주파수에서 프레임 또는 샘플의 처리를 트리거하는 클럭이 있습니다. 모든 구성 요소는 클럭주기마다 한 번씩 실행됩니다. 예를 들어 비디오 및 오디오 처리 시스템은 지정된 프레임 / 샘플 속도로 작동합니다.
  • 비동기 실행 : 외부 이벤트가 발생할 때까지 그래프가 유휴 상태입니다. 그런 다음 이벤트를 처리하고 출력을 생성하거나 유휴 상태로 전환합니다.

귀하의 질문으로 돌아 가기 : 데이터 흐름 응용 프로그램을 독립형 응용 프로그램으로 게시하는 것이 좋습니다. 나는 이미 그것을 만들었다. 두번 .

저와 제 친구는 홈 오토메이션을위한 프로토 타입 DF 시스템을 만들었습니다. 우리는 그래프 편집기가 없으므로 사용자가 응용 프로그램을 편집 할 수 없으며 일부 매개 변수는 구성 파일에 저장되지만 다른 것은 없습니다. DF 스크립트 언어는 C ++ 코드 (컴포넌트 생성 및 메시지 정의 목록)로 "컴파일되어"네이티브 실행 파일로 컴파일됩니다. 모듈은 C ++ 클래스 (다른 클래스, 우리 시스템에 대한 정보를 얻기 위해 Message, Dispathcer, Component (abstract), Port (abstract), ConsumerPort, ProducerPort)입니다.

또한 DF 시스템이 제공하는 이점에 놀랐 습니다. 2 분 이내에 직렬 스니퍼 앱을 만들거나 현장 에서 테스트 프로그램 만들었습니다. 램프가 하나씩 깜박입니다 (문서가 없습니다) 하드웨어 ID). 우리는 재미를 위해 MIDI와 조이패드 구성 요소를 만들었으며, 또한 가벼운 오르간을 만들었습니다 ( http://homeaut.com/under_construction/ 참조 ).

스프레드 시트의 경우 하나의 어려움 만 볼 수 있습니다. 모든 숫자와 수식 (잠재적으로 모든 셀)이 구성 요소이므로 그래프가 최종적이 아닙니다. 간단한 sum () 앱에 선을 추가하면 데이터 흐름 그래프가 변경되었음을 의미합니다. 따라서 그래프를 런타임에 "재 프로그래밍"하거나 "메타 프로그래밍"이라고합니다. Excel에서는 매크로가 작동하지만 데이터 흐름의 순도를 잃습니다.

나쁘지 않지만 완벽하지 않은 솔루션이 있습니다. PHP 백엔드가있는 AJAX 앱인 스프레드 시트를 만들었습니다. 세로 축은 시간 (일)이며 선은 구성 요소입니다. 입력 (사용자가 라인을 편집 할 수 있음), 수직 평균, 수평 평균 / 합 및 일부 도메인 별 통계 계산과 같은 구성 요소가 있습니다. 여기에는 단 하나의 문제가 있습니다 : 이것은 "일차원"입니다. 합계와 평균 및 그 밖의 것을 원하는 한 새로운 줄을 추가하고 구성 요소를 만들어서 물건을 계산할 수 있습니다. 그러나 열은 항상 일입니다 (매주 및 월 "보기"를 만들었습니다.이 데이터는 일별 데이터를 합계 / 평균으로 표시하지만 여전히 1 차원입니다). 나는 그것을 보여줄 수 없으며, 공동 작업이며 7/24를 실행하기 위해 PHP 백엔드 작업이 필요하며 호스트 공급자가 지원하지 않습니다.

따라서 내 모델 ( "수평 일"로 가장 잘 설명 될 수 있음)은 다른 종류의 문제를 처리 할 수 ​​없습니다.

이 문제를 해결하는 방법을 알고 있습니다 : tabs .

Excel에 갇혀 다른 테이블을 만들어야하는 경우 동일한 탭에서 다른 영역을 사용하거나 다른 탭을 열 수 있습니다. 또한 탭 간의 참조는 불편하므로 첫 번째 방법을 선호합니다. 탭이 겹치지 않는 창과 같은 화면에 표시되어야한다고 생각합니다.

모든 테이블에는 수직, 수평 또는 고정 축이 증가해야합니다. 수직 성장 테이블에는 모든 열에 "동일한"수식이 있고 수평 구성 요소에 열 구성 요소가 있고 고정 크기 테이블은 스프레드 시트와 같은 선 구성 요소가 있습니다.

따라서 사용자가 새 줄 / 열을 추가 할 때 새 줄 / 열은 동일한 수식을 갖습니다.

또한 스프레드 시트에서 1000 줄이 있으면 매우 동일한 수식을 1000 번 복사해야한다는 것을 싫어합니다. 그것은 버그의 원천 (일부 라인에서 이전 버전의 수식 유지), 메모리 낭비 (동일한 수식 1000x 저장).

어쩌면 내가 틀렸고이 모델에 개념 버그가 있지만 그것이 좋은 생각을 불러 일으켰기를 바랍니다.


스프레드 시트에 "행 : 열 주소 지정이 유해한 것으로 간주 됨"rant가 필요한지 종종 궁금했습니다. 모든 것이 명명 된 범위이고 수식이 범위에 적용되고 셀이 입력 / 표시로 사용되는 경우.
Sherwood Botsford

0

내 생각에는 스프레드 시트를 사용하여 계산 논리를 정의 하고이 작업을 수행하는 동안 프로그래밍 친화적 인 언어로 스프레드 시트를 설정하려고 시도합니다. 친숙하게도 cellXY 좌표 대신 이름 범위 / 참조를 사용하고 수식을 작은 조각으로 나눕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.