IT 지식

작문과 비슷한 프로그래밍

OIIUOI 2022. 8. 20. 12:24

포트란 코볼, 베이직이 성공했던 이유 중 하나는 특정 응용 분야에 집중했기 때문이다. 이 언어들은 굳이 모든 프로그래밍 과제를 처리하려고 하지 않았다. 1970년대에 '시스템 프로그래밍' 용도로, 즉 어셈블러, 컴파일러, 텍스트 편집기 같은 프로그래머 도구와 심지어 운영체제까지 작성할 목적으로 사용할 언어들이 만들어졌다. 그중 단연코 가장 성공적이었던 것은 C 언어다. C는 1973년에 벨 연구소에서 일하던 데니스 리치가 개발했고, 아직도 폭넓게 사용되며 가장 인기 있는 언어 중 하나다. C는 개발 이후 미미하게 변경돼서 오늘날의 C 프로그램은 30년 - 40년 전의 코드와 거의 비슷해 보인다. 

 

1980년대에 들어서는 규모가 매우 큰 프로그램의 복잡성 관리를 도울 의도로 설계된 언어들이 개발되었고 C++가 대표적이다. C++는 비야네 스트롭스트룹이 개발했는데, 그 또한 벨 연구소에서 일했다. C++는 C에서 진화했고, C 프로그램은 대부분 C++ 프로그램에서도 유효하지만, 그 반대는 그렇지 않다 오늘날 컴퓨터에서 사용되는 주요 프로그램 대부분은 C나 C++로 작성됐다.

 1990년대에는 인터넷과 월드 와이드 웹의 성장에 대응하여 더 많은 언어가 개발됐다. 컴퓨터에는 계속해서 더 빠른 프로세서와 용량이 큰 메모리가 장착되었고, 프로그래밍을 빠르고 편하게 하는 것이 컴퓨터가 효율적으로 돌아가도록 하는 것보다 더 중요해졌다. 자바와 자바스크립트 같은 언어는 의도적으로 이러한 트레이드오프에 맞춰 설계됐다.

 자바는 1990년대 초에 썬 마이크로시스템즈에서 일하던 제임스 고슬링이 개발했다. 원래 자바의 적용 대상은 속도는 그다지 중요하지 않지만 유연성이 중요한 가전제품과 전자 기기 같은 작은 임베디드 시스템이었다, 이후 자바는 웹 페이지상에서 실행할 용도로 변경되었지만 별로 인기를 얻지 못했고, 대신 웹 서버에 널리 사용되고 있다. 예를 들어 사용자가 이베이 같은 웹사이트를 방문하면 사용자의 컴퓨터는 웹페이지를 표시하기 위해 C++와 자바스크립트를 실행하겠지만, 이베이는 방문자의 브라우저로 전송할 페이지를 생성하는 데 자바를 사용할 가능성이 크다. 자바는 안드로이드 앱을 작성하는 주요 언어이기도 하다. 자바는 C++ 보다 단순하지만(비슷하게 복잡한 방향으로 진화하고 있기는 하다), C보다는 더 복잡하다. 또한 C보다 더 안전하기는 한데, 몇몇 위험한 특성을 제거했고 메모리에서 복잡한 자료 구조를 관리하는 일처럼 에러가 발생하기 쉬운 작업을 처리할 내장 메커니즘을 갖추고 있기 때문이다. 그래서 프로그래밍 수업에서 처음 배우는 언어로도 인기가 높다.

 방금 했던 이야기에서 프로그램과 프로그래밍에 관해 보편적으로 중요한 사항을 이끌어 낼 수 있다. 특정 작업을 하는 프로그램을 작성하는데는 항상 많은 방법이 있다는 것이다. 이러한 의미에서 프로그래밍은 작문과 비슷하다. 문체와 적절한 어휘 사용 등은 글을 쓸 때도 중요하지만 프로그램을 작성할 때도 중요하다. 프로그램을 어떻게 작성했는지를 보고 훌륭한 프로그래머인지 판단할 수도 있다. 다른 사람이 작성한 코드 중에서 자신에게 필요한 작업을 수행하는 코드를 어렵지 않게 찾을 수 있어서, 다른 프로그램을 복사한 프로그램을 심심찮게 찾아볼 수 있다. 

