프로그래밍을 처음 시작했는데 무엇을 해야할까요?
프로그래밍을 전공 또는 메인 스킬셋으로 가지는 모든 분들이 다른 분들에게 살면서 한 번쯤 듣게되는 말 중 하나다.
그 전에 프로그래밍이 무엇인지를 먼저 이해하는 것이 급선무라고 생각한다.
남들이 한다고, 무조건 따라 시작하는 것을 멈추고
프로그래밍이란 무엇인가?라는 원초적인 질문에 관심을 기울여야 한다고 본다.
돌고 돌아 내가 내린 결론은 아래와 같다.
프로그래밍이 무엇이라고 생각하세요?
프로그래밍이란
제한된 언어로 자신의 의사를 표현하는 것이라고 나는 정의한다.
우선 이 문장을 둘로 나눠서 설명하겠다.
제한된 언어
우리는 평상시 말을 할 때 인지하지 못하지만, 귀로 듣는 언어 그 자체 외에도
목소리의 떨림, 손짓과 같은 비언어적 요소, 상대방의 지식, 대화하는 장소나 맥락, 등
엄청나게 많은 요소들이 포함되어 있다.
이 글을 읽기 전까지는 존재자체를 인지하기 어려웠겠지만,
내가 누군가와 말을 할 때, 그 사람과 나의 관계나 말을 하게되는 맥락에 따라 같은 말임에도 불구하고 상당히 다른 의미를 전달할 수 있는 상황이 존재한다.
예를 들어보자.
"나 돈 없어"
말하는 대상이 두 가지가 있다.
(1) 부모님
(2) 편의점 알바생
우선 부모님에게 저렇게 말 한다는 것은, 돈이 없으니 돈을 낼 여력이 없다거나
돈이 없으니 용돈을 달라고 상대가 상황적 맥락을 통해 파악할 수 있다
두 번쨰 상황 같은 경우, 돈이 없는데 애꿎은 편의점 알바생에게 손놈 짓을 하는 상황이다.
또 같은 말이라고 해도, 상황과 맥락에 따라 그리고 언어(한국어 / 영어)에 따라 완전히 다른 의미를 전달하게 된다.
자, 여기까지 우리 ‘인간’ 언어를 ‘인간’에게 사용했을 때 우리가 전달하고자 하는 의미가 얼마나 바뀌는지
간단한 예시를 통해서 알아 볼 수 있었다.
그럼 프로그래밍으로 넘어가 컴퓨터와 인간이 대화를 하는데, 인간과 인간 사이의 대화와 무엇이 다른지 알아보자.
인간과 컴퓨터의 차이
우선 우리가 알고 있는 컴퓨터는 얼마나 세부적으로 구조적으로 접근하는 방식에 따라 다양하지만,
흔히 대부분의 사람들이 마주하게 될 OS, Windows를 사용할 때를 감안하자.
우리가 아침에 부모님에게 깨워달라고 부탁을 한다고 해보자.
평일 아침이라면 부모님이 내가 평일 5일 모두 1교시 강의인 것을 알고 있기에
아침이라고 하면, 1교시가 시작되기 전까지 준비하고 학교까지 갈 수 있는 시각을 의미하는 것을 알 수 있을 것이다.
그렇기에 전날 밤, 술을 먹고 부모님에게 아침에 깨워줘라고 말을 해도
다음날 1교시에 학교를 갈 수 있는 시각에 부모님이 꺠워 주실 것이다.
반면, 컴퓨터(비서 휴머노이드라고 생각하자)는 우리가 직접 말하지 않는 이상
내일 아침이라는 것이 정확히 몇 시인지, 내일이 학교를 가야되는 평일인지,
네가 1교시 수업이 있는지, 어떻게 깨워야 하는지도 모르는 상태다.
‘사람’이라면 ‘아침에 깨워줘‘라고 말을 들었을 때 그에 따른 배경환경이나 왜 그런말을 들었는지 ‘추측’할 수 있는 고유의 기능이 있다.
하지만 ‘컴퓨터’는 그런 맥락 또한 모르고, 또한 구체적인 값이 아닌 ‘아침’을 어떻게 해석해야할 지 판단을 할 수 없기 때문에
사람이라면 ‘당연히’ 될 것이라고 생각한 것 조차 못하는 것이 컴퓨터다.
이런 컴퓨터에게 이해를 할 수 있는 ‘언어’가 프로그래밍 언어이며,
우리가 자연스럽게 하는 ‘자연어’와 달리
for, if-else, while, ! 같이 제한적인 언어를 통해서 의사를 전달하는 것이 프로그래밍 언어다.
쉽게 생각하면, 우리는 ‘어’라는 말 한마디에 상황적 맥락에 따라 수 많은 의미를 내포할 수 있고,
또 듣는 인간이 각기 다르게 해석하고 이해할 수 있지만,
프로그래밍 언어는 제한된 제어문을 통해서 그 일을 수행할 수 밖에 없다.
그래서 제한된 언어라는 단어가 프로그래밍을 설명하는 문장의 절반을 차지하는 영광을 갖게 된다.
인간의 언어 중에서 비언어적 언어, 맥락, 어감, 등 이러한 것들을 빼고!
인간이 사용하는 수 많은 언어 중에 몇 개만 골라, 컴퓨터가 이해할 수 있는 것으로 구성된 것이
프로그래밍 언어다.
자신의 의사를 표현하는 것
자, 제한된 언어로 자신의 의사를 표현하는 것이라고 하면 단숨에 감이 오지 않는가?
방금 본 예시는 말을 통해서 부모님에게 돈이 없으니 용돈을 달라는 부탁을 했고,
내일 아침 강의가 1교시이니 조금 일찍 깨워달라는 부탁도 했다.
말하는 대상인 부모님은 세세하게 묻지 않으셔도 무슨 의미이신지 알고 계신다.
우리는 이렇게 ‘자연어’로 의사를 표현했던 것을
프로그래밍어로 컴퓨터에게 말을 해야한다.
프로그램을 실행하는 컴퓨터는 내가 술에 취했는지, 내일 수업이 1교시인지도 모르는 상태에서…
다시, 프로그래밍이 무엇인가
프로그램은 결국 인간이 무엇을 하고자, 이루고자 하는 도구의 부속품이자 결과물에 불구하다.
물론 그 도구가 엄청 비쌀 수도 있고, 만들기 어려울 수도 있지만
무엇을 하고자하는 ‘의사’를 표현하는 것
(1) 제한된 언어인, 프로그래밍 언어로
(2) 자신의 의사를 표현하여 컴퓨터에게 시킬 수 있는 프로그램을 작성하는 것이다.
아니 이런 약팔이 같은 글을 왜 쓰셨는지요?
안타깝게도 비록 내 인생 얼마 살지도 않았지만,
이런 본질을 잊고 자신이 왜 프로그래밍을 배우고 또 전공을 했는지 잊는 분들이 엄청 많으셔서 작성하게 되었다.
특히, 당연하게도, 1~2 학년들이 마냥 놀 수 있을거라는 생각으로 입학 한 이후로
컴퓨터 앞에 앉아 이해할 수 없는 언어를 휘갈기고 있는 자신을 돌아보며
이 글의 첫 문장인 이 질문으로 회귀한다는 것이다.
프로그래밍을 (처음) 시작했는데 무엇을 해야할까요?
진짜 어이가 없지만, 이런 말을 너무나 자주 봤고 또 이번에 동아리 회장을 임하면서
가끔씩 나도 모르게 상담을 하면서 받은 질문이 이거다.
프로그래밍은 다른 학문과 다르게 실용성이 매우 높고,
또 이제는 보편적 인식이 퍼진만큼, 최종 학력의 영향을 덜 받는 직군이기도 한다.
그래서 대학의 4년 커리큘럼을 충실히 이행한다고, 저젏로 엄청난 소프트웨어를 만드는 것이 아니다.
인터넷 고등학교를 다니는 분들을 보면, 주로 프론트 개발에 치우치긴 했지만
현재 대학생보다 프로그래밍에 있어 더 진심이고 잘 활용하는 분들을 볼 수 있다.
특히 마인크래프트 서버를 운영한다거나, 지금 보고 있는 허접 Jekyll 블로그보다 훨씬 뛰어난 블로그를 만들어 운영하시는 분들도 있다.
그런 분들이 과연 학교에서 시켜서 거기까지 왔느냐? 하면 절대 아니라고 장담할 수 있다.
나도 그랬고, 프로그래밍을 배우다보면
도구를 사용하기 위해서 도구를 다루는 방법을 배우는 것이 아닌
도구 자체를 먼저 배우고나서 ‘나중엔 뭐라도 만들겠지’라는 생각을 하는 분들이 많다.
“아니 뭐, 파이썬 인기가 많으니 지금 일단 뭐가 되었든 간에
일단 파이썬부터 배우고 보자”라는 생각을 가지시는 분들이 있고,
또 결국 수요가 어느정도 있기 때문에 안전빵이 맞긴 하다.
하지만, 결국 프로그래밍이 회계사나 공인중개사처럼 자격증이 있고
어떤 검증을 기반으로 일을 계속할 수 있는 직군이 아니기 때문에
계속해서 자신이 스스로 무언가를 만들고, 배우고
도구를 도구답게 취급할 수 있는 사람이 되어야 행복하고 지속가능한 개발자가 될 수 있다.
도구로 뭘 만들고 할 수 있는지 생각도 못 해본채 일단 취업이니, 진로니 급급해
생각할 시간도 안 갖고 달려드는 모습을 보면, 안타까울 따름이다.
프로그래밍을 도구로 보느냐, 생계 수단으로 보느냐 이 두가지 갈림길 밖에 없는 것은 아니지만
시작하시는 분들에게 아주 당연해서 잊기쉬운 이 의문을 다시 한번 가슴 속에 새겼으면 하는 마음에
이 글을 작성하게 되었다.
프로그래밍이 무엇이라고 생각하세요?