프로그래밍 언어의 역사. 프로그래밍 언어 프로그래밍 언어를 처음 개발한 사람




프로그래밍 언어의 일반적인 역사와 알려진 언어와 알려지지 않은 언어의 개발 역사를 아는 것은 매우 중요합니다. 이 기사에서 이에 대해 알게 되겠지만 먼저 "프로그래밍 언어란 무엇입니까?"를 기억해 봅시다.

프로그래밍 언어사람에게 편리한 형식의 순차적 텍스트 형식으로 문제를 해결하기 위한 프로그램을 작성할 수 있는 표기법 및 규칙 시스템입니다.

50대

20세기 50년대 진공관 컴퓨터의 출현과 함께 프로그래밍 언어의 급속한 발전이 시작되었습니다. 프로그래밍은 기계 명령어 형태(프로그래머들이 말하는 코드)로 직접 프로그램을 작성하는 것으로 시작되었습니다. 당시에는 프로그램 개발 비용보다 훨씬 더 많은 비용이 들었던 컴퓨터에는 매우 효율적인 코드가 필요했습니다.

코딩을 더 쉽게 하기 위해 기계 지향이 개발되어 기계 명령어를 기호 형식으로 작성할 수 있게 되었습니다. 어셈블리 언어는 특정 컴퓨터의 명령어 시스템에 따라 달라집니다. 최대 실행 속도가 필요한 작은 작업을 프로그래밍하는 데 충분히 편리했습니다.

하지만 대규모 프로젝트는 어셈블리 언어로 개발하기가 어려웠습니다. 가장 큰 문제는 어셈블리로 작성된 프로그램이 특정 컴퓨터의 아키텍처에 묶여 있어 다른 컴퓨터로 전송할 수 없다는 점이었습니다. 컴퓨터가 개선되자 어셈블리의 모든 프로그램을 새로 작성해야 했습니다.

컴퓨터의 출현과 함께 거의 즉시 고급 언어가 개발되었습니다. 특정 아키텍처에 의존하지 않는 언어. 고급언어로 프로그램을 실행하려면 먼저 기계명령어로 번역해야 합니다. 이러한 번역을 수행하는 특수 프로그램을 번역기 또는 컴파일러라고 합니다.

번역된 프로그램은 컴퓨터에 의해 직접 실행됩니다. 특정 컴퓨터의 아키텍처에 의존하지 않지만 그럼에도 불구하고 가능한 한 기계 명령 언어에 가까운 중간 언어로 프로그램을 번역할 가능성도 있습니다.

그런 다음 중간 언어 프로그램은 인터프리터라는 특수 프로그램에 의해 실행됩니다. 실행된 프로그램 조각이 실행 직전에 중간 언어에서 기계 명령 언어로 번역되는 경우 즉석에서 컴파일하는 것도 가능합니다.

50년대 중반, John Backus의 지도 하에 IBM을 위해 고급 알고리즘 프로그래밍 언어 FORTRAN이 개발되었습니다. 산술식을 기계어 코드로 변환하는 언어가 이미 개발되었음에도 불구하고, 조건문과 입출력 연산자를 사용하여 계산 알고리즘을 작성하는 기능을 제공하는 FORTRAN 언어(FORmula TRANslator)의 탄생이 이루어졌습니다. 고급 프로그래밍 언어 시대의 시작점.

원래 IBM 아키텍처를 목표로 했던 FORTRAN 언어의 대안으로 ALGOL(ALGOrithmic Language)은 1950년대 후반 Peter Naur의 주도 하에 개발되었습니다. 이 언어 개발자가 추구한 주요 목표는 컴퓨터 시스템의 특정 아키텍처로부터 독립하는 것이었습니다.

또한 ALGOL 언어의 창시자들은 알고리즘을 설명하고 수학에서 채택된 표기법에 가까운 표기법을 사용하는 데 편리한 언어를 개발하려고 했습니다. FORTRAN과 ALGOL은 컴퓨터 프로그래밍에 초점을 맞춘 최초의 언어였습니다.

60년대

60년대 후반 Nayard와 Dahl의 지도 하에 사용자 정의 데이터 유형 개념을 사용하여 Simula-67 언어가 개발되었습니다. 실제로 클래스 개념을 사용한 최초의 언어입니다.

70년대

70년대 중반 Wirth는 Pascal 언어를 제안했고 이는 즉시 널리 사용되었습니다. 동시에 미국 국방부의 주도로 프로그래머이자 Lord Byron의 딸인 Ada Lovelace를 기리기 위해 Ada라는 고급 언어를 만드는 작업이 시작되었습니다.

언어 생성은 요구 사항을 정의하고 사양을 개발하는 것으로 시작되었습니다. 4개의 독립적인 그룹이 프로젝트에 참여했지만 모두 파스칼을 기반으로 사용했습니다. 1980년대 초에 Ada 언어를 위한 최초의 산업용 컴파일러가 개발되었습니다.

C 개발

범용 프로그래밍 언어는 70년대 중반 Denis Ritchie와 Ken Thompson에 의해 개발되었습니다. 이 언어는 대중적인 시스템 프로그래밍 언어가 되었으며 한때 UNIX 운영 체제의 커널을 작성하는 데 사용되었습니다.

C 언어 표준은 1982년 ANSI 작업 그룹에 의해 개발되었습니다. C 언어에 대한 국제 표준은 1990년에 채택되었습니다. C 언어는 프로그래밍 언어와 Java 개발의 기초를 형성했습니다.

C 언어 덕분에 운영체제를 만들 때 실제로 어셈블러를 없앨 수 있게 되었습니다. 예를 들어 Unix 운영 체제의 거의 모든 텍스트는 C로 작성되므로 특정 컴퓨터에 의존하지 않습니다.

C의 가장 큰 장점은 단순성과 의사과학적 솔루션이 없다는 것입니다. 매개변수를 함수에 전달하는 메커니즘(값으로만)이 간단하고 명확하게 설명되어 있습니다. C 프로그램을 작성하는 프로그래머는 항상 이 프로그램이 어떻게 실행될지 명확하게 이해합니다.

C 언어의 포인터, 정적 및 자동(스택) 변수의 개념은 현대 컴퓨터의 구조를 가장 밀접하게 반영하므로 C 프로그램은 디버깅에 효과적이고 편리합니다.

현재 대부분의 프로그램은 C 및 C++로 작성됩니다. 모든 운영 체제의 인터페이스(소위 API - 응용 프로그램 인터페이스), 즉 응용프로그램 개발자를 위한 시스템 호출 세트는 일반적으로 C 언어의 함수 세트입니다.

알고리즘 언어와 함께 비즈니스 정보 처리를 위한 언어, 인공지능 언어도 병행 개발됐다. 첫 번째에는 COBOL(COmmon Business Oriented Language) 언어가 포함되고 두 번째에는 LISP(LIST 처리) 및 Prolog 언어가 포함됩니다.

J. McCarthy의 지도 하에 60년대에 개발된 LISP 언어는 게임 이론에서 폭넓게 적용되는 최초의 기능적 목록 처리 언어였습니다.

90년대

90년대에는 인터넷이 보급되면서 분산 데이터 처리의 가능성이 확대됐고, 이는 프로그래밍 언어의 발전에도 영향을 미쳤다. Perl, Document Description Language, XML 등 서버 애플리케이션 제작에 중점을 둔 언어가 등장했습니다.

전통적인 프로그래밍 언어 C++와 파스칼도 변화를 겪었습니다. 프로그래밍 언어는 언어 자체의 기능뿐만 아니라 프로그래밍 환경에서 제공하는 클래스 라이브러리도 의미하기 시작했습니다.

프로그래밍 언어 자체의 사양에서 분산 애플리케이션 상호 작용 메커니즘의 표준화로 중점이 옮겨졌습니다. 분산 개체의 상호 작용을 지정하는 COM 및 CORBA라는 새로운 기술이 등장했습니다.

프로그래밍 언어의 응용 분야

현재 프로그래밍 언어는 다음과 같은 다양한 인간 활동 영역에서 사용됩니다.

  • 과학 컴퓨팅(언어 C++, FORTRAN, Java);
  • 시스템 프로그래밍(언어 C++, Java);
  • 정보 처리(언어 C++, COBOL, Java);
  • 인공지능(LISP, 프롤로그);
  • 출판 활동(Postscript, TeX);
  • 원격 정보 처리(Perl, PHP, Java, C++);
  • 문서 설명(HTML, XML).

프로그래밍 언어의 역사를 바탕으로 시간이 지남에 따라 일부 언어는 개발되어 새로운 기능을 획득하고 수요가 유지되는 반면 다른 언어는 관련성을 잃어 오늘날 기껏해야 순전히 이론적 관심을 끌고 있다고 말할 수 있습니다.

나는 항상 Fortran이 첫 번째라고 생각했는데, 이는 특히 프로그래밍 언어 역사상 가장 유명한 다이어그램에 반영되었습니다. 사실 영향력이나 인기 면에서는 당연히 포트란이 1위였다. 그러나 역사적 관점에서 볼 때 그렇지 않습니다.

