이상적인 프로그래밍 언어 학습 순서? [닫은]


17

어떻게 생각해? 오늘날 가장 많이 사용되는 언어와 패러다임을 다루고 일반적인 프로그래밍 기본 사항, 아이디어 및 관행을 파악하는 데 이상적인 프로그래밍 언어 학습 순서는 무엇입니까? 언어보다는 패러다임에 대한 학습 순서를 제안 할 수도 있습니다.

NB : 이것은 내가 물었다 질문의 포트 에 유래 주관적 및 논란의 여지가있는 폐쇄되었다.


좋은 질문입니다. 이 질문이 성과 지향적이라면 어떤 답이 되었습니까? 궁금합니다 : programmers.stackexchange.com/questions/16323/… : D
JoeBilly

4
나는 Lisp가 자주 묻는 질문에 자주 등장한다는 사실에 놀랐고 기쁘다.
Inaimathi

1
이 질문은 또한 여기에서 요청되었습니다 (이 질문이 먼저 온 것 같습니다) : programmers.stackexchange.com/questions/41720/…
oosterwal

이 링크를 여기에 저장해야합니다.
Gulshan

답변:


26

파이썬, 리스프, C, 하스켈

문제는 프로그래밍을 처음 접하는 사람들에게 프로그래밍에 대한 이상적인 학습 순서에 대한 가정이라고 가정합니다 (프로그래밍 분야의 숙련자에게는 우연히 학습 순서가 있었기 때문에) .10 년 후에 프로그래밍을 배우는 방법에 대한 Norvig의 에세이를 읽는 것이 좋습니다 .

  1. Python : 다이나믹 한 고급 OO 및 기능적 언어로 시작하십시오. 초보자가 최대한 빨리 생산성을 느끼는 것이 중요 하기 때문에외계인 구문, 라이브러리 부족, 다중 플랫폼 부족, 학습 리소스 부족 및 커뮤니티 부족으로 인해 꺼지지 않아야합니다. 파이썬은 가독성이 뛰어나고, 훌륭한 라이브러리가 있습니다 (예 : 과학적 라이브러리-현대 과학자 / 엔지니어가 프로그래밍하는 방법을 알아야 함). 대부분의 OS에서 쉽게 실행할 수 있으며, 많은 튜토리얼과 무료 서적을 보유하고 있으며 일반적으로 사용자에게 친숙합니다. — 큰 문제에 대해 작업하는 고급 프로그래머가 되어도 함께 성장할 수있을만큼 강력합니다. 초보자를 위해 중요하고 유용한 규칙을 강화하는 것도 중요합니다. 코드 가독성은 많은 것으로 계산되며 자신과 다른 사람들이 쉽게 이해할 수 있도록 코드를 작성해야합니다.

  2. 리스프 : 특히 컴퓨터 프로그램의 구조와 해석을 훑어 보거나 SICP 비디오 를보고, 프로그래밍의 기초와 표현력을 보면서 눈을 크게 뜨고 있습니다. Lisp가 기능적 패러다임뿐만 아니라 새로운 도메인 별 언어 생성과 같은 OO, 논리 / 선언 등을 표현하는 방법에 대해 알아보십시오. 언어로 마스터가 할 수있는 일을 목격하려면 Norvig의 PAIP 를 읽으십시오 . 그런 다음 Next Big Things 중 하나가 될 수있는 현대식 Lisp 방언 Clojure를 확인하십시오 .

  3. C : 컴퓨팅의 언어와 관련이 있기 때문입니다. :) 요즘 하나가 특정 비 소프트웨어 도메인의 프로그래머라면 요즘 선택 사항 일 수 있습니다. 추악하지만 기본 하드웨어에 대한 감사를 얻는 것에 대해 알 가치가 있습니다. 물론 K & R 과 함께 가십시오 .

  4. Haskell : 순수한 기능성. 현재 Com.Sci. 이론과 실제 표현력이 만난다. 실제 하스켈을 참조하십시오 .

위의 둘러보기 후에는 문제를 해결하고 코드로 솔루션을 표현하는 데 매우 능숙하며 패러다임에 완전히 익숙 합니다 .

대체 텍스트


나는 자연스럽게 스몰 토크를 파이썬으로 # 1로 대체 할 것이지만, 파이썬이 (a) 스몰 토크보다 훨씬 더 인기가 있고 (b) 스몰 토크가 다른 언어와 대화하도록하는 것은 Java에서와 같이 어렵다는 것을 알면 , 초보자를 좌절시킬만큼 충분히 말해야합니다. 파이썬의 "스크립트 성"은 큰 장점으로 보입니다.
Frank Shearar

나는 당신의 생산성 진술에 동의합니다. C를 절대 모국어로 배우는 것은 볼록이 많은 것 같습니다. 그러나 그것은 어딘가에 스택에 있어야합니다.
Mark Canlas

+1 Haskell이 최상위에 있는지 확실하지 않지만, 공정하게, 아직 알지 못하고 다음 목록에 있으므로 아직 배우는 마지막 언어가 될 수 있습니다.
Inaimathi

2
전체 크기의 다이어그램을 원 클릭으로 보려면 @ i54.tinypic.com/168ity1.jpg
Mike Clark

만약 C가 목록에 없다면 나는 이것을 +1 할 것이다
Balog Pal

28

