깐깐하게 배우는 C: 52단계 연습으로 배우는 실용 C 코딩 노하우

요새 누가 C 언어를 배워요?

코딩을 정규 교육 과정에 넣는다는 말이 나오고 있고 실제로 이미 시작한 나라가 있을 정도로 프로그래밍의 존재감은 날로 커지고 있습니다. 컴퓨터가 생필품이 된 세상에서 프로그래밍은 더 이상 공학도의 전유물이 아니라 모든 사람이 배워야 할 ‘언어’로 대접받게 되었습니다.

그래서 좀 더 편리한 언어, 좀 더 쉬운 기술을 찾는 사람들의 요구에 맞춰 하루가 멀다 하고 새로운 기술이 쏟아져 나오고 있습니다.

이런 상황에서 세상에 나온 지 40년이 넘은 C 언어는 구닥다리에 어렵고 불편한 언어 취급을 받고 있죠. C는 이제 더 이상 필요 없는 언어일까요?

 

창의적 프로그래밍 VS. 방어적 프로그래밍

『깐깐하게 배우는 C』는 C를 사용해 궁극적으로 ‘방어적 프로그래밍’의 마음가짐을 몸에 배도록 하는 것이 목표입니다. 그럼 먼저 ‘방어적 프로그래밍’이 뭔지 알아야겠죠? 저자인 제드 쇼(Zed Shaw)는 프로그래밍에 임하는 두 가지 마음자세를 제시합니다. ‘창의적 프로그래밍’과 ‘방어적 프로그래밍’입니다.

먼저 창의적 프로그래밍이란 뭘까요?

나 쫌 천재인 듯? – 창의적 프로그래밍

– 나는 실수를 하지 않는다.

– 사람들이 생각하는 것은 중요하지 않다.

– 머릿속에서 떠오르는 모든 생각은 훌륭한 아이디어가 될 것이다.

이런 마음가짐은 최초의 아이디어를 발전시킬 때 필요합니다. 실패할까봐, 혹은 바보처럼 보일까봐 두려운 마음이 든다면 아이디어는 발전하지 못하고 멈춰 서게 됩니다. 떠오르는 대로 생각을 발전시켜서 프로토타입을 만들면 이제 방어적 프로그래밍의 마음가짐으로 갈아타야 합니다.

나도 나를 못 믿어 – 방어적 프로그래밍

– 소프트웨어는 오류를 내포한다.

– 당신은 당신의 소프트웨어가 아니며, 다만 오류에 대한 책임을 질 뿐이다.

– 당신은 절대 오류를 없앨 수 없다. 단지 그 가능성을 줄일 뿐이다.

방어적 프로그래밍은 내가 만든 프로그램을 제 3자의 입장에서 객관적으로 바라보는 것입니다. 이를 통해 자신이 만든 코드에 정직해지고 비판적으로 분석할 수 있게 되고, 이는 프로그램 개선으로 이어집니다.

불완전한 C로 배우는 방어적 프로그래밍

그렇다면 저자는 왜 C 언어로 방어적 프로그래밍을 익히는 방법을 택한 걸까요?

그것은 C가 불완전한 언어이기 때문입니다. C가 나온 시절에는 보안 개념이 희박했기 때문에 보안 기능이 거의 없습니다. 따라서 C로 프로그램을 작성할 때는 더 긴장해야 하고 로직을 자세히 파악하고 있어야 합니다. 만일 C 언어로 안전하고 견고한 코드를 작성할 수 있다면 어떤 프로그래밍 언어로도 견고한 코드를 만들 수 있습니다. 더 훌륭한 프로그래머로 도약할 수 있게 되는 거죠.

C를 배우기에도 좋은 책: C를 포기했던 사람이여 모여라

이 책은 C를 다시 공부하고자 하는 사람에게도 추천할 만합니다. C는 프로그래머에게 원죄 같은 언어입니다. C를 잘 모른다고 말하면서 죄책감을 느끼죠. ‘내가 언젠가는 C를 다시 공부해서…..’ 라고 생각하지만 웬수같은 포인터에 이르면 다시 포기하는 과정을 반복합니다. 저자인 제드 쇼는 일반적이고 교과서적인 설명 방법을 취하지 않습니다. 저자가 준비한 코드를 그대로 입력하고(복사-붙여넣기 절대 금지!) 실행하고 오류를 일으키고 이것을 다시 수정하면서 체험적으로 C를 배우도록 합니다. 마치 직장 선배가 신입사원을 트레이닝하듯 먼저 암기해야 할 것들을 제시하고 암기 방법까지 조언해줍니다.

