brunch

You can make anything
by writing

C.S.Lewis

by Jay Mar 08. 2023

프로그램과 프로그래밍

프로그램, 프로그래밍, 프로그래밍 언어, 그리고 코딩

비 개발 직군의 사람으로서 IT 분야에 대해 이것저것 공부하면서 알게 된 내용을 저 나름대로 정리해보고 있습니다. 아직은 지식이 부족해서 정확하지 않은 내용이 있을 수 있는데요, 혹시라도 틀린 내용이 보인다면 피드백 부탁드립니다 :)


컴퓨터가 무엇인지에 대해 정리해 본 이전 글을 참조합니다.


https://brunch.co.kr/@gogenius28/90


이번엔 프로그램과 프로그래밍에 대해서 정리해보려 합니다. 프로그램이라는 표현은 정말 많이 사용되지만, 굉장히 추상적이고 모호한 의미로 쓰이고 있는 거 같은데요. 좀 더 심화된 IT 지식들을 살펴보기 전에 한 번 개념을 정리해 보려 합니다.



프로그램이란?

컴퓨터는 0과 1의 숫자 연산으로 어떠한 작업을 처리할 수 있는 계산기인데요. 보통의 컴퓨터는 굉장히 수동적입니다. 그래서, 스스로 처리할 작업을 직접 만들어 내지 못합니다. 컴퓨터가 컴퓨터 자신에게 '1+1을 계산해 줘'라고 명령하지 못하는 거죠.


컴퓨터는 오직 사람이 '이 작업을 처리해 줘'라고 요청을 보내야 그 요청에 해당하는 작업을 처리할 수 있습니다. 컴퓨터가 동작하기 위해선 사람의 요청이 꼭 필요한 것이죠. 여기서 요청을 다른 말로는 명령이라고 할 수 있는데요. 이 명령이라는 것은 컴퓨터가 어떠한 작업을 처리하기 위한 필수 요소입니다.


그런데, 사람이 컴퓨터에게 요청하는 작업은 한 줄의 명령으로만 표현되지 않는 경우가 많습니다. 코끼리를 냉장고에 넣는다라는 하나의 작업을 처리하기 위해선 


코끼리를 데리고 냉장고 앞으로 간다.

냉장고 문을 연다.

코끼리를 넣는다.

문을 닫는다.


이렇게 최소 4가지의 명령이 필요한 것처럼요. 어떠한 작업이 성공적으로 처리되기 위해선 1개 이상의 명령들을 정해진 순서에 맞게(문을 닫고 코끼리를 넣고 문을 열 수는 없으니) 전달해야 하는 것이죠.


이때, 원하는 작업을 처리하기 위해 컴퓨터에게 전달한 명령들의 집합을 프로그램(Program)이라고 합니다. 다른 말로 다시 표현해 보면 어떠한 결과를 얻기 위해 순서대로 처리해야 하는 명령들의 집합인 것이죠. 위에서 코끼리를 냉장고에 넣기 위해 만들었던 명령의 집합도 어떻게 보면 하나의 프로그램입니다. 또, 라면 끓이기라는 작업을 실행하기 위해 


냄비에 물을 넣는다.

물이 끓기를 기다린다.

물이 끓으면 라면 봉지를 뜯어 면을 꺼내 넣는다.

스프를 넣는다.

3분간 더 기다린다.

면이 익으면 불을 끈다.


라는 명령들을 만들어 냈다면, 이 명령들의 집합도 프로그램입니다. 


컴퓨터에서 우리가 흔히 사용하는 엑셀이라는 프로그램도 예로 들어볼게요. 엑셀은 사람이 조작하는 방식에 따라 원하는 결과를 반환하도록 만들어진 여러 명령들의 집합입니다. 예를 들어, A1셀에 숫자 1, A2 셀에 숫자 2, A3 셀에 숫자 3을 넣고 세 셀을 블록으로 지정한 다음 우측 하단의 점을 드래그하면 아래 셀들에 4, 5, 6 등 이후 숫자가 자동으로 채워지죠.

기능의 정식 명칭은 자동 채우기네요.


자동 채우기 옵션은 엑셀이라는 프로그램을 구성하는 하나의 명령에 불과합니다. 그리고 이 하나의 기능을 만드는 데에도 굉장히 많은 명령들의 집합들이 필요할 것입니다. 대충,


셀에 숫자를 적는다.

적힌 숫자를 블록으로 잡는다.

블록에 잡힌 숫자 간 관계를 확인한다(e.g 1씩 증가, 2씩 감소 등).

숫자들의 관계를 파악해서, 다음 셀에 어떠한 숫자가 와야 하는지 계산한다.

마우스로 블록의 오른쪽 아래 점을 클릭해 아래로 끌어내리면 계산해 둔 다음 숫자들을 차례대로 보여준다.


와 같은 명령들이 저 기능 하나를 만드는 데 필요하겠죠. 이렇게 하나의 기능에도 여러 명령들이 필요한 것을 생각해 보면, 엑셀이라는 하나의 프로그램은 무수히 많은 명령들의 집합이라는 걸 생각해 볼 수 있겠죠?



프로그래밍? 코딩?

이렇게 무수히 많은 명령들을 작성해서 컴퓨터가 원하는 작업을 처리하도록 하는 과정을 프로그래밍(Programming)이라고 합니다. 쉽게 얘기해서, 프로그램을 만드는 과정이 프로그래밍인 거죠. 좀 더 풀어서 설명해 보면, 원하는 작업을 컴퓨터가 처리하도록 하기 위해 필요한 여러 명령들을 작성하는 과정이 프로그래밍입니다.