[완전히 정확하게 말하자면, 진정한 최초의 프로그래밍 언어는 분명히 Charles Babbage의 프로그램이 Lovelace 백작부인 Ada Augusta Byron의 유명한 기사 "Sketch Of the Analytical Engine"에서 작성된 표기법이었습니다(이 기사는 Babbage의 차분 엔진 작동에 관한 이탈리아 Menabrea의 기사와 Ada Augusta가 직접 작성한 중요한 추가 내용이 포함되어 있습니다. 그러나 그것은 프로그래밍 언어가 아니었고, 그것이 의도한 기계는 오직 뛰어난 사람의 마음 속에만 존재했습니다. 그건 그렇고, 나는 1991년에 런던의 과학 박물관이 배비지의 그림을 바탕으로 그의 기계를 만들었고 현재 작동 중인 상태로 존재한다는 점에 주목합니다.]

그래서 최초의 프로그래밍 언어입니다. 전혀 Fortran이 아니었지만 놀라운 이름을 가진 언어인 Plankalkül, 즉 독일어에서 "계획의 계산" 또는 "계산 계획"으로 번역된 언어는 독일 과학자, 발명가 및 디자이너 Konrad Zuse가 나치에서 개발했습니다. 1942년부터 1945년까지 독일.

[Zuse는 또한 여러 가지 다른 컴퓨터 모델을 설계했습니다. 예를 들어, 그의 Z3도 유명한 Marc I과 ENIAC 이전에 제작되었으며 동시에 완전히 본격적인 기계였습니다. ]

Zuse는 가까운 시간에 수행 된 미국인과 영국인의 작업에 대한 정보도없고 Babbage의 작업에 대해서도 알지 못한 채 절대적으로 독립적으로 모든 업적을 달성했다고 주장됩니다.

프로그래밍 언어의 생성은 컴퓨터의 "하드웨어" 부분을 생성하는 작업의 자연스러운 연속이었습니다. Zuse 자신도 이를 사용하여 체스 프로그램을 작성하려고 했습니다. 언어에 대한 작업은 1946년경에 완료되었지만 언어는 개발되지 않았으며 서면 매뉴얼도 1972년에야 출판되었습니다. 이로 인해 언어는 알려지지 않은 것으로 판명되었으며 (예를 들어 Fortran과 비교할 때) 업계의 추가 발전에 큰 영향을 미치지 않았습니다.

그러나 Plankalkül은 의심할 여지 없이 세계 최초의 고급 프로그래밍 언어였습니다. 언어의 기본 개념은 다음과 같습니다.

  • 서브루틴의 존재(그리고 이것은 1940년대의 일입니다!!!)
  • 대입 연산자(=>) 존재
  • 사이클
  • 조건문(if)
  • 배열을 조작하는 능력
  • 목록을 조작하는 능력
언어를 만들 때 Zuse는 엔지니어와 과학자가 제기한 많은 문제를 수집했습니다. 언어가 실제로 이러한 문제를 해결할 수 있다는 것을 입증하기 위해 수많은 예제 프로그램이 작성되었습니다(특히 체스를 두는 프로그램의 경우 약 60페이지에 달하는 예제).

언어의 문제점 중 하나는 구문이 매우 복잡하다는 것인데, 이는 현대 프로그래머에게는 매우 특이한 현상입니다. 다음은 Plankalkül 언어에서 A = A+1 할당의 예입니다.

Plankalkül은 독일 엔지니어 Konrad Zuse가 개발한 세계 최초의 고급 프로그래밍 언어입니다.
1942년과 1946년 그의 Z4 컴퓨터(아래 컴퓨터 사진, Wikipedia에서 가져온 사진).

제2차 세계 대전이 진행 중이었고 Zuse는 다른 나라의 과학자들과 완전히 독립적으로 고립되어 일했습니다. 이 기간 동안 그는 프로그래밍 언어뿐만 아니라
뿐만 아니라 체스 위치를 추정하기 위한 49페이지의 프로그램도 작성했습니다. 그의 작품 전문은 훨씬 뒤인 1972년에 출판되었습니다.

나는 고고학 조사로서 이 프로그래밍 언어에 대해 이야기하는 위험을 감수하겠습니다. 더욱이 러시아어에서는 이 언어에 관해 언급된 바가 거의 없습니다.

최초의 고급 언어로 간주되는 언어인 포트란이 등장한 것은 1957년(작업이 1954년에 시작됨)이 되어서였습니다.

"Z4"는 전기 기계식이었기 때문에 Plankkill 컴파일러나 해석기가 없었지만 2000년 Svobodny에서는
베를린 대학(Freie Universität Berlin)이 통역사를 만들었습니다.
방언(브라우저에서 Java 애플릿으로 실행)

구현 중인 방언은 Plankalkül-2000이라고 하며 다양한 단순화로 인해 원본과 다릅니다.
예를 들어, 표기 형식이 단순화되었습니다. Zuse는 2차원 표기법을 사용했습니다.
첫 번째 줄에는 표현식 자체와 일부 인수(변수 유형, 인덱스 등) 아래에 포함되어 있습니다. 또한, 조작 자체의 아이콘도 단순화되었으며,
당신과 나에게 좀 더 친숙한 형태로 다가왔습니다.

내 생각에 40년대에는 언어가 상당히 풍부했습니다. 조건부 구문, 두 가지 유형의 루프(while 및 for와 유사), 배열 및 튜플이 있습니다.
서브루틴을 설명하고 호출할 수 있습니다(그러나 재귀는 없습니다).

모든 변수는 4가지 유형으로 구분됩니다.

  • "변수"( 안에입력 변수)는 문자 "V"와 숫자로 시작하는 읽기 전용 서브루틴의 입력 변수입니다.
  • "Zwischenwert"( 중간 값), 읽고 쓸 수 있으며 "Z"와 숫자로 시작하는 중간 계산 값을 저장하도록 설계되었습니다.
  • "결과 출력" ( 아르 자형결과) - 이 변수는 "R"과 숫자로 시작하는 계산 결과를 반환합니다.
  • "인다이즈"( 그리고인덱스) - 루프 변수(for와 유사), "i"로 시작하고 숫자가 있을 수 있으며 숫자는 중첩 루프를 구성하는 데 필요합니다.
세 가지 유형의 변수를 사용할 수 있습니다. "Z4"가 부동 소수점 숫자로 작동할 수 있다는 사실에도 불구하고 인터프리터는 이를 수행할 수 없습니다.
  • 음수가 아닌 정수의 경우 비트 단위의 차원이 표시됩니다. "0" - 1비트, "n.0" - "n" 비트를 쓰는 두 가지 형식이 있습니다. 예를 들어 8.0 - 1바이트(8비트)입니다.
  • 튜플은 (3.0, 4.0)과 같이 괄호 안에 표시됩니다. 이는 3비트와 4비트의 두 변수이며 튜플에는 두 개 이상의 요소가 있어야 합니다.
  • 배열은 점을 통해 작성됩니다. 예: 4.5.0 - 각각 5비트로 구성된 4개 요소의 배열, 32.(0, 8.0, 16.0) - 32개의 튜플, 각 튜플에는 3개의 변수가 있습니다: 1비트, 8비트 및
    열여섯.
Plankalküll은 분명히 구문이 크게 단순화될 수 있지만 현대 방언은 Zuse가 사용한 표기법을 거의 정확하게 복사하므로 이 구문이 탄생했다고 믿습니다.
종이에 프로그램을 "디버깅"해야 할 필요성. 하지만 언어는 설정이 너무 간단해서 15분 만에 완전히 배웠고 여러 버전으로 몇 가지 프로그램을 작성하기도 했습니다.

그 중 하나는 지정된 (순서대로) 피보나치 수를 계산합니다.
P0 FactEvgenyStepanischev (V0[:4.0]) => (R0[:10.0]) (0, 1) => (Z0[:10.0], Z1[:10.0]) W1 (V0[:4.0]) [ i > 0 -> (Z0[:10.0] + Z1[:10.0], Z1[:10.0] - Z0[:10.0]) => (Z1[:10.0], Z0[:10.0]) ] Z1[:10.0] => R0[:10.0] 끝
다음과 같이 시작해야 합니다. 인터프리터로 페이지를 열고 내 프로그램을 창에 복사한 다음 "컴파일"을 클릭합니다.
Java 애플릿이 있는 창(컴퓨터에 Java를 설치해야 함), 열리는 창에서 마우스를 사용하여 초기 값 V0을 조금씩 입력합니다(녹색 원을 클릭해야 함).
그런 다음 브라우저 창에서 "실행"을 클릭하면 빨간색 선(R0)에 결과 값이 표시됩니다.


언어의 서브루틴은 "P" 기호와 고유 번호로 시작하고 그 뒤에 이를 호출할 수 있는 이름이 옵니다. 내 서브루틴은 "FactEvgenyStepanischev"라고 하며 끝납니다.
키워드 "END"를 사용하는 서브루틴(원래 Plankalküle에는 없었음)

서브루틴은 수신된 값과 반환된 값을 설명합니다. 입력당 하나의 변수(크기 4비트)와 하나의 출력 변수(크기 10)를 사용합니다.
값 "0"과 "1"은 중간 변수 Z0 및 Z1에 할당됩니다. 변수 유형은 사용될 때마다 지정되어야 하며, 변수는 다른 유형으로 변환되어야 합니다.
유형이 불가능합니다.

아래는 "for" 루프(W1)입니다. 루프 변수의 번호(여기서는 첫 번째 대괄호로 표시됨)를 표시하지 않았으므로 루프 변수 "i"가 숫자 없이 사용됩니다.
반복 횟수는 둥근 괄호 안에 표시되고 사이클의 본문은 다음 대괄호 안에 표시됩니다. 세부 사항은 다음과 같습니다.
설명에서 찾아보세요.

"화살표" 연산("->")은 조건부 구성으로, 왼쪽 식이 참일 경우 오른쪽 부분이 실행됩니다. 방언에서는 가장 간단한 표현만 작동합니다. 예를 들어
거기에 루프를 삽입할 수 있지만 "실행" 버튼이 애플릿에 표시되지 않았기 때문에 루프 내부에 할당하도록 제한했습니다.

여기서는 Pearl, Python 또는 PHP를 사용하는 사람들에게 잘 알려진 복잡한 할당을 사용했지만 다르게 작동합니다. 할당이 수행됩니다.
순차적으로 왼쪽에서 오른쪽으로 "(Z0[:10.0] + Z1[:10.0], Z1[:10.0]) => (Z1[:10.0], Z0[:10.0]) 으로 제한할 수 없습니다. "라고 말하면 예상한 결과가 나오지 않습니다.

마지막에는 서브루틴의 결과 값에 중간 값을 할당합니다.

이 외에도 언어에는 거의 아무것도 없습니다. 배열 요소에 대한 액세스, 함수 호출 및 "while" 루프를 별도로 설명하는 것은 이 구문의 프레임워크 내에서 매우 자연스럽게 보입니다.
언어에서 지원하는 모든 연산(논리 연산, 비트 연산, 네 가지 산술 연산 등 소수)은 친숙해 보입니다.

감옥을 두려워하지 말라, 전갈을 두려워하지 말라,
역병과 기근을 두려워하지 말라.
그리고 당신이 두려워해야 할 유일한 것은
누가 "나는 어떻게 하는지 알아요!"라고 말할 것입니다.
(A. 갈리치)

간단하고 간단하게 설명하자면, "먼저 어떤 프로그래밍 언어를 선택해야 합니까?"라는 질문에 대한 정답입니다. 자연에는 존재하지 않습니다. "이 셋 중 하나"라는 수업의 답변까지. 내가 이 글을 쓰고 있는 특정 순간인 2017년 4월 10일 키예프 시간 21시 38분 현재에도 존재하지 않습니다. 하지만 한 달, 6개월 또는 1년 앞으로.

존재하는 것은 여러 가지이다 올바른 질문을 하는 것스스로에게 물어보는 것이 유용한 질문입니다. 이것은 직업을 시작하기 위한 첫 번째 테스트 과제가 될 것입니다. 결정을 내리기 전에 이러한 질문에 답하고 일반적으로 해당 주제 영역에 대해 생각하고 조사하고 싶습니까?

그렇다면 나를 따라오세요.

몇 가지 경고

첫째로, 하나의 언어로는 충분하지 않습니다.공부 첫해에도. 최소한 몇 가지 "특수" 언어가 여전히 필요합니다(HTML, CSS, SQL, YAML, JSON, XML, Markdown - 최소한 다양한 언어의 예). 구문, 거의 확실하게 읽어야하며 높은 확률로 작성되어야합니다). 하지만 그 뿐만이 아닙니다. JS 프로그래머가 아닌 사람은 JS를 조금 읽어야 할 것이 거의 확실합니다. JS 프로그래머 - Python에 설명된 알고리즘의 구현을 확인하세요. 시스템 프로그래머가 스크립팅 언어로 다른 사람의 형편없는 코드를 처리하는 경우.

