본문 바로가기

컴퓨터공학/프로그래밍 언어와 컴파일러

좋은 프로그래밍 언어란? (Goodness of a programming language)




좋은 프로그래밍 언어란?

(Goodness of a programming language)



본 포스팅의 내용은 Concepts of Programming Language 11th (Pearson) 책의 내용을 참고하여 작성되었습니다.



 개발을 하다보면, 주변에서 어떤 프로그래밍 언어가 좋다더라, 디버깅이 쉽더라 등등 많은 이야기를 들을 수 있는데요. 그럼 프로그래머들이 가장 많이 사용하는 언어는 무엇일까요? 그렇다면 그 언어는 좋은언어일까요? 그렇다면 성능이 아주 뛰어난 컴파일러가 있다면, 과연 그 언어가 가장 좋은 언어라고 할 수 있을 까요? Python처럼 쉬운언어? C처럼 정직한 언어? Java처럼 개발자를 편하게 해주는 언어?  이번 포스팅에서는 컴파일러를 제작하기에 앞서서, 좋은 프로그래밍 언어라는 질문을 수많은 프로그래밍 분야와 다양한 프로그래밍 언어들의 성격을 살펴보도록 하겠습니다!! 




programming_language_lanking_2018http://pypl.github.io/PYPL.html


Programming Language Lanking 2018

출처: http://pypl.github.io/PYPL.html



 위에 표는, PYPL(PopularitY of Programming Language)라는 사이트에 나와있는 프로그래밍 언어의 인기 순위입니다. PYPL 지표를 기준으로 순위를 산정하였는데, 이 지표는 이 언어들의 tutorial(교육자료)들이 구글에서 얼마나 많이 검색되었는지를 분석한 결과라고 합니다. 이 표를 납득하기 힘드신 분들도 있고, 어느정도 맞다고 생각하실 분도 있을 것 같습니다. 그렇다면 이러한 인기 순위가 프로그래밍 언어의 좋음(Goodness)를 나타낸다고 할 수 있을까요? 어떻게 생각하시나요? 저는 개인적으로, 절반은 찬성 절반은 반대의 입장입니다. 왜냐하면 프로그래밍은 설계된 목적이 천차만별이고 사용되는 분야의 스펙트럼또한 엄청나게 넓기 때문이죠.ㅎㅎ  그렇다면 어떤 산업과 분야에서 이러한 프로그래밍 언어가 사용되고 있을까요?



프로그래밍 분야 (Programming Domains)

1. 과학 분야 (Scientific Application Field)

세계 최초의 컴퓨터는 1940년~1950년 사이에 발명되었는데, 이 때 컴퓨터는 모두 과학적인 분야를 위해 사용되었다고 합니다. 과학적 분야는 단순하고 한정된 연산을 수도없이 많이 반복해야하는 일이 많이 발생하는데 이러한 문제를 위해서 컴퓨터가 사용됩니다. 가장 유명한 언어로는 포트란(Fortran)이 있고 그 뒤를 이은 ALGOL60가 있습니다. 포트란은 성능이 좋고 언어와 컴파일러도 지속적으로 개발되어서 아직까지도 사용되고 있습니다.

2. 경영 분야 (Business Application Field)

  비즈니스 분야에서 처음 컴퓨터가 사용된 시기는 1950년대 초 입니다. 처음으로 가장 성공한 언어는 COBOL(ISO/IEC, 2002)이라는 High-Level 언어인데 지금까지도 은행, 보험을 비롯한 여러 경영분야에서 많이 사용되고 있는 언어입니다.

3. 웹 분야 (Web Application Field)

  웹이라고 불리우는 산업은, 컴퓨터 산업에서 가장 큰 지분을 차지하고 있다고 해도 과언이 아닐정도로 막강한 힘을 가지고 있습니다. 위에 랭킹만 보더라도 웹 동장에 사용되는 JavaScript, PHP, JAVA 등등 많은 언어가 상위권을 차지하고 있습니다. 

