구조적 프로그래밍: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
37번째 줄:
=== 논쟁 ===
구조적 프로그래밍의 선구적 실천가(얼리어답터)인 [[플로저]]는 구조적 프로그램 정리에 대한 그의 반응을 이렇게 설명했다.:
:''{{인용 상자|우리는 이 흥미로운 소식을 어셈블리 프로그래머들에게 알려주면서 마음을 돌려보려 하였지만, 이 덜된 어셈블리 프로그래머들은 비비꼬인 로직의 비트들을 만들어내면서 계속해서 '이런건 구조화가 안될껄?'이라고 말하고 있다. 뵘과 야코피니의 증명을 보여주어도, 우리가 구조적 코드를 성공적으로 계속해서 만들어서 보여주어도, 그들은 구조화된 프로그래밍 적응 준비를 하루도 앞당기지 않았다.''}}
 
[[1967년]], ''[[CACM (전산학)|CACM]]''에 데이크스트라의 "GOTO문의 해로움"([[Go to statement considered harmful]])라는 서한이 실렸다. 이 글에서 그는 뵘과 야코피니의 증명을 인용하면서, [[고급언어]]에서 GOTO 명령을 제거하는 것이 코드의 질을 높일 수 있다고 했다. 이 글은 주로 구조적 프로그래밍 논쟁의 시작점으로 인용된다.
 
비록 플로저가 언급했듯이 다수의 프로그래머들이 이 정리에 익숙하지 않다고 해도, 이런 프로그래머들을 양성할 가치가 충분히 있을 정도로 지난 몇년간 소프트웨어 개발은 간결성, 품질, 개발 시간의 측면에서 향상되었다. 데이크스트라는 구조의 종류를 제한하는 것이 프로그래머가 생각하는 데 집중하는 것을 돕고, 관리 가능한 절차로 분석하여 프로그램의 유효성을 더 간단히 보장할 수 있다고 했다. 그는 [[1969년]]''구조적 프로그래밍에 대한 글''에서 이렇게 썼다.:
 
:''{{인용 상자|우리는 정확한 프로그램을 작성하는 프로그래머의 직분을 수행해야 할 뿐만 아니라, 그것의 정확성을 납득가능한 방법으로 증명하는 역할도 수행해야 한다. 위에서 한 언급은 프로그래머가 작성하는 모든 것은 유효하게 구조화되어야 한다는 것에 뜻 깊은 영향을 끼친다.
(중략)
:''…프로그램의프로그램의 정확성뿐만 아니라 프로그램의 적응성과 관리성까지 내가 신경 쓰고 있다는 것이 더욱 명백해진다…'' 명백해진다.<sup>[[#References|1]]</sup>}}
 
[[도널드 카누스|카누스크누스]](Donald Knuth)는 프로그램이 입증가능성을 염두에 두고 작성되어야 한다는 원리는 받아들였으나 GOTO문을 없애는 것은 받아들이지 않았고 지금도 받아들이지 않는다. [[1974년]], 그의 논문, "GOTO문이 포함된 구조적 프로그래밍"에서 직접적인 분기를 하여 입증가능성을 희생시키지 않으면서도 더 간결하고 효율적인 코드를 작성할 수 있는 몇 가지 예제를 보였다. 카누스는 좀 더 완화된 구조 제한을 제안했다. 그것은 프로그램의 [[순서도]]를 그린다면 왼쪽에는 아래쪽으로 가는 가지(branches)만, 오른쪽에는 위쪽으로 가는 가지만 그려야하며 그 가지들이 서로 교차하지 않아야 한다는 것이다. [[컴파일러]]와 [[그래프이론그래프 이론]]에 정통해 있는 많은 사람들이 축소 가능한 흐름도(reducible flow graphs)만을 허용해야한다고 이 생각을 옹호했다.
:''…프로그램의 정확성뿐만 아니라 프로그램의 적응성과 관리성까지 내가 신경 쓰고 있다는 것이 더욱 명백해진다…'' <sup>[[#References|1]]</sup>
 
[[도널드 카누스|카누스]]는 프로그램이 입증가능성을 염두에 두고 작성되어야 한다는 원리는 받아들였으나 GOTO문을 없애는 것은 받아들이지 않았고 지금도 받아들이지 않는다. [[1974년]], 그의 논문, "GOTO문이 포함된 구조적 프로그래밍"에서 직접적인 분기를 하여 입증가능성을 희생시키지 않으면서도 더 간결하고 효율적인 코드를 작성할 수 있는 몇 가지 예제를 보였다. 카누스는 좀 더 완화된 구조 제한을 제안했다. 그것은 프로그램의 [[순서도]]를 그린다면 왼쪽에는 아래쪽으로 가는 가지(branches)만, 오른쪽에는 위쪽으로 가는 가지만 그려야하며 그 가지들이 서로 교차하지 않아야 한다는 것이다. [[컴파일러]]와 [[그래프이론]]에 정통해 있는 많은 사람들이 축소 가능한 흐름도(reducible flow graphs)만을 허용해야한다고 이 생각을 옹호했다.
 
구조적 프로그램 이론가들은 [[1970년대]] [[IBM]]의 연구원 [[할란 밀즈|밀즈]]가 구조적 프로그래밍 이론에 대한 그의 해석을 [[뉴욕타임즈]]의 인덱싱 시스템 개발자들에게 적용한 일이 있은 후에 대부분이 합의를 봤다. 이 계획은 공학적으로 크게 성공하였다. 데이크스트라가 밀즈의 해석이 출판된 것들과 다르다며 비판하였지만, 다른 회사의 관리자들까지도 구조적 프로그래밍의 채택을 지원하기 위하여 밀즈의 해석을 인용했다.