코딩은 전산학과에서 배우는 것인가? (1)

코딩을 배우려면 전산학과1에 가야 한다?

코딩은 프로그래머만 하는 일이다?

둘 다 틀렸다.

요즘 SW 교육 의무화 방침 관련해서 이런저런 갑론을박이 벌어지고 있어서, 이 문제에 대해 내 생각을 한 번 적어 보기로 하겠다. 다소 긴 글이 될 것 같으니 짧게 요약하자면:

  1. 전산학과는 코딩을 배우는 곳이 아니라, 자동화된 연산을 수행하는 데 필요한 수학적·공학적 지식을 배우는 곳이다.
  2. 이미 대부분의 사람은 코딩을 하면서 먹고 살고 있다. 아니, 이제는 코딩 안 하고 먹고 사는 게 더 힘들다(!).
  3. 한동안 이런 추세가 뒤집어질 가능성은 별로 없다. 오히려 심해졌으면 더 심해질 것이다.
  4. 따라서 논점은 코딩을 배워야 하느냐 아니냐가 아니다. 좀 더 생산적인 논쟁이 되려면, 논쟁의 초점을 조정할 필요가 있다.

코딩이란 무엇인가?

우선 코딩이라는 게 뭔지부터 짚고 넢어가자. 코딩이라는 말에는 여러 가지 뜻이 있지만, 코딩 교육 할 때의 ‘코딩’은 컴퓨터 프로그래밍을 가리킨다. 기계가 해석해서 실행할 수 있도록 작성된 명령서를 (컴퓨터) 프로그램이라 하고, 이를 작성하는 일을 (컴퓨터) 프로그래밍이라고 한다. 그러니까 코딩이란 기본적으로 기계에게 명령을 내리는 행위라고 할 수 있겠다.

그럼 코딩이 세탁기 버튼 누르는 것과 다른 건 무엇일까? 이것도 기계에다 뭔가 명령을 내리는 건데? 정답은 일정한 문법 체계를 가진 언어의 사용 여부다. 세탁과 탈수 버튼(표현)이 있는 세탁기라고 해서 ‘세탁하고 탈수’ ‘세탁하고 탈수하고 또 세탁’ ‘세탁하고 탈수 두 번 하고 세탁’ 같은 표현이 무한정 만들어지지는 않는다. 인간의 언어가 ‘친구’와 ‘의’ 두 개의 표현만으로도 ‘친구’ ‘친구의 친구’ ‘친구의 친구의 친구’ … 처럼 무한한 표현을 만들 수 있는 것과는 대조적이다.

컴퓨터에게 주어지는 명령서는 일정한 문법을 가진 언어로 작성된다. 그렇기 때문에 A와 B 두 개의 표현으로도 ‘AA’ ‘AB’ ‘AAB’ … 처럼 무한히 많은 표현을 만들어낼 수 있는 것이다. 바로 이 지점이 프로그래밍과 세탁기 조작의 차이점이다. 아래 이미지는 실제로 컴퓨터에 들어가는 코드의 예인데, 한 쪽이 좀 더 사람에게 편하게 작성되어 있다는 정도의 차이는 있을지언정 ‘언어’가 사용되고 있다는 점에서는 모두 동일하다.

컴퓨터가 알아들을 수 있는 명령서(code). 왼쪽은 CPU가 바로 알아들을 수 있는 형태의 언어(MIPS assembly). 오른쪽은 인간의 언어를 더 닮은 현대 고급 언어(scala). 둘 다 2 + 5 * 8을 계산한다.

정리하자면, 코딩이란 일정한 문법을 가진 인공적 언어를 사용해서 기계가 이해하고 실행할 수 있는 명령서를 작성하는 행위라고 할 수 있겠다. 이런 일을 하는 이유는 물론 편의성 때문이다. 예를 들어서 복잡한 계산식을 계산해야 할 때마다 계산기를 붙들고 열심히 버튼을 눌러대는 것보다, 미리 계산을 수행하는 방법에 대한 명령서를 주고 나중에 필요할 때마다 이를 실행시키는 게 더 편하고 정확하다. 공학용 계산기에 미리 수식을 저장2해 놓으면(=문법에 따라 원하는 계산 결과를 내는 명령서를 만들어 주면) 필요할 때마다 호출해서 쓸 수 있는 것처럼 말이다.