그리고 "중간" 레벨로 가는 도중에 여섯 가지 레벨을 마스터해야 합니다. 그리고 진정한 전문가가 되려면 온갖 환상적인 쓰레기의 패러다임을 이해해야 합니다.

둘째, 평생 동안 한 언어로 글을 쓸 가능성은 거의 없습니다.그리고 심지어 충분히 길지도 않습니다. 어쩌면 당신은 여기에 한 달 동안도 없을 수도 있습니다. 2003년 첫 직장에서 저는 C++ 알고리즘 전문가로 채용되었지만 PHP로 웹사이트를 약간 지원하고 Excel VBA로 라이브러리에 인터페이스를 추가했습니다. (전율). 그리고 후배들에게 일어나지 않는 정상적인 일도 없습니다.

그러나 이뿐만 아니라 귀하가 가장 좋아하는 사무실의 "주" 언어가 바뀌거나 다른 고용주가 귀하가 가장 좋아하는 주제로 귀하를 고용할 것이며 스타트업 또는 기업 문화의 기류가 바뀔 것입니다. 그리고 WHAM은 더 이상 조직의 구조를 기억하지 못합니다. 그래서 신중하게 "제1 언어"를 선택했습니다.

따라서 일반적으로 이 선택을 취급해서는 안 됩니다. 너무 많은진지하게, 아내나 집을 선택하는 것과 같은 것입니다(변경될 수도 있지만 여전히 조금 더 어렵습니다). 시작하고, 모든 것을 시도하고, 자신의 것을 찾는 것이 "어디부터 시작해야 할지" 분석하는 데 몇 주/개월/년을 소비하는 것보다 훨씬 더 의미 있는 전략입니다.

