요즘 정부에서 소프트웨어 교육을 강화한다고 설레발을 치고 있다. 그런데 사실 이런 움직임은 필요하다. 선진국이라는 곳에서는 이미 초등학교부터 프로그래밍 교육을 하고 있다.
아니 정확히 말하면 "Computational Thinking"을 교육하고 있다. 우리말로는 "컴퓨팅적 사고思考"라고 하는데 영 어색하다. 컴퓨팅적 사고는 교육의 측면에서 정의한 용어이기 때문에 그를 설명한 문서를 보더라도 영 감이 잡히지 않는다.
프로그래머로 20년 밥벌이 한 경험에 비추어 볼 때, 컴퓨팅적 사고는 아이들에게 논리적으로 생각하는 법을 가르치는 것이라 추측된다.
어떤 사람이 프로그래머로서의 자질이 있나 없나를 판단할 때는 그 사람에게 어떤 문제를 주었을 때 그 해결 방법에 대해 절차를 논리적으로 잘 설명하는지를 보면 된다. 물론 개중에는 구글링 잘하고 Ctrl-C/Ctrl-V를 잘하는 것이 자질이라고 생각하는 사람도 있을 것이다. (나도 물론 많이 그런다)
먼저 Hadoop이 뭔지 정의를 살펴보자. Apache Hadoop 프로젝트는 안정적이고, 스케일러블하고, 분산 컴퓨팅을 지원하기 위한 오픈소스 소프트웨어를 개발하고자 하는 것으로, 일반적인(commodity) 서버들의 클러스터에 커다란 데이터 집합들을 배치하여 분산 프로세싱을 가능케 한다.
그렇다면 왜 사람들은 Hadoop에 열광하는 것일까? 그것은 적은 비용으로, 확장성이 뛰어나며, 무장애로 운영할 수 있으며, 유연하기 때문이다.
여기서는 오아일리 미디어(O'Reilly Media)에서 발간한 "분석가를 분석하다(Analyzing the Analyzers - Harlen D. Harris, Sean Patrick Murphy, Marck Vaisman)"라는 보고서의 내용을 소개할까 한다.
이 보고서는 데이터 과학자들이 스스로를 어떻게 생각하는지, 그리고 그들의 일에 대해 어떻게 생각하는지를 설문조사하여 정리한 것이다. 그들의 경력이나, 학위, 사용하는 도구, 직위, 연봉, 조직 같은 것들은 고려하지 않았다. 단지 그들이 가지고 있는 기술이 무엇인지를 알고 싶었던 것이다.
Gartner가 해마다 발표하는 신기술의 하이프 사이클(Hype Cycle for Emerging Technologies)에 대해 알고 있는가?
하이프 사이클은 "과대 광고 주기"라고 직역되기도 하는데, 한마디로 어떤 기술이라는 것이 세상에 나오게 되면 기술 촉발(technology trigger) - 부풀려진 기대의 정점(Peak of Inflated Expectations) - 환멸(Trough of Disillusionment) - 계몽(Slope of Enlightenment) - 생산성 안정(Plateau of Productivity)이라는 다섯 단계를 거치게 된다는 것이다.
여기서는 활발하게 기술이 개발되고 제품이 쏟아져 나오는(emerging) 빅데이터 스택에 대해서 얘기해 본다.
여기서 스택(stack)이라고 하는 것은 계층별로 다른 기술들이 중첩된(쌓여있는) 모양을 이야기 하는데, 예를 들어 프로토콜 스택이라고 하면 OSI 7레이어처럼 각 계층마다 다른 기술들이 독립적으로 쓰일 수 있는 모양을 의미한다. 빅데이터에서도 계층별로 다양한 기술들이 쏟아져 나오고 있기 때문에 스택으로 생각하면 편하다.
소프트웨어 엔지니어 더 정확히 말하면 프로그래머의 수명은 몇 살까지일까? 외국에는 백발의 할아버지 프로그래머들도 활동한다지만, 우리나라는 40대 중반 정도가 평균인 것 같다. 그런데 내가 벌써 40대 중반을 넘어갔다.
처음 프로그래밍에 대해 열정적으로 빠져들었을 때, 참 많은 것을 짧은 시간에 배운 것 같다. 그렇게 한번 불꽃처럼 타오른 뒤 , 그 열정은 서서히 식어가고 있었다. 20년 동안 젊을 때 익혔던 기술과 지식으로 잘 버텨왔는데, 어느새 세상이 확 바뀌어 버리고 말았다.
몇년 전부터 빅데이터, Hadoop, Map-Reduce, Machine Learning, Deep Learning 등의 듣도보도 못한 용어들이 튀어나오기 시작하더니, 예전에는 구현되기 어려울 것이라 생각했던 지능적이고 고도화된 서비스들이 튀어나오기 시작했다. 그리고 이들 서비스들을 제공하는 업체들이 세계를 지배하게 되었다.
오토마타는 상태(State) 집합과 상태간의 전이(Transition)를 모델링한 것으로 이들이 하나의 시스템을 이루면 "유한상태 기계(Finite-State Machine)"라고 합니다.
실로 현실의 많은 것들이 이 오토마타로 표현될 수 있습니다만 가장 대표적으로 쓰이는 분야가 논리적으로 구성된 프로그래밍 언어를 해석하는 파서(Parser) 분야입니다. 현재 개발할 때 사용하는 C++, Java 등의 언어들은 더 낮은 레벨의 언어로 변환되어야 하는데, 고레벨 언어를 해석하는 역할을 오토마타가 맡고 있습니다.
이 장에서는 오토마타의 기본적인 개념을 살펴 보고, 오토마타를 활용한 예로서 XML 문서를 해석하는 XML 파서를 만들어 보도록 하겠습니다.
이번 장에서 배우는 회귀(Regression)과 스플라인(Spline)은 다른 큰 학문 분야의 맛보기로 제시한 것입니다.
회귀는 통계학의 기본이 되는 개념으로, 실제 측정된 데이터로부터 일반화된 수식을 얻어내는 기법을 의미합니다. 측정된 데이터가 많을 수록 더 정확한 수식을 얻어낼 수 있으며, 이 수식을 바탕으로 미래에 일어날 사건을 예측할 수 있다는 점에서 "통계 학습(Statistical Learning)"의 출발점이라 볼 수 있습니다.
통계 학습은 요즘 뜨고 있는 빅데이터 분석과도 밀접한 관계를 가지고 있습니다.
스플라인(Spline)은 몇몇 제어점을 이용하여 부드러운 곡선을 만들어내는 수학적 도구입니다. 회귀와 비슷한 개념을 기하학적으로 바라보는 관점입니다.
컴퓨터의 두뇌인 CPU의 동작을 쪼개어 들어가 보면 결국 0과 1 즉 비트(bit)를 다루는 것을 기본으로 합니다. 컴퓨터에 저장된 모든 데이터는 비트의 배열로 구성됩니다. 하나의 바이트는 8개의 비트로 구성되며, 일반적인 정수형은 4개의 바이트 즉 32비트로 구성됩니다.
지금까지는 데이터를 수학적인 혹인 추상적인 개념으로서 취급했다면, 이 장에서 소개하는 기수 검색(Radix Search)은 데이터를 기본 단위인 비트의 배열로 취급합니다. 비트는 0과 1 두가지 값 밖에 없기 때문에 자연스럽게 자식을 두개 가질 수 있는 이진트리(Binary Tree)와 연결됩니다.