본문 바로가기
jisung's 책읽기/기술서

열혈C 프로그래밍 - 컴퓨터와 대화하기

by jisungStory 2019. 2. 18.
반응형



열혈 C 프로그래밍

컴퓨터와 대화하기


컴퓨터 공부를 한 것이 언제 부터 였을까요? 

 제 기억에 저는 중학교 시절 부터 컴퓨터에 대한 환상을 갖고 살았습니다. 그런데 집에는 컴퓨터가 없었죠. 부모님을 조르고 졸라 주변 분들로 부터 오래된 286 컴퓨터를 얻을 수는 있었습니다. 하지만 그것으로 할 수 있는 것은 간단한 게임과 워드프로세싱 정도 제가 원했던 것은 컴퓨터 프로그래밍이었는데 그것을 어떻게 하는지 방법도 수단도 그 어디에서도 배우지 못했습니다. 그렇게 시간이 얼마나 지났을까요? 매년 업그레이드 되는 컴퓨터를 저는 그저 지켜 보고만 있어야 했습니다. 컴퓨터는 곧 돈이었고 가난한 집안의 아들은 그런 눈부신 발전을 그저 지켜 보고만 있어야 했습니다. 


 대학교에 진학을 했고 이제는 웬만한 컴퓨터는 만질 수 있게 되었지만 오히려 그것이 독이 되었을까요? 프로그래밍 수업을 듣기도 했지만 전혀 재미있거나 흥미가 생기지 않았습니다. 어린시절 가졌던 열정은 오데 간데 없고 수업시간에는 어떤 문제가 시험에 나올까 전전 긍긍하며 보내야 했습니다. 수업에서 가르쳐 주고 있는 많은 지식들이 현실에서 어떻게 적용될 수 있는지에 대한 설명 보다는 이렇게 하면 이렇게 됩니다. 정도의 암기식 수업은 컴퓨터에 대한 저의 열정을 완전히 빼앗아 버렸습니다. 어쩌면 수업의 문제가 아니었을 지도 모르겠습니다. 저는 어떻게 해도 제 삶이 변할 수 없다는 무기력증에 빠져 있었던 것 같습니다. 


 세상에는 천재들이 많지요. 나보다 뛰어난 사람은 모두 천재라고 봐도 될것 같습니다.  저도 어쩔 수 없는 사람인지라  제가 접하는 많은 매체를 통해 세상을 바라 보고 판단하며 살아 갑니다. 그 화려한 빛을 통해 보이는 따라 갈 수 없을 것 같은 뛰어난 사람들을 동경하면서 그 사람과 나를 비교 하게 되는데요. 그런 생각이 얼마나 의미 없는지 깨닫는데는 너무 오랜 시간이 걸린것 같습니다. 정말 쓸데 없는 생각이지요. 제 인생은 제가 사는 것이지 그 사람이 사는 것은 아니니까요. 


 이 책을 사게 된 것은 전적으로 전에 읽었던 ‘알고리즘 문제해결 전략’ 때문입니다. 이 책은 C++  컴퓨터 언어를 통한 문제 해결 방법들을 제시하고 있습니다. 물론 언어에 대한 완벽한 이해가 없다고 하더라도 책을 읽는데는 문제가 없습니다. 제가 알고 있는 Swift 나  Javascript 같은 언어들도 그에 기반하고 있기 때문에 충분히 이해 할 수 있었습니다. 하지만 부족함을 느꼈습니다. 어떤 일을 시작하는 것은 계획이지만 마무리 짓는 것은 디테일이니까요. 책의 얼개는 이해 할 수 있었지만 세부사항을 이해 하는데는 언어에 대한 이해가 필요 했습니다. 결국은 기본으로 돌아 오게 되는 것 같습니다. 


 그럼 C++ 책을 사야 하는데 왜 C 언어 책을 산것이냐?


  제가 예전 부터 사모아 놓았던 책 중에 C++ 책이 이미 있었습니다. 설에 부모님 댁에 가면 제가 모아 놓은 책들을 뒤적 뒤적 하는데요. 거기서 제가 일전에 사놓고 잊고 있었던 책을 발견했습니다. 그 책의 저자 분이 이 윤성우 씨던군요. 그런데 이 C++ 책은 읽어 보니 앞에 저술한  C 언어 책에 대한 이해가 있어야겠더라구요. 저자 분의 전략에 제가 넘어 갔던 걸까요? 아니면 고도의 마케팅 전략이었을 지도 모르겠습니다. 어쨌든 알고리즘을 이해하기 위해 C++ 책을 찾게 되고 이 C++ 책을 이해하기 위해 C 언어 책을 사게 되는 놀라운 연쇄 작용이었습니다. 


