프로그램별 설계

ProgramByDesign

ProgramByDesign(이전의 TeachScheme!) 프로젝트는 PLT 연구 그룹의 아웃리치 활동입니다.목표는 대학 교수, 고등학교 교사, 심지어 중학교 교사까지 프로그래밍컴퓨팅에 대해 교육하는 것입니다.

역사

마티아스 펠라이센과 PLT는 1995년 1월, 그의 라이스 대학 신입생과 지역 공립 학교의 대수 커리큘럼에 대한 펠라이센의 관찰에 따라, 프로그래밍 언어의 원리(POPL) 심포지엄(Symposium on Programming Languages, PLT) 다음 날, 이러한 노력을 시작했다.그의 목표는 수학이 살아나고 디자인 지식을 컴퓨터 과학 입문 커리큘럼에 주입하는 것을 돕기 위해 함수 프로그래밍을 사용하는 것이었다.

그 노력은 리스프방언인 언어 체계 버전인 PLT 체계라는 이름의 프로그래밍 언어를 사용하기 시작했다.

이 단체는 여러 민간 재단, 미국 교육부국립 과학 재단에서 기금을 모금하여 다음을 만들었습니다.

  • 기능 프로그래밍 초보자에게 적합한 소프트웨어
  • 코스웨어: 커리큘럼, 강의 노트, 연습, 미니 프로젝트
  • 교사 양성 캠프

10년 동안, 약 550명의 교사를 위해 수십 개의 1주일짜리 연수 워크샵을 운영했습니다.2005년, Teach Scheme!프로젝트는 24명의 교사가 학생들과 함께 작품을 발표하는 기념 워크숍을 개최했습니다.

2010년 PLT는 주요 프로그래밍 언어를 PLT Scheme에서 Racket으로, DrScheme에서 DrRacket으로 개명했습니다.잠시 후 TeachScheme!를 ProgramByDesign으로 개명했습니다.

함수 프로그래밍, 컴퓨팅 및 대수학

ProgramByDesign의 출발점은 초등학교 수학과목에서, 중학교와 중등학교 수학과목에서 학생들이 컴퓨터 역할을 하는 것을 관찰하는 것이다.교사들은 그들에게 규칙을 프로그래밍하고 연습을 통해 특정 문제를 실행한다.핵심은 학생들이 순전히 기능적인 프로그램을 실행한다는 것이다.

만약 학생들이 기능적인 프로그램을 만들어 컴퓨터로 실행하는 선생님으로 바뀔 수 있다면, 이 컨텐츠는 강화될 수 있고, 학생들에게 수학과 기능적인 프로그램을 적는 것이 어떻게 생생한 애니메이션 장면과 심지어 컴퓨터 게임을 만드는지를 보여줄 수 있다.

다음은 예를 제시하겠습니다.

(요구하다 2htdp/표준) (요구하다 2htdp/이미지)  ;; 현재 시각에서 이미지를 만듭니다. (정의하다 (이미지 생성 t)    (장소 이미지 사과 50 (* 1/10 t t) 공간))  ;; 기본 이미지 이름 (정의하다 사과 (원형 3 「솔리드」 "빨간색")) (정의하다 공간 (빈집털이 100 100))  (활기를 띠다 이미지 생성) 

이 짧은 프로그램은 작은 하얀 캔버스의 위에서 아래로 떨어지는 사과를 시뮬레이션합니다.다음 세 부분으로 구성되어 있습니다.

  • 장소 이미지, 원 및 빈 장면이 있는 이미지의 대수학이 도입되었다고 가정한 수학의 한 줄 함수인 create-image에 대한 함수 정의
  • 대수 텍스트의 "x가 5가 되도록 놔두자"와 같이 이름이 값과 동일해지는 두 개의 약어
  • 프로그램 실행을 위한 한 줄

교사는 대수학 과정의 일반적인 함수만큼 쉽게 창조 이미지를 설명할 수 있다.예를 들어, 각 열의 맨 위에 t가 있고 맨 아래에 적절한 이미지가 있는 두 과 n개의 열이 있는 표를 먼저 그릴 수 있습니다.즉, 숫자가 왼쪽에서 오른쪽으로 증가하면 각 이미지에서 빨간색 점이 약간 낮아집니다.

마지막으로 애니메이션 라인은 지정된 함수 create-image를 초당 28틱의 속도로 0, 1, 2, 3 등에 적용합니다.결과 이미지는 컴퓨터 모니터에 동일한 속도로 표시됩니다.그게 영화가 만들어지는 방식이야.

이러한 예에 필요한 배경은 영화 제작 지식, DrRacket의 그림 대수(숫자에 대한 것과 같음), 그리고 최소한의 사전 대수에 지나지 않습니다.그러나 ProgramByDesign 프로젝트에서는 아이들이 정원 타일의 수를 세는 대수식보다 이러한 라이브 함수를 더 즐길 수 있다고 주장합니다 [8-9학년 프렌티스 홀 도서 참조].