그리고, 여기에서 '필요한 여러 명령들을 작성하는 과정'을 다른 표현으로 코딩(Coding)이라고도 합니다. 코딩은 말 그대로 '코드를 작성하는 과정'을 뜻하는데요. 컴퓨터에게 필요한 명령을 전달하기 위해선 프로그래밍 언어를 통해 컴퓨터와 인간이 소통할 수 있는 어떠한 코드(Code)를 작성하는 게 필요하기 때문에, 결국 코딩이라는 것도 명령을 작성하는 과정인 셈입니다. 


컴퓨터에게 전달할 명령을 작성하는 작업이라는 맥락에서는 프로그래밍과 코딩은 굉장히 유사한 개념입니다. 하지만, 그렇다고 프로그래밍과 코딩이 완전히 똑같은 것은 아닙니다. 코딩은 말 그대로 필요한 명령을 '코드'로 작성하는 과정만을 뜻합니다. 반면, 프로그래밍은 명령을 어떻게 하면 효율적으로 전달할 수 있을지, 작성된 명령들을 지속적으로 발전시키면서 효과적으로 관리할 수 있을지 등 조금 더 기획적인 고민을 함께 하는 작업입니다.


실제 개발을 하는 분들도 스스로가 단순히 코드만 짜는 코더(Coder)가 아니라, 좀 더 좋은 구조를 설계하고 기획할 수 있는 프로그래머(Programmer)가 되길 바라시는 거 같아요. 아무튼, 이 둘의 차이는 처음 개발을 배우시는 분들에겐 크게 와닿지 않을 수 있으니, 혹시라도 이 글을 참고하시는 분이 있다면 그냥 두 용어가 대충 어떤 맥락에서 사용되는지만 아셔도 충분할 거 같습니다.



프로그래밍을 잘한다라는 건?

프로그래밍이 뭔지에 대해서 정리해 봤는데요. 흔히 사람들이 '개발을 잘한다'라는 표현을 하는 걸 들어보신 적 있을 텐데요. 이 말이 의미하는 것도 결국 '프로그래밍을 잘한다'라는 것과 같습니다.


위에서 들었던 라면 끓이는 예시를 다시 가져와 보겠습니다. 사실, 라면을 끓일 수 있는 사람은 많습니다. 물을 끓이고, 면과 스프를 넣고, 필요하다면 다른 토핑들을 추가한 다음에, 면을 익혀서 먹으면 되죠. 


하지만, 분명 라면을 잘 끓이는 사람과 못 끓이는 사람의 차이는 존재합니다. 같은 라면이지만 물 양은 어떻게 맞추고, 면과 스프를 넣는 타이밍은 언제고, 토핑으로는 뭘 넣어야 하는지를 잘 조절하는 사람이 끓인 라면은 일반 사람이 끓인 라면보다 맛있죠.


프로그래밍도 마찬가지입니다. 사실, 컴퓨터에게 A라는 작업을 처리하는데 필요한 명령을 구성하는 방식은 무수히 많습니다. 코끼리를 냉장고에 넣는 방법도


코끼리와 함께 앞 구르기를 하며 냉장고 앞에 간다.

냉장고 문을 발로 차서 부순다.

백 덤블링을 하며 코끼리를 냉장고 안으로 넣는다.

문을 고치기 위한 재료를 사 온다.

새로운 문을 만들어서 냉장고에 붙인다.

문을 닫는다.


와 같이, 아주 복잡하고 비효율적으로 할 수 있죠. 하지만, 이런 방식으로 코끼리를 냉장고에 넣는 것은 별로 좋아 보이지 않습니다. 결과는 같지만, 좀 더 좋은 방식이 있다면 그 방식으로 코끼리를 집어넣는 게 더 좋겠죠. 라면은 누구나 끓일 수 있지만, 가장 맛있게 라면을 잘 끓이는 특별한 방법이 있다면 그 방법을 써서 라면을 끓이는 게 더 좋은 것처럼요.


결국, 개발이라는 것은 '어떻게 하면 컴퓨터에게 더 효율적이고, 좋은 방식으로, 원하는 결과가 나오게 작업을 시킬 수 있을까?'라는 문제를 푸는 과정인 것이고, 이 과정을 잘하는 사람들을 흔히 '개발을 잘한다'라고 합니다. 


이런 이유 때문에 개발(프로그래밍)을 잘하려면 문제 해결 능력이 중요하다고 하는 것입니다. 컴퓨터로부터 원하는 결과를 가장 효율적이고 좋은 방식으로 얻어내야 한다는 문제에 매 순간 마주하고, 그 문제를 해결해 가는 것이 개발자(프로그래머)가 하는 일이기 때문이죠. 그리고, 그 일을 잘 해내기 위해 꼭 필요한 능력이 문제 해결 능력입니다.




이번 글에서는 프로그램, 프로그래밍, 코딩, 그리고 개발을 잘한다는 것이 어떤 의미인지까지 정리해 봤습니다. 다음 글에서는 프로그래밍 언어에 대해 좀 더 자세히 공부하고 적어보겠습니다. 


일부러 좀 더 많은 것들을 알아본 다음에 별도의 글로 기록하고 싶어서, 이번 레슨에서는 일부러 프로그래밍 언어에 대한 것들을 많이 언급을 안 했는데요.


프로그래밍 언어라는 게 뭔지, 왜 이렇게 다양한 프로그래밍 언어가 있는지, 프로그래밍 언어를 잘 배우려면 어떤 걸 해야 하는지 등에 대해서 공부한 다음 기록해 보도록 하겠습니다.



[레퍼런스]

프로그램이란 무엇인가

위키백과 - 컴퓨터 프로그램

코딩 기본 용어 정리, 코딩이 뭐야? 프로그래밍 언어가 뭔데?


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari