본문 바로가기

컴퓨터 사이언스

프로그램, 프로그래밍(Programming)은 무엇인가?

요즘은 그야말로 프로그래밍이 대세 of 대세다. 높은 연봉의 프로그래머는 좁아진 취업시장에서 가장 각광받는 직업군이 되었다. 이러한 높은 시장 수요로 비전공자들의 쓰나미가 몰려오고 있는 중이다. (I am one of tsunamis...).

 

그런데 프로그램을 만드려면 프로그램이 뭔지는 알아야하지 않을까? 너도 나도 한다는 프로그래밍이 무엇이고 어떻게 하는건지 대략적으로 개념을 정의해보자.

 

What is a computer program?

컴퓨터 프로그램은 무엇인가?

 

Detailed plan or procedure for solving a problem with a computer 

 

개념 정의의 표준 브리태니커에서 말하는 프로그램은 '컴퓨터로 문제를 풀기 위해 세세하게 정의된 계획과 절차'를 말한다. 즉, 컴퓨터가 수행하기 위한 순차적인 명령어의 집합이 컴퓨터 프로그램(Computer)이다. 우리가 즐기는 게임과 사무직의 필수품 오피스 프로그램 모두가 단순한 규칙의 집합이라는 뜻이다.   

 

우리가 보는 게임의 규칙

 

슈퍼마리오라는 게임을 떠올려보고 이를 규칙으로 정의해보자

 

 

1. 마리오가 움직이는 규칙

2. 화면 표현 규칙

3. 장애물 규칙(점프 피격 시 움직임, 마리오의 움직임 제한 등)

4. 아이템 등장 규칙

5. 아이템 움직임 규칙

6. 적 피격 규칙

....

 

이런 규칙들이 모여 슈퍼 마리오가 탄생했다. 역동적인 움직임을 표현하는 게임 또한 앞서 말한 수많은 규칙들이 모여 만들어진 집합, 프로그램이다. 

 

이렇게 프로그램의 정의를 알면 프로그래머와 프로그래밍의 정의는 자동으로 나온다.

 

프로그래머(Programmer)는 규칙과 절차를 만드는 사람이고 프로그래밍(Programming)은 규칙과 절차를 정의하는 과정이다. 여기서 규칙과 절차는 문제를 해결하기 위한 것이다. 우리가 생각하는 '명령'의 거의 모든 것이 문제에 해당한다. 여기에 비추어 보았을 때 프로그래밍의 최종적인 의미는 특정 목적을 달성하기 위해 설계된 알고리즘을 프로그래밍 언어를 사용하여 코드로 작성하는 과정을 의미한다.

 

슈퍼마리오에서 '마리오는 방향키 →를 누르면 오른쪽으로 움직이고 계속 방향키를 누르고 있으면 움직임을 멈추지 않는다.' 라는 문제가 제시되면 프로그래머는 컴퓨터가 알아 들을 수 있는 규칙과 절차를 만들어내는 것이 규칙과 절차 정의를 통한 문제의 해결 과정이다.

 

프로그래밍에서 중요한건 '컴퓨터가 알아들을 수 있는 규칙과 절차'라는 것이다. 컴퓨터에게 한국어로 아무리 말해봤자 컴퓨터는 0과 1만 알아듣는 바보에 가깝기 때문에 이해하지 못한다. 컴퓨터가 알아들을 수 있는 이진법을 작성해주어야 하지만, 인간과 컴퓨터 간의 언어는 너무나도 다른 관계로 0과 1만 가지고 대화하기에는 너무나 어렵다. 

 

이진법과 컴퓨터에 대해 조금 더 자세한 내용을 알고 싶다면 아래 글을 확인해보자.

 

https://yunjuniverse.tistory.com/16

 

컴퓨터(Computer)란 무엇인가?

목차 0. 들어가며 1. 컴퓨터(computer) 명칭의 이해 2. 컴퓨터의 시초 3. 현대 컴퓨터의 개념과 구성요소 4. 컴퓨터의 동작 ... n. 마치며 (... 추후 업데이트) 0. 들어가며 내가 처음 컴퓨터를 본 건 초등

yunjuniverse.tistory.com

앞서 작성한 글을 읽고 오면 좋은 부분!

 

이 문제를 해결하기 위해 과학자들은 컴퓨터가 가진 이진법의 형태에도 규칙을 부여해 사람들이 명령을 내리기 쉽게끔 새로운 언어를 만들어 냈다. 이것이 바로 프로그래밍 언어(Programming language)이다.

 

너무 많다....

 

이 프로그래밍 언어들은 각각의 특징이 있는데, 이 부분은 프로그래밍 언어에 대해서 각잡고 언젠가 다뤄보도록 하겠다. 프로그래밍 언어와 우리의 언어(자연어)의 큰 차이는 중의성과 모호성을 철저히 배제시켜 설계한다는 것이다. 만약 두가지 의미로 해석되는 한 문장이 있다면 기계는 어떻게 해야할지를 모른다.

 

'LG트윈스의 5연패를 달성해라' 라는 명령이 있다고 가정해보면,

 