셋째, 가장 중요한 것은 (그리고 처음 두 개부터 이어집니다) – 종종 "언어를 선택하는 것"이 ​​아니라 혀가 당신을 선택합니다. 당신이 하고 있는 일에 진심으로 관심을 갖고 그것을 인생의 중요한 부분으로 선택하는 것은 가치가 있습니다. 저는 "토요일에 시간제 프로그래밍을 하기를" 희망하는 사람들이 아니라 그런 사람들에게 특별히 이야기하고 있습니다. 저장) - 따라서 이 선택을 할 가치가 있으며 "무엇을 선택해야 하는지"에 대한 모든 조언은 관련이 없습니다. 흥미로운 일이나 유망한 고용주가 저절로 나타날 것이고, 멋있게 만들 수 없는 언어는 저절로 떨어지겠지만 또 다른 것은 성장할 것이다. 계속 지켜봐 주시기 바랍니다.

주의, 올바른 질문입니다!

그럼에도 불구하고 어딘가에서 시작하기 위해 소녀/소년은 인생에 대해 생각합니다. 즉, 어떤 프로그래밍 언어를 배울 것인지 선택하는 것입니다. 시작한다), 다음과 같이 자문해 볼 수 있습니다.

왜 공부하러 가나요?먼저 자신에게 솔직하게 물어봐야 할 매우 중요한 질문입니다. 주요 직업(예: 미생물학 또는 회계)을 위한 추가 도구를 얻으시겠습니까? 여가 시간에 즐거운 시간을 보내시나요? 학교에서 아이를 도와주나요?.. 음, 좋습니다. mkdev에서는 기본적으로 여러분이 프로그래머로 일할 것이라고 가정합니다. (물론 미생물학자를 기꺼이 가르칠 수도 있지만, 그들에게 Ruby가 정말 인기가 많다는 사실을 알고 계셨나요?) . 그러나 가능한 한 빨리 IT 분야에서 직업을 찾고 싶다고 이미 확고히 확신하고 있습니까, 아니면 방금 시도하기로 결정하셨습니까? 두 번째 경우에는 자신이 좋아하는 것이 무엇인지 이해하기 위해 12가지 언어와 접근 방식을 시도해 볼 가치가 있을 수 있습니다. 그렇지 않으면 아무것도 아닙니다. 그것도 괜찮습니다!

관련 질문: 시간이 얼마나 있나요?"1년 안에 나는 이미 X달러를 벌어야 한다"라는 명확한 기한이 없으면 즉시 "대학 수업" 교육을 계획하는 것이 합리적이고 매우 즐거울 수 있습니다. 즉, 여러 고전 언어 목록을 작성하십시오. Scheme, Haskell, Prolog, 여러 산업용 항목(Java , Ruby, JS), 몇 가지 최신 유행 항목(Rust, Pony, Elixir)... 그리고 "정확히 무엇에 쓸 것인가"에 대한 질문은 저절로 생길 것입니다. . 하지만 "진정한 직업을 빠르게" 원한다면...

당신이 어떤 분야에서 일하고 싶은지 정확히 알고 있나요?“게임 개발만 하고 다른 건 안 맞는다”, “인공지능은 학교 때부터 꿈꿔왔던 것이다”, “하드웨어에 좀 더 가까워지고 각종 로봇과 센서를 프로그래밍하고 싶다”, 심지어 “내 친구들은 빅데이터를 활용해 TV 시리즈 스타트업을 시작하려고 합니다.'가 이 질문에 대한 좋은 답변입니다. 그러나 당신은 그것들을 가질 의무가 전혀 없습니다. “전체 범위를 보여주세요”도 좋은 대답입니다. 그리고 “그동안 나는 삼촌 회사의 회계사를 도와주려고 노력할 것이지만 그들은 더 흥미로운 것을 원한다”는 것도 정상이다.

Victor는 프로그래밍의 첫 번째 단계를 시작하는 데 도움을 주고 기본 사항과 Ruby 언어를 가르칩니다!

더 나아가: 무엇을하고 싶으십니까?위와 같은 질문인 것 같은데요? 하지만. 눈을 감고 이상적인 작업 흐름이 어떤 모습일지 상상해 보세요. 얼마나 많은 노력을 쏟았는지도 모른 채 사용자가 만족할 수 있도록 인터페이스를 실험해 보시겠습니까? 게임의 물리 엔진을 위한 새로운 입자 충돌 알고리즘을 개발하고 이를 완성하는 데 3년이 걸리나요? 누군가가 생각해내기 전에 많은 코드를 빠르게 작성하여 수십 개의 알려진 구성요소를 결합하여 새로운 시작 아이디어를 만드시겠습니까? 새로운 환경에서 작동하기 위해 복잡한 이물질을 처리하고 계십니까? - 엄청난 수의 옵션이 있으며 일부는 "단순한 프로그래머"라는 직업에서 벗어나 DevOps, UI 전문가 또는 데이터 분석가 분야로 이어집니다... 이 명상에 최소 20분을 투자하세요. 결과는 전혀 예상치 못한 결과일 수 있습니다.

