티스토리 뷰



많은 사람들이 컴퓨터를 배울 때 프로그래밍부터 배우기 시작한다. 또한 그 중 절반 이상은 C언어부터 배우기 시작한다. 그리고 그 중 대부분은 한달 뒤에 포기한다. 나 역시 그랬다. 이런 문제가 발생하는 이유는 아무 것도 모르는 초보자가 C언어가 어떤 언어인지도 모르고 배우려 들기 때문이다.


프로그래밍을 처음 배울 때 C언어를 권장하는 이유는 과거부터 가장 인기가 많은 언어 중에 하나이며, 저급 언어의 특성을 가졌기 때문에 컴퓨터에 대한 이해도를 높이는 데 도움이 되고, 거의 모든 프로그램을 개발할 수 있어서가 아닐까 생각한다. 더불어 얼마 전까지만 해도 초보자가 처음 배우기에 쉬운 언어가 거의 없어서가 가장 큰 이유라 생각한다.


이제 막 프로그래밍을 공부하려고 하는 사람들은 이렇게 묻는다. C언어 쉬운 거 아니에요? 지식인 찾아보니깐 C언어가 처음 배우기엔 쉽다고 하던데요? 이에 대해 간단히 답변하자면 C언어의 문법 자체는 간단하다. 객체지향의 특성을 가진 C++이나 Java 등 언어에 비하면 문법은 단순하다고 할 수 있다. 하지만 C언어는 운영체제(UNIX) 개발을 위해 개발된 언어다. 그래서 컴퓨터 구조나 네트워크 같은 로우 레벨의 기능과 매우 밀접한 연관을 가지기 때문에 제대로 배우려고 하면 매우 어려운 언어다.


여러분이 C언어 기본서를 처음부터 끝까지 보면서 보는 건 새까만 창에 글자 몇 개, 기껏해야 숫자 맞추기 게임 같은 게 전부일 것이다. 프로그래밍을 배우면 지금 이 글을 보고 있는 웹브라우저나 게임이나 여러가지 화려한 그래픽의 프로그램을 만들 수 있을 줄 알았는데 새까만 화면에 글자만 보고 있으니 도대체 내가 뭘 배우고 있는건가 싶다. 그러다 보니 의욕이 떨어지고 결국은 포기하게 되는 것이다.


물론 C언어로 이러한 프로그램을 만드는 게 불가능한 것은 아니다. 앞서 말했듯이 C언어는 저급 언어의 특성부터 고급 언어의 특성까지 두루 갖추고 있기 때문에 거의 대부분의 프로그램을 만드는 것이 가능하다. 위에 말한 우리가 생각하는 프로그램들은 Windows API를 공부하면 충분히 만들 수 있다. 하지만 그런 프로그램들을 개발하기 위해 C언어를 배우는 것은 권장하지 않는다. 그런 프로그램들을 개발하기에 보다 적합한 언어들이 많이 있기 때문이다. 프로그래밍은 프로그래밍이고 언어는 도구로 생각해야 한다. 망치로 모기나 파리를 잡을 수는 있겠지만 매우 힘들다. 하지만 파리채나 전기모기채 같은 도구를 이용하면 매우 편리하다. 이러한 도구들을 놔두고 망치를 쓰겠는가?


그럼 C언어는 대체 어디에 쓰는가가 궁금할 것이다. 요즘은 앞서 말한 운영체제나 네트워크 같은 로우 레벨의 개발에 주로 쓰이고 응용 프로그래밍 같은 경우는 그에 맞는 적합한 언어들이 많이 개발되어 있다. 여기서 로우 레벨 개발을 하지 않을 거면 C언어를 배울 필요가 없냐는 궁금증이 생길 것이다. 이에 대한 대답은 꼭 그렇지는 않다. 꼭 로우 레벨 시스템의 개발을 하지 않는다고 해도 컴퓨터 구조나 컴퓨터 시스템, 운영체제 등이 거의 다 C언어 기반으로 돼 있기 때문에 이를 이해하기 위해선 C언어는 필수다.


정리하자면 C언어는 컴퓨터의 로우 레벨에서 쓰이고 이를 개발하거나 이해하기 위해서 배워야 하는 언어다. 그래서 앞에서 언급한 컴퓨터 구조, 컴퓨터 시스템, 운영체제 등을 같이 공부해야 하기 때문에 사실 처음 프로그래밍 언어로 C언어를, 게다가 독학으로 공부한다는 것은 매우 어렵다. 요즘은 대학교에서도 첫 프로그래밍 언어로 파이썬 같은 언어를 배우고 있는 추세기 때문에 여러분도 파이썬이나 다른 웹프로그래밍 언어를 접한 후에 C언어를 접하는 것을 권한다.


지금부턴 이러한 사항을 다 숙지했음에도 나는 C언어를 독학으로 공부하겠다는 사람을 위해 몇가지 책을 소개하겠다.