완벽한 프로그램이란 존재하지 않습니다. 완벽한 C 코드를 작성하는 것은 불가능하며 어떤 언어로도 무결점의 코드를 작성할 수는 없습니다. 하지만 모든 코드에 결함이 있다고 가정하고 항상 결함을 예방하려는 자세를 갖는 것이 중요합니다. ‘별 문제 없겠지’ 하며 대충대충 코드를 작성하는 버릇은 나쁜 소프트웨어를 만드는 가장 큰 원인입니다. 『깐깐하게 배우는 C』로 더 꼼꼼하게, 집중해서 프로그래밍하는 훈련을 시작해보세요.

 

『깐깐하게 배우는 C』는 다음 서점에서 구입하실 수 있습니다.

깐깐하게배우는C_미리보기

교보문고 | Yes24 | 알라딘 | 인터파크

작지만 알찬, 곁에 두고 배우는 리눅스 필수 명령어

GUI가 등장했을 때 내세웠던 장점이 “복잡한 명령어와 옵션을 외우지 않아도 돼서 비전문가도 컴퓨터를 쓸 수 있다”였습니다. 당시 GUI를 장난감 같다고 평한 사람들도 있었지만 어쨌든 오늘날 GUI는 대세가 되었습니다.

오늘날 리눅스에서도 GUI는 낯선 것이 아닙니다. 과학 관련 다큐멘터리들에서 연구원들이 쓰는 우분투 리눅스 데스크톱 화면을 비추는 장면을 종종 볼 수 있을 정도죠. 그렇지만 리눅스 하면 여전히 많은 사람들이 명령행 인터페이스(command-line interface, CLI)를 떠올립니다.

사람들이 흔히 떠올리는 리눅스

일상에서는 GUI를 많이 쓰기는 하지만 명령어 방식에도 유용한 면이 있습니다. 손가락이 뻐근하도록 마우스 클릭을 하는 대신에 반복 작업을 자동화하거나 여러 명령어를 조합해 복잡한 작업을 처리하는 데에는 명령행 인터페이스가 여전히 효율적입니다. 그렇다면 명령어를 어느 정도 많이, 잘 알아야 할까요?

인사이트에도 리눅스 컴퓨터가 한 대 있습니다. 얼마나 많은 명령어가 들어 있는지 궁금해서 대충 세어 보았습니다.

insight@insightwiki:~$ ls -l /bin | wc -l
152
insight@insightwiki:~$ ls -l /usr/bin | wc -l
700
insight@insightwiki:~$ ls -l /usr/sbin | wc -l
140
insight@insightwiki:~$ ls -l /sbin | wc -l
204

얼추 1100개가 넘는군요(참고로 521개 패키지가 설치되어 있습니다). 과연 이 많은 명령어와 각 명령어의 옵션을 다 외워야 리눅스를 쓸 수 있는 것일까요? 명령어를 하나하나 무턱대고 외워야 한다면 입시를 위해 영어 낱말을 맥락 없이 고통스럽게 암기하는 것과 다를 바 없을 겁니다.

운영 체제를 다루는 데 필요한 몇 가지 기초 명령과 옵션들을 배우고 리눅스 배포판에 들어 있는 명령어들이 어떤 범주로 나뉘어 있는지 살펴본 후 관심 있거나 필요한 분야부터 조금씩 실제로 써 보면서 익히는 것이 덜 지루한 방법일 것 같습니다.

이번에 소개하는 『리눅스 핵심 레퍼런스』는 모든 명령어를 빼곡하게 나열하기보다는 리눅스에서 많이 하는 작업들을 범주별로 나누고 주요 명령어와 자주 쓰이는 옵션을 작고 아담한 크기에 간결하게 담아낸 책입니다. 또 앞서 언급했듯이 단순한 명령어를 조합해 복잡한 작업을 어떻게 처리할 수 있는지에 대한 예제도 보여 주고 있습니다. 책 크기가 작으니 옆에 두고 필요할 때마다 찾아보면 명령어를 억지로 외워야 한다는 부담감도 덜할지 모르겠네요.

이 책을 출발점으로 낯설었던 명령어가 놀랍도록 유용하고 강력한 도구로 탈바꿈하는 경험을 해 보면 어떨까요?

다음 인터넷 서점에서 구입하실 수 있습니다.

알라딘|예스24|교보문고|인터파크