조엘이 말하는 C를 배워야 하는 이유
- 2005년 6월 4일 15시 25분
- 댓글 9 개
최근에 화장실에서 힘쓰면서 읽을 책으로 조엘 온 소프트웨어 한국어판을 사서 읽다가, 조엘이 프로그래머는 C를 배워야한다고 주장에 대한 근거를 읽었습니다. (상당히 앞쪽에 있는데, 웹에서는 못 읽어봤었네용 므흐흐;)
전산과 신입생은 CPU부터 시작해서 C를 활용하는 데까지 차곡차곡 기초를 닦아야 합니다. 저는 솔직히 너무나도 많은 컴퓨터 관련 교육과정들이 자바가 가장 좋은 초보자용 언어라고 선전하는 현실에 질려 버렸습니다. 흔히 자바는 쉽고, 따분한 문자열이나 malloc과 같은 골칫덩어리를 다루는 과정에서 혼란을 겪지 않으며, 아주 큰 프로그램을 모듈로 나눠서 만들 수 있는 근사한 객체지향 프로그래밍 기법을 배울 수 있다는 화려한 이유들이 따라 나옵니다. 하지만 여기에는 교육적인 재앙이 있습니다. 졸업생들은 하향 평준화돼 러시아 페인트공 알고리즘을 여기저기에 만들어내며, 심지어 자신의 잘못을 인식조차 못할 겁니다. 펄 스크립트에서 이런 사실을 결코 볼 수 없을지라도, (물론 어렵지만) 기본적으로 문자열이 무엇인지 아주 깊은 단계에서 이해하지 못하기 때문입니다. 다른 이들이 뭔가를 잘하도록 가르치길 원한다면, 기초부터 시작해야 합니다. 이는 마치 태권소년과 비슷합니다. 마루바닥을 쓸고 닦고 쓸고 닦고, 이렇게 3주만 하면, 자연스럽게 목표물을 향해 발이 쭉쭉 뻗어나갑니다.
-- 조엘 온 소프트웨어 (조엘 스폴스키)
참고: 여기서 "러시아 페인트공"이란 이 문단 앞에서 설명하던 O(N²) 알고리즘을 뜻합니다.
그동안 C를 모르고 하이레벨의 언어들만 다루는 프로그래머들이 흔히 오해하는 것들을 보면서, 기초를 위해서는 C가 아무래도 필요하지 않겠는가 생각은 해 왔지만, 뭔가 보수적이라는 생각에 아냐아냐 하고 부정도 해 봤었습니다. 그렇지만, 파이썬만 생각해 보더라도, 파이썬만을 아는 프로그래머라면 list.append, list.insert, str.__add__ 같은 것들이 사실 상 atomic operation처럼 느껴지기 때문에, 하부에서 일어나는 일을 일일이 달달 외우지 않고서는 쉽게 추측하기가 힘듭니다. 그 때문에, 결국은 비슷한 노력으로 코드를 짜더라도, C도 같이 하는 개발자들에 비해 훨씬 비효율적인 코드를 짜기가 일쑤입니다.
그런 면에서, 아무래도 입문은 자바나 파이썬 같은 언어로 하더라도, 결국은 바다 위에서 동동 떠다니지 않고 어딘가에 닻을 단단히 매서 흔들리지 않는 코드를 위해서는 C 같은 저수준의 언어를 배워야 한다는 것이 피할 수 없다고 생각됩니다. 같은 맥락에서 예전부터 매우 좋아했던 Larry Wall의 명언이 하나 생각납니다. :)
Real programmers can write assembly code in any language.
-- Larry Wall
그래서 젊은 나이에 벌써 저수준과 고수준을 종횡무진하는 토끼군이나 디토군같은 분들을 보면 참 우리나라의 미래가 밝다고 느껴집니다. :)