ProgramByDesign 프로젝트에서는 이러한 형식의 프로그래밍을 통합함으로써 기존의 수학과 과학 코스가 모두 혜택을 받을 수 있다고 제안합니다.이러한 책에서는 기존의 BASIC 또는 Visual Basic 블록과 달리 Racket 프로그램은 수학과 같은 수의 행으로 구성됩니다.따라서 수학과 프로그램 사이를 이동하는 것은 간단하다.더 좋은 것은, 두 개의 뜻이 같다는 것이다.Dr Racket의 대수적 스테퍼는 Racket이 6학년 또는 7학년인 것처럼 평대수를 사용하여 프로그램을 단계적으로 평가하는 방법을 설명할 수 있습니다.

프로그래밍 기능 프로그래밍, 컴퓨팅 및 설계 101

ProgramByDesign 프로젝트는 프로그래밍 입문 커리큘럼에 대해 체계적인 설계의 역할에 초점을 맞춰야 한다고 강조합니다.학생들이 다시는 프로그램을 짜지 않더라도, 문제 해결에 대한 체계적인 접근이 얼마나 도움이 되는지 알아야 한다.프로그래머든 의사든 저널리스트든 사진작가가 되든 도움이 될 것이다.따라서 프로그래밍 입문 코스는 학생들이 현재 유행하고 있는(그리고 곧 쓸모없게 될) 프로그래밍 언어의 구문을 배우는 곳이 아니라 널리 적용되는 것을 배울 수 있는 곳으로 인식될 것이다.

ProgramByDesign 커리큘럼의 주요 설계 요소는 설계 레시피입니다.프로세스 차원 및 데이터 차원이라는 두 가지 차원이 있습니다.

프로세스 차원을 따라 학생들은 프로그램을 실행하고 다른 사용자가 프로그램을 사용할 수 있도록 하기 전에 (간단한) 프로그램을 설계하는 여섯 가지 단계가 있다는 것을 알게 됩니다.

  1. 프로그램에 들어가고 나오는 데이터의 클래스를 기술하는 것을 목적으로 하는 문제 분석.
  2. 문제의 스테이트먼트를 간결한 목적 스테이트먼트로 재구성하다
  3. 목적의 진술을 설명하고 성공의 기준이 되는 사례를 작성한다.
  4. 템플릿 또는 인벤토리라고도 하는 조직 구성
  5. 코딩
  6. 예를 들어 테스트 스위트를 작성하여 작은 입력에서도 프로그램이 올바르게 동작하는지 확인합니다.

테스트 중심 개발에서와 마찬가지로 테스트 사례는 테스트의 일부가 아닌 요구사항 분석의 일부로 코딩 전에 작성됩니다.

거의 모든 인간의 노력은 문제를 명확하게 이해하고, 성공을 위한 기준을 정의하고, 이용 가능한 자원과 기부를 분석하고, 제안된 해결책을 개발하고, 기준과 대조하여 확인함으로써 이익을 얻을 수 있습니다.

예를 들어, 저널리스트는 비슷한 과정으로부터 이익을 얻는다: 기사의 주요 개념을 알아내고, 제목을 만들고, 사례와 구체적인 데이터를 정리하고, 기사의 내용과 어떻게 이야기가 전개되었는지에 대한 기사를 정리하고, 글을 쓰고, 사실을 확인한다.

데이터 치수는 데이터의 모양이 코드와 테스트의 모양을 결정하는 최대값으로 요약할 수 있습니다.예를 들어, 입력 또는 출력 데이터 타입이 3개의 바리안트를 가지는 경우, 테스트 스위트에는 각 바리안트의 테스트 케이스가 적어도1개 포함되어 있을 필요가 있습니다.또한 프로그램코드에는 (다형 디스패치에 명시적이든 숨겼든)3방향 조건부가 포함되어 있을 가능성이 있습니다.입력 또는 출력 데이터 유형에 3개의 필드가 있는 경우 테스트 스위트는 이들 3개의 필드의 값을 지정해야 하며 프로그램 코드는 이들 3개의 필드를 참조해야 합니다.입력 또는 출력 데이터 유형이 단순한 베이스 케이스와 하나 이상의 자기 참조 변형을 가지고 있는 경우 테스트 스위트는 베이스 케이스와 하나 이상의 비베이스 케이스를 포함해야 하며 프로그램 코드는 아마도 베이스 케이스와 하나 이상의 자기 참조 케이스를 가지고 데이터 타입과 동일할 것이다.재귀의 기술은 신비롭고 무서운 것이 아니라 이미 학습된 방법을 자기 참조 데이터 유형에 적용하는 것입니다.

