1950년대 말, 1960년대 초에 컴퓨터가 프로그래머를 대신해서 더 많은 일을 수행하게 되는 또 다른 움직임이 있어났는데, 프로그래밍 역사에서 가장 중요한 발걸음이었을 것이다.
바로 특정 프로세서 아키텍쳐에 독립적인 고수준 프로그래밍 언어(high level programming language)의 개발이다. 고수준 언어를 쓰면 사람이 표현하는 방식에 가까운 용어로 계산 과정을 작성할 수 있다. 고수준 언어로 작성된 코드는 번역기 프로그램을 통해 대상 프로세서의 어셈블리 언어로 된 명령어로 변환된 다음, 어셈블러에 의해 비트로 변환되어 메모리에 로드되고 실행된다. 여기서 번역기 프로그램은 보통 컴파일러(compiler)라고 부른다.
예시)
Z = X + Y
컴파일러#1
LOAD X
ADD Y
SOTRE Z
컴파일러#2
COPY X,Z
ADD Y,Z
어셈블러#1
1011100110...
어셈블러#2
0011011100...
이런식으로 컴파일러에 따라서 방식이 다를 수 있으며 내부적으로 하나의 프런트엔드와 몇개의 백엔드로 나뉠 가능성이 있다.
고수준 언어는 어셈블리 언어에 비해 큰 이점을 가지고 있다. 사람들이 생각하는 방식에 더 가까워 배우고 사용하기 더 쉽다. 고수준 언어에서는 프로그램을 효율적으로 짜기 위해 특정 프로세서의 명령어 레퍼토리를 알아야 할 필요가 없다. 따라서 더 많은 이들이 더 빨리 프로그래밍을 할 수 있게 해준다.
또한 고수준언어는 특정 아키텍처에 종속되지 않는다
고수준 언어의 구조는 비슷하다. 프로그램이 사용하는 변수에 이름을 붙이고, 누적 합계를 0으로 초기화한 다음, 수를 읽으면서 0을 만나기 전까지는 누적 합계에 더하고, 마지막으로 합계를 출력한다.
초기 고수준 언어 중 하나인 FROTRAN 포트란은 IBM에서 개발된 과학과 공학 분야에서 계한을 표현하는데 매우 성공적으로 사용됐다.
포트란의 예시는 다음과 같다
inter num, sum
sum = 0
read(5,*) num
if(num .eq. 0) goto 20
sum = sum + sum
goto 10
write(6,*) sum
stop
end
여기서 read부분이 10, write부분이 20이다. 어셈블리어로 변환할때는 read write 를 GET과 PRINT로, if문의 경우는 IFZERO를 예로들 수 있다.
두번째로 볼 언어는 코볼(COBOL, Common Business Oriented Language)이다.
코볼은어셈블리 언어를 대체할 고수준 언어를 만들기 위해서 개발되었으며 특히 사무 데이터 처리 목적으로 많이 사용되었다. 실제로 포트란과 코볼도 아직까지 사용되는 언어이다.
다른 언어로는 베이직(Beginner's ALL-purpose Symbolic Instuction Code)는 프로그래밍 교육을 위한 쉬운 언어로 만들어졌다.(와 이게 쉬운거였다니) 베이직은 특히 간단하고 컴퓨팅 자원을 적게 필요로 해서 개인용 컴퓨터에서 사용할 수 있는 첫 번째 고수준 언어였다. 마이크로소프트 창업자인 빌 게이츠와 폴 앨런은 1975년에 마이크로컴퓨터용 베이직 컴파일러를 만들면서 사업을 시작했는데, 이것이 마으크로 소프트의 첫 번째 제품이었다. 베이직의 주요한 변종인 마이크로소프트 비주얼 베이직이 오늘날에도 활발하게 지원되고 있다.
초창기에는 컴퓨터가 비싸고, 느리고, 성능에도 한계가 있어 고수준 언어로 작성된 프로그램이 비효율적일 것이라는 우려가 있엇다. 컴파일러보다는 숙련된 어셈블리 언어 프로그래머가 더 효율적으로 코드를 만들었기 때문이다. 덕분에 컴파일러 개발자들이 많은 노력을 기울여 프로그래밍 언어를 확립했다. 또한 컴퓨터가 수백만 배 빠르고 메모리가 풍족해졌기에 프로그래머가 개별 명령어 수준의 효율성까지 걱정하는 경우는 드물게 됐다.
물론 컴파일러와 컴파일러 개발자들은 여전히 여기에 신경 쓰고 있다.