이것이 내가하는 방법입니다.

  1. Python (또는 Ruby 또는 Lua) : 유형이없는 해석 된 언어로 몇 줄로 작업을 수행 할 수 있습니다. 거대한 도서관 (Python이 가장 좋습니다). 주의가 산만하지 않기 때문에 알고리즘에 깊이 빠져들 수 있습니다. 컴파일이 필요하지 않으며 실행하십시오. 게다가 파이썬에서는 들여 쓰기가 필수적이기 때문에 파이썬으로 암묵적으로 좋은 스타일을 가르칩니다. 객체 지향도 가르 칠 수 있습니다 (루아에서는 더 큰 문제입니다). 여기서의 목적은 많은 재미를 가지고 학생들에게 무엇을 할 수 있는지 보여주기위한 것입니다.

  2. C ++ (또는 Java) : 타이핑 된 빠른 언어입니다. 객체 방향이 필요한 경우 이미 몇 가지 개념을 알고 있습니다. 주요 아이디어는 파이썬에서 수행 한 작업을 "번역"하고 새로운 제약 조건 (주로 유형)으로 수행하는 것입니다. 이제 개념이 옳다면 유형을 추가해도 문제가되지 않습니다. 다음 단계는 더 낮은 수준으로 생각하고 (Java는 여기서 도움이되지 않음) 포인터를 가르치는 입니다. 이것은 주소 공간, CPU, OS에 대해 조금 설명하여 프로그램 아래에서 볼 수 있도록합니다. 컴파일 된 언어는 해석과 컴파일의 구별을 도입하여 기계 언어 등을 설명하는 데 매우 유용합니다.

  3. 조립 : 마지막으로 마술은 없습니다. 기계와 대화하기 만하면됩니다. 인텔과 GAS 구문에 대한 토론이 있지만 중요하지 않습니다. MIPS를 가지고 있다면 가르치기에 더 좋을 것이라고 생각하지만 x86이 더 널리 보급되어 있기 때문에 x86이 더 편리하다고 생각합니다 (레지스터가 더 많아서 x86_64가 더 좋습니다). 복잡성을 제거하고 학생들이 원하는 경우 더 자세히 조사하도록해야합니다.