예를 들어 (이전 질문과 관련하여) 게임 개발에 참여하고 싶다고 확신하더라도 새로운 레벨을 디버그하고 싶다거나 물리적으로 정확한 충돌 알고리즘을 실행하면 정말 재미있을 것이라는 점을 이해하거나 - 수억 개의 연결을 견딜 수 있는 게임 서버를 만드는 것 - 이것은 여전히 ​​학습과 자기 개발의 방향이 매우 다릅니다.

그리고 위의 모든 질문에 답한 후에(또는 고의로 답을 연기하기로 결정한 후에) 실용적인 질문을 하는 것이 합리적입니다. 현재 어떤 언어가 활발히 사용되고 있나요?- 관심 있는 분야, 주제, 환경. 그리고 가까운 시일 내에 마스터할 세 가지(맞습니다!)를 선택하세요.

정확히 무엇을 선택해야 하는지 - 아래에서 간략한 개요를 제공하지만 그 자리에서 알아내야 합니다. 요즘 인기 있는 것 중 하나언어.

몇 가지 답변

이상하고 조용한 소리가 들리나요?

오래되고 녹슬어가는 것은 아래 나열된 "답변"입니다. 이 기사가 작성된 지 6개월이 지난 후 이 기사를 읽고 있다면 "답변" 섹션이 이미 약간 오래되었을 가능성이 높습니다( 만약에일부 치명적인 사건은 발생하지 않았으며 그 결과 모든 것이 쓸모 없게되었습니다.) 당신은 1년 후에 그것을 읽었습니다. 그것은 완전히 구식입니다. 당신은 5년 후에 그것을 읽었습니다 - ... 하지만 악마는 알고 있습니다. 우리 분야에서는 상황이 매일 바뀌지만 장기적으로 보면 상당히 안정적인 상태를 유지하는 경우가 많습니다.

글쎄, 일반적으로 명확합니다. 주의 깊게 읽으십시오.

다음은 가상의 상위 15개 현재 프로그래밍 언어에 대한 주관적이고 짧으며 불완전한 정보입니다(알파벳순).

저자는 각 항목에 특정 번호를 할당했습니다. 이는 개발자 dou.ua를 위한 주요 우크라이나 웹사이트의 공석 수이며, 여기에는 언어가 최소한 언급되어 있습니다. 이 숫자 자체는 아무 의미가 없지만, 소련 붕괴 이후/유럽 국가 중 하나를 예로 들어 일부 불완전한 비교 분석을 할 수 있으며 일부 매우 부정확한 비교 결론을 도출할 수 있습니다.

참고: 이 숫자의 본질은 "숫자가 더 큰 것을 선택해야 한다"는 것이 아닙니다! 요점은 이러한 언어 중 하나의 숫자가 0이 아니라는 것입니다. 그다지 크지 않고 솔직히 말해서 그다지 번영하지 않는 국가에서는 숫자가 0이 아닙니다. 즉, 5개가 쓰여진 언어로 일자리를 찾을 수 있습니다. 하지만 이를 위해서는 정말 좋아해야 하며, 목표가 단순히 "적당한 금액의 돈으로 무언가를 프로그래밍하는 것"이라면 물론, 숫자가 더 높은 곳을 선택해야 합니다. 그들은 그것을 원하는 사람을 고용할 것입니다.

    C(100?-검색 엔진이 대처할 수없는 것 같습니다.) -프로그래밍의 유일한 살아있는 할아버지이자 모든 살아있는 할아버지 중 가장 살아있는 할아버지입니다. 모든 시스템(아래에 설명된 Rust 및 Go에 대한 수정 사항 포함), 모든 종류의 마이크로 컨트롤러 및 임베디드 장치 프로그래밍, 드론 및 기타 놀라운 것들을 위한 모든 종류의 드라이버는 여전히 C입니다. 다른 언어와 라이브러리를 가속화합니다(예를 들어 원래 Python으로 작성되었다가 속도를 위해 C로 다시 작성된 다음 이 C 구현을 위한 래퍼가 Ruby, Julia 및 Haskell에 표시되는 일종의 과학적인 쓰레기입니다... 이것이 우리가 하는 방식입니다. 살다). 한마디로 그럴 가능성은 희박하다 첫 번째언어이지만 공부는 필수입니다. 더욱이, 그것은 전혀 가만히 있지 않고, 새로운 표준은 상당히 신선하고 훌륭합니다.

    C++ (144)- C의 조카(어떤 사람들에 따르면) 또는 유쾌하게 복잡한(다른 사람들에 따르면) 객체 지향, 메타 프로그래밍 가능, 엄청나게 복잡하고 컴파일 속도가 느림... 한마디로 C++는 프로그래밍 언어 중 나의 첫사랑입니다. . 이제는 판단할 수 있는 한 게임, 일부 데스크톱 시스템 및 C가 가능한 모든 곳에서 사용되지만 더 복잡한 코드가 필요합니다(gcc 컴파일러는 거의 모든 OS에서 사용할 수 있고 둘 다 컴파일하기 때문입니다). );

    C#(414)- 프로그래머가 자신의 영혼을 악마에게 팔고 Microsoft 생태계와 거의 밀접하게 연결되어 있는 몇 안 되는 언어 중 하나입니다(솔직히 말하자면, 특히 개발자의 경우 상당히 인상적으로 개발되었습니다). 적용 분야 - 게임 또는 복잡하고 값비싼 엔터프라이즈 소프트웨어. 현재로서는 언어 자체가 매우 아름답고 진보적입니다. 그리고 일반적으로 거의 모든 새롭지 않고 실용적인 범용 언어와 마찬가지로 약간의 기능, 많은 OO, 일부 메타 프로그래밍 등이 있습니다.

    클로저 (6)- 프로그래밍 언어의 마법 같은 유니콘은 함수형 언어인 Lisp의 후속인 JVM(아래 Java에 대해 읽어보세요)에서 실행됩니다. ClojureScript 방언은 JS로 컴파일됩니다(이것이 중요한 이유도 아래에서 읽어보세요). "스마트한" 스타트업과 매우 심각한 회사의 생산에 사용됩니다. Big Love로만 선택할 수 있습니다 (하지만 그는 멋지네요).

    얼랭+엘릭서(5+10)- Erlang은 통신(이전) 및 일반적으로 고부하 분산(현재) 애플리케이션을 만드는 데 특히 널리 사용되는 언어 및 플랫폼입니다. Elixir는 동일한 플랫폼에서 실행되는 언어이지만 Erlang보다 덜 이질적입니다(그러나 플랫폼의 "기본" 언어는 여전히 최소한 어느 정도 이해되어야 합니다. 아래 Java에 대한 설명을 참조하십시오). 오늘날 이 모든 것은 약간 "엘리트주의"의 느낌을 주지만 일부 영역(예: 은행 시스템)에 확고히 뿌리를 두고 있으며 매우 흥미롭습니다.

    ES(JavaScript, CoffeeScript, TypeScript 등) (788+10+64+...)- 현재 가장 좋아하는 ES/JS/...는 본질적으로 언어가 아니라 언어 계열입니다. 웹 인터페이스와 모바일 인터페이스는 (여러 가지 다른 방식으로), 또한 (여러 가지 다른 방식으로) 서버 및 관리 소프트웨어로 작성되며 악마는 대머리입니다. 오늘날 "JavaScript 언어"라고 불리는 것이 정확히 무엇인지 판단하기는 매우 어렵습니다. 운에 따라 "JavaScript 프로그래머"라는 직업을 고용한 후에는 은행 시스템의 고대 인터페이스를 유지 관리하는 사람이 될 수도 있습니다. 그건 그렇고, 어떤 브라우저에서도 작동해야 합니다. 또는 강력한 형식의 TypeScript로 과학 데이터의 복잡한 시각화를 작성하는 최신 팀의 일원입니다. 또는 갑자기 오래된 Nokia에서 실행되는 무언가로 복잡한 방식으로 컴파일된 언어의 "다음" 버전에서 미래의 인터페이스 개발에 참여하게 됩니다... 하나로 설명할 수 없는 전체 세계 절. 하지만 이 분야에서 "모국어"를 찾는 것은 매우 위험합니다.

