왜 Scheme이 대학에서 모국어입니까?


80

사람들이 컴퓨터 과학에 대해 이야기하기 시작할 때마다 매일 C, C ++, Java에 대해 듣지만, 첫 번째 컴퓨터 과학 수업에서는 Scheme (DrRacket)으로 작성하라는 요청을받습니다.

왜 그런 겁니까?

이것이 향후 프로그래밍에 대한 이해에 어떤 ​​차이가 있습니까?

업데이트 : 첫 학기를 마쳤지만 Scheme으로 완전히 끝나지 않았습니다. 두 번째 용어 (현재)에서는 C 프로그래밍을 시작했습니다. 처음에는 포인터를 배우는 것이 좌절되었지만 이제는 훨씬 나아졌습니다.

그보다 더 할 말이 없습니다. 누락 된 OOP 부분에 대해 Java (또는 C ++?)를 가르치려고합니다. 지금까지는 여전히 함수형 프로그래밍이 가장 좋습니다. 람다는 정말 매력적입니다. :)


148
축하합니다. 컴퓨터 과학을 가르치려고 남은 몇 안되는 학교 중 하나에가는 것처럼 들립니다. 모국어로서의 학습 계획은 (IMO) 매우 좋습니다. 아니요, 다른 많은 사람들만큼 상업적인 것은 아니지만 컴퓨터 과학의 본질을 배우기위한 훌륭한 언어입니다.
Jerry Coffin

21
C, C ++ 및 Java는 컴퓨터 과학의 산업 부산물입니다. 체계의 전체 뿌리는 컴퓨터 과학에 있습니다. 상업적으로 사용되는 언어는 맥도날드가 요리와 관련하여 컴퓨터 과학과 관련이 있습니다.
JasonTrue

33
이 사람들은 맞습니다. 당신은 혼동 컴퓨터 프로그래밍컴퓨터 과학 - 익스트라 말했듯이, 그 천문학와 혼란 망원경 건설 같다. 체계는 컴퓨터 과학의 기본 개념을 배우기위한 최고의 언어에 관한 것입니다 . 컴퓨터 과학 학위를 취득하는 것이 Java로 업무용 응용 프로그램을 작성하는 방법을 배우는 것에 관한 것이라면, 잘못된 프로그램에 등록되었을 수 있습니다.
Eric Lippert

29
동물학 코스가 코끼리 마구간을 제거하는 방법보다는 진화 생물학, 해부학 및 동물 행동을 가르치는 것과 같은 이유로
jk.

4
Scheme의 기본 구문을 이해하고 나면 "The Little Schemer"를 읽으십시오. 이 책은 얇은 책이지만 그 안에있는 모든 내용을 이해할 수 있다면 함수형 프로그래밍 언어의 기본 사항을 확실히 이해할 수 있습니다.
Eric Lippert

답변:


91

좋은 학교처럼 들린다! Lisp 방언은 알고리즘의 수학적 패러다임을 훨씬 더 밀접하게 따릅니다. 프로그래머는 재귀와 기능적 스타일을 배우도록 강요합니다. 이것은 훌륭한 경험입니다. 귀하의 학교는 MIT의 순위에 있으며, 여전히 CS 6.001에 Abelson과 Sussman 을 사용합니다.

이 기사를 통해 문제를 이해하는 데 도움 되고 도움 될 수 있습니다 .


6
"강제"는 아마도 좋은 단어가 아닙니다. "기차"는 어떻습니까?
베리 브라운

4
실제로, 지난 몇 년 동안 MIT의 EECS 커리큘럼에는 큰 변화가있었습니다. 그들의 소개 과정은 현재 두 개의 과정으로 나뉘며 ( 상반기 mit.edu/6.01/mercurial/fall11/www/index.html 참조 ) 언어 교육의 대부분은 Python입니다.
jonsca

4
Scheme은 훌륭한 언어이며 배우는 것이 좋습니다. 그러나 그것을 직시하자. 거의 모든 실제 프로그래밍 작업은 명령형 언어를 사용합니다. 가장 진지한 프로그래밍 작업에는 C ++이 필요하며, C ++ 프로그래머는 일반적으로 어떤 이유로 든 프로그램 설계에 대한 모든 수학 기반 아이디어를 사용 하지 않도록 적극적으로 권장하지 않습니다 . 재귀는 명령형 프로그램에서 큰 역할을하지 않습니다.
Felix Dombek

4
@FelixDombek, 확실합니까? 모든 아이디어? 정말? 명령형 루프는 수학적인 아이디어이기도합니다.
SK-logic

