각 유형의 프로그래밍 언어 학습


24

모든 프로그래머가 각 유형의 언어 중 하나를 배워야한다는 이야기를 여러 번 들었습니다. 이제 이것이 반드시 사실은 아니지만 좋은 생각이라고 생각합니다.

나는 절차 언어 (펄)을 배운,하지만 있는 다른 유형은?

그들 사이의 차이점은 무엇이며 각각의 예는 무엇입니까?


8
언어를 분류하는 수많은 중복 방법이 있음을 알고 있어야합니다. 가장 일반적인 것은 패러다임을 프로그래밍하는 것이지만, 주요한 사소한 차이가 있고, 완전히 분리 된 축이 많으며, 많은 언어가 여러 패러다임에 속합니다.

1
언어를 배우는 데 관심이 있다면 Lisp와 Scala를 제안합니다. 둘을 다룰 수 있다면 많은 부분을 다뤘습니다.
— Bill K

3
Peter Norvig의 조언 : 최소한 6 개의 프로그래밍 언어를 배우십시오. 클래스 추상화 (예 : Java 또는 C ++)를 지원하는 언어, Lisp 또는 ML과 같은 기능적 추상화를 지원하는 언어, Lisp와 같은 구문 추상화를 지원하는 언어, 선언적 사양 (Prolog 또는 C ++ 템플릿과 같은)을 지원하는 언어, 하나 아이콘 또는 구성표와 같은 코 루틴과 Sisal과 같은 병렬 처리를 지원하는 코 루틴을 지원합니다.
— legends2k

답변:


34

용어가 표준화되지는 않았지만 주요 프로그래밍 패러다임을 분류하는 일반적인 방법은

  • 절차 적
  • 기능의
  • 논리
  • 객체 지향
  • 일반적인

절차 적 프로그래밍이 무엇인지 이미 알고있는 것 같습니다.

에서 기능적인 언어 기능은 퍼스트 클래스 개체로 처리됩니다. 즉, 함수를 다른 함수의 인수로 전달하거나 함수가 다른 함수를 반환 할 수 있습니다. 기능적 패러다임은 람다 미적분학을 기반으로하며 기능적 언어의 예는 LISP, Scheme 및 Haskel입니다. 흥미롭게도 JavaScript는 함수형 프로그래밍도 지원합니다.

에서 논리적 인 프로그래밍 당신과 같은 엔티티 사이의 관계에 대해 설명 술어 정의 president(Obama, USA)또는 president(Medvedev, Russia). 이 술어는 리터럴 값뿐만 아니라 매우 복잡하고 변수를 포함 할 수 있습니다. 모든 술어를 지정한 후에는 시스템에 대한 질문을하고 논리적으로 일관된 답변을 얻을 수 있습니다.

논리적 프로그래밍의 큰 아이디어는 컴퓨터에 물건을 계산 하는 방법 을 알려주는 대신 물건이 무엇인지 알려주 는 것입니다. 예 : PROLOG.

객체 지향 패러다임은 어떤면에서 절차 적 프로그래밍의 확장입니다. 절차 적 프로그래밍에는 정수 및 부동 소수점과 같은 기본 유형, 배열 또는 목록과 같은 복합 유형 및 구조와 같은 사용자 정의 유형이 될 수있는 데이터가 있습니다. 또한 데이터에서 작동하는 절차가 있습니다. 반대로 OO에는 데이터와 절차가 모두 포함 된 개체가 있습니다. 이를 통해 캡슐화, 상속 및 다형성과 같은 멋진 기능을 사용할 수 있습니다. 예 : 스몰 토크, C ++, 자바, C #

일반 프로그래밍은 1983 년 Ada에서 처음 소개되었으며 C ++로 템플릿을 도입 한 이후 널리 퍼졌습니다. 이것이 작동하는 실제 데이터 유형을 지정하지 않고 코드를 작성하고 컴파일러가 알아낼 수 있도록하는 아이디어입니다. 예를 들어 쓰는 대신

void swap(int, int);
void swap(float, float);
....

당신은 쓸 것입니다

void swap(T, T);

코드에서 실제로 사용될 T때 컴파일러가 특정 코드를 생성 swap()하도록합니다.

일반적인 프로그래밍은 C ++, Java 및 C #에 의해 다양한 수준으로 지원됩니다.

C ++와 같은 많은 언어가 여러 패러다임을 지원한다는 점에 유의해야합니다. 언어가 특정 패러다임을 지원한다고하더라도 모든 패러다임의 기능을 지원하지는 않을 수도 있습니다. 특정 패러다임에 어떤 기능이 필요한지에 대해서는 많은 의견이 일치하지 않습니다.


2
SQL은 어떤 범주에 속합니까?
— Kirk Kuykendall

@KirkKuykendall SQL은 전문가이거나 "작은"언어입니다.
— Kevin Lacquement

17
SQL은 선언적 언어입니다. 당신이 원하는 것을 말하면 그것을 얻는 방법을 알아냅니다. (Prolog와 같은 "논리적"언어는 선언적 언어의 다른 부분 집합입니다)
— Izkata

3
답변을보다 완전하게하기 위해 절차에 대한 설명을 할 수 있습니까?
— deworde

3
@Dima 니스 요약. 그러나 "일반 프로그래밍 (generic programming)"은 상대적으로 작은 편이다. "++"는 C ++에서 템플릿을 사용함으로써 나온 것이 아니며 Haskell과 같은 기능적 언어 에서도 매우 자주 사용된다.
— Andres F.

11

프로그래밍 언어에는 주로 직교 기능이 많이 있습니다. 가장 두드러진 것은 그들이지지하는 패러다임 또는 패러다임에 있습니다. 위키 피 디아 기사는 철저하게 패러다임을 커버; 가장 중요한 패러다임은 아마도 다음과 같습니다.

  • 절차 / 구조
  • 기능의
  • 객체 지향
  • 이벤트 중심 및 측면 지향
  • 일반적인
  • 논리

그러나 언어도 다른 방식으로 다릅니다.

  • 타이핑 시스템 (동적 vs. 정적 타이핑, 강력 vs. 약한 유형)
  • 빌드 프로세스 및 런타임 환경 (해석, 바이트 코드 컴파일, 완전 컴파일)
  • 메모리 관리 (C / C ++와 같은 수동, Java와 같은 필수 자동 가비지 수집, D와 같은 선택적 GC 등)
  • 평가 훈련 (열심히하는 게으른; 대부분의 언어는 기본적으로 열성적이지만 많은 게으른 구문을 제공합니다)
  • 범위 지정 규칙 (구문 측면에서 상당히 유사한 세 가지 언어 인 PHP, Javascript 및 C에서 범위 작동 방식 비교)

2

현재 유행하고있는 여러 가지 프로그래밍 패러다임이 있습니다.

  • 객체 지향-VB.NET, C #, Java가이 범주에 속합니다. 코드는 동작 및 관련 데이터가 있고 메시지를 전달하여 서로 통신하는 객체를 중심으로 배열됩니다.
  • 기능-Haskel, Scheme, Lisp 및 F #이이 범주에 속합니다. 부작용이없는 순수한 기능. 수학과 같은 기능을 생각하십시오. 종종 구조를 통해 언어 자체를 확장 할 수 있습니다.

이것 만이 다른 유형입니까?
— 다이내믹

@ perl.j-아니요, 요즘 널리 사용되는 주요 항목입니다. Wikipedia- Programming paradigm을 참조하십시오 .
— Oded

@ perl.j는 스택 기반 (Forth 및 Postscript)도 있습니다. 논리 : 프롤로그와 같은.
— Jetti

2
그리고 0 번째 유형은 C입니다.)
— yati sagade

실제 문제는 개발자가 대부분의 프로그래밍 문제를 효과적으로 코딩하기 위해 얼마나 많은 것들이 필요한지입니다.
— JeffO

0

Prolog 는 논리 프로그래밍 언어 이며 시작하기가 비교적 쉽습니다. 절차 적 프로그래밍과 완전히 다른 사고가 필요하므로 뇌를 스트레칭하려고 할 때 탐색하는 것이 좋습니다.

대학에 진학 할 경우 다른 유형의 프로그래밍 언어와 가장 적합한 언어를 소개하는 프로그래밍 언어 과정을 수강해야 합니다.


0

대부분의 주류 언어는 명령형, 기능적 및 선언적 프로그래밍 측면을 혼합합니다. 틈새 언어는 좀 더 이국적인 경향이 있거나 어떤 이유로 든 범용 프로그래밍에 적합하지 않은 흥미로운 새로운 아이디어를 소개합니다. 일부는 결코 철저하지 않은 예입니다.

  • 스프레드 시트 언어 (Excel, Google Forms) : 테이블 형식 데이터를 처리하도록 설계되었습니다.
  • 배열 언어 (APL, J) : 다차원 배열을 빠르게 처리하도록 설계되었습니다. J에서는 (+/ % #)&.:*:배열의 RMS를 계산합니다. 간결한 것으로 유명하며 읽을 수없는 것으로 유명합니다.
  • 자동화 언어 (AutoHotkey, Bash) : 양식 작성, 파일 업로드 등과 같은 일반적인 작업을 간소화하도록 설계되었습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.