약 10년 동안 C언어 베스트셀러를 놓치지 않는, 우리나라에서 프로그래밍에 관심이 있다면 누구나 한 번쯤은 들어봤을 윤성우 저자의 열혈 C 프로그래밍이다.


이 책의 가장 큰 특징으로서 장점이자 단점은 C언어를 정석으로 가르치지 않는다는 것이다. 그렇기 때문에 처음 배우는 사람의 입장을 최대한 배려함으로써 어려워할만한 부분들을 매우 쉽게 풀어냈다. 하지만 C언어를 처음 배울 때 반드시 알아야할 부분이나 표준에 대한 설명이 미미한 것을 단점으로 뽑을 수 있다.


C언에도 표준이 있냐고 묻는 사람이 있을 것이다. C언어에도 표준이 있다(C99가 현재 가장 많이 쓰이는 표준으로 자세한 건 따로 찾아보길 바란다). 표준과 비표준의 차이는 표준어와 방언(사투리)의 차이 정도로 보면 된다. 자신이 사는 지역에서는 방언을 사용해도 별 문제가 없지만 공공적인 장소에서는 문제가 생길 여지가 있다. C언어에서 비표준 역시 그렇다. 그렇기 때문에 그 명성과 달리 간혹 전문가들한테 혹평을 받는 책이기도 하지만 어쨌든 입문자의 입장에서 C언어의 진입 장벽을 낮추는 데 많은 기여를 했기 때문에 권장하는 책 중에 하나다(사실 국내서 중에 C언어를 정석으로 가르치는 책은 거의 없다).



그 다음으로 소개할 책은 K. N. KING 저자의 C Programming : A Modern Approach로 보통 저자의 이름을 따서 KNK라 부른다. 대학교에서 C언어를 배운 경험이 있다면 들어본 경험이 분명 있을 것이다. 세계적으로 많은 전문가들이 인정한 책으로 가히 C언어의 교과서로 불릴 만한다. 표지의 우측 상단에 나와있듯이 C99 표준을 기반으로 책이 쓰여져 있다.


우리나라에선 별로 유명한 책은 아니지만 세계적인 전문가들한테 C언어 책을 딱 하나만 추천해달라고 하면 열에 아홉은 이 책을 추천할 것이다. 단점 아닌 단점은 이 책은 외서로서 국내엔 번역본이 없다는 것인데 수능 영어를 준비한 실력이라면 큰 무리 없이 읽을 수 있을 것이라 생각한다. 만약 이 책을 읽을 정도로 영어 실력이 갖춰지지 않았다면 오히려 영어 공부를 먼저 하는 것을 권한다. 거의 대부분의 IT 기술이 미국이나 유럽이 주도하고 그 논문이나 책들이 영어로 쓰여졌기 때문에 영어를 모르면 이 책뿐만 아니라 앞으로 IT를 공부하는 데 있어 많은 걸림돌이 되기 때문이다.



그 다음으로 추천할 책은 Stephen Prata 저자의 C Primer Plus다. 아마 세계적으론 위에서 소개한 KNK 다음으로 유명한 책이 아닐까 싶은데 이 책은 현재 6판까지 나와 있다. 보통 좋은 책일수록 계속해서 개정판이 나오는데 6판까지 나온 게 이 책이 우수하다는 방증이라 생각한다. 이 책은 C99과 최신 표준인 C11(현재 잘 쓰이지는 않음)까지 다루고 있고, 책 내용도 외서 치고는 쉽게 읽을 수 있게 쓰여져 있다.



이 책을 소개한 가장 큰 이유는 바로 위와 같이 성안당에서 C 기초 플러스라는 이름으로 번역본이 존재한다는 것이다. 내가 읽어본 바로 번역의 품질은 중 정도 되는 거 같은데 당장 영어로 공부하기는 너무 힘든데 C언어 공부는 꼭 하고 싶다라는 사람에게 권장하는 책이다.


마지막으로 정리하자면 C언어를 독학하는 것은 매우 힘든 일이다. 그럼에도 불구하고 하려고 한다면 정말 강한 인내심을 가져야 한다. 그리고 내용이 어려운 책도 읽을 줄 알아야 한다. 그래서 가장 추천하는 책은 두 번째로 소개한 KNK다. 세계적인 많은 전문가들에게 검증된 책이기 때문에 한마디로 믿고 봐도 된다. 만약 당장 영어가 안 되는데 C언어를 너무 공부하고 싶다면 C 기초 플러스 번역본을 추천한다. 경고하지만 이 두 책은 처음 프로그래밍을 공부한다면 어려울 수도 있는 책이다. 사실 이 두 책의 내용이 어려워서 그만둘 정도의 인내심이라면 아예 시작을 하지 않는 것을 권하지만 그럼에도 불구하고 공부를 하고 싶다면 열혈 C 프로그래밍을 먼저 읽은 후에 저 두 책을 읽기를 바란다.

댓글