brunch

You can make anything
by writing

C.S.Lewis

by Tolany Mar 30. 2018

#서평 28 이것이 C언어다

서현우 저 

# 이것이 C언어다 - 서현우


  개인적으로 C라는 언어를 별로 안 좋아합니다. C가 만들어지기 전에 있었던 언어들(어셈블리어라던가, B언어라던가)에 비해서는 인간친화적인 언어라고 하지만 여전히 인간보다는 기계에 더 가까운 언어이기 때문에 아무래도 번거롭고 불편한 점이 많이 때문입니다. 특히 컴퓨터가 '귀한 컴퓨터느님'취급 받던 시기에 나온 언어라서, 컴퓨터의 동작원리에 가깝게 사고할수록 편리한 언어인데, 제가 C언어를 처음 접한 시점이 프로그래밍이라는 것을 처음 배우는 시점이었기 때문에, 컴퓨터의 동작원리에 가깝게 사고할수록 편리한 언어인 C언어는 불편하면서, 어렵기만 한 언어에 불과했습니다. 사실 지금도 그리 다르지 않습니다. 전문적인 소프트웨어, 그것도 아주 고성능이 필요한 경우가(운영체제라던가, 운영체제라던가, 운영체제라던가) 아니라면 사실 좋은 대안이 워낙 많습니다. 한참 공부하고 있는 파이썬을 비롯해서, RUST, GO 등 훨씬 많은 기본 라이브러리를 제공하고, 고급 자료형을 탑재한 생산성 좋은 언어들이 좋은 대안입니다.  


  네, C언어 험담을 왕창 했습니다. 그럼 여기서 한 가지 궁금증이 생깁니다. "아니 그렇게 C언어를 싫어하면서, 왜 C언어 책은 읽고 서평을 쓰고 있는가?"라는 의문입니다. 네, 만악의 근원 마법사 책이 문제입니다. 컴퓨터에 대해서 관심이 생긴 시기는 꽤 오래 전의 일입니다. 하지만 지금처럼 투자에 빠져들듯이 깊이 빠져들 만큼 흥미를 느끼진 못했었습니다. 너무 복잡하고, 어려워 보였기 때문입니다. 그런데 마법사 책(컴퓨터 프로그램의 구조와 해석)을 보고 나서부터 조금 달라졌습니다. 분명 여전히 어려운 것은 사실이지만, 사실 컴퓨터라는 도구가 할 수 있는 일 자체가 제한적이기 때문에, 당연히 프로그램이라는 컴퓨터에게 일을 시키는 매뉴얼 자체도 아주 단순한 행위들의 조합으로 구성되어 있다는 것을 알게 되었기 때문입니다. 그리고 그 과정에서, "어려워도 원리를 알아야 한다"는 생각을 하게 되었습니다. 분명 원리를 이해하는 일이 녹녹지 않은 일이긴 합니다. 하지만 원리를 이해하는 일은, 녹녹지 않은 과정을 감수할 만큼 큰 편익을 제공하는 일이라고 생각합니다. 예컨대, 'f(x) = 25 + 3x + x^2'이라는 함수가 있다고 할 때, 'f(x) = 25 + 3x + x^2'라는 함수의 식을 알고 결괏값을 보고 규칙성을 찾아내는 것과 f(1) = 29, f(2) = 35, f(3) = 43이라는 결괏값만 보고 f(4)의 값을 추정하는 것 간의 차이만큼 차이가 발생한다고 생각합니다. 즉, 어떤 논리적 객체를 다룰 때, 인풋과 아웃풋 사이의 과정을 블랙박스로 두지 않는 것만으로도 학습 효율이 현격하게 좋아진다는 것입니다.   


  C 언어를 공부해야겠다는 생각을 한 이유가 바로 위의 생각 때문입니다. 물론 파이썬 같은 아주 폭넓은 패키지를 제공하고, 언어 자체가 고급 자료형을 탑재하고 있는 언어를 사용하는 것이 훨씬 생산성도 좋고 편리하고 쉽습니다. 하지만 역설적으로 파이썬과 같은 고급 언어는 편리하기 때문에 중간 연산 과정에 대해서 알 수 있는 것이 거의 없습니다. 그래서 당장 어떤 일을 해결하기에는 참 좋지만, 조금 더 내 경우에 최적화된 방법론을 고안할 때는 다소 아쉬운 부분이 있는 것이 사실입니다. 물론 대부분의 경우에는, '더 최적화된 방법론'이 필요한 경우가 드물기 때문에 파이썬만 공부해도 큰 문제는 없다고 생각합니다. 하지만 만약에 조금 더 욕심이 난다면, C언어와 같은, 사용자에게는 조금 더 번거롭고, 불편하고, 원시적인 언어를 공부해보는 것이 큰 도움이 될 것입니다. 어떤 언어가 원시적이고, 컴퓨터에 가까운 Low-level 언어라는 점은 그 언어의 코드 그 자체가, 컴퓨터라는 기계가 동작하는 원리에 대해서 더 많은 것은 보여준다는 것을 의미하기 때문입니다.   


  그럼 C언어를 공부할 필요가 있다는 것까지는 알겠고, 왜 하필 이 책으로 공부를 해야 하느냐?라고 물으신다면, 사실 "꼭 이 책으로 공부할 필요는 없어요."라고 답해야 할 것 같습니다. 사실 시중에 C언어 책이 참 많습니다. 전 세계적으로 C의 바이블로 여겨지는 KNK도 있고, C언어의 아버지 데니스 리치 옹이 직접 집필한 C&R도 있습니다. 뿐만 아니라 국내 저자가 출간한 책들도 꽤 많습니다.   