사실 이 책이 저의 첫번째  C언어 책은 아닙니다. 중학교 때 부터 못해도 다섯권을 사서 읽고 포기하기를 반복했던것 같습니다. 대학때도 도서관에 있는 C언어책을 얼마나 기웃 거렸는지 아마 대출 하지 않았던 책이 드물 정도 입니다. 하지만 그 오랜 시간 동안 저는 이 언어에 대해서 이해하지 못했습니다. 그리고 현실에서 이 기술을 활용할 일도 없었습니다. 그럼에도 불구 하고 제가 이 C언어에 집착하는 이유는 기본에 충실해야 제가 애정해 마지 않는 마법같은 컴퓨터라는 기계를 이해할 수 있기 때문입니다. 


 C언어는 태생적으로 컴퓨터를 이해하는 첫단계에 서 있습니다. 기계어 다음에 개발된 첫번째 고급 언어이고 개발 된 것이 벌서 오십년이 되어가는 언어 임에도 불구하고 아직까지 쓰이고 많은 언어들의 기본이 되고 있습니다. 제가 주로 사용하고 있는 Apple 의 컴퓨터도 Object-C 라는 C 언어의 개선 버전을 활용하여 만들어 지고 있으니까요 . 이 부분에서는 저보다 전문가이신 저자의 말을 빌리는 것이 좋을 것 같습니다. 


1.  C 언어는 절차지향적 특징을 지닌다. 때문에 익숙해 지는데 

오랜 시간이 걸리지 않는다. 

2.  C 언어로 작성된 프로그램은 이식성이 좋다.

3.  C 언어로 구현된 프로그램은 좋은 성능을 보인다. 

 p.21



 저는 요즘에 iPhone 의 개발 언어인  Swift 위주로 코딩을 하다 보니 C 언어의 강점에 대해서 잠시 잊고 지냈는데요. 제가 하는 것은 많은 부분 선배 개발자들이 편하게 개발 하라고 많은 배려를 해놓은 좋은 환경에서 하고 있다는 느낌을 많이 받습니다. 사실 개발 하면서 메모리 관리 나 세부적인 명령 프로세스 같은 것은 신경쓰지 않는 편이거든요. 하지만 제대로된 프로그래머라면 하드웨어에 대한 확실한 이해 없이는 좋은 프로그램을 만들 수 없다고 생각합니다. 컴퓨터 하드웨어에 대한 이해 없이 프로그램을 만들다 보면 당연히 느리고 사용하기 불편한 프로그램을 만들고도 이유를 찾지 못하는 진퇴양난의 상황에 빠지게 됩니다. 


 컴퓨터와 제대로된 대화를 하기 위해서는  좀 더 찬찬이 이 녀석을 살펴 보는 시간을 가져야 할 것 같습니다. 


 컴퓨터와 대화하기 위한 제 1외국어 교재 ‘열혈 C언어 프로그래밍’ 이었습니다.  



2019/01/29 - [하루 책읽기/하루 기술서] - 알고리즘 문제해결 전략 - 어떻게 문제를 해결 할 것인가?

2018/08/24 - [하루 책읽기/하루 기술서] - 그림으로 개념을 이해하는 알고리즘


반응형

댓글