4. 시스템 분야 (System Application Field)

  우리가 사용하는 운영체제나, 다목적 프로그램을 작성하는 분야가 존재합니다. 이 분야의 프로그램들은 Low-Level 언어로 많이 작성되는데, 하드웨어를 직접 접근하여 조작할 필요가 있거나 성능이 매우 중요한 요소이기 때문입니다. 대표적인 언어로는 C/C++ 또는 어셈블리 언어가 있습니다.


이상적 언어의 주요 특징

1. 가독성 (Readability)

프로그래밍언어에서 가장 중요한 측면중 한가지는 효율성입니다. 이러한 효율성을 컴퓨터에게 초점을 맞출 것인가 혹은 프로그래머에게 초점을 맞출 것인가는 여전히 논쟁거리입니다. 예를들어 Python같은 경우는 프로그래머들이 사용하기에는 가독성이 좋고 편리하지만, 컴퓨터입장에서는 비효율적인 언어입니다. 반면에 C언어는 단순한 프로그램도 매우 길어지고 가독성도 그렇게 좋은편은 아니지만 어셈블리언어와 매우 가까운 언어이기 때문에 실행속도가 매우 빠릅니다. 따라서 1970년대 이전에는 대부분 컴퓨터에 초점이 맞춰진 성능위주의 언어가 많이 개발되었습니다. 하지만 시간이 지나고 프로그램이 더욱 복잡해지면서 기업입장에서 프로그래밍의 유지보수에 들어가는 비용이 성능향상을 통해 얻을 수 있는 비용보다 올라가게 되었고 이는 프로그래머가 쉽게 읽고 코드를 작성할 수 있는 방향으로 언어가 설계되었습니다. 개인적으로 언어를 선택할 때 구조가 한눈에 들어오고, 문장이 모호하지 않게 해석되는 언어를 선택하는 것이 중요하다고 생각합니다.


2. 직교성 (Orthogonality)

언어의 직교성이란 언어를 이용해서 어떠한 기능을 구현할 때, 상대적으로 적은 수의 기본 키워드 (basic construct)들의 조합을 이용하여 나타낼 수 있는지를 말합니다. 또한 프로그래밍 언어를 이용하여 어떤 표현을 되도록 방법의 수가 적게 만들도록 하는 성질 입니다. 예를 들어서, C에서 기본 자료형인 int, float, double, character와, 배열을 선언하는 기호인[] 그리고 포인터를 선언하는 *가 있다면 이 기본 키워드 조합을 이용해서 수많은 데이터 타입을 표현할 수 가 있습니다. int[][]나 char* 처럼 말이죠. 


3. 컴파일 및 프로그램 실행속도 (Implementation Efficiency)

 실시간으로 코드를 컴파일하여 실행하는 프로그램은 컴파일 시간이 곧 실행속도입니다. 하드웨어의 실행 구조를 숨기지 않고 그대로 드러낸 언어가 있는 반면에, 추상화(Abstraction) 과정을 많이 거쳐서 어떻게 프로그램이 실제로 어떤 어셈블리어로 구현이 될 지 프로그래머가 알지 못하도록 설계된 언어가 있습니다. 과거에는 전자가 컴파일 및 프로그램 실행속도면에서 후자보다 빨랐습니다. 하지만 최근에는 컴파일러의 성능향상이 이뤄짐에 따라 후자가 종종 더 빠른 프로그램을 생성해냅니다. 따라서 개인적으로 언어를 선택할 때, 지속적으로 업데이트가 이루어지고 있는 성능좋은 컴파일러를 선택하는 것이 중요합니다.


이외에도 가격, 에러 핸들링, 타입 검사 등 "좋은 프로그래밍 언어"를 판단하는 여러 기준이 존재합니다. 이상으로 이번 포스팅을 마치도록 하겠습니다. 감사합니다.