자바스크립트는 C에서 시작된 광범위한 언어군에 속하지만 다른 언어들과 차이점이 많다. 자바스크립트는 1995년에 넷스케이프에서 근무하던 브렌던 아이크가 만들었다. 이름의 일부가 겹친다는 점을 제외하면 자바스크립트는 자바와 아무 관계가 없다. 자바스크립트는 처음부터 웹페이지의 동적인 효과를 구현하기 위해 브라우저 내부에서 사용할 목적으로 설계되었고, 오늘날 거의 모든 웹페이지는 자바스크립트 코드를 어느 정도 포함하고 있다.

 자바 스크립트는 시험 삼아 무언가 만들어 보기 쉽다. 우선 언어 자체가 단순하다. 그리고 컴파일러가 모든 브라우저에 내장되어 있어 별도로 다운로드하지 않아도 된다. 또한 계산한 결과를 바로 볼 수 있다. 이 예제에 몇 행을 추가한 다음 웹페이지에 올리면 전 세계 누구라도 이 프로그램을 볼 ㅅ 있다

 파이썬은 네덜란드 암스테르담의 CWI에서 일하던 귀도 반 로섬이 개발해서 1991년에 처음 발표한 언어다. 파이썬은 C, C++, 자바, 자바스크립트와 구문 규칙 면에서 약간 다른다. 가장 눈에 띄는 부분은 문장을 그룹화하는 데 중괄호 대신 들여 쓰기를 사용한다는 점이다. 파이썬은 처음부터 가독성에 초점을 두고 설계되었다. 파이썬은 배우기 쉽고, 생각할 수 있는 거의 모든 프로그래밍 과제에 필요한 라이브러리를 풍부하게 제공해서 가장 널리 사용되는 언어 중 하나로 자리 잡았다.

 

프로그래밍 언어는 앞으로 어떻게 발전할까? 짐작건데 우리는 더 많은 컴퓨터 자원을 우리에게 유용한 방향으로 사용함으로써 프로그래밍을 계속해서 쉽게 만들 것이다. 또한 프로그래머가 더 안전하게 사용할 수 있는 언어를 만드는 방향으로 나아갈 것이다. 예를 들어 C 언어는 매우 예리한 도구다. C 언어로는 늦게까지 검출되지 않는 프로그래밍 에러를 무심코 만들기 쉬운데, 이러한 에러는 어쩌면 이미 흉악한 목적으로 이용된 다음에야 발견될 수도 있다. C 이후에 나온 언어들은 이러한 에러를 일부 방지하거나 검출하기 쉽게 되어 있지만, 더 느리게 실행되거나 메모리를 더 많이 차지하는 등의 희생이 따른다. 대체로는 이런 방향으로 나아가는 것이 정당한 트레이드오프지만, 자원을 덜 쓰면서 빠른 코드를 작성하는 것이 매우 중요해서 C처럼 효율성이 높은 언어가 계속 사용될 응용 분야가 분명히 아직 많다. 예를 들면 자동차, 항공기, 우주선, 무기 등에 있는 제어 시스템이 그렇다.

 각 언어가 튜링 머신ㄴ을 모방하여 작동하거나, 튜링 머신이 각 언어를 모방하여 작동하는 데 사용될 수 있다는 점에서 모든 프로그래밍 언어는 형식상 동등한 관계에 있다. 그러나 모든 언어는 절대 모든 프로그래밍 작업에 대해 똑같이 효율적이지는 않다. 복잡한 웹페이지를 제어하는 자바 스크립트 프로그램을 작성하는 일과 자바스크립트 컴파일러를 구현하는 C++ 프로그램을 작성하는 일 사이에는 막대한 차이가 있다. 이 두 작업 모두 완전히 전문적으로 할 수 있는 프로그래밍 언어 여남은 개를 수월하게 다루고 그런대로 능숙하게 프로그래밍할 수는 있겠지만, 모든 언어에 똑같은 수준의 전문성을 갖추고 있지는 않을 것이다.

 현재 널리 사용되는 언어는 100개 미만이지만, 지금까지 수천 개의 프로그래밍 언어가 발명되었다. 왜 그렇게 많을까? 앞서도 얼마간 이야기했듯이 각 언어는 효율성, 표현력, 안전성, 복잡성 같은 문제 간 트레이드오프를 고려해서 만들어진 결과다. 많은 언어는 분명히 기존 언어가 가진 약점을 인식하면서 그에 대한 반작용으로 나타나고, 기존 언어에서 배운 교훈과 더 좋아진 컴퓨팅 성능을 반영하며, 설계자의 개인적인 취향에 크게 영향을 받는다. 새로운 응용 분야가 생기면 새로운 영역에 주안점을 둔 새 언어가 만들어지기도 한다.

 프로그래밍 언어는 확실히 컴퓨터 과학에서 중요하고 매력적인 부분이다. 미국의 언어학자인 벤자민 워프에 따르면 '언어는 우리가 생각하는 방식을 형성하고, 생각할 수 있는 범위를 결정한다.' 과연 이 명제가 자연 언어에 적용되는지에 대해서는 언어학자들 사이에서 논쟁이 이어지고 있지만, 컴퓨터에게 할 일을 지시하기 위해 만든 인공 언어에는 정말로 적용되는 것처럼 보인다.