칼럼 > 연재종료 > IT 트렌드 & Books
인생 첫 프로그래밍 언어 선택의 기준
옛날 해커의 프로그래밍 이야기
컴퓨터에 대한 접근은 물론이고 세상이 돌아가는 방식을 가르치는 무엇이든, 그에 대한 접근은 무제한적이고 전적이어야 한다. 직접 해보라는 강령을 언제나 지켜라. (2018. 08. 16)
“저는 컴퓨터를 분해하고 싶었던 적이 한 번도 없습니다.”
1950년대 말부터 80년대까지 IT의 역사를 MIT ‘인공지능 연구실’과 ‘테크 모델 철도 클럽1 ’을 중심으로 엮은 『해커스 : 세상을 바꾼 컴퓨터 천재들』의 저자 스티븐 레비와의 인터뷰에서 페이스북 창립자인 저커버그가 한 말이다. 이 책에서는 저커버그를 신세대 해커로 소개했는데, 그의 이름이 이 책에 거론되기까지는 약 50년의 세월을 거슬러 올라가야 한다.
1958년 MIT 인공지능 연구실에는 IBM 7042 라는 큰 방을 가득 채운 컴퓨터가 있었다. 천공카드로 프로그램을 짜서 천공카드 리더기로 입력한 정보를 IBM 704에 보내 프로그램을 실행했다. 천공카드를 이용하면 0과 1로만 프로그램을 짜야 한다. 어떻게 0과 1로 프로그램을 짤 수 있는지 설명하려면 복잡한 하드웨어에 대한 설명이 있어야 하니 그냥 그렇게만 알아두자.
어느 날 테크 모델 철도 클럽에 (클럽 OB인) 잭 데니스 교수가 찾아와 ‘군사 개발 연구소 링컨 랩’에 있는 TX-03 라는 당시로는 최신형 컴퓨터를 가지고 놀 기회를 주었다. TX-0는 천공카드와 비교하면 아주 진보(?)된 프로그래밍 언어인 어셈블리어를 사용했다. 0과 1로만 프로그램을 짜다가 sto(AC에 저장하기), add(AC에 더하기), lda(인덱스 레지스터 로드하기)와 같은 사람이 알아볼 수 있는 단어(명령어)4 로 프로그램을 짤 수 있었다!
TX-0 출처 : //research.microsoft.com
당시로써는 엄청나게 진보된 어셈블리어였음에도 ‘테크 모델 철도 클럽’의 최연소 멤버인 12살짜리 피터 도이치는 더 세련된 TX-0용 어셈블리를 만든다. 사실 당시 ‘테크 모델 철도 클럽’ 해커들에게는 특별한 해커 윤리가 있었다.
“컴퓨터에 대한 접근은 물론이고 세상이 돌아가는 방식을 가르치는 무엇이든, 그에 대한 접근은 무제한적이고 전적이어야 한다. 직접 해보라는 강령을 언제나 지켜라!”
클럽 회원은 누구나 위와 같은 윤리를 철칙으로 삼았고, 윤리를 지키는 행동은 언제나 옳았다. 피터 도이치의 어셈블리 개발은 위 윤리에 부합하는 굉장히 옳은 행동이었기에 가능한 성과였다. 그리고 이 책에서는 이 윤리를 지키는 프로그래머를 해커라고 부른다. (오늘날 해커가 부정의 의미로 쓰이지만, 해커와 크래커는 구분할 줄 알아야 한다.)
이 책의 주요 장소인 ‘인공지능 연구실’과 ‘테크 모델 철도 클럽’에는 엄청난 천재 해커가 모여 있었다. 1960년대 초반 MIT에 세계 최초로 인공지능 연구실을 설립한 민스키5 는 당시 천재 해커들의 든든한 조력자가 되었다. 시간이 흘러 인공지능의 몇 번의 황금기와 암흑기를 거쳐 오늘날 다시금 전성기를 맞이했다. 마빈 민스키의 초창기 활동은 인공지능 발전에 큰 역할을 했다.
그뿐만 아니라 MIT 인공지능 연구소를 공동 설립한 존 매카시6 는 1956년 다트머스 학회에서 처음으로 인공지능(Artificial Intelligence)이라는 용어를 창안했다. 그는 곧바로 인공지능 언어 리스프(LISP)를 창시했다. 리스프는 함수형 언어인데, 함수형 언어는 초창기에 반짝했지만 절차형 언어(C언어 외), 객체지향 언어(C++ , C#, 자바)에 밀려 오린 시간 암흑기를 맞이하다가, 2010년대에 들어 스칼라를 대표 주자로 다시 주목받게 되었다. 심지어 전통적인 객체지향 언어들이 함수형 언어 기법을 흡수하면서 그 영역을 넓히고 있다.
후에 이 멋진 언어 리스프를 탑재한 리스프 컴퓨터 전쟁이 벌어지는데, 인공지능 연구소 일원이 해커 윤리를 저버리고 소프트웨어를 상업적으로 이용하려고 각각 심볼릭스와 LMI사를 설립해 대립한 사건이다. 이 전쟁을 슬픔에 차 바라보던 한 젊은 천재 해커가 있었다.
“해커 정신의 메카인 연구실이 심볼릭스의 독점 야욕으로 무너졌다.”
이런 결론에 도달한 젊은 천재 해커는 1982년부터 1983년까지 심볼릭스(수십 명의 해커)가 개선한 코드를 혼자서 창의적으로 복제해 LMI에 제공했다. 그가 바로 훗날 자유 소프트웨어 재단을 만든 리처드 스톨만이다. 일당백의 전쟁에서 우수한 성과를 보인 그를 이 책은 최후의 진짜 해커로 등극한다.
인기 프로그래밍 언어 살펴보기
대학생이라면 방학이 한창인 8월 초다. 9월이면 시작될 새 학기, 한 달이나 남았음에도 한 달밖에 남지 않았다고 불안이 드는 건 비단 나만의 기억이 아닐 거다. 대학생이 아니면 어떠랴, 이미 오바마 대통령 시절 소프트웨어 교육을 강조하고 미국뿐 아니라 전 세계에 소프트웨어 교육 열풍이 불었다. 필자는 모두에게 컴퓨팅 사고를 주입할 필요가 있겠냐는 생각이지만 그건 그저 ‘나만의 생각이다’. 프로그래밍 교육, 소프트웨어 교육, 코딩 교육 등 수식어도 다양하지만 그 수식어가 무엇이든, 원하는 목표는 하나다.
‘컴퓨팅 사고’.
학생이든 학부모든, 직장인이든 컴퓨팅 사고 습득으로 본인 혹은 자녀를 내몰아야 하는 현실이다. 그 현실의 끝에 공통된 질문이 있다. 어떤 컴퓨터 언어로 입문을 해야 하지?
TIOBE(www.tiobe.com/tiobe-index/)는 프로그래머와 서드파티 벤더 수, 인기 검색엔진 검색어를 집계해 매달 인기 언어 순위를 발표한다.
인기 언어 동향 (출처 : TIOBE, 2018년 7월 기준)
2002년 이후로 오늘날까지 C 언어와 자바가 엎치락뒤치락 하면 왕좌를 차지하고 있다. 3위는 C++ 로 볼 수 있고 웹 언어 PHP는 과거의 영광을 파이썬에 넘겨주고 퇴역하는 느낌이다. C#도 5위 권을 꾸준히 유지하는 형국이다. 그렇다면 1, 2, 3위 중 한 언어를 선택하면 될 것 같은 느낌 같은 느낌이다.
물론 C 언어가 아직도 수위를 차지하고는 있지만 C 언어의 전성시대는 이미 지났다. C 언어는 어셈블리어보다 혁신적으로 사람 친화적이지만 사용할 수 있는 라이브러리가 풍부하지 못하다. 게다가 같은 작업을 구현할 때 더 모던한 언어에 비해 코딩양이 비교할 수 없이 많다. MIT 초창기 해커와는 달리 저커버그 세대는 아무것도 없는 맨땅에서 시작할 필요가 없다. 그래서 지금 시대에 천공카드도 어셈블리어가 필요 없어졌듯이 C 언어도 필요 없다고 과감히 말하고 싶다(사실 어셈블리어는 많이 쓰인다). 여전히 C 언어는 많은 분야에 사용되지만 그건 신규 분야가 아니다. 포트란이나 코볼 같은 언어가 사실상 사양되었지만 지금도 여느 전산망에서 동작하는 것과 같은 운명의 길로 이미 접어들었단 말이다.
C++ 는 C 언어에 객체지향 기법을 접목한 언어인데, 최근에는 3년에 한 번 신버전을 공개하고 있어서 람다식 같은 최신 기법을 다수 장착해 모던 언어로서의 품격을 지니게 되었다. 그런데 C 언어와 마찬가지로 메모리값을 활용하는 포인터를 제공하는데, 이 포인터 때문에 머리를 쥐어뜯는 사람이 열 중 열아홉이다. 네이티브 언어라서 엄청난 실행 속도를 자랑한다.
C#과 자바는 가상머신 위에서 동작하기 때문에 이식성이 좋다7. 가상머신 위에서 동작하기 때문에 네이티브 언어인 C/C++ 보다 느리다. 아마 스마트폰 게임을 좋아하는 독자라면 같은 게임이 안드로이드폰보다 아이폰에서 더 빨리 도는 경험을 해봤을 것이다. 아이폰은 스위프트라는 네이티브 언어를 사용하기 때문에 같은 로직을 수행하는 프로그램이라고 가정할 때 자바가상머신 위에서 도는 안드로이드용 게임보다 더 나은 성능을 제공하는 것이다. 이 두 언어 모두 모던 언어로 꾸준히 성장했는데 로직을 구현하는 데 부가적으로 써야 하는 행사 코드양이 많은 게 단점이다. 최근 좋은 에디터들이 이러한 단점을 보완해주고 있다.
정리하면 이렇다.
● C : 젓가락 같은 언어
● C++ : C에 객체지향 개념을 얹은 언어인데 여전히 사용법이 너무 어렵다.
● C# : MS 닷넷 프레임워크 위에서 도는 멋진 모던 언어다.
● 자바 : 라이브러리가 풍부하고 모던 언어로서 발전하고 있다. 우리나라에서 일자리 수요가 다른 언어에 비해 상대적으로 많다.
이처럼 오늘날에는 멋진 언어가 많다. 이 중에서 어떤 언어를 선택해야 할까?
첫 프로그래밍 언어 선택의 기준
80년대 이후 로컬 소프트웨어 시대가, 웹 소프트웨어 시대로, 그리고 인공지능 소프트웨어 시대로 변모했다. 사실 로컬 소프트웨어 시대가 갔다는 건, MS가 더는 PC에서 동작하는 오피스 제품을 출시하지 않기로 한 결정만 봐도 단적으로 알 수 있다(앞으로는 웹에서 동작하는 오피스 365만 내놓는다).
웹에서 동작하는 소프트웨어 시대는 앞으로도 오래도록 인공지능 소프트웨어 시대와 공생할 것이다. 이 둘은 사실 상호 보완적으로 발전하는 관계이기 때문이다. 그렇다면 ‘소프트웨어 교육’ 열차에 합류하는 입문자라면 당연히 웹과 인공지능을 염두에 두고 첫 번째 언어를 선택해야 할 것이다.
웹 언어의 대표 언어는 자바스크립트다. 아직 모던 언어들에 비해 제대로 된 기능을 제공하지는 못하지만 웹에서 동작하는 원하는 기능을 구현하는 데 필요한 모든 기능을 제공한다. 저커버그의 성공은 로컬 PC가 아니라 웹에 있었다. MS가 윈도우에 웹브라우저 익스플로러를 묶어 판매한 이유를 생각해보기 바란다. 웹은 여전히 그리고 앞으로도 기회의 땅임이 틀림없다.
인공지능의 대표 언어는 파이썬이다. 인터프리터 언어인 파이썬은 현존하는 언어 중에서 가장 풍부한 라이브러리를 제공한다. 특히 구글이 공개해 이미 대세가 된 범용 딥러닝 프레임워크인 텐서플로는 파이썬을 사용한다. 물론 케라스나 파이토치, 사이킷런 같은 딥러닝 머신러닝 프레임워크(라이브러리)도 마찬가지다.
중요한 건 ‘프로그래밍을 배워서 뭐에 쓸 것인가?’ 혹은 ‘무얼 하고 싶은가?’다.
그런 차원에서 C, C++ , C#, 자바에 대해 추가 코멘트를 남깁니다.
● C : 기계를 움직이게 하는 것에 관심이 있다면 추천! 그게 아니라면 피하자. 혹은 간단히 프로그램 초보 개념을 장착하고 싶다면 추천! 이때는 포인터는 그냥 스킵하시길!
● C++ : 고성능 게임에 애용된다. 고성능 게임 엔진의 대명사인 언리얼 엔진도 C++ 을 사용하므로 특히나 게임에 관심이 있다면 도전!
● C# : 사용이 쉬운 게임 엔진인 유니티는 C# 스크립트를 사용한다. 게임 외에도 다양한 엔터프라이즈급 프로그램을 만드는 데 안성맞춤이다.
● 자바 : 서버/클라우드 영역에서도 많이 쓴다. 안드로이드 앱 개발도 자바를 사용한다. 그런데 최근 자바와 100% 호환을 주장하는 코틀린 언어로의 이동이 심상치 않다!
사족 같지만, 지금은 웹과 인공지능 소프트웨어 시대임을 상기하자. 아울러 서두에 밝힌 저커버그의 주옥같은 명대사를 잊지 말자!
5) Marvin Lee Minsky, 1927년 8월 9일 ~ 2016년 1월 24일
6) John McCarthy, 1927년 9월 4일 - 2011년 10월 24일
7) C#은 닷넷 프레임워크, 자바는 자바가상머신
現 한빛미디어 IT출판부 차장. 10년간 임베디드, 시스템, 디바이스 프로그래밍을 하고 9년간 IT 서적을 만들었다. 2017년부터