(이 처음 3는 "깊이"입니다. 그들이 말하는대로, "금속에 가까운"입니다 하단을 터치 할 때까지 지금까지, 우리는 추락했습니다. 나는이 생각하는 매우 프로그래밍에 많은 질문이 중요 당신이 무슨 일이 일어나고 있는지에 대한 명확한 생각이있을 때 해결됩니다.

  1. 구성표 (또는 일반적인 Lisp 또는 Clojure) : @ dukeofgaming이 말했듯이 Lisp 언어를 사용하면 재귀를 잘 가르 칠 수 있습니다 (이 체계는 명시 적 루프가 없기 때문에 가장 좋습니다). 그러나 나는 두 가지 다른 것을 다룰 것입니다 : 클로저와 매크로. 매크로는 Lisp 언어를 다른 언어와 구분하는 것입니다. 개인적으로 나는 Scheme 매크로를 좋아하지 않지만 그렇게 중요하지는 않습니다. 예를 들어 Clojure 매크로가 훌륭하다고 생각합니다 (그러나 JVM에는 꼬리 재귀가 없기 때문에 Clojure의 재귀는 깨끗하지 않습니다). 클로저는 매우 중요한 개념입니다. 일단이를 이해하면 즉시 자바 스크립트를 "볼"수 있습니다. C ++, Python 및 Lisp를 연구 한 후 Javascript는 "사소한"상태가됩니다.

  2. Haskell : 기능적 언어에 대해서는 Haskell을 이길 수 없다고 생각합니다. Lisp과 Scheme은 기능적인 것으로 간주되지만 기능적인 프로그래밍을 강조하려면 학생들이 국가없이 생각하도록 강요해야합니다. Haskell은 또한 카레 링과 같은 다른 멋진 것들과 "파괴"에 대한 패턴 매칭을 가지고 있습니다. 나는 Haskell을 많이 모르지만 작성할 수있는 코드의 간결함은 매우 아름답습니다. Haskell을 잘 알고 있으면 Erlang을 훨씬 쉽게 이해할 수 있습니다.

  3. 넷째 : 스택 언어. Lisp와 Haskell이 충분하지 않으면 논리를 완전히 다시 깨뜨립니다. 존스 포스 (Jones 's Forth) 가 집회를 알고 있기 때문에 지금까지 무슨 일이 일어나고 있는지 완전히 이해할 수 있습니다. 예를 들어 Forth를 알고 있으면 PostScript가 열립니다.

(이 마지막 3 개는 당신이 말한 폭입니다. 저에게는이 언어들은 그들이 당신의 사고 방식을 바꿀 정도로 충분히 이상합니다. 그들은 적어도 저를 위해 한 것입니다. 그리고 나는 이것들로 새로운 언어를 배우기에 충분한 패러다임을 이해합니다. 매우 빠르게.)

선택적으로 다음을 연구 할 수 있습니다.

  1. SmallTalk : 순수한 객체 지향 언어. 객체 방향을 심각하게 고려할 때 발생하는 상황을 확인하기 위해 언어에 "if", "for"가 필요하지 않습니다. 모든 것이 메시지입니다. 다시 큰 실현. (이것은 이제 Objective-C를 쉽게 만들 것입니다.)

  2. Go : 동시성에 중점을 둔 (아름다운) 언어입니다. Go는 프로그램하기에 매우 좋고 편안합니다.

  3. 프롤로그 : 프로그래밍의 또 다른 패러다임. 나는 프롤로그를 쓰지 않았지만 그것이 또 다른 마음을 굽히는 언어라는 것을 이해합니다.


6
파이썬과 루비 (루아에 대해 모른다)는 강력하게 유형이 지정된 언어입니다. 나는 당신이 그것들이 정적으로 입력되는 것이 아니라 동적이라는 것을 의미한다고 생각합니다.
Daniel Roseman

13
C와 C ++를 별개의 두 언어로 취급하십시오.
David Thornley

1
Bjarne의 말 : ""C / C ++ "라는 언어는 없습니다.이 문구는 일반적으로 프로그래밍에 대한 단서가없는 사람들 (예 : HR 담당자 및 가난한 관리자)에 의해 사용됩니다. C ++를 알고있다 (그리고 종종 C도 아님). "
fredoverflow

1
누군가가 어셈블리가 C ++보다 우선해야하는지 논쟁하고 싶습니다. 이 시점에서 간단한 개념과 작은 도구 세트로 인해 어셈블리에 접근하는 것이 상당히 쉽지만, 원시 메모리 및 원시 메모리 참조 작업은 C ++에 접근 할 때 매우 유용해야합니다. 메모리 위치와 값은 대부분의 사람들에게 sh *를 혼동합니다.
Filip Dupanović

1
CS 학생 2 명에게 일주일 내내 코스 조립 과정을 진행했습니다. basicaly 나는 최소한의 명령 집합 컴퓨터와 통역사를 발명했습니다. 그런 다음 타이밍이 완료된 매우 간단한 루틴을 작성하고 실행할 수 있습니다. 그런 다음 데이터 캐싱 및 프리 페치와 같은 기능을 추가하여 아키텍처 기능이 성능과 어떻게 상호 작용하는지 확인할 수있었습니다. 인공 어셈블러와 컴퓨터가 목적이 교훈적이라면 사용하는 무언가를 얻는 것보다 유연성과 학습 효율성을 높일 수 있다고 생각합니다.
오메가 센타 우리

12
  • 지금 필요한 것
  • 다음에 필요한 것
  • 그 후에 필요한 것

진지하게, 나는 내 시간에 BASIC, COBOL, Fortran, Forth, Pascal 및 Prolog를 배웠을지도 모르지만, 그것들을 사용할 필요가 없었으며 다른 사람들의 사용에 영향을 미친 방식을 실제로 볼 수는 없었습니다. 서로 패러다임을 잘못 적용하는 것을 제외하고는 언어. 실제로 구조적 파스칼을 작성하기에 충분한 BASIC, C로 파스칼 코드 작성을 중단하는 데 2 ​​년, Objective-C 및 Java를 사용하기 시작했을 때 실제로 OOP를 시작하는 데 2 ​​년이 걸렸습니다. 반면, OO 언어로만 (거의) 독점적으로 일한 이래로 Scheme 또는 PostScript처럼 보이게 만들지 않고 OO 언어 사용을 개선하는 데 집중할 수있었습니다.


4
알다시피, 나는 당신이 그것을 필요로 하지 않더라도 새로운 언어를 배우는 것이 가치가 있다고 생각 합니다 ...하지만 나는 당신이 오히려 유용 하다고 생각하기 때문에 언어를 배우는 것이 더 낫다는 일반적인 감정에 동의합니다 그것이 당신이 "배워야"한다고 생각하기 때문입니다.
Tim Goodman

8

시퀀스가 이상적이라고 주장하기는 어렵지만 정당화 할 수있는 계획을 세우겠습니다.

  1. C 학습은 인내와 근면을 요구하며 컴퓨터가 데이터를 처리하는 기본 방법을 소개하고 프로그래머가 그러한 머신을 처리 할 수있는 가장 광범위한 책임을 보여줍니다.

  2. C가 요구하는 엄격함에 대한 해독제로서 믿을 수 없을 정도로 용서하는 Perl을 사용해보십시오. C로 쓰는 데 일주일이 걸렸던 것은 Perl에서 한 시간 안에 쓸 수 있습니다. 프로그래밍에서 찾을 수있는 다른 종류의 기쁨을 소개하고, 특정 관심사와 세부 사항을 배제하여 프로그래머가 다른 것에 집중할 수있는 방법을 보여줍니다.

  3. C ++ 또는 Java

    다음으로, 프로그래밍의 저수준 및 원시적 측면에 대한 C의 초점이 추상화 수준을 높이기위한 기초 역할을하는 방법을 살펴보고 추상화를 진행할 때 효율성을 높이는 거래를 주목하십시오. 프로그램에 중요한 효율성을 유지할 수있는 추상화를 구성하는 방법을 살펴보십시오.

  4. 공통 리스프

    이것은 이전 슬로 그에 대한 보상입니다. 앞의 모든 언어에서 배운 내용에 대한 반향을 발견하고 Lisp에서 프로그래밍 할 때 앞선 많은 양보가 어리석은 모습을 보게됩니다. C의 전처리 기와 C ++의 템플릿은 Lisp의 매크로 시스템을 높이 평가합니다. Perl의 표현 용이성, C의 저수준 최적화 기회, C ++ 또는 Java의 추상화 구축 기능을 다시 한번 경험해보십시오. 아마도 Perl의 디버거를 제외하고 앞의 세 가지 중 어느 것도 유능한 REPL ( "읽기, 평가, 인쇄 루프")을 통한 대화식 프로그래밍 경험을 준비하지 않았습니다 . 이미지 작업소스 코드와 "실행 가능 프로그램"의 개념 사이의 관계를 변경하는 환경 기반은 프로그램 작성의 의미에 대한 전체 아이디어를 변경합니다.

이 네 가지를 넘어 Haskell의 함수형 프로그래밍이나 Prolog의 논리 프로그래밍과 같은 다른 스타일의 프로그래밍을 탐색하면 프로그래밍 범위에 대한 포괄적 인 이해가 가능합니다. 당신이 아는 어떤 언어로든 당신의 기술 (심층 지식)을 향상시킴으로써.

충분히 다른 언어를 맛본 후에는 그중 하나를 능가하는 아이디어에 초점을 맞추기 위해 견해가 높아질 것입니다. 그것은 일종의 아버지의 차를 운전을 배우고 운전하는 방법을 아는 차이 등의 어떤 차를 : 당신은 몇 일 동안 임대 미니 밴을 운전하는 데 전체 잘 좋아하는 스포츠 차를 운전의 즐거움을 알고 즐길 수 있습니다, 그러나 당신은 그것을 어떻게 작동시키는 지 알아낼 것이며, 아마 아마추어보다 가난한 짐승으로부터 더 많은 것을 동원 할 것입니다.


4
C와 Common Lisp의 경우 +1이지만 Perl을 두 번째 언어로 사용 하시겠습니까 ?? :) 파이썬은 프로그램을 처음 작성한 후 몇 주, 몇 달, 몇 년 안에 자신과 다른 사람들이 읽을 수있는 코드와 같은 좋은 프로그래밍 습관을 장려하면서도 역동적 인 언어로서 훌륭하게 작용할 것입니다.
limist

1
Perl 추천에 관해서는 : 그것은 단지 내 나이를 보여주는 것입니다. 물론 오늘날 파이썬이나 루비는 가까운 대체물이지만, 둘 다 Perl보다 독단적이며, C에서 나온 새로운 프로그래머가하는 클래스 별 메소드 스타일 객체 지향에 더 편향되어 있습니다. 아직 필요하지 않습니다. 나는 Perl을 배웠을 때 즉시 생산성이 높았으며 그 이후로 객체 지향 기능을 사용하기 시작한 지 오래되지 않았다는 것을 기억합니다. 너무 자주, OO에 집중하는 모든 것은 단지 혼란스럽고 불필요한 의식입니다.
seh

나는 당신이 "추상화 할 때 효율적으로 거래하는 거래"라는 견해에 동의하지 않습니다. C ++의 기둥 중 하나는 C ++ 기능을 사용하는 프로그램이 동등한 C 프로그램 보다 느리지 않다는 것 입니다. 예를 들어, C ++에서 가상 함수를 사용하는 것이 C에서 가상 함수를 시뮬레이션하는 것보다 결코 느리지 않습니다 .
fredoverflow

사실, 프레드, 그리고 그것이 의미하는 바입니다. 작동 방식을 생각하지 않고 기능을 활용하면 비용이 발생할 수 있습니다. 기능 기능을 피함으로써 이전에 피할 수 있었던 비용은 엄청나게 복잡하거나 불충분하게 관용적 이었기 때문에 피했습니다 수동으로 구현합니다. 예를 들어, RTTI는 "너무 느리다"라고 불평 즉시 방법의 문제 제기 다른 문제를 해결하기 위하여려고하고있다.
seh

6

1. 스몰 토크

아이들이 컴퓨터를 사용하여 배우는 방법으로 적어도 부분적으로 설계되었습니다. 구문은 단락에서 설명하기에 충분히 간단합니다. LOGO와 마찬가지로 "낮은 진입 장벽, 높은 천장"원칙을 보여줍니다.

스몰 토크 는 "모든 것이 대상"이라는 점에서 순수한 OO 언어 입니다.

또한 특히 Collection API에서 체인 메시지, 고차 함수, 맵, 축소 등 많은 기능 기술을 가르칩니다.

que 커뮤니티는 활기차고 환영합니다. 또한 고급 기술에 대한 많은 토론을 볼 수 있습니다. lisp 커뮤니티와 마찬가지로 메일 링리스트 에는 경험이 풍부한 스몰 토커가 많이 있습니다 . (Squeak 커뮤니티에는 전문 교육자들로 구성된 대규모 하위 인구가 있다는 사실이 아프지 않습니다.) 초보자를위한 또 다른 목록 도 있습니다.

2. 프롤로그

다른 언어와는 매우 다른 계산보기를 제공 하는 논리 프로그래밍 언어입니다. 프롤로그는 또한 매우 선언적입니다 (그러나 완전히 그렇지는 않습니다 : !또는 절단 연산자가 술어에 유의미한 의미를 가질 수 있습니다).

3. 공통 리스프

당신이 원한다면 여기에 대체 계획. 공통 Lisp 는 여러 패러다임, 특히 OO 및 기능을 지원합니다. 또한 오랜 역사를 가지고 있습니다 (Lisp는 여전히 가장 널리 사용되는 두 번째 언어입니다 : FORTRAN의 오래된 언어입니다).

4. 하스켈

(주의 : 나는 방금 그것을 배우기 시작했습니다.) 아마도 지구상에서 가장 순수한 기능 언어 일 것입니다. 그것은 매우 진보 된 정적 타입 시스템을 가지고 있습니다. 편리한 소개 이 있습니다.

5. C 또는 델파이

컴퓨터 작동 방식을 알아야합니다. 메모리와 CPU가 실제로 어떻게 작동하는지 알아야합니다. 이 두 가지 모두 전통적으로 "금속에 가깝습니다". 언어가 어떻게 어셈블리로 컴파일되는지 생각하는 커뮤니티를 가지고 있습니다.

왜이 주문입니까?

스몰 토크는 배우기 매우 쉬우므로 컴파일러와 싸우지 않고 문제 해결에 빨리 집중할 수 있습니다 ( "낮은 장벽"). 프로그래밍을 시작한 후에는 "높은 천장"에 대한 인위적인 제한이 없습니다.

OO의 작동 방식에 대한 공정한 아이디어가 있다면 (그리고- "OO"의 의미에 대한 많은 다른 이해가 있다는 점을 감안하면 OO가 시장을 장악한다고 말할 수 있습니다) Prolog로 이동하면 시작하지 않습니다. OO가 유일한 방법이라고 생각합니다. 프롤로그는 대부분의 언어와 매우 다르며 정신 근육을 늘려서 모든 것을 알고 있다고 생각하지 않습니다.

커먼 리스프는 어른의 언어입니다. 그것은 성숙한 표준을 가지고 있으며, 스몰 토크와 함께 수십 년 동안 언어 디자인을 주도 해 왔습니다. 여러분이 좋아하는 언어가 방금 획득 한 멋진 새 기능들입니까? 기회는 Lisp 또는 Smalltalk에서 배양 된 아이디어입니다. 커먼 리스프는 또한 약간의 사마귀입니다.

Haskell의 네 번째 목록은 (단지 제가 배우기 시작했습니다.) 순도는 순전히 기능적인 언어보다는 I / O와 같은 매우 일반적인 것들이 수행하기가 더 어렵다는 것을 의미하기 때문입니다. Haskell 사람들은 또한 상당히 이국적인 용어 ( "catamorphism"과 같은 단어)를 사용하며,이를 다루기 전에 벨트 아래에서 프로그래밍 경험이 더 나을 것입니다. (그러나 나는 다시 반복해야한다, 나는 단지 그것을 배우기 시작했다! 소금의 꼬집음으로이 의견을 받아들이십시오!)

그리고 왜 C / Delphi가 지속됩니까? 임베디드 시스템에서 작업하지 않는 한 수동 메모리 관리 만 있으면 프로그래밍을 배울 필요가 없습니다. 가비지 콜렉션은 1980 년대 레벨 머신에 충분했습니다. 당신의 전화 는 강력합니다!

마지막으로 Erlang 을 위 목록에 넣지 않았습니다 .


2
이것이 학습 순서 입니까?
Wizard79

그것은 분명히 길이 (길이 1)입니다.
Frank Shearar

덜 모호하게 : 순서대로 한 단계를 제공하고 다른 단계를 제공하면 커뮤니티가 해당 순서의 순서에 따라 투표 할 것입니다.
Frank Shearar

3
@ 프랭크 나는 그런 뜻이 아니었다. 나는 완전한 순서를 기대했다. 그리고 나는 투표로 주문을 할 수 없다고 생각합니다.
Gulshan

사람들에게 부탁하십시오 : 당신이 downvote 할 경우 이유를 설명하십시오 .
Frank Shearar

5
  1. 파이썬. 프로그래밍에 대한 훌륭한 소개. 이것은 또한 프로그래밍에 대한 이전의 노출과도 관련이 있습니다.

  2. 계획. 또한 프로그래밍에 대한 훌륭한 소개입니다. 프로그래밍 초보자를 다루는 경우이 첫 번째와 Python을 가르치고 싶을 수도 있습니다. 한 가지 대안은 Python 대신 우선 Scheme 대신 Common Lisp입니다. 더 많은 작업이 있지만 더 많은 보상이 있습니다.

  3. C. 실리콘에 가까운 저수준 언어. 컴퓨터가 무엇을 할 수 있는지 배우기에 좋습니다. 어떤 형태의 어셈블러 언어를 대체 할 수 있지만 C는 기본에 가깝고 작업하기가 훨씬 쉽습니다.

  4. 프롤로그. 또는 더 좋아하는 언어를 찾으면 선언 스타일의 범용 언어로 대체하십시오.

  5. 하스켈. 다른 유형이 없다면 유형 시스템과 순수한 기능을 위해.

  6. 여기에는 6 개 언어로 모든 개념을 다루는 것이 불가능하므로 몇 가지 후보가 있습니다. Common Lisp은 매크로 시스템과 객체 시스템 (내가 본 다른 시스템과는 다름)에 대해서만 배울 가치가 있습니다. 넷째, Tcl 및 APL은 모두 약간의 성공을 거둔 이상한 언어이며, 그중 하나는 학생이 모든 것을 배우는 것처럼 느끼지 못하게하는 데 좋습니다. Erlang은 동시성에 좋습니다.


"프로그래밍 초보자를 다루는 경우,이 첫 번째와 파이썬 두 번째를 가르치고 싶을 것입니다." 매우 동의했다. 그것은 나의 이전 대학이 지금 취하는 접근 방식이며 잘 작동하는 것 같습니다.
pyvi

이것은 꽤 좋은 목록입니다. 아마도 Haskell과 Prolog의 순서를 바꿀 것입니다. 학생이 특히 경험이 부족한 경우, 6 명을 중단하고 목록을 올린 다음 더 간단한 것으로 시작합니다.
Orbling

4

많은 좋은 답변이 제공되었지만 SQL을 제공하는 사람은 없었습니다. 데이터베이스를 다루어야하는 프로그래머에게는 매우 중요하며 다른 대부분의 동물과 완전히 다른 동물입니다.

Batch, grep, awk 등과 같은 일부 OS 레벨 스크립팅 '언어'를 고려할 수도 있습니다. 'Make'도이 범주에 속할 수 있습니다.

고려해야 할 다른 언어 중 하나는 아직 완전히 죽지 않은 경우 COBOL입니다. 다른 절차 적 언어와는 충분히 다르므로 언급 할 가치가 있습니다. C, Fortran, Basic 등의 변형이 비슷해지면서 일단 익숙해지면 다른 것으로 옮기는 것이 큰 문제는 아니지만 COBOL에는 다른 것에서 당연한 것으로 여겨지는 많은 구성이 없습니다. (COBOL로 작업을 수행 한 지 20 년이 지났으므로이 언어와 관련하여 관찰 한 내용이 더 이상 유효하지 않을 수 있습니다.)

역사적 관점에서 APL을 언급하거나 평온하게 쉬고 싶을 수도 있습니다. 당신의 선택.


1
내가 SQL을 제안하지 않은 이유는 SQL이 범용 언어가 아니기 때문입니다. 차라리 학생들은 Prolog와 같이 선언적이고 좀 더 일반적인 것으로 학생들을 때렸습니다. OS 수준의 스크립팅 언어는 Python이나 Perl과 같은 일반적인 언어가 제공하지 않는 기능을 제공하지 않습니다. 마지막으로 COBOL을 만졌는데 다른 언어로는 더 나아질 수없는 개념이 없었습니다. 저는 APL 제안을 좋아합니다. 역사적 가치는 그다지 다른 언어이기 때문에 그리 중요하지 않습니다.
David Thornley

@David Thornley : SQL이 범용 언어가 아님에 동의합니다. SQL에는 흥미로운 논리가 있고 이론 개념을 다른 언어로는 나오지 않는 기본 연산으로 설정합니다. 데이터베이스를 다루는 모든 사람에게 주목할 가치가있는 조합, 조인, 그룹 별 등.
oosterwal

내가보고 싶은 모든 것은 학습자에게 가르쳐졌지만 일부는 역사적 느낌을 가지고 있습니다. 스크립트 언어를 배우는 것은 필수적이지만 SQL과 마찬가지로 다른 언어와 함께 수행 할 수 있으며 기본 언어의 서비스 언어입니다. 학생이 수학 에 매우 강 했다면 APL로 시작하는 것이 좋을 수도 있습니다 (또는 읽기가 훨씬 쉽지만 비슷하게 사용할 수 있기 때문에 R 일 수 있습니다).
Orble

2

Eric Raymonds "해커가되는 방법"을 먼저 읽어 보는 것이 좋습니다. Lisp는 "코드는 데이터이고 데이터는 코드입니다"라는 개념을 가지고 있습니다.

프로그래밍을 위해 Haskell, Prolog, SQL 및 어셈블리 언어 (일부 언어)도 제안합니다.

배우고 싶은 내용에 관계없이 시간을내어 제대로 배우고 사소한 양의 코드를 작성하십시오. 자전거 타기와 매우 비슷합니다. 책에서는 배울 수 없습니다.


2

먼저> 프로그래밍을 시작할 때 무엇을하고 싶습니까? 게임 프로그래머가되는 법을 배우는 것은 비즈니스를위한 데이터베이스 프로그래머가되는 법을 배우는 것과 웹 기반 프로그래머와는 다릅니다 ...

둘째> 일단 배우기 시작하면, 높은 시작을하고 내려 가고 싶습니까? 아니면 낮은 곳에서 시작해서 일을 시작하십시오. 학습 C # (높은 수준)은 학습 어셈블리 (낮은 수준)와는 많이 다릅니다.

큰 선택은 당신이하고 싶은 것에 달려 있습니다. 드라이버 프로그래밍은 대부분 C 또는 어셈블리를 포함 할 것입니다 ... 웹 사이트 프로그래밍은 PHP, C #, asp 등이 될 것입니다 ... 웹 프로그래밍을위한 어셈블리를 건드리지 않을 것입니다 ... 등 ...

기본적으로 ... 원하는 것을 결정하면 언어를 쉽게 선택할 수 있습니다. 예를 들어, 저는 병원의 데이터 분석가가되었습니다. 따라서 언어의 "선택"은 데이터 액세스를위한 SQL / TSQL / DB2, Windows 클라이언트를위한 C # WPF, 웹 클라이언트를위한 Silverlight, IBM 백엔드 로직을위한 일부 RPG / CL입니다.

개인적으로 나는 좋은 책을 고수하고 언어를 연습 할 자신의 프로그램을 작성합니다. 나는 APress를 좋아하고 C #을 배울 때 C # 2008 Illustrated를 읽는 것을 좋아했습니다. 그들은 배우지 못한 사람뿐만 아니라 전문가를위한 기본 사항을 포함하는 다른 책을 가지고 있습니다.


2

초보자는 한 언어 만 있으면됩니다. 두 번째 언어를 배우고 나면 이미 많은 경쟁 개발자를 넘어서고 있습니다. 다음 순서로 배울 것입니다.

  • 스몰 토크 (Smalltalk)-이것은 OO가 얻는 가장 좋은 방법이며, 간단한 노출은 일을해야하는 방식에 눈을 뜨게합니다. OO 개념을 배우는 것이 가장 좋습니다.
  • Java 또는 C #-정적으로 확인 된 유형을 도입하면서 OO에 대해보다 건축적이고 계획된 접근 방식을 제공합니다.
  • 루비 또는 파이썬-Java 또는 C #을 느낄 때까지는 감사 할 수 없습니다.
  • 얼랭 (Erlang)-동시성을 쉽게 보이게하는 방식으로 수행됩니다. OO 언어 나 C가 할 수있는 것보다 훨씬 낫습니다.
  • Lisp, Haskell 또는 기타 기능적 언어-문제 해결에 대한 다른 접근 방식입니다.
  • C-Java 용 기본 확장을 구축하거나 더 낮은 수준의 알고리즘을 구현하여 컴파일러를 작성할 때까지 필요한만큼 어셈블리에 가깝습니다.

"C ++는 어디에 있습니까?" 그리고 X는 어떻습니까? 솔직히, 다국어를 배우는 것은 두 가지 일을합니다 : 그것은 당신의 경험을 풍요롭게하고, 더 많은 언어를 배우는 동력을 제공합니다. 내가 잘 아는 언어 목록 (Java, C #, Ruby, C ++, Javascript)은 모두 객체 지향적이지만 주로 업무에서 매일해야하는 일이기 때문입니다. 내가 접한 언어 목록 (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go)은 모두 귀중한 교훈을 가르쳐주었습니다. 적어도 그 언어로 무슨 일이 일어나고 있는지 이해할 수 있습니다. 내가 조사하지 않은 것이 많지만 앞으로는 잘 될 것입니다. HTML, XSL : FO, XSLT, CSS, XML, SGML과 같은 마크 업 언어도 있습니다.

적어도 두 가지 다른 언어를 배운 후에는 배우고 싶은 사람이 다음에 선택하기로 결정하는 것을 제한해서는 안된다고 생각합니다. 학습은 유기적 인 경험이되어야하며, 그 과정에서 너무 많은 구조는 정확히 같은 방식으로 생각하는 사람들 그룹을 만듭니다. 말하자면 단일 문화.


2

이 답변의 대부분은 거의 동일하게 보이므로 다른 의견을 제시 할 것입니다. 나는 가장 좋은 첫 번째 언어가 Tcl이라고 믿었습니다.

왜? 하나는 배우기 매우 쉽습니다. 언어에 대한 구문이 많지 않으므로 학생은 프로그래밍 개념에 더 집중하고 특정 언어의 구문 특성에 덜 집중할 수 있습니다. 이 글을 쓰는 시점에서 Tcl에는 전체 언어를 제어하는 ​​12 가지 규칙이 있습니다 (지난 수십 년 동안 11 개에서 증가).

또한 Tcl에는 환상적인 내장 GUI 언어가 제공되므로 비교적 즉각적인 만족감을 얻고 이벤트 중심 프로그래밍의 기본 사항을 배울 수 있습니다.

셋째, 확장 가능합니다. 반복 루프에 대해 가르치고 싶습니까? 반복 루프를 수행하는 명령을 작성하여 반복 사용 방법을 배울 수있을뿐만 아니라 실제로 직접 작성했기 때문에 반복 루프와 다른 점을 배울 수 있습니다.

또한 확장 가능하기 때문에 C로 쉽게 이해할 수 있습니다. C 기초를 배우고 a) 다른 언어로 작성된 새 명령으로 Tcl을 확장하거나 b) 작성된 프로그램에 스크립팅 언어를 추가하는 방법을 배울 수 있습니다 씨.

일단 Tcl과 C를 배운 후에는 대부분의 다른 언어가이 두 극단 사이에 있으며 비교적 쉽게 찾을 수 있습니다. Tcl과 C 이후에 가르 칠 네 가지 목록은 다음과 같습니다.

  1. Tcl
  2. Python-OO 개념의 경우 다른 언어와 대비되는 들여 쓰기 별 블록 동작을 정의합니다.
  3. 루비-OO에 대한 다른 견해와 프레임 워크에 대해 배울 수있는 레일
  4. java-어디서나 사용되며 알아야하며 JVM에 대해 알아야합니다.
  5. groovy-역동적 인 언어로 돌아 가기

1

어셈블리 언어, C, SQL, C #

지루하고 구식입니다. 그리고 전체 질문은 문제 해결, 도메인 모델링 및 알고리즘 구성 인 프로그래밍의 어려운 부분을 무시합니다. 그러나 이유는 다음과 같습니다.

  1. 당신은 어셈블리 언어를 통해 길을 속일 수 없습니다; 당신은 그것을 얻거나 얻지 못합니다. 컴파일러는 사용자를 저장하지 않으며 프레임 워크 또는 라이브러리 오버 헤드가 없으며 머신 아키텍처에서 숨길 수 없습니다. 그것은 순수한 프로그래밍입니다 (초보자 추가 2 수 수준에서)

  2. 수백 줄 이상의 어셈블리 언어 프로그램을 작성한 후에는 포인터와 메모리 관리가 더 이상 불가사의하지 않으며 코드의 패턴 (if, switch, array, loop 등)을 인식하기 시작해야합니다. ). C는 이러한 패턴을 햇빛으로 가져 와서 빛나게합니다. 표준 라이브러리는 방대하지 않고 유용하지만 매크로 / 템플릿 / 등을 신경 쓰지 않습니다. 이 단계에서.

  3. 이제 SQL을 사용하여 데이터베이스로 이동 저장 프로 시저를 사용하지 말고 테이블과 쿼리의 기초를 얻으십시오.

  4. 수백 줄 이상의 C 프로그램을 작성한 후에는 포인터, 구조 및 메모리 관리가 자연스럽고 절차 적 구성은 오랜 친구입니다. 고차 패턴을 발견하기 시작할 것입니다. 이러한 함수는 항상이 데이터 구조와 함께 사용되며, 코드의이 부분은 메소드 X, Y 및 Z 등을 제외하고 코드의 해당 부분과 같습니다. 여기에 관계형 데이터를 파악하면 객체 지향 언어를 사용할 수 있습니다. 방대한 프레임 워크와 일반적으로 문서가 모호합니다. 실제 세계에 오신 것을 환영합니다! GUI 탐색, 데스크탑 앱 작성, 웹 사이트 작성, 웹 서비스 작성, 원하는 것을 작성하십시오. 당신이 너무 기울어지면 구직하십시오.