3
@FelixDombek, C ++에서 꼬리 재귀 대신 반복을 사용해야하는 이유 만 볼 수 있습니다 . 다른 모든 형태의 재귀는 기능적 언어 구현에서와 동일한 방식으로 제공됩니다. 그래서 나는 당신의 말에 전혀 동의하지 않습니다. C ++ 코딩에 수학을 더 많이 넣을수록 좋습니다. 예를 들어 C ++에서 재귀없이 레드 블랙 트리를 구현하려고 시도하지 않을 것입니다.
SK-logic

37

신입생으로서 당신은 어떤 직업을 구사할 수있는 언어에 능숙 할 것으로 기대 하지 않습니다. 그렇다면 배우기 쉬운 언어로 시작해보십시오. 전문 IDE에서 전문 언어를 사용하여 프로그래밍을 배우는 초보자에게는 첫 해의 학생에게 메스를 제공하고 살아있는 신체에서 일하는 것과 같습니다.

걱정하지 마십시오. 결국 2 년째에 Java / C / C ++를 배우게 될 것입니다. 지금 Java 6을 배우기 시작했다면 Java 8을 졸업 할 때쯤에 나갈 것입니다. 아니면 파이썬으로 대체되었을 것입니다. 또는 아직 발명되지는 않았지만 업계를 뒤 흔드는 다른 언어도 있습니다. "인기있는"물건을 가능한 한 오래 배우지 않는 것이 좋습니다. 따라서 직원이 퇴근 할 때 쓸모가 없습니다.

Scheme / Racket은 알고리즘 설계, 데이터 구조 및 정보 조작과 같은 중요한 개념에 집중할 수 있도록 도와줍니다. 모든 언어에 공통적 인 것들입니다.


36

축하합니다. 이제 컴퓨터 세계에서 비건 채식인 으로 변모했습니다. 2 년 후에는 사람들에게 당신이 서있는 더 높은 도덕적 근거 에 대해 알리지 않으면 어떤 토론도 할 수 없게됩니다 . ;)

어쨌든 당신은 아주 좋은 학교를 방문했습니다. 산업계아닌 학교 는 좋습니다.
다른 사람이 말했듯이, 그들은 당신에게 공예를 이끌어내는 과학가르쳐 줍니다.

많은 나쁜 코드 원숭이 농장 은 당신에게 공예를 가르치고, 그로부터 과학을 추론 할 수는 있지만 보장되지는 않습니다. (그리고 당신은 그것에 대해 꽤 이상한 오해로 끝날 수 있습니다)

어쨌든, 기능적 군중의 명예로운 회원으로서, 당신이 거기에서 나올 때, 당신은 항상 오해과소 평가를 느낍니다 .

인정하십시오, 일반적인 컴퓨터 마법사는 새로운 것이 아닙니다.

당신은 지금 높은 위험에 처해 있습니다 :

  • 에서 마무리하려고 학문적 경력 ,
  • a의 추구에 착수 PHD ,
  • ... 이맥스 .

오픈 소스를 좋아할 수도 있지만 기능 프로젝트를위한 충분한 공동 작업자를 찾지 못할 것입니다.


2
미안, 괴로 한 의견이지만 왜 이맥스? 궁금해. 나는 OP와 같은 보트에 있고 (올 가을에 대학 신입생을 시작) Racket (Scheme과 유사)을 사용할 것입니다.
케빈 존슨

2
@KevinJohnson emacs는 종종 많은 사람들이 실수로 코드를 편집 할 수 있도록 LISP로 작성된 운영 체제 라고 합니다 . 기능적인 패러다임을하고 LISP와 유사한 구문의 외설물을 가르치는 경우 , 선호하는 텍스트 편집기로 성장할 것입니다.
ZJR

1
"당신에게 공예를 이끌어내는 과학을 가르쳐주십시오": +1
Giorgio

23

이것이 향후 프로그래밍에 대한 이해에 어떤 ​​차이가 있습니까?

그것은 셰익스피어를 읽는 것이 용어 논문을 쓰는 데 어떻게 도움이 될지를 묻는 것과 조금 같습니다. 프로그래밍 (모든 언어)은 아이디어를 실행 가능한 형태로 표현하기위한 수단 일뿐입니다. 컴퓨터 과학은 당신에게 흥미로운 것을 줄 개념적 빌딩 블록을 제공합니다. Scheme 구문은 비교적 간단하므로 많은 컴파일러 오류, 표준 라이브러리 등을 거치지 않고도 흥미로운 아이디어를 신속하게 얻을 수 있습니다.

수업 시간에 세심한주의를 기울이십시오. 이번 학기에는 많은 흥미로운 것들을 배우게 될 것입니다.


14

전혀 경험이없는 프로그래밍에 익숙하지 않은 것 같습니다. 여기 몇 가지 설명이 있습니다.

왜 C / C ++ / Java가 아닌 Scheme인가?

프로그래밍 언어를 학습 할 때 (영어로 유추 할 수 있음) 코드가 문법적으로 정확하도록 따라야 하는 구문 을 학습합니다 . 그러나 언어는 문제 해결 의 논리를 가르쳐주지 않습니다 . 그 논리를 배우기 위해 다른 프로그래밍 패러다임 을 배웁니다 .

각 언어는 하나 이상의 패러다임을 구현할 수 있습니다. 패러다임은 논리를 구성하는 방법이며 Scheme이 구현 한 패러다임을 기능 프로그래밍 (FP : Functional Programming )이라고 합니다.

그래서 당신이 묻는 실제 질문은 왜 FP입니까?

언급했듯이 C, C ++ 및 Java (FP를 구현하지 않은)가 훨씬 더 인기가 있습니다. 사실, (그리고 여러 가지 이유로 모두가 자신의 의견을 가지고 있습니다) FP는 업계에서별로 인기가 없습니다.

다른 한편으로, FP는 학계에서 매우 높이 평가됩니다. 일반적인 수학적 접근 방식에 더 가깝고 알고리즘의 확률 및 최적화에 더 중점을 두며 대부분의 사람들은 일반적으로 더 나은 프로그래머가 될 것이라고 동의합니다.

영어를 배우기 위해 라틴어를 가르치는 학교와 비슷합니다.


1
C, C ++ 및 Java에서보다 Scheme을 사용할 가능성이 높지만 Scheme을 기능적으로 사용할 필요는 없습니다.
Ricky Clarkson

"영어 문학을 공부하기 위해 라틴어를 가르치는 학교와 비슷하다."
Giorgio

11

프로그래밍이 수행되는 방법과 기본 개념이 무엇인지 배워야 합니다 . 대부분의 비즈니스에서 사용되는 일상 언어는 오늘날 필요한 소프트웨어를 제작하는 데 적합하지만 프로그래밍의 기초 를 가르치는 데 가장 적합한 것은 아닙니다 .

개념을 파악하면 다른 언어에도 쉽게 적용 할 수 있습니다.


4
"대부분의 비즈니스에서 사용되는 일상 언어는 오늘날 필요한 소프트웨어를 생산하는 데 적합 할 수 있습니다."-일반적인 비용, 품질 및 성공률을 고려하면 다소 낙관적입니다. :-)
Jörg W Mittag

그건 사실이야! 그래서 내가 "are"대신 "
Might

1
"개념을 파악하면 다른 언어에도 쉽게 적용 할 수 있습니다." -이 진술은 모두 사실입니다. 나는 거의 새로운 언어로 구문을 집어 들고 능숙하게 일주일 정도 걸릴 것으로 생각합니다. 나는 학교에서 C / C ++와 Assembly를 배웠지 만, 연구 프로젝트를 위해 파이썬과 측면에서 Python을 가르쳤다. Python, Lisp 및 Assembly에서 얻은 기본 지식이 없으면 오늘날 프로그래머가 될 것입니다.
웨인 베르너

9

DrRacket을 배우고 있다면, 프로그램 설계 방법 커리큘럼도 사용하고있을 것입니다.

HtDP의 (편견적으로 편향된) 저자 중 한 명이 Scheme이 협력 교육 프로그램을 위해 노스 이스턴 대학교 (Northeastern University)의 학부생들을 어떻게 준비 시켰 는지에 대해 말한 내용은 다음과 같습니다. 고용).

제가 도착하기 전에 Northeastern은 20 년 동안 표준 커리큘럼을 사용했습니다. 현재 유행하는 언어 (Pascal, C ++, Java)의 3 가지 용어, 실용적인 응용 프로그램에 대한 교훈과 함께 매우 풍부한 그래픽 연습이 사용되었습니다. 커리큘럼은 SIGCSE 및 관련 커뮤니티에 널리 게시되었지만 작동하지 않았습니다. 웹 버블의 높이에서 약 3 분의 1의 학생들 만이 프로그래밍 협동 조합을 얻었습니다. 대부분의 다른 사람들은 컴퓨터 이동, 스크립트 실행, 라우터 및 네트워크 설정 등과 같은 "기술"로 끝났습니다.이 모든 교육 비용은 $ 150,000입니다.