givens를 정리하는 것은 데이터의 설명을 프로그램 골격으로 변환하는 작업입니다.각 형식의 설명은 프로그램 구성의 특정 형식을 결정합니다.변화는 거의 기계적이고 학생들이 과제의 창의적인 부분에 집중할 수 있도록 도와줍니다.

HTDP(How to Design Programs)는 ProgramByDesign [1]그룹의 핵심이 작성한 교과서입니다.제3판을 [2]준비하고 있다.

프로그래밍 언어 선택

Teach Scheme!라는 이름은 이 디자인 레시피에 Scheme(현재의 Racket)가 필요하며 Scheme에서만 학습할 수 있음을 암시하는 것으로 보입니다.어느 결론도 사실이 아니다.PLT의 멤버와 연수생들은 어셈블리 언어, C, Java, ML, Python 및 기타 프로그래밍 언어 및 기하학, 생물학 및 시 강좌에서 디자인 레시피를 성공적으로 적용했습니다.ProgramByDesign의 기본 개념은 설계 활동으로서 프로그래밍을 강조하는 것입니다.이러한 오해는 2010년에 행해진 이름 변경 조치의 이유 중 하나입니다.

ProgramByDesign 프로젝트에서는 다음 세 가지 중요한 요소가 생성되었습니다.

  • 라켓의 방언인 보다 강력하고 관대한 일련의 교육 언어는 디자인 레시피와 일치하지만 오류 보고는 학생의 레벨과 일치합니다(예를 들어 표준 라켓에서는 합법이지만 초급 학생에게는 필요하지 않은 많은 것이 초급 학생 레벨에서는 오류로 플래그가 지정됩니다).
  • 초보자 친화적이고 다운로드가 자유롭고 교육적인 프로그래밍 환경, DrRacket이라는 이름의 통합 개발 환경, 이러한 언어 수준을 적용합니다.
  • 교육 과정으로, 주로 프로그램 [1]설계 방법이라는 책에 인코딩되어 있으며,[2] 제3판은 현재 진행 중입니다.

Racket의 선택은 Racket이 (Java에 비해) 적은 자금으로 추측을 검증할 수 있는 소규모 팀에게 좋은 언어라는 믿음을 반영하고 있다.PLT 그룹은 항상 아이디어를 다른 맥락에서 사용할 수 있도록 하기 위해 노력해 왔습니다.

Java의 경우

지난 몇 년 동안 팀은 또한 커리큘럼의 두 번째 부분 또는 단계를 만들었습니다.Java와 같은 복잡한 객체 지향 프로그래밍 언어에 동일한 디자인 레시피 아이디어가 어떻게 적용되는지 보여줍니다.레시피는 처음에는 기능 패러다임으로 적용되며, 다형성 및 상속과 같은 객체 지향 개념을 도입하고, 다음으로 주류 Java에서 관용적인 명령형 방식을 도입합니다.

이 팀의 일부는 국립과학재단으로부터 대학과 고등학교에서 현장 시험을 실시할 수 있는 보조금을 받고 있다.프로페셔널 개발 워크숍은 2007년, 2008년, 2009년 및 2010년 여름에 개최되었습니다.이 프로젝트의 이 부분은 ReachJava라고 불립니다.첨부된 책의 제목은 잠정적으로 "How to Design Classes"입니다.

부트스트랩

2006년 보스턴의 노스이스턴 대학과 시티즌 스쿨에서는 방과후 프로그램을 통해 도심에 있는 학생들에게 연락을 취하기 위해 공동 노력을 기울였습니다.시티즌 스쿨은 자원봉사자를 방과후 프로그램 사이트와 연계시켜 대본에 의한 커리큘럼으로 시작하는 전국적인 조직이다.그 노력의 목표는 그 자료를 6학년 커리큘럼으로 번역하는 것이다.처음 몇 번의 테스트는 [3][4]보스턴에서 큰 성공을 거두었다.이 프로그램의 수학 코스에 대한 효과는 마이크로소프트와 구글이 텍사스, 캘리포니아 및 기타 자원 봉사 도시에 교사들을 훈련시키기 위한 자료를 개발하고 사이트를 만드는 전국적인 스케일업 노력을 지원하도록 장려했습니다.

레퍼런스

  1. ^ a b Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram (2018-01-06). "How to Design Programs". MIT Press. Retrieved 2019-01-08.
  2. ^ a b Felleisen, Matthias. "How to Design Programs, Third Edition". Felleisen.org. Retrieved 2019-01-08.
  3. ^ "Bootstrap program pulls up Roxbury, Dorchester middle-schoolers". Boston.com. 2011-05-03. Retrieved 2011-09-29.
  4. ^ Krishnamurthi, Shriram (March 2009). "The Moby Scheme Compiler for Smartphones". Brown University, Computer Science Department. Retrieved 2019-01-08.

외부 링크