이게 연달아 지라는 의미인지 5회 연속 우승을 하라는 건지 알 수가 없다. (심지어 나도 알 수 없다.... 언제 우승하냐 진짜)

 

그리고 만약 잘 설계된 프로그래밍 언어가 없다면 프로그래머가 "Hello, World"를 작성하기 위해선

0100100001100101011011000110110001101111001000000101011101101111011100100110110001100100

 

이딴 식으로 작성해야한다. 

 

그래서 프로그래머들은 프로그래밍 언어라는 사람들이 그나마 알아먹을만한 언어를 가지고 프로그래밍을 하는 것이다. 이러한 과정에서 프로그래밍의 최종 의미는 특정 목적을 달성하기 위해(문제를 해결하기 위해) 설계된 알고리즘(규칙과 절차)을 프로그래밍 언어를 사용하여 코드로 작성(컴퓨터가 알아들을 수 있도록)하는 과정을 말한다.

 

하지만 여기서 프로그래밍 언어만으로 부족한 일이 있다.

 

'그래서 컴퓨터가 프로그래밍 언어는 어떻게 알아먹을건데....?'

 

프로그래밍 언어로 된 소스 코드를 작성한 후에 컴퓨터에게 내용을 전달하려면 소스 코드를 기계어 코드로 변환시켜주어야 한다  이 코드를 컴퓨터가 이해할 수 있는 기계어로 번역하는 과정을 컴파일(Compile)이라고 합한다. 컴파일이 완료된 코드는 완전한 기계어가 되는 것이다.

 

즉, '인간의 언어(의사코드, Pseudo Code) -> 프로그래밍 언어 -> 컴파일링 -> 기계어'로 우리의 언어가 기계어가 되어 컴퓨터가 작동하는 것이다. 

 

그리고 컴파일은 빌드(Build)의 한 과정이다. 빌드란 작성한 소스 코드를 실행할 수 있는 산출물로 변환시키는 과정을 의미하는데, 프로그램이 실행되려면 컴파일을 통해 컴퓨터로 이해할 수 있도록 만들어주는 과정 뿐 아니라, .exe또는 .msi 확장자를 가진 실행 파일로 만들어주는 빌드 과정이 필요하다. 빌드가 완료되어야 소스 코드가 비로소 실행시킬 수 있는 하나의 프로그램으로 완성이 된다.

 

컴파일 이후에도 여러 과정들이 있다.

 

컴파일과 빌드는 자세히 알아봐서 나쁠 것은 없으니 추후에 써볼만한 주제로 남겨둘 예정이다.

 

마지막으로 프로그래머들의 무기인 IDE(Intergrated Development Environment) 소개를 끝으로 프로그래밍에 대한 기초적인 이야기를 끝내겠다. 

 

IDE는 '통합개발환경'으로 번역된다. 개발을 위해 필요한 환경을 제공해주는 프로그램이라는 뜻이다. 사실 프로그래밍 소스 코드를 작성하기 위해 꼭 IDE가 필요한 것은 아니다. 어디에 어떻게 코드가 쓰였든 쓰여진 텍스트를 기계어로 컴파일만 해주면 된다. 아주 간단하게 코딩을 하고 싶다면 그냥 메모장을 켜서 코드를 적으면 된다!

 

너무 쉽겠죠?...ㅎ

 

결국 소스코드는 컴파일을 위해 준비하는 텍스트 문서일 뿐이다. 그렇기에 어느 텍스트 에디터에 코드를 작성해도 무방하다. 그러나 이는 할 수 있다 수준이지 수 만개의 줄로 구성된 프로그램을 설계하는 개발자 입장에서는 이런 텍스트 에디터만 가지고 소스 코드를 작성하기엔 복창 터질 일이다.

 

2022년 자바 개발자들의 IDE 선호도

 

IDE는 코드를 작성할 때 사용하는 텍스트 에디터로써, 프로그래밍에 필요한 모든 작업을 하나의 프로그램 안에서 처리할 수 있도록 만들어진 고도화된 텍스트 에디터이다. IDE를 사용하면 단순히 코드를 작성하고 편집하는 것뿐만 아니라, 디버깅, 빌드 등의 작업을 하나의 IDE 안에서 할 수 있다. 비유하자면 메모장으로 코딩하는 것이 손으로 흙을 파내는 작업이라면 IDE로 코딩하는 것은 시추기를 100대 가져다가 흙을 파내는 것과 비슷하다. 최근에는 코드 예측까지 AI가 담당해 써야할 코드를 마구 추천해준다.

 

처음 프로그래밍을 하는 사람들은 IDE 선택에 왠지 모르게 집착하는 경향이 있다. 나중에 또 다른걸 배워야 할까봐 겁나서이기도 하고 이왕 시작하는거 장비빨을 세우고 싶은 욕망이 크기 때문인데.... 그냥 누가 가르쳐 줄 때 알려주는 IDE로 사용하면 된다. 해당 IDE를 이용하는데 문제가 생겼을 경우에만 다른 선택지를 고르는 것이 좋다.

 

축하합니다. 프로그래밍을 하려는 당신의 미래 또는 현재군요!

 

이렇게 프로그램, 프로그래머, 프로그래밍에 대한 정의를 알아보았다.