이제 프로그래밍 Jedi입니까? 코드 닌자? 아니요 , 이제는 유능합니다. 그러나 당신은 반짝이는 새롭고 재미있는 것을 탐색하기 위해 견실 한 기초를 가지고 있습니다.


1

기초가 필요합니다.

  1. 기계 코드
  2. 어셈블리어
  3. 리스프

그 후 그것은 중요하지 않을 것입니다.


0

좋아, 오늘은 현상금의 마지막 날입니다. 그리고 나는 대답을 추가하고 있습니다. 내가 제안한 순서

C, C ++, JAVA / C #, Python / Ruby, 기타 언어 (어셈블리 / 리스프 / 프롤로그 등)

  • 나는 첫 번째 언어가 가장 쉬운 언어라고 생각하지 않습니다. 오히려 컴퓨터가 추상화를 유지하는 방법에 대한 전반적인 아이디어를 제공해야한다고 생각합니다.
  • C에서 C ++로 쉽게 전환 할 수 있습니다. 요즘 가장 많이 사용되는 패러다임 인 OOP가있을 것입니다.
  • C ++에서 C # / Java로 쉽게 전환 할 수 있습니다. 함수형 프로그래밍과 같은 많은 패러다임을 통합하기 때문에 C #을 선호합니다.
  • 누군가가 파이썬이나 루비와 같은 역동적 인 언어를 사용하게되면 " WoW " 가있을 것 입니다. 다이나믹 한 타이핑의 아름다움을 느끼기가 더 쉬울 것입니다. 그러나 동적 언어를 먼저 배우고 정적 언어를 배우면 나중에 " 오! 왜이 모든 것을 추가해야합니까? "
  • 이제 가장 많이 사용되는 패러다임과 언어가 거의 완성되었습니다. 따라서 원하는 것을 탐색하십시오. 어셈블리에서 Lisp, Prolog 또는 Haskell까지. 다양한 프로그래밍 언어의 새로운 컨텍스트 및 기능을 발견하십시오.