전산학과에서는 도대체 뭘 배울까

여기까지만 봐도 ‘코딩은 전산학 전공자가 하는 것’ 이라는 생각이 완전한 착각이라는 게 드러난다. 공학용 계산기3를 사용하는 사람들, 그러니까 사실상 전 이공계가 다 코딩을 하고 있다. 사실 공학용 계산기 써야 할 수준이면 애교고, 두꺼운 전공서적을 옆에 두고 밤새 전산실에서 Matlab 코딩을 하는 경우가 흔하다. 괜히 공대 필수과목에 프로그래밍이 하나씩 들어 있는 게 아니다. 대학에서만 그러는 것도 아니다. 사회 나가서도 매일같이 컴퓨터 앞에 앉아서 ‘명령서’만 쓰고 있는 조선 엔지니어, 재료 엔지니어가 수두룩4하다.

Mathworks사의 대표 제품인 Matlab. 1970년대 말에 개발이 시작되어 지금은 공학 컴퓨팅 언어의 대세가 되었다. 공대 출신자 중에 이걸 안 만져 본 사람이 드물 정도. (* 출처: https://www.flickr.com/photos/robocupdutchopen/7115393899/)

그렇다면 전산학과에서는 대체 뭘 하는 걸까? 바로 그 ‘명령서’의 자동화된 실행을 가능케 하는 이론적인 지식을 배운다. 사칙연산밖에 할 줄 모르는 cpu가 어떻게 복잡한 미적분 결과물이나 삼각함수 값을 산출해 내는지, 이상하게 느끼신 적은 없으셨나? 화면상에 박힌 텍스트 덩어리가 어떻게 디지털 회로에서 처리되는 bit의 형태로 가공되어 실행되는지, 궁금하지는 않으셨나? 전산학과에서 배우는 것은 바로 이러한 일이 가능해지도록 하는 수학적, 공학적 지식이다.

물론, 전산학과에서의 코딩은 이공계 다른 학과에서 바라보는 코딩과 그 무게가 전혀 다르다. 공대에서 바라보는 영어와 영문학과에서 바라보는 영어의 무게가 완전히 다른 것과 마찬가지로 말이다. 코딩을 안 하고서 저런 지식들을 쌓는 것은 거의 불가능에 가깝기 때문에, 전산학 전공자들은 다른 이공계 전공자들에 비해 훨씬 더 코딩을 많이 할 수밖에 없다. 숙련도나 경험 면에서 비교가 안 되는 데다가 배경 이론까지 배우기 때문에, 이 사람들이 코딩을 훨씬 잘 하는 건 이상한 일이 아니다. 하지만 그렇다고 해서, 전산학과가 코딩 배우는 곳은 아니다. 천문학과가 망원경 다루는 방법 배우는 곳이 아닌 것과 마찬가지다.

Everybody is coding!

그럼 코딩은 이공계만 하는 걸까? 그렇지도 않다. 심리학과, 경제학과, 사회학과에서도 코딩을 하고 있다. 혹시 이런 학과에서 개설되는 통계 수업 들어 보신 분? 여기 수업 들어가 보면 손으로 통계 계산 안 하고 SPSS나 R 같은 통계 처리 언어를 사용해서 통계 계산을 한다. 이런 통계 패키지에 쓰이는 명령어 역시 프로그래밍 언어이기 때문에 단순한 명령들을 서로 조합해서 복잡한 통계 처리를 행할 수 있는 것이다. 그러니까, 당신이 대학에서 이런 쪽 전공을 했다면 이미 코딩을 해봤을 가능성이 높다. 학문적으로 좀 더 파고들 생각이라면 말할 것도 없다. 당신은 평생 통계에서 벗어날 수 없으며, 코딩에 대해서도 마찬가지일 것이다.

“아무리 그래도 대부분의 사람이 코딩을 하면서 먹고 살고 있다는 건 비약 아니냐” 라고 물을지도 모르겠다. 근데 사실, 위에서 나열한 것들은 그저 사족에 불과하다. 대한민국 아니 전세계의 직장인들이 절대로 빠져나가지 못하는 궁극의 코딩 환경이 있기 때문이다: 엑셀.

끝판왕.JPG

대부분의 사람이 무심코 넘어가서 잘 모르는 사실이지만, ‘엑셀질’은 엄연히 코딩이다. 엑셀의 수식 기능이 ‘기계가 알아들을 수 있는 문법을 갖춰 쓴 명령서’ 이기 때문이다. 셀에 ‘=B2’라고만 적어 넣기만 해도 “이 셀의 값은 B2 셀의 내용과 같아야 한다.” 라고 명령을 내린 셈이 된다. 그렇기 때문에 B2 셀의 내용을 바꾸면 이 셀의 값도 자동으로 바뀌는 것이다. 좀 더 정확히 말하자면, 엑셀의 수식 기능은 앞에서 소개한 통계 특화, 공학 특화 언어들과는 달리 나 같은 전업 개발자가 다루는 언어에 비해 별로 모자라는 게 없다. 애시당초 전업 개발자들이 쓰던 언어를 조금 손봐서 엑셀에 내장시킨 것이기 때문이다. 정작 세월이 흐르면서 엑셀 바깥에서는 멸종하다시피 했지만, 엄연히 프로그래밍 언어라는 점에서는 변함이 없다.56 그래서 전산병들의 장잉력과 결합하면 지뢰찾기는 물론이고 턴제 전략 시뮬레이션 같은 무서운 물건들이 쏟아져 나온다.

이런 느낌 (* 원본: http://www.lezhin.com/comic/revatoon/25)

사무직 직장인 중에서 엑셀을 안 쓰는 사람은 사실상 존재하지 않는다. 세무사나 회계사는 물론이고, 의사나 변호사 같은 ‘사’자 타이틀 보유자조차 피해 나갈 수 없는 게 엑셀이다. 요컨대, 이미 대부분의 사람들은 코딩 없이 밥벌이가 안 되는 상황이다. 스스로는 잘 느끼지 못하고 있을지는 몰라도 말이다.

도대체 왜 이런 일이 벌어지고 있는 것일까? (2편으로 이어집니다)


  1. 컴퓨터공학과, 컴퓨터과학과, 전산학과 등 다양한 명칭이 있지만 이 글에서는 전산학과로 통일하도록 하겠다. 참고로 내가 졸업한 곳 정식 명칭은 ‘공과대학 컴퓨터 과학 및 공학부(College of Engineering, Department of Computer Science and Engineering)’. 
  2. 이 경우 사용되는 문법은 수학 시간에 수식 쓸 때 쓰는 문법과 거의 똑같다. 프로그래밍 언어 자체가 수식에서 유래한 것이니 당연한 것이지만. 
  3. 요즘 공학용 계산기면 초기 디지털 컴퓨터보다 나았으면 나았지 못하지는 않다. 연산 능력에서든 안정성에 있어서든 말이다. 
  4. Matlab은 컴퓨터과학 학회 양대 산맥 중 하나인 IEEE가 발행한 학회지에서 선정한 세계 10대 프로그래밍 언어에 선정되기도 했다. 통계 처리 언어인 R 역시 6위에 랭크. 1-5위가 전업 개발자용 언어인 데다가 2014년 같은 조사에서 9위였던 것을 상기하면 가히 R 돌풍이라 할 만 하다. 
  5. 심지어 공학 계산이든 통계 처리든 간단한 거 하려면 엑셀이 오히려 더 편하다. 실로 끝판왕의 위엄
  6. 기억하고 있는 사람 있는지 모르겠지만, 1994년에 발생한 인텔 펜티엄 CPU 대란 당시 인텔 CPU의 소수점 연산 기능에 문제가 있음을 증명하는 데도 엑셀이 쓰였다