1 년 동안 북동부에서 우리 학장은 내게 첫 번째 코스를 인수하도록 요청했습니다. 첫 번째 사례는 일부 지역 교직원의 예측과 달리 성공이었습니다. 시험으로 간주되었지만 TeachScheme으로 전환했습니다! 커리큘럼 영구; 학장은 HtDP 코스를 나머지 커리큘럼에 연결하는 브리지 코스를 설계 할 것을 제안했습니다. 이것은 Viera Proulx와의 HtDC 공동 작업을 시작했습니다. 아래의 포스트 스크립트를 참조하십시오. 몇 년 안에, 나는 협동 교직원들로부터 프로그래밍 위치의 비율이 증가하고 있다는 소식을 듣기 시작했습니다. 마지막으로이 과정에 참여한 2007 년까지 첫 번째 협동 조합의 프로그래밍 비율이 2/3 이상으로 증가했다고 들었습니다. 그동안 모든 TeachScheme! 과정은 저의 것과 다른 교습 스타일과 성격을 가진 수많은 교수진에 의해 진행되었습니다. 프로그래밍 협동 조합의 비율이 3/4 이상으로 증가했으며 모든 다운 스트림 교수진은 학생들의 프로그래밍 기술에 만족합니다.

편집 : 커리큘럼의 이성에 매우 관심이있는 사람들을 위해 주요 건축가의 설명은 다음과 같습니다-http://www.youtube.com/watch?v= m3be1PHW5X0


6

우리 학교도 Scheme으로 시작했습니다. 언급 된 한 가지 이유는 이것이 경기장을 평준화하는 데 도움이 되었기 때문입니다. 대부분의 1 년차 Comp Sci는보다 일반적인 언어에 노출 될 수 있습니다. 누구든지 Scheme에 대해 많은 지식을 가지고있을 가능성이 적었습니다.


4
동의한다; 나는 Pascal, C, Basic, x86 Assembler를 알고 CS를 시작했지만 다른 사람들은 다른 언어로 경험을했거나 전혀 경험하지 못했습니다. 우리는 ML에 대해 처음으로 경험 한 사람이 없었을뿐만 아니라 패러다임이 너무 많아서 우리 중 가장 경험이 많은 사람들에게도 처음부터 시작한 것처럼 ML에 소개되었습니다. 나중에 ML (기능적 패러다임)이 CS에서 배운 가장 유용한 것으로 생각합니다.
KaptajnKold

6

실제로 Lisp (Scheme이 방언 임)가 기능 언어 (F #, Groovy, Clojure, Haskell 등의 생각)의 Grande Dame이므로,이 교육은 가장 인기가 많기 때문에 어떠한 상업적 단점도 남기지 않습니다. 지금 개발 블록에 관한 주제.


4

Scheme은 기능적 프로그래밍 언어를 사용하기위한 올바른 방법으로 생각하고 좋은 결과를 얻을 수 있도록 도와줍니다. 예를 들어 스칼라는 약간 조밀하지만 기능이 뛰어난 Functional / OO 하이브리드입니다. 이와 같은 언어는 미래를 표시합니다.

리스프와 유사한 언어는 디자인에 순도와 단순성이있어 조금 더 쉽게 가르 칠 수 있습니다. 그래도 좋은 장점은 나중에 Scala와 같은 것을 배우는 것이 훨씬 쉬워진다는 것입니다.


3

우리는 두 번째 학기 전반기와 전반기에 계획을 완료했습니다. 실제로 Scheme의 힘을 깨닫기 시작한 것은 C와 함께 일하기 전까지는 아니 었습니다.

당신의 질문에 관해서, 왜 Scheme이 선택 되었습니까? 답은 그것이 가장 간단한 언어 중 하나이며 많은 것을 할 수 있다는 것입니다 (특히 나중에 게으른 목록으로 연주하기 시작할 때). 또한 :

  1. 프로그래밍 경험이없는 사람들에게는 배우기가 더 쉽습니다. 기술적 인 세부 사항이 많지 않고 몇 가지 특수한 형태가 있습니다.
  2. 더 높은 수준의 추상화가 가능합니다. 좋은 과정은 학생들이 더 나은 프로그래머가 될 수있는 기술적 세부 사항에 중점을 두지 않고 프로그래머를 가르치는 데 중점을 둘 수 있습니다.
  3. 목록은 훌륭합니다. 그들과 함께 할 수있는 일이 너무 많습니다. Car와 cdr은 강력한 도구로 입증되었으며 Scheme이 목록을 처리하는 데 놀랍다는 것을 알고있는 포인터로 작업을 시작할 때만 가능합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.