가장 직교 프로그래밍 언어는 무엇입니까? [닫은]


46

나는 프로그래밍 그 자체와 전혀 관련이없는 특별한 언어 규칙 (배열 간 포인터 쇠퇴와 같은)에 대해 신입생에게 가르쳐야하여 반복적으로 화가납니다. 그래서 궁금했습니다.

모든 것이 최고이며 특별한 기술적 제약없이 구성 될 수있는 가장 적은 수의 특수 언어 규칙을 가진 프로그래밍 언어는 무엇입니까? 그러한 언어가 완벽한 교수 언어가 아닙니까?

중재자 노트

우리는 설명과 맥락을 제공하는 긴 답변을 찾고 있습니다. 언어를 열거하지 말고 언어가 질문에 대답한다고 생각 하는지 설명하십시오 . 아무 것도 설명하지 않은 답변은 삭제됩니다. 자세한 내용은 좋은 주관적, 나쁜 주관적 을 참조하십시오.


1
Unlambda를 사용해보십시오. 가능한 가장 적은 수의 언어 구성 요소가 있습니다. 좀 더 심각한 답변 : Scheme (R5RS는 구체적으로).
SK-logic

@ SK-logic, Unlambda는이므로 직교하지 않습니다 I=SKK. 직교 언어의 궁극적 인 점은 Jot 및 RSSB와 같은 단일 명령어 언어입니다.
피터 테일러

11
@ 피터-나는 그가 최소한을 의미한다고 생각하지 않습니다. 최소한의 언어는 라이브러리의 모든 추가 정의로 끝나므로 학생들은 어느 쪽이든 학습해야합니다. 이 질문을 읽는 방식은 "최소한의 놀람의 원칙을 따르는 언어는 무엇입니까?"입니다.
Steve314

1
@ 피터 테일러 : Timtowtdi가 직교성과 충돌하는 예를 제공 할 수 있습니까?
keppla

1
나는 여기서“직교성”이 단어를 잘못 선택했다고 생각합니다. Peter와 Steve가 확립했듯이, 당신이 정말로 의미하는 것은“최소한의 놀라움의 원칙”또는 밀접한 관련 품질입니다.
Konrad Rudolph

답변:


53

'매우 적은 규칙'에 관해서는 Lisp 또는 Smalltalk가 이길 것이라고 주장합니다. 베어 구문은 하나의 맥주 탭에 쓸 수 있습니다.

그러나 내 경험상 Lisp와 Smalltalk의 단순성이 이해하기 쉽고 가르치기 쉽다는 것을 의미하지는 않습니다. '순수한'방법은 아니지만, 제 경험상 할일 목록 스타일의 명령형 언어는 초보자에게 가장 쉬운 방법입니다.

따라서 파이썬, 루비 또는 유사한 추상화를 제안합니다 : 당신은 (거의) 모든 기본 개념을 (거의) 알지 못하지만, 처음부터 이해해야 할 필요는 없습니다.


33
맥주 탭 단위로 구문을 측정하는 인상적인 작업.
psr

3
그리고 Perl을 잊지 마십시오. 대부분의 사람들이 생각하는 것보다 훨씬 많은 Perl이 있으며 사용자 커뮤니티는 거대 합니다.
Randal Schwartz

20
펄은 매우 강력하지만 프로그래밍에 가장 쉬운 길을 찾는 사람은 인디애나 존스의 사원 터널을 침실에서 샤워 실의 주요 복도로
가져와야합니다

9
맥주를 충분히 마셨다면 Perl의 구문이 맥주 탭에 맞을 수 있습니다.
Dave Sherohman

4
@ 랜달, 질문은 직교 언어를 요구 합니다. Perl의 철학은 직교하지 않는 것입니다. "한 가지 방법이 있습니다."
피터 테일러

41

LISP 또는 Scheme 또는 그 가족의 언어가 가장 직교 적이라고 말하고 싶습니다. 와 let, lambda, define, if, cons, list, 그리고 ( )당신은 당신이 소개 과정에서 원하는 거라고 거의 아무것도 가르 칠 수 있습니다. 전처리 지시어 나 int main()학생이 포함했지만 그 이유를 알지 못하는 것과 같은 것들도 필요 하지 않습니다.

인트로 CS 과정에서 우리는 Scheme을 사용하여 정말 멋진 일을 많이했습니다 .Turing 기계 구현, TC-201 컴퓨터 구현, 컨텍스트 프리 문법 작성, 재귀 사용, 병합 및 삽입 정렬 작성, 가산기 구현 및 수많은 톤 다른 것들.

대학 전에 AP 컴퓨터에서 Java를 해왔지만 Scheme은 혼란을 줄이고 프로그램의 실제 개념에 집중할 수 있었기 때문에 훌륭했습니다. 좋은 수업이었고, 당신의 가르침을 위해 그것을 시도하는 것이 좋습니다.


5
동의하다. Racket (이전의 PLT Scheme)은 학교가 입문 수업에서 큰 성공을 거두는 좀 더 친숙한 Scheme 변형입니다.
NickAldwin

3
하스켈은 어떤가요? 나는 하스켈에 대해 잘 모르지만 직교 언어가 될 것으로 기대합니다.
Giorgio

4
@ Giorgio : Haskell 구문은 훨씬 더 복잡하지만 하위 집합 만 노출 될 수 있습니다. 흥미로운 프로그램을 얻기 위해 처음부터 IO 모나드와 상호 작용해야한다는 사실은 OP 목표를 감안할 때 성가시다.
Matthieu M.

4
"직교"의 경우 Scheme, 특히 Racket 구현에 투표합니다 . 라켓의 환경은 일반 커먼 리스프 (Common Lisp)와 같은 것보다 학습자의 경로를 더 쉽게 만들도록 설계되었습니다. 언어는 거의 규칙없이 깨끗합니다. 오래 전에 MIT는 SICP 책을 사용하여 Freshman 학생들을 가르치기 위해 Scheme을 사용하기로 결정했습니다 . 살아남은 학생들은 시장에서 아주 잘 수행하는 것 같습니다. 그러나이 방법은 학생들에게 가장 일반적으로 사용되는 언어로 상용 등급 코드를 작성하는 방법을 직접 가르치지는 않습니다.
John Tobler

2
예! Scheme이 대부분의 "실제"언어와 근본적으로 다르기 때문에 API가 아닌 프로그래밍에 집중할 수 있습니다 . 학습 계획은 코딩 의 " 왁스 온, 왁스 오프 "와 같습니다. 이전보다 컴퓨터에 대해 더 깊이 이해하고 있다는 것을 깨달을 때까지 시간 낭비처럼 보입니다.
벤 자도

17

파스칼은 프로그래밍을 가르치기 위해 특별히 고안되었습니다. 배우기 쉽습니다 (내가 처음 배운 프로그래밍 언어 중 하나였습니다).


3
나는 또한 파스칼을 사용하여 프로그래밍하는 법을 배웠고 매우 깨끗한 언어라는 것을 알았습니다. 내가 생각할 수있는 비 직교 기능은 writeln () 및 readln () 프로 시저의 구문입니다.이 프로시 저는 가변 개수의 인수를 가지며 형식을 지정할 수 있습니다.
조르지오

나는 매우 실망스러운 언어를 발견했다. 그러나 나는 아주 나쁜 강사가 있었기 때문에 투사하고 있을지도 모릅니다.
greyfade

14

로고 : 그것은 여전히 살아 있고 발로입니다 !

; draws a triangle
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120

장난감보다는 프로그래밍 언어처럼 보일지 모르지만 많은 사람들에게 나쁜 첫 번째 단계는 아닙니다. 구문은 매우 간단하지만 거북이는 대부분의 언어 / 환경보다 더 구체적인 형태의 피드백을 제공합니다. 특정 형태를 만드는 것은 문제를 해결하기 위해 미리 생각하는 과정을 배우는 좋은 방법입니다.

거북이에 대한 혐오감을 가지고 있다면 실제로 계획이 갈 길이라고 생각합니다.


1
믿거 나 말거나, Logo는 Scheme과 마찬가지로 Lisp입니다. 대부분의 사용자는 간단한 루핑 및 거북이 그래픽을 넘어 충분히 배울 수 없습니다.
Sean McSomething

@SeanMcSomething 표현의 평가보다는 부작용 (거북 이동)에 중점을 둔다는 점이 흥미 롭습니다.
benzado

10

저는 SML과 Haskell을 모두 제안합니다. 직교성은 두 가지 모두의 주요 디자인 포인트였습니다. 특히, SML의 핵심 (즉, 모듈 성과 관련이없는 언어의 일부)은 거의 람다 미적분학입니다. 결과적으로 대부분의 언어 기능은 유형에 따라 결정되며 유형에 따라 값에 대한 소개 및 제거 양식이 구동됩니다. 이것은 매우 이상적입니다.

두 언어 (SML의 eqtype, Haskell의 seq)에는 비 유형 이론적 사마귀가 있지만 관련없는 언어 기능의 기묘한 상호 작용 측면에서 여전히 다른 것들의 바지를 이겼습니다.


7

어떤 선택을 하든지 “실제”언어를 강의 할 것을 강력히 권합니다 . 장난감 언어를 가르치는 것은 어떤 사람들에게는 효과가 있지만, 다른 사람들에게는 현실 세계와의 연결이 끊어져서 매우 실망 스럽습니다. 어떤 사람들 은 학습 동기 부여로서 현실과의 관련성 이 필요 하며,이 학습 전략을 판단 할 곳이 아닙니다 (사실, 그것은 일반적인 오해입니다).