실제 개발에서 프로그래밍 언어의 선택이 무엇을 기반으로 하는지에 대한 세 번째 의견과 이야기도 있습니다.

    이동 (78)- 주로 "빠르고 멍청하며 신뢰할 수 있는 코드 만들기"를 위해 Google이 만든 간단하고 효율적인 언어입니다. 그에 대한 생각의 비행은 언어의 무례함으로 인해 즉시 차단됩니다. 하지만 효과적입니다. 어떻게 설명할 수는 없습니다.

    자바 (466)- 특별한 경우. Java는 언어이자 플랫폼(JVM)입니다. 이 플랫폼은 예를 들어 재미있고 멋진 Clojure, 과학적으로 난해한 Scala, JRuby(동일한 Ruby이지만 JVM용)를 실행합니다. 그리고 오늘날 Java 자체는 한때 명성을 얻었던 "기업 노예를 위한 제한된 언어"가 아닙니다. 엄청나게 많은 강력한 라이브러리, 이 플랫폼에서 실행되는 언어 선택 및 다양성을 고려하면 자존심이 강한 프로그래머라면 Java에 대한 아이디어가 있어야 합니다. 그리고 Java는 Android용 유일한 개발 언어입니다.

    PHP (431)- 엄청난 평판을 가진 웹의 오래된 점유자입니다. 최신 버전에서는 대부분의 지옥 같은 유산을 제거했으며 일반적으로 꽤 괜찮은 현대 OO 언어입니다. 그러나 오래된 기억에 따르면 이는 인터넷 인프라의 매우 중요한 부분을 차지합니다. PHP 전문가를 고용하면 아키텍처 및 테스트를 통해 깔끔한 프로젝트를 완료할 수도 있고, 2000줄에 대해 구조화되지 않은 if/else를 사용하여 정신 나간 선사 시대 시스템을 지원할 수도 있습니다.

    파이썬 (303)- 한때 웹과 스타트업을 위한 유행 언어로서 Ruby의 “경쟁자”였던 이 언어는 이제 주로 Ruby를 기반으로 성장한 복잡하고 성인적인 웹 애플리케이션을 지원하는 데 사용되며, 어떤 곳에서는 과학/빅 데이터 연구에 더 많이 사용됩니다. R을 어둡게 합니다(아래 참조).

    R (16)- 범용 언어이지만 과학자/빅데이터에서만 사용됩니다. 꽤 지옥 같은 구문이지만(오래되었기 때문에) 이에 대한 멋진 패키지가 많이 있으며 그에 대한 연구가 작성되어 있습니다. 세계에서 거의 최고의 언어는 다음과 같습니다. 호기심을 만족시키다;

    루비 (124)- 불과 몇 년 전만 해도 '패셔너블'하고 '힙스터'했지만 오늘날에는 단순히 주류 언어 중 하나입니다. 매우 표현력이 풍부하고 간결하며 약간 "마법적"이며 다소 느립니다. 주로 웹 개발에 사용됩니다. 오늘날에는 첫눈에 반하거나 미워하기 쉽고, 일자리를 찾는데도 꽤 번거롭지 않은 언어가 되었습니다. Ruby는 오늘날 관리자와 테스터 모두에게 사랑받고 있습니다. 두 가지 모두를 위한 멋진 도구가 있습니다.

    러스트 (3)- 상당히 새로운 선수 중 한 명입니다. 빠르고 도전적입니다. 이는 시스템 프로그래밍 분야에서 C를 대체할 것을 약속하지만 현재로서는 "미래를 위해" 배우는 것이 더 합리적으로 보입니다.

    스칼라 (60)- Java 플랫폼의 "똑똑한 동생": 현대적이고 복잡하며 기능적이며 모든 비즈니스 분석에서 큰 사랑을 받아 빠르게 인기를 얻고 있습니다.

    스위프트/오브젝티브-C(58+15)- iOS 개발을 위한 유일한 선택입니다. 물론 Swift에만 집중해야 합니다(Objective-C는 이미 이전 응용 프로그램을 지원하는 데만 사용됩니다). 일반적으로 C# 및 C# 및 자바. 적용 가능성이 (의도적으로) 제한되어 있기 때문에 Apple에 자신의 운명을 확고히 맡기로 결정한 사람들에게 첫 번째로 권장될 수 있습니다.