그럼에도 불구하고 [이것이 C언어다]라는 이 책도 좋은 교재 중에 하나가 될 수 있다고 생각합니다.   


  우선 첫 번째 이유는, '국문 서적'이라는 점입니다. 사실 까놓고 말해서 우리가 영어권 국가에 살고 있었고, 영어가 모국어였다면, 묻지도 따지지도 말고 KNK가 좋다고 생각합니다. 바이블이고, 아예 C로 먹고사는 분들도 강추하는 책이니까요. 하지만 문제는 KNK는 영문으로 된 책입니다. 사실 기술서적은 영문으로 봐도 큰 무리가 없긴 합니다만, 그래도 아무래도 읽는데 들어가는 시간이나, 저자가 나름 '친절하게 설명하는 부분'이 독자에게 상대적으로 '덜 친절하게 ' 느껴질 수 있다는 점에서 국문 서적의 장점이 있다고 생각합니다.   


  두 번째 이유는, "C99를 기준으로 설명하는 책이다"라는 점입니다. C언어는 컴파일되는 언어입니다. 그래서 실제 코드가 컴퓨터에게 전해질 때는 무조건 '컴파일'이라는 단계를 거쳐야만 합니다. 그런데 동시에 역사가 상당히 오래되었고, 아주 폭넓게 쓰이는 언어이기 때문에 형식도 여러 갈래가 있습니다. 하지만 역시 가장 좋은 것은 국제표준 형식인 C99라고 생각합니다. C99를 기준으로 프로그램을 짜고, 공부할 경우 어떤 컴파일러에서도 큰 무리가 없이 컴파일이 되고, 실행이 되겠지만 비표준 형식을 기준으로 프로그램을 짜고, 공부할 경우 다른 컴파일러에서 문제를 일으키는 경우가 더러 발생할 수 있기 때문입니다.   


  마지막 세 번째 이유는, "동영상 강의를 무료로 제공한다"라는 점입니다. 사실 이미 C언어를 수차례 접해본 프로그래머나 전문가 수준의 내용을 원하는 독자들은 KNK로 갈 것이라고 생각합니다. 바이블이 있음에도 불구하고, 국문 서적을 찾는 사람들은 대부분 프로그래밍에 대해서 아직 생소하고, 어려워하는 단계에 있는 사람들일 가능성이 높습니다. 그리고 그런 경우 텍스트만 보고 따라 하는 것은 중간에 아주 사소한 문제 때문에 곤란을 겪을 가능성이 높다고 생각합니다. 그리고 아닌 말로 정말 텍스트만 보고 따라 할 것이라면 차라리 그냥 KNK로 보는 게 낫지 않을까 하는 생각도 듭니다. 그런데, 이 책은 저자가 직접 무료로 동영상 강의를 제공합니다. 사실 대부분의 경우에는 책의 설명만으로도 충분합니다만, 실습을 하면서 막히는 부분이나 이해가 잘 안 가는 부분을 저자가 칠판에 글을 써가며 설명해주는 동영상 강의를 보면서 다시 도전해볼 수 있다는 점은 국내 저자의 책을 샀을 때만 누릴 수 있는 가장 큰 장점이라고 생각합니다.   


  사실 파이썬으로 편하게 코딩하다가 C언어로 코딩을 하려니까 꽤 답답했습니다. 심지어 저는 컴퓨터 환경이 크롬북이기 때문에 Termux에서 GCC 컴파일러로 컴파일을 해야 하는 상황이라서 더 귀찮았습니다. 하지만 책을 끝내는 시점이 되니, 확실히 공부하기 전보다 C언어뿐만 아니라 CS 관련 대부분의 주제에 대해서 공부하고 이해하는데 한결 수월해진 것을 체감할 수 있었습니다. :)     


  **이 책은 한빛미디어의 나는 리뷰어다 프로그램을 통해 제공받은 것임을 밝힙니다.***

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari