매혹적인 질문; 객관적인 기준에 중점을두고 있습니다. 신입생이 배우기를 바랍니다.
프로그래밍 개념 : 첫 번째 프로그래밍 언어는 함수 호출, 반복, 재귀를 지원해야합니다.
기본 아이디어 : 첫 번째 프로그래밍 언어는 배열을 지원해야합니다 (메모리가 실제로 어떻게 작동하고 포인터가 어떻게 작동하는지에 대한 간단한 소개의 첫 단계)
실용적인 프로그래밍 기술 : 디버거 사용 방법, 프로파일 러 사용 방법, 큰 문제를 해결하는 방법 (고급 언어), 큰 시스템을 구성하는 방법, 문제를 분해하는 방법 (문제의 분해), 작성을 피하는 방법 복잡한 코드, (암호적인) 일련의 실행 가능한 문장 뒤에 의도 를 인간 에게 전달하는 방법 .
미리 작성된 라이브러리가 sort ()와 같은 것들에 대해 존재한다는 것과 그것을 사용하는 방법, 즉 처음부터 모든 것을 쓸 필요가 없다는 사실.
모국어에 대한 다른 기준 :
해석 됨 (빠른 피드백이 학습 과정에 도움이 됨).
학습, 테스트 및 디버깅을 가속화하는 대화식 환경.
학생들이 해당 언어로 읽을 수있는 고품질 소스 코드
"읽기 쉬운", "자연어에 접근하는 구문"(SourceCode를 더 쉽게 읽고 채점 할 수 있도록)
휴대용 (Mac OS, Windows, Unix에서 실행) 언어의 하나 이상의 자유 소프트웨어 구현.
예를 들어, "[첫 번째 OOPL로서 Java보다는 초급 Python과 Java를 먼저 가르치는 것이 더 빠를 수도 있습니다." - "객체 지향 프로그래밍 언어의 비교" 및 TelescopeRule
Matthias Felleisen은 초보자를 대상으로하는 오류 메시지가 포함 된 프로그래밍 언어를 개발했습니다. 그는 특정 언어 선택이 좋은 디자인 방법론을 가르치는 것만 큼 중요하지 않다는 점을 강조합니다. 실제로, 그는 첫 번째 CS 과정을 비판적 수업으로 비판적 사고, 문제 해결 및 세부 사항에 대한 관심을 가르치고 있습니다.
두 번째 프로그래밍 언어의 기준
우리는 학생들이 배우기를 원하지만 아마도 이것은 두 번째 프로그래밍 언어를 기다릴 수 있습니다.
"너무 난해하지 않은"관련 언어; "업계에서 인기있는"
복잡성 이론 : 현재 기술로는 불가능한 작업을 인식하는 방법.
더 높은 수준의 물건 : 작업에 적합한 도구 를 선택하는 방법, 컴파일러 사용 방법, 구조, 객체 지향 프로그래밍, 기능 프로그래밍, 논리 프로그래밍, 컴파일러 디자인, 함수 구성 및 조작 (Lisp / ML 의미) 동시 및 분산 프로그래밍
저수준 물건 : 포인터 산술, 컴퓨터 아키텍처. 메모리 관리, 스택 프레임, 어셈블리 프로그래밍, 기계 아키텍처, 장치 드라이버 및 운영 체제 설계 (기계는 "침투 할 수없는 무서운 블랙 박스처럼 보이지 않습니다")
편집 : 나는 다른 많은 사람들과 협력하여 "합법적 인 게시물이 아닐 수도 있습니다"라고 쓴 내용의 요약을 게시하는 것이 실망 스러웠습니다.
그래서 나는 이전의 비공식 링크에 공식적인 인용 을 추가하고 공정한 사용 및 기타 위키 저작권 문제 를 준수하려고 합니다.
이 답변은 포틀랜드 패턴 리포지토리에서 Freshman 's First Language (Anon 2011)를 요약 한 것입니다 .
(Anon 2011) 많은 익명의 작가들. "Freshmans First Language". 포틀랜드 패턴 리포지토리. 2011 년 9 월 27 일. http://c2.com/cgi/wiki?FreshmansFirstLanguage .