[DAILY] 프로그래밍과 코딩의 차이
본 글은 개인의 견해를 적은 글입니다. 따라서 글의 오류 또는 모순이 있을 수 있으므로 공식적인 효력을 지니지 않습니다. 글은 수시로 변경될 수 있습니다.
최근 한국에서 코딩 교육에 대한 많은 관심과 이에 대한 여론의 주목을 받은 적이 있었다. 아이들에게 코딩 교육을 왜 해야하며, 무엇이 좋은지에 대한 글은 이미 인터넷에 널리고 널렸지만, 개인적으로는 아이들에게 코딩 교육이 꼭 필요하다고 생각은 한다. 그 이유를 세 가지로 정리해보면 아래와 같다.
- 논리적 사고 능력 향상
- 세상에 대한 시각 변화
우선, 논리적 사고 능력 향상은 마냥 허무맹랑한 소리는 아니다. 실제로 아이들에게 요리하는 법을 코딩하는 것처럼 순서대로 적어두도록 하고 아버지가 이를 그대로 따라하는 영상이 있다. 물론.. 요리가 제대로 될 일이 없다. 아이들은 단순히 빵을 준비하고 햄을 올린 후, 다시 빵을 덮는다고 작성하더라도 빵을 뒤집어서 놓을 수도, 익지 않은 생햄을 올릴수도 있다.
영상을 보면서 내가 느낀 점은 코딩이 사람을 빡치게한다는 것을 표현 단순히 순서 끼워맞추기라기보단 주어진 문제 상황에 대해 어떠한 요소들이 필요하고, 이를 어떻게 활용하여 해결할 수 있는지를 생각하고, 이를 순서대로 구체화시키는 과정임을 알 수가 있다. 우리는 상당히 많은 부분에서 추상화를 하기 마련이다. 코딩은 추상화하는 우리 뇌를 구체화시켜주는데 좋은 역할을 한다고 본다. 가령, 여향을 떠난다고 가정하면 아래와 같은 과정을 거친다고 보면 된다.
여행을 떠나자!… 근데..
- 언제?
- 어디로?
- 내가 경험하고 싶은 것들은 무엇일까?
- 가기 위해서는 어떠한 교통 수단을 이용해야 하지?
- 가서 묵을 숙소는 어디로 구하지? 4-1. 3번에서 정한 장소들의 중간지로 하자! 아니면 숙소를 여러개를 잡자!
- …
- 위에 모든 절차들에서 소모되는 비용은 얼마지? 내 여유자금과 맞나?
- …
이러한 일련의 과정을 거치면서 구체화시켜나가는 것이 넓게 보면 코딩과 유사한 점이 많다. 코딩을 한다고 반드시 여행 계획을 잘 짜거나, 방학을 알차게 보내지는 않겠지만 어느 정도 문제 해결 능력의 향상을 기대할 수 있을 것이라 생각한다. 코딩적 사고능력이(보통 문제해결능력이라 부른다) 내 주변의 문제상황(문제상황은 심지어 오늘 아침 무엇을 먹을지 결정하는 정도도 포함한다)을 보다 논리적이고 현실화시키는 것을 가능하게 해줄 수도 있다는 것이다. 즉, 내 삶과 아주 무관하지는 않다는 말이다.
사업이나 기획의 경우, 결이 살짝은 다르다고 본다. 사업 또는 기획은 창작의 분야이고, 정해저 있지 않은 것들을 기존에 만들어진 정보들로 예측할 수 있다는 것이 핵심이라고 보기 때문이다. 코딩처럼 정해진 문제와 명확한 목표가 아닌 모든 것이 불확실하며 예측이여서 골머리를 앓는다. 나는 문제해결능력과 기획 능력이 합쳐지면 그 힘이 무시무시하다고 생각한다. 예측을 그럴싸하게 현실화시킬 수 있게 보이게 만드는 것이 가능해진다고 보기 때문이다.
프로그래밍 vs. 코딩?
그렇다면, 프로그래밍과 코딩의 차이는 무엇일까? 위키피디아의 내용을 인용하자면 아래와 같다.
프로그래밍이란 ‘컴퓨터 프로그램을 작성하는 일’을 뜻하며 코딩이란 프로그래밍에 수반되는 ‘코드 작성 작업’을 의미한다. 프로그래밍은 ‘일반적으로 프로그램 작성 방법의 결정, 코딩(coding), 에러 수정 따위의 작업을 이르지만, 특수하게 코딩만을 이를 때도 있다.’
즉, 코딩은 프로그래밍의 하위 개념 정도로 볼 수 있다는 말이다. 프로그램을 개발할 때 기획
, 개발
, 오류 수정
, 기타..
등의 과정을 거치는데, 그 중 하나가 코딩이라는 것이다. 그런데 아주 간단한 알고리즘 문제를 풀 때도 문제를 어떻게 풀지를 생각하고, 실제로 코드로 옮겨보고, 다양한 테스트셋을 가지고 테스트도 해본다. 근데 우리는 이러한 시험을 코딩 테스트라고 한다. 프로그래밍 테스트라는 말은 거의 들어본적이 없다. 여기서 주제에 대한 의문이 나오게 되었다. 도데체 프로그래밍과 코딩은 어떠한 차이를 가지고 있는 것일까?
Computer Science vs. Coding
컴퓨터공학과는 컴퓨터 수리하는 법을 배운다거나.. 단순히 C언어, Java, Python과 같은 언어를 배우는 곳이 아니다. 이 정도는 대학이 아닌 일반 학원에서도 두어달 정도만 배워도 충분히 습득이 가능하다. 컴퓨터공학은 이러한 코딩 능력을 기본으로 깔고 시작한다. 가령 C언어로 예를 들어본다면,
C언어로 코딩을 할 수 있다.
C언어 코드가 OS에서 어떻게 메모리 관리가 되는지 안다. 코드가 어샘블리로 변환되고, 이렇게 변환된 코드가 CPU의 ALU와 레지스터 사이에 컨트롤이 어떻게 되는지 안다.
네트워크를 활용하여 채팅 프로그램을 만들 수 있다. node.js로 서버 프로그래밍을 할 수 있다. ====================== OSI 7계층에 따라 내가 보낸 패킷이 어떻게 도달하는지 알 수 있다. 데이터베이스를 왜 사용해야 하는 지에 대한 이유와 테이블 간 ER 모델을 구성할 수 있다.
즉, 단순히 코드를 짜는 것을 넘어, 근본적으로 컴퓨터와 이에 기반한 모든 것들의 동작 방식을 깊게 이해하고, 이에 대한 해결방법을 코드로 표현하는 것이 코딩이라는 것이다. 바꿔 말하면 언어는 크게 중요하지 않다고 볼 수 있다. 서버 프로그램을 만들 때, Java-Swing, Javascript-node.js 등 이미 다양하고 좋은 도구들이 존재한다. 이를 가져다가 쓰면 그만인 것이다.
결론
코딩은 프로그래밍을 하기 위한 도구에 불과하다.
만약, 아이들에게 코딩 교육을 하는데 OS가 메모리를 어떻게 추상화시키는지, 네트워크 통신이 어떻게 이루어지는지를 구체적으로 가르치려 들려 한다면, 선을 많이 넘은 것이라 생각한다. 파이썬이 코딩 교육용으로 좋다고 보는 이유는 이러한 어려운 기술들을 상당 부분 가려두었기 때문이다. 또, 아이패드에 Swift Playground 라는 앱을 보면, 간단한 코드를 작성해서 캐릭터를 움직여서 미션을 수행하는 방식으로 코딩을 알려준다. 이 정도면 코딩을 익히는데에 충분하지 않을까?
코딩 교육의 핵심은 문제해결능력의 향상이지, 전국민을 프로그래머로 키워내겠다는 식으로 접근하면 안된다. 이러한 식의 발상이라면, 국어를 가르쳐서 전국민을 소설가, 시인으로 만들거나, 과학을 가르쳐 모두를 자연과학 연구가로 만들겠다는 것과 비슷하다.
어쩌다보니 교육에 대한 내용이 많이 나왔는데, 핵심은 코딩이 그저 도구일 뿐이라는 것이다. 포토샵을 배우는 것으로 예를 들어보면, 포토샵을 잘 다루기 위해서 포토샵을 배우는게 아니라 사진 편집 및 합성, 보정을 하기 위해 포토샵을 배우는 것과 동일하다. 아무 목적 없이 코딩 그 자체를 잘하는 것은 크게 의미가 없다고 생각한다.
만약, 개발자가 되고 싶은 생각이 있다면 무슨 언어를 배울지부터가 아니라, 컴퓨터, 네트워크, 데이터베이스, 컴퓨터 그래픽, OS와 같은 분야를 살펴보고, 이러한 것들과 자신과 잘 맞다면 그 때 코딩을 시작해도 늦지 않는다고 생각한다. 그게 아니라면 삶을 살아가는데 필요한 지식 정도로 간단하게 코딩을 해보는것도 나쁘지 않을 것이다.