여기서 C는 시작을위한 것입니다.
굴샨

java보다 C #의 선호도는 거의 동일하다고 말하는 많은 요소에 달려 있습니다.
prasonscala

0

구성표, C, C ++

저는 편견을 갖고 대학에서 현재 핵심 컴퓨터 과학 커리큘럼에 사용하는 모델을 사용합니다. 나는 첫해에 반대했지만 나중에는 감사하게 생각합니다. 이 모델은 프로그래밍 경험이 필요하지 않지만 학습 능력이 필요합니다.

  1. 계획
    우리는 당신이 프로그래밍을 먼저 배우고 있으며, 마법이 적을수록 좋습니다. Scheme의 교육 언어는 언어를 명확하고 합리적으로 정의하며, 확장하고 확장 할 수있는 아주 작은 공리 ( "마법")입니다. 수학의 기능을 이해할 수있는 사람이라면 누구나 Scheme 프로그램을 추적하고 추론 할 수 있습니다. Scheme으로 시작하면 언어 별 세부 사항에 대해 걱정하지 않고 계산에 대해 깨끗하고 강력하게 생각할 수 있습니다.

  2. C
    스킴에서 C로 이동하는 것은 과감한 일이지만 고급 언어와 저급 언어의 매우 중요한 매핑에 대해 배울 수 있습니다. 메모리 모델 (포인터, 힙, 스택 등)과 프로그램 컴파일 및 실행 방법, 포인터, 스택 및 힙 작동 방법을 배우는 것이 필수 기술입니다. 이 낮은 수준의 이해를 통해 더 높은 수준에서 프로그램 분석을 시작할 수 있습니다 (Big O). 다른 구현 (예 : 간단한 해시 테이블 대 세트의 이진 트리)을 사용하여 자신의 추상 데이터 유형을 롤링 할 수 있습니다.

  3. C ++
    C와 Scheme을 배우면서 우리는 프로그래밍 언어의 다른 패러다임과 그것들이 다른 문제에 어떻게 적용될 수 있는지를보기 시작합니다. 이제 프로그래밍의 가장 무서운 측면 인 선택과 트레이드 오프에 접근 할 수 있습니다. 프로그래밍 언어 선택은 성능, 가독성, 유지 관리 성, 견고성 등에 영향을 줄 수 있습니다. 머리에 붙을 수있는 것보다 더 큰 문제를 해결하려면이 선택은 훌륭하지만 위험합니다. C ++는 프로그래머에게 가능한 적은 선택을하려고합니다. C ++ 학습을 통해 이러한 장단점을 스스로 선택하여 문제를 해결하는 방법을 배우게됩니다.

업계에서 이러한 언어를 사용하지 않거나 다시 터치 할 수는 있지만 학습 과정을 통해 사용할 다른 언어를 이해하는 데 도움이됩니다. 또 다른 측면은 특정 언어를 중심으로 도구를 배우는 것입니다. 명령 행을 통해 gcc 실행, Vim 학습, GDB를 사용하여 프로그램 단계별 실행, Make 파일 작성, SVN을 사용하여 코드 체크인, 테스트 자동화를위한 쉘 스크립트 작성 등

핵심 교과 과정에는 다른 과정 (컴퓨터 아키텍처, 데이터 구조 및 알고리즘, 컴파일러, 운영 체제 등)도 있습니다. 따라서 이러한 언어를 배우는 것만으로는 프로그래밍에 능숙하지 못합니다.


0

기본 언어에서 고급 언어로가는 것이 좋습니다. 그렇게하면 여전히 뒤에서 무슨 일이 일어나고 있는지 알 수 있습니다.

  • C-포인터 및 메모리 관리
  • C ++-OO 기초와 여전히 인기
  • Java / C #-가장 많이 사용되는 언어
  • 일부 기본 어셈블리
  • 기능적 언어-Eg Haskell
  • 스크립트 언어-예 : Python

0
  1. 파이썬. 작업을 수행하려면 일반 프로그래밍을 수행하십시오. 절차 적, OO 및 기능적 기능.

  2. 정규식. 그들은 파이썬 라이브러리에 있지만 별도의 DSL입니다.

  3. 쉘 (BASH 또는 무엇이든). "&", "|", ";" 프로세스 결합 연산자는 파이썬에서 중요하고 불쾌합니다.

  4. SQL. 이것은 현재 로서는 데이터 액세스를위한 언어 입니다.

  5. XHTML. 이것은 현재 데이터 표시를위한 언어 입니다.

  6. CSS.

필요할 경우 C 일 수 있습니다.


" 심오한 깨달음 "단계를 생략 한 것 같습니다 . 그 숫자가 7입니까?
Mark C

@Mark C : "오늘 많이 사용되는 언어와 패러다임의 대부분"을 다루려고합니다. 내 경험상 이러한 "기타"또는 DSL은 프로그래밍 언어보다 더 많이 사용됩니다. 나는 이것이 실제로 사용되는 많은 언어에 노출되는 심오한 깨달음으로 이어질지 확신하지 못한다 .
S.Lott

네 말이 맞아 나는 그가 "또는 패러다임"이라고 말했다. 유머가 좋았습니다.
Mark C

@Mark C : 그러나 SQL과 CSS는 가장 흥미로운 "다른 패러다임"입니다. 실제로 정규 표현식은 스택 오버플로에 많은 질문을 일으키는 패러다임입니다.
S.Lott

0

금속 가까이에서 시작하십시오.

  1. 어셈블러
  2. C ++
  3. 씨#
  4. 리스프
  5. 파이썬 또는 루비

이제 이러한 광범위한 접근 방식의 문제점은 수년간의 연구 없이는 아무도 이러한 언어를 원격으로 사용할 수 없다는 것입니다.

  1. 어셈블러 : 3 개월
  2. C : 6 개월
  3. C ++ : 2 년
  4. C # : 6 개월
  5. 리스프 : 3 개월
  6. 파이썬 / 루비 : 3 개월

당신의 의도가 그들에게 "Hello world"를 가르치는 것이 아니라면 6 개월 동안 한 달이 걸린다.


-1

직접 들어가서 VB 또는 C #을 배우십시오. 제 생각에는 둘 다 초보자부터 고급까지 다양한 언어입니다.


4
그 정도는 아니기 때문에 질문에 대한 답이 아닙니다. 또한, 그 중 하나 (또는 ​​둘 다)가 배워야 할 모든 것을 다룬다 고 생각하면 더 많은 언어를 배워야합니다.
David Thornley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.