큐펭스토리
파이썬 강의, 프로그래밍 문제 풀이, 지식 공유 및 정리용
프로그래밍을 배우는 이유 (Why do we learn programming?)

CS101에서 제시하는 프로그래밍이란 코딩(coding)과 근본적으로 다르다. 그 사실을 알고서 접근하다보면 왜 이 과목에서 프로그래밍 언어 자체에 집중하지 않는지를 알 수 있다.
코딩이란 이미 풀 방법이 정해져 있는 문제를 들고와서, 정리해서 컴퓨터에게 시키는 작업을 말한다. 해법을 어떻게 컴퓨터가 알아듣고 계산할지 구상이 완료된 문제들을 그저 정리해서 옮기는 작업일 뿐이다. 생상적인 활동임에 분명하고 뛰어난 코더 ( coder ) 들도 물론 존재하지만 정립된 이론을 가지고서 학문으로 대하기는 역부족이다. 코딩 활동이 익숙해지면, 이미 해법까지 정리된 문제를 옮겨적는 것은 아주 수준 낮은 작업이고 단순 노동에 불과할지도 모른다는 생각이 드는 시점이 온다. (프로그래밍 부심 쩌는 발언이고 조금 공격적이지만 사실은 사실이다.)


화려한 코딩 후엔 희열을 느낄 수 있다



프로그래밍은 이러한 코딩 이전과 이후 단계까지 포함한, 좀 더 넓은 개념이다. 어떻게 문제를 풀것인가, 얼마나 효율적으로 해결할 것인가, input/output 범위는 적절한가, 무슨 플랫폼을 이용할 것인가 등등 시스템 전반적인 고민들을 해결해나가는 디자인하는 것이 프로그래밍이다. 이러한 일들을 전산학이 다루게 되고 프로그래머로 성장하게 된다.


옛날과 세상이 달라져서 프로그래밍이 이미 널리 이용되고 있다. 수공업으로 돌리던 공장들은 자동화 시스템이 들어서면서 로봇이 많은 일들을 정확하고 빠르게 해결할 수 있게 되었다. 수학적인 연구에도 컴퓨터가 쓰일 수 있다. Computational Thinking 소개글 ( Link ) 에서도 언급했었지만 4색 문제와 같이 다양한 경우의 수를 가지고서 분석하는 노동의 경우, 사람보다 컴퓨터가 훨씬 빠르고 우수하다. 명제가 주어지고 이를 자동으로 증명해주는 도구들도 개발되고 있다. 또다른 예시로 DB 분석을 살펴보자. 실험 데이터가 아무리 체계적으로 잘 정리된다고 해도 그 양이 너무 많다면 일일이 사람이 분석하기엔 시간이 너무 오래 걸릴 것이다. 단적인 예시로 유전의 법칙을 발견한 멘델을 살펴보자. 멘델은 7년간 완두콩을 재배하면서 유전 법칙을 발견했다고 한다. 완두콩을 통해 유전 법칙을 발견해낼 때 컴퓨터가 있었다면 굉장히 다양하고 정확하고 빠른 데이터 분석이 가능했을 것으로 생각된다. 이런 단순 분석 작업도 컴퓨터가 해결해줄 수 있다. 지난 글에서도 설명했듯 컴퓨터는 작업의 스케일에 대한 고민을 덜어주는 중요한 도구가 된다.


프로그래머 시각으로 세상은 0과 1로 해석할 수 있다


색다른 예시를 한 번 살펴보자. Robot Journalism이라고 하는 분야가 있는데, 일본의 지진 예보의 경우를 보면 알 수 있다. 매번 사람이 지진을 감지하고 문자로 알리는 것보다는 지진 감지 프로그램이 지진을 인식한 뒤 포맷이 정해진 문장의 일부를 수정하여 자동으로 양산해서 전송하면 훨씬 빠르고 정확할 것이며, 수동일 때에 비해 인건비까지 줄일 수 있을 것이다. 컴퓨터 프로그램을 가지고 뉴스를 자동으로 생성하는 시스템을 Robot Journalism이라고 한다.
현재 내 팀이 개발 중인 것 중 하나인데, 야구 기사를 자동으로 써주는 시스템이 있다. Robot Journalism 시스템 중 하나로 야구 기사를 써보고자 한 것인데, 살펴보면 꽤나 그럴 듯하다. 야구의 경우 매 경기마다 통계적인 분석을 통해 팀/선수들을 평가할 수 있다. 이미 그런 방법론들은 정형화가 잘 되어있는 편이다. 또한 한 경기만을 집중해서 추상화시켜보면 야구는 그저 투수가 던진 공이 어디론가 움직이면서 만들어내는 사건들의 나열이다. 굉장히 일목요연하게 정리하기 쉬운 구조이며 전산화시켜서 컴퓨터가 분석할 수 있게끔 디자인할 수 있다. 따라서 이를 통해 야구 기사를 자동으로 생성해낼 수 있다면, 야구 전문 기사들을 다루는 기자들을 대체해서 컴퓨터가 일을 하게 되고 서비스를 제공하는 쪽이 (우리가) 돈을 벌게 된다. (야호!) 무튼 요지는 프로그램이 현실 세계에서 많은 것들을 할 수 있다는 것이다.


로봇이 대세다


프로그래밍을 배우면 위에 예로 든 시스템들을 자기가 직접 만들 수 있다. 설령 기획 단계라 할지라도 어디까지 가능한 일이고 어디가 불가능한 일인가에 대한 판단도 훨씬 편리하게 진행할 수 있다. 현재까지 나온 프로그램들이 어디가 잘못된 것인지 분석할 수 있는 안목도 가지게 된다. 세상엔 알게 모르게 open-source 프로젝트들이 많이 생겨났는데 이런 것들에 참여하면서 세상의 편리 증진에 기여할 수 있게 된다. 프로그래밍의 가능성은 무궁무진하다.



  Comment ,     Trackback