이는 로고와 같은 언어뿐만 아니라 Processing 과 같은 도메인 별 언어도 지원하지 않습니다. 후자는 특정 정보 (예 : 정보 그래픽 생성)에 매우 유용하지만 대부분의 사용 (및 대부분의 사용자)에게는 사용이 너무 제한됩니다. 쓸모없는 Haskell 하위 집합 인 Gofer 도 제외됩니다 . 그것은 또한 제외 파스칼 후자는 비록 때문에 실제 프로젝트에 사용되어, 그것은 단지 더 이상 관련이없는 단순히 필수 기능이 부족하다 (예를 들어 내장 된 문자열).

실용적인 언어들 중에서, 나는 이미 언급 한 언어들 : 현대식 리스프 (Lisp) 또는 체계 방언, 하스켈, 파이썬 또는 루비에 동의합니다. 개인적으로 필자는 Python을 사용하지만 모든 선택에는 장단점이 있습니다.


2
"실제"언어를 가르치는 것이 실제 관련성을 제공하는 방법이라고 주장하는 것은 잘못입니다. "장난감"언어가 실제 기술과 어떤 관련이 있는지 보여주는 것은 교사의 임무입니다. 나이프로 시작하여 저글링을 배우는 것이 더 적절한 저글링 기술을 배우는 것을 의미하지는 않습니다.
벤 자도

3
@benzado 당신은 내 요점을 오해했습니다. 장난감 언어를 배우면 실제 문제와 관련이있는 기술을 이전 해야합니다. 나의 요점은 이 전이가 일부 사람들이 배우는 것을 적극적으로 막는 추가적인 간접 지시라는 것이었다 . 다른 사람들은 매우 다른 방식으로 배우고, 어떤 사람들은이 즉시 성이 정말로 필요합니다. 칼로 저글링하는 법을 배우는 것은 같은 것이 아닙니다. 실제 비유는 첫 번째 프로젝트로 라이브 미사일 유도 시스템을 작성하여 프로그래밍하는 법을 배우는 것과 관련이있을 것입니다.
Konrad Rudolph

3
나는 당신의 요점을 얻는다. 우리는 단지 동의하지 않습니다. 전학이 중요하다고 생각합니다. 학생은 성공적인 추측 전략을 가진 사람 (예를 들어, 숫자를 골라서 장의 시작 부분에있는 수식에 연결하여 단어 문제를 "해결"하는 사람)보다 더 깊이 이해해야합니다. ). 다시 말해, 그들이 배운 것을 옮길 수 없다면, 처음에는 배운 것이 없습니다. 학생들에게 동기를 부여하기 위해서는 언어, "실제"또는 "장난감"에 관계없이 중요한 문제를 선택해야합니다.
벤 자도

@benzado Transfer 중요하지만 논쟁은 없습니다. 그러나 그것은 가르쳐야 할 전체적인 또 다른 징계이며, 일부 학생들은 그것을 습득하지 않습니다. 또한“심층적 인 이해”부분도 사실이지만 요점 외에는 이미 도달 해야하는 고급 상태입니다 . 학생들이“그것”을 배운 후에는 그것을 옮길 수 있습니다. 그러나 먼저 그들은 배워야하며, 그렇게하려면 일부 학생들은 관련성이 필요합니다. 양도는 나중에옵니다.
Konrad Rudolph

Math edu (소액의 경험이있는 곳)에서 "이해하지 않고 배우기"는 큰 문제입니다. 이유 없이이를 수행 하는 방법 에 중점을 둡니다 . 저의 주장은 당신 이 프로그래밍 의 개념 을 가르치면 장난감 언어가 잘 될 것이며, 성공 하면 "실제"언어로의 전환이 어렵지 않을 것이라는 것입니다. (이전이 어려운 경우, 개념이 아닌 절차를 가르쳤습니다.) 완구 환경이 사람들의 학습을 방해하지는 않지만 좋은 수업 계획이 필요합니다. (이 스레드는 마음에 들지만 토론 영역으로 넘어 갔으며 중재자가 불쾌 할 것입니다.)
benzado

6

Tcl에는 전체 언어를 관리하는 12 가지 규칙 이 있습니다.

[1] Commands. 
[2] Evaluation. 
[3] Words. 
[4] Double quotes. 
[5] Argument expansion. 
[6] Braces. 
[7] Command substitution. 
[8] Variable substitution.
[9] Backslash substitution.
[10] Comments. 
[11] Order of substitution. 
[12] Substitution and word boundaries.

특별한 경우 나 예약어 또는 문자가 거의 없습니다.


4

모든 것이 최고이며 특별한 기술적 제약없이 구성 될 수있는 가장 적은 수의 특수 언어 규칙을 가진 프로그래밍 언어는 무엇입니까? 그러한 언어가 완벽한 교수 언어가 아닙니까?

내 의견을 확장하기 위해 Jot에서는 모든 것이 일류이며 (람다 미적분학이기 때문에) 구성 할 수 있습니다. 하나의 명령 만 있습니다. 절대적으로 끔찍한 교육 언어입니다.

일반적으로 튜링 타르 핏에는 특별한 규칙이 거의 없으며 계산을하기 전에 계산의 기초를 잘 이해해야합니다. 완벽한 교수 언어는 학생들이 머리카락을 모두 빼지 않고 실험 할 수있게 해주므로, 더 높은 수준의 추상화는 실제로 좋은 것입니다.


'turtur tarpit'이라는 용어를 소개해 주셔서 감사합니다. 저는 항상 이런 종류의 단순성에 대한 용어가 필요했습니다.
keppla

나는 학생들이 실험을 할 수 있어야한다는 데 동의하지만, "무엇을하기 전에"이해해야하는 것은 교육의 요점처럼 보입니다.
벤 자도

@benzado, 나는 가르침의 요점은 이해를 부여하는 것에 동의합니다. 그러나 대부분의 사람들은 기본 개념부터 시작하여 머리를 숙이고 중간 개념을 가르쳐야합니다. 그래서 당신은 조금 이해하는 사람이 조금하는 프로그램을 작성할 수있는 언어를 원합니다. 대부분의 프로그래밍 과정이 튜링 머신이나 민스키 레지스터 머신을 가르치는 것으로 시작하지 않는 이유가 있습니다.
피터 테일러

1
그렇습니다. 우리는 "조금씩"의 의미가 다르다고 생각합니다. 예를 들어 "비디오 게임을 만드는 방법을 보여주십시오"조건을 완화하고 싶은 경우 몇 가지 작업을 수행 할 수 있지만 진전이없고 좌절 할 수 없기 때문에 일정 시점에 도달하게됩니다. "지루한 부분"으로 돌아가서 앞으로 나아가는 데 대한 이해를 얻을 수 있습니다. 이 시점에서 그들은 이미 나쁜 방법으로 좌절했으며 포기할 수도 있습니다. 다른 한편으로, "지루한 부분"을 먼저하고 위로 건축하는 것은 지속적인 진보를 의미합니다. 그러나 반 무한 테이프 스트립으로 시작하지 마십시오.
벤 자도

2

당신이 배우는 언어에서 가장 중요한 기능은 다음과 같습니다.

  • 최저 놀람의 원칙 (PASCAL)

  • 가독성 (Ada)

제 생각에는 코드를 읽는 것이 코드를 작성하는 것보다 훨씬 중요하기 때문에 두 번째가 첫 번째보다 우선합니다.

다시 한 번, 나는 C #, Java, Objective-C 및 Javascript를 생계를 위해 작성합니다.

그래도 시작할 언어를 하나 선택해야한다면 C #으로 갈 것입니다. 읽기 쉽고 상대적으로 심각한 놀라움이 거의 없으며 (MS 도구 / 프레임 워크에 가장 자주 숨겨져 있습니다 ...) 읽고 읽을 수있는 방대한 양의 코드가 있으며 학습에 필수적입니다.


ada의 정적 타이핑과 안전이 아니라 가독성을 위해서라면 Python과 Visual Basic (예, 멋진 어린이 방법은 아닙니다)에는 비슷한 무료 구문 인 imho가 있습니다.
keppla

예, 동의합니다. "Ada에서 컴파일하면 실행해야합니다." Ariane V 가 말할 수 있듯이 논리 오류를 예방하지는 않습니다 . : D
Kheldar

정적 타이핑이 초보자에게 유용한 지 여부를 생각했습니다. 훈련 휠과 같은 더 많은 지원을 제공하지만 이것은 좋은 것과 나쁜 것으로 볼 수 있습니다. 그것은 약간의 책임을 학생으로부터 타이핑 시스템으로 밀어냅니다.
Aivar

@Kheldar, 프로그래밍 언어는 Ariane V 오류를 담당 한 것과 같은 관리 문제를 방지 할 수 없습니다. 이것에 대해 숙제를해야합니다.
John R. Strohm

@ JohnR.Strohm 정확히 내 요점은 : 때로는 언어가 아니며 결함이있는 엔지니어링 흐름 (예 : 관리)입니다. 내 의견으로는, 당신은 덜 적극적으로 당신의 의견을 말했을 수 있습니다.
Kheldar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.