어쨌든 일반적으로 이렇습니다.

이 목록에 포함되지 않은 몇 가지 사항이 있습니다. 예를 들어 Perl은 개발자의 수요가 많지만 언어 자체가 이상한 상태이므로 "첫 번째" 언어로 추천할 수 없습니다. 또는 예를 들어 Lua도 인기가 있지만 다른 시스템(주로 게임)을 위한 작은 스크립트의 언어로서 "단순한 Lua 프로그래머"가 되는 것은 상당히 무의미해 보입니다.

아, 다 이해해요. 무엇을 선택해야 할까요?..

글쎄요. 다 가져 가라. (웃음)

아뇨, 정말요. 실제로 합리적인 전략(물론 "반년 동안 추가 돈을 벌지 않고" 직업에 상당한 시간을 할애할 경우)은 무엇을 알아내는 것입니다. 일부적어도 다음 달에는 관심 있는 언어를 살펴보세요. 디자이너를 위한 지침의 색상처럼 선택할 수 있습니다. "가까운 것에서", "반대에서", "보완에서"...

첫 번째 단계의 목표는 흥미를 유발하고 성공을 시작하는 것입니다. 하지만 오직 당신만이 이 목표를 향한 길을 닦을 수 있으며, 아마도 처음은 아닐 것입니다. 그래서 간다.

간략히 말하자면...

우리 분야에서는 올바른 답을 아는 것보다 질문을 하는 것이 항상 더 중요합니다. 답이 바뀌기 때문이죠. 그리고 매일 질문이 필요합니다. 관심을 갖고 모든 것을 조금씩 배우고 세상을 자세히 살펴보십시오.

나머지는 저절로 발생합니다.

최초로 구현된 고급 컴퓨터 프로그래밍 언어는 FORTRAN(FORmula TRANslator)이었습니다. 1954년에서 1957년 사이에 IBM Corporation 프로그래머 그룹에 의해 만들어졌습니다. Fortran이 만들어진 지 몇 년 후, Fortran의 상업적 판매가 시작되었습니다. 그 전에는 기계 코드나 기호 어셈블러를 사용하여 수행되었습니다.

우선, Fortran은 계산이 수행되는 과학 및 엔지니어링 커뮤니티에 널리 퍼졌습니다.

오늘날 Fortran의 주요 장점 중 하나는 Fortran에 작성된 수많은 프로그램과 루틴 라이브러리입니다. 이 언어의 수천 가지 패키지에서 복잡한 적분 방정식, 행렬 곱셈 등을 해결하기 위한 패키지를 찾을 수 있습니다. 이 패키지는 수십 년에 걸쳐 만들어졌으며 오늘날에도 관련성을 잃지 않았습니다. 대부분의 라이브러리는 잘 문서화되고 디버깅되었으며 매우 효율적이지만 Fortran 코드를 최신 소프트웨어로 자동 변환하려고 끊임없이 노력하고 있습니다.

포트란 도입의 역사

Fortran이라는 효과적인 대체 언어가 개발된 후 컴퓨터 커뮤니티는 새로운 제품에 회의적이었습니다. Fortran 프로그래밍의 도움으로 프로그래밍이 더 효율적이고 빨라질 것이라고 믿는 사람은 거의 없습니다. 그러나 시간이 지남에 따라 과학자들은 언어의 기능을 높이 평가하고 집중적인 소프트웨어 계산을 작성하는 데 적극적으로 사용하기 시작했습니다. Fortran은 모든 유형의 데이터를 포괄적으로 수집하는 데 큰 도움이 되는 기술 응용 프로그램에 특히 적합했습니다.

최신 포트란에는 새로운 소프트웨어 기술과 프로그램 컴퓨팅 아키텍처를 효과적으로 사용할 수 있는 기능이 추가되었습니다.

Fortran의 놀라운 성공 이후 유럽 기업들은 IBM이 컴퓨터 산업을 주도하기 시작할 것이라고 두려워하기 시작했습니다. 미국과 독일 커뮤니티는 범용 프로그래밍 언어를 개발하기 위해 자체 위원회를 만들었지만 나중에 하나의 위원회로 통합되었습니다. 전문가들은 새로운 언어를 개발하고 이를 IAL(International Algorithmic Language)이라고 불렀으나 ALGOrithmic 언어가 빠르게 신제품의 일반적으로 사용되는 이름이 되었기 때문에 위원회는 IAL의 공식 명칭을 ALGOL로 변경해야 했습니다.