C 언어 독학 가이드

C 언어를 배우겠다고 결심하는 것은 머나먼 코딩여정의 첫번째 발걸음을 떼는 것과 같다고 할 수 있습니다.

 

C 언어는 현대 사회의 거의 모든 전자기기에 사용되는 만큼 우리 생활에 알게 모르게 침투해 있는 언어입니다. 스마트폰의 운영체제부터 자동차를 제어하는 임베디드 시스템까지 C언어로 작성된 프로그램들이지만 사람들은 그게 C로 만들어진 것인지 잘 모릅니다.

 

C 언어의 중요성을 깨닫고 C를 정복하기 위해서 교재를 사거나 인강을 들어봐도 열심히 할 의욕은 좀처럼 생기지 않습니다.

 

요즘 같은 시대에 밑도 끝도 없는 Hello World 부터 시작하니 어느 세월에 제대로된 프로그램을 완성할 수 있을지 걱정이 됩니다.

 

C언어가 힘든게 아니라 다른 언어도 다 배우는게 쉽지 않습니다. 오랜 시간 강의를 들어야 하고 자습과 실습 그리고 실전 프로젝트를 통해서 간신히 약간의 지식을 배울 수 있다는 것은 비슷합니다. C언어가 좀 더 지루하고 험난한 언어라서 그럴 수도 있습니다.

 

하지만 조금 더 인내심을 가지고 C 언어를 공부하다보면 언젠가는 프로그램실력이 향상되고 한층 발전된 자신의 모습을 발견할 수 있을 것입니다.

 

 

개발업계에서 다양한 언어를 사용하는 요즘은 C언어로 프로그래밍을 시작하는 사람들이 많지 않은 것 같습니다. 자바스크립트 같은 동적타입 언어가 수요가 더 많고 공기관에서 자바언어를 많이 사용하는 영향도 있는 것 같은데 그럼에도 세계적으로 여전히 C언어의 인기는 높습니다. tiobe 순위를 딱 7위까지 보면 C언어가 1위 자바, 파이썬 등이 뒤를 잇고 있습니다.

 

C언어순위-티오비
C언어 순위

 

이 포스팅에서는 주관적인 시각에서 C언어를 독학하는 방법에 대하여 이야기 해보려 합니다.

 

독학, 진짜 독학인가?

독학이라고 하면 과거에는 정말로 독학을 의미했습니다. 변호사 시험을 준비하기 위해 절에 들어간다거나 고시원 생활을 한다거나 하는 것은 오로지 책과 교재만으로 공부해서 깨우친다는 개념이었습니다.

 

그런데 온라인이 활성화된 지금의 독학은 어떨까요? 모두가 온라인 강의를 듣습니다. 카페나 댓글을 통해서 질문도 실시간으로 하고 답변을 받습니다. 안되면 커뮤니티의 카카오톡 단체방에 들어가 물어보기 까지 합니다.

(구글 검색을 활용하면 초급 - 중급 정도까지는 커뮤니티에 물어볼 필요 조차 없어요.)

 

이것은 전통적인 독학과는 거리가 멀어 보입니다. 머리에 '하면된다' 띠를 두르고 공부하는 모습은 아니죠. 여기서 독학이라 함은 '무료'로 혼자만의 공간에서 학습 한다는 개념입니다. 독학을 하는 본인이 부담하는 비용은 종이책의 교재값과 온라인 발품을 팔아 무료 강의 영상을 찾고 부지런히 구글 검색을 하는 것입니다. 학원이나 부트캠프 등에 등록하면 적게는 수십만원 많게는 수백만원이 들어가는 것과 비교하면 금액적으로 절약이 됩니다.

 

돈과 시간의 여유가 되는 사람들은 학원이나 부트캠프, 혹은 온라인에서 실시간으로 진행하는 학원에서 배우는 것도 추천합니다. 다만 이 포스팅에서는 그런 여건이 안되거나 혼자 공부하는 것을 선호하는 사람들을 위한 내용입니다.

 

계획세우기(목표 설정)

독학을 하려면 계획을 세우는게 우선입니다. 혼자 하는 공부다 보니까 하다가 지치면 포기하기가 쉬우니 구체적인 계획과 목표를 설정해봅니다.

 

너무 디테일한 계획을 세울 필요는 없습니다. C언어는 방대하기 때문에 충분히 공부했다고 느낄 때도 새로운 알고리즘을 보면 좌절하기 쉽습니다. 70년내 후반에 나온 C언어는 이미 방대한 양의 코드가 작성되있습니다. 그것들을 다 이해할 수 있는 사람도 없고 독학하는 입장에서는 오늘 내가 배울 것들만 착실히 배우면 됩니다.

 

예를 들어서 이런 식의 계획을 세워봅니다.

 

"이번달안에 포인터 챕터까지는 완전히 끝내겠다"

 

"다음달에는 C언어 교재 한권을 끝낸다."

 

"이번주말까지 영상강의를 한바퀴 들을 거야."

 

이렇게 목표로 하는 학습 지점을 설정해 두면 독학의 효율도 좋아집니다. 사실 저렇게 목표를 딱맞게 끝낼 수 있으면 머지않아 상당한 경지에 오를 수 있는데... 그렇다고 너무 무리해서 목표를 잡으면 계획이 밀리기 시작하고 의욕이 떨어질 수 있으니 자신이 달성가능한 목표를 설정합니다.

 

디테일한 목표를 설정하기 위해서는 세부내용을 채울 필요가 있으니 다음으로 넘어가 보겠습니다.

 

C 언어 독학 교재선택

초보자에게 C언어 독학의 교재 선택은 중요합니다.

 

한 가지 알아둬야 할 사실은 책 한권으로 C언어를 배우는 것은 불가능합니다. 방대한 C의 세계를 교재 한권과 강의 몇 시간 듣는 것으로 익힐 수는 없습니다.

 

C언어의 창시자인 데니스 리치도 90년대에 그의 동료 커니핸과 함께 C언어의 책을 냈습니다. The C Programming Language 라는 300페이지가 안되는 책입니다. 그 책은 C언어의 Tutorial (자습서) 입니다. C언어를 사용하는 방법에 대한 내용이 담겨있는데 주로 C언어를 어떻게 사용하면 좋을지 언어의 창시자의 입장에서 설명하는 책입니다.

 

데니스리치-HelloWorld
유명한 hello world 가 여기서 시작되었다.

 

 

첫 교재로는 자신이 볼 수 있는 가장 쉬운 책을 선택하는 것을 추천합니다. 페이지수가 웬만해서 400페이지를 넘어가지 않는게 좋습니다. 쉽다는 것은 내용이 깊이가 떨어진다는 것과도 비슷한 말입니다. 하지만 초보자에게 필요한 것은 깊은 설명이 먼저가 아니라 코드에 익숙해지는 것입니다. 위의 데니스 리치가 C언어 책에서 한 말도 그와 같죠.

 

"새로운 프로그래밍을 배우는 유일한 방법은 그 언어로 프로그램을 작성하는 것이다. 처음 작성하는 프로그램은 모든 언어에서 같다. hello, world"

두번째 교재 부터는 수준있는 책을 보는게 좋습니다. 사람마다 실력에 따라 맞는 책이 다르니까 서점에 가서 직접 보고 고르는게 좋습니다.

 

개인적으로는 C Primer Plus 6판 - C 기초 플러스 6판을 추천합니다만, 이 교재는 초급자를 위한 책은 아닙니다. 페이지 수도 1,000 페이지가 넘어가고 한국어 강의도 일반에는 잘 없기 때문에 초보자에게 추천하기는 어렵네요.

 

교재는 서점에서 책을 펼쳐보고 조금 할 수 있겠다 싶은 책을 고르는 것이 좋습니다. C언어 책의 출간이 활발하지는 않지만 그래도 서점에 가보면 종류가 수백권은 있습니다. 그 중에 초보자용 책도 당연히 있습니다.

 

초보 - 중급으로 가능 과정에서 두권 이상 보는 것이 좋습니다. 아마 결국 두꺼운 책을 사게 될 겁니다. 연습을 좀 많이 하고 싶으면 C 언어 코딩도장 같은 교재도 괜찮습니다.

 

*링크:

강좌: C 언어 코딩 도장 (dojang.io)

C언어-코딩도장-교재
C언어 코딩 도장 교재

타 언어를 배운 사람들은...

타 언어를 한 개 라도 배운 사람들은 아무래도 완전 초보자에 비해 학습 진도가 빨리 나갈 수 있고, 좀 더 어려운 책도 읽을 수 있습니다. 그리고 C를 배울까 C++을 배울까 고민할 수도 있는데... 그런 분들은 C++ 기초플러스에 한번 도전하는 것도 고려해볼만 합니다.

 

어느 정도 코딩실력은 있고 여러 교재를 보는데 시간낭비하지 않겠다면 나쁘지 않은 선택입니다.

 

C++ 기초 플러스(6판) - 교보문고 (kyobobook.co.kr)

 

온라인 교재의 사용?

온라인 교재도 사용하면 학습의 시너지가 올라갑니다. 위에서 말한 C언어 코딩 도장의 경우도 온라인에는 전부 무료로 공개되어 있습니다. 

 

모두의 코드의 씹어먹는 C언어도 좋은 온라인 교재입니다. 쉬운 교재를 학습하면서 그 진도와 맞춘 단원의 온라인 교재를 함께 공부하면 풍부한 텍스트와 다각도의 관점을 접할 수 있기 때문에 이해도 빠른 편입니다. 다만 너무 여러 교재를 보려고 하면 본편의 진도가 안나가니 온라인 교재는 한개 정도만 같이 진행합니다.

 

이 분도 PDF를 무료로 공개를 하셔서 아이패드 같은데 가지고 다니며 보기도 좋습니다. 초보의 입장에서 설명이 자세한 교재입니다.

 

*링크:

씹어먹는 C 언어 시작하기 (modoocode.com)

씹어먹는-C언어-웹사이트
씹어먹는 C언어 웹사이트

동영상강의 선택

현재 인터넷에는 무료 동영상강의가 많이 올라와있습니다. 특히 국내에서는 유튜브와 대학 공개 강의 사이트가 무료강의가 제일 많아요. 약간 시일이 지난 강의가 많지만 C언어는 크게 달라지지 않기에 상관없습니다. C99 C11이란 용어가 있어서 C에도 시대에 따른 버전이 있지만 그렇게 오래된 강의는 없어요. 처음에는 2015년 이후 강의를 들으면 됩니다.

 

본교재와 강의가 달라도 크게 신경 쓰지 말고 내용에 집중하세요. 자료형 챕터에는 자료형에 집중하고 포인터 챕터에는 포인터에 집중하면 교재가 달라도 상관이 없습니다. 코드가 다른 부분은 자신이 가지고 있는 교재의 것들을 조금씩 수정하면서 실행해봅니다. 약간씩 수정하다 보면 금방 자기 코드가 될 것입니다.

 

C 언어 무료 강의 (입문부터 게임 개발까지) - YouTube

 

대학 공개 강의 사이트 이용하기 KOCW | 무료 대학교 프로그래밍 강의 추천 (tistory.com)

KOCW-열린강좌
KOCW 열린 강좌

해외 자료를 참고

해외 자료는 온라인 교재와 동영상 강의에 포함시킬 내용인데 영어로 된 자료들이 좋습니다. 유튜브 C언어 강의나, 각종 PDF 자료 등... 구글에 키워드로 검색하면 쉽게 찾을 수 있습니다.

 

Geeks for Geeks 같은 사이트에도 학습자료가 많으니 인터넷 문서는 캐면 캘 수록 도움이 됩니다.

 

GeeksforGeeks | A computer science portal for geeks

 

물론 영어라 100% 이해하기 힘들겠지만 번역기도 발달해있기 때문에 부분적인 내용(예를 들어 포인터 챕터에 대한 내용)을 번역하여 읽어보는 것도 추천할만합니다. 프로그래밍을 하려면 영어를 열심히 공부하는게 좋습니다. 어떤 프로그래밍을 하더라도 대부분 영어로된 문서가 제일 빨리 업데이트 되고 또 자료가 많습니다. 문제가 생기면 찾아가는 stackoverflow 는 전부 영어입니다.

 

C언어를 공부하면서 영어문서의 독해실력도 쌓을 수 있으니 좋습니다.

 

C언어를 배운 다음에 할일

여기까지는 C언어를 공부하기 위한 자료에 대한 내용이었습니다.

 

이제는 어느정도 C언어를 알게 된 후에 할 일들을 생각해봅니다.

 

1. C++ 학습 및 타 언어로 공부를 확장한다

 

- C언어를 프로그래밍 언어의 기초 지식으로 배운 사람들에게 해당합니다. C언어를 배우고 C++를 배우면 확실히 많은 장점이 있습니다. 이미 C언어에서 배운 개념들은 그대로 가져가고 객체지향에 대한 부분 그리고 각종 프레임워크에 대하여 배우게 됩니다.

 

C/C++ 프레임워크 중에는 C언어에서 동작하는 프레임워크도 많기 때문에 C에 능숙하면 할 수록 C++을 빨리 배웁니다. 컴퓨터학과를 전공한 학생이라면 여기까지 공부한 다음에 다른 언어를 공부할 정도의 시간이 주어질 것 입니다. C의 기초가 확실하다면 다른 언어를 배우는 것도 빠를 것입니다. 이 시점에서 진로를 선택하고 그에 필요한 언어를 배우는 것도 가능하겠네요.

 

오랜 시간 프로그래밍의 일을 하게 된다면 C언어 기초를 배워둔 것이 도움이 될 것 입니다. 전문가 중에는 C를 건너뛰고 C++을 먼저 공부하는게 더 효율적이라는 의견도 있습니다. 확실히 겹치니까 C++을 먼저 배워도 되는데 이건 선택의 문제로 볼 수도 있으니까 시간이 급한 분은 C++을 배우는게 좋습니다. 글쓴이의 경우 리눅스에서 사용하기 위해 C의 기초를 공부한 후 C++을 배웠습니다.

 

2.  C프로젝트

 

C언어로 프로젝트를 시작합니다. C언어로 프로젝트를 하기 위해서는 오픈소스 라이브러리를 사용해야 합니다. 물론 라이브러리를 직접 만들 수도 있습니다. 하지만 쉽진 않을 겁니다. 이름있는 프로그래머도 혼자서 라이브러리를 완성하기 어렵습니다. 처음에는 다른 프로그래머의 라이브러리를 사용한 소스코드를 따라해보면서 좀 더 능력이 생겼을 도전하는게 좋습니다.

 

오픈소스는 인터넷 어디서나 찾을 수 있습니다. 참고 링크를 보면서 관심있는 라이브러리를 사용해서 자신의 프로젝트를 시작할 수 있습니다. 여기서 부터는 어떤 교재나 강의가 아니라 프로젝트를 진행하며 경험치를 얻고 스스로 배워야 합니다.

 

어떤 프로젝트를 진행할지 어떤 라이브러리를 사용할지 모든 것은 자신에게 달려 있습니다. 이 정도 까지 도달하면 C언어로 프로그래밍을 개발하는데 자신이 있을 것 입니다.

 

뭘 할지 모르겠으면 GUI 프로그래밍 부터 시작해도 됩니다. 많은 사람들이 C언어를 가르치는 교육기관에서 console 프로그램만 배우다가 지쳐버린다고 합니다. GTK 같은 GUI 부터 실행해본다면 동기 부여도 얻게되고 자신만의 GUI 프로그래밍을 만들 수 있습니다.

 

독학으로 여기 까지 도달한 분이라면 아마 C언어로 프로그래밍하는게 적성에 맞는 사람일거라 생각합니다. 건투를 빕니다.

 

*Link 오픈소스 라이브러리와 프레임워크

 

koz.ross/awesome-c: A curated list of awesome C frameworks, libraries, resources and other

 

A list of open source C libraries - cppreference.com

 

요약

온라인 통계자료를 보면 국내에서는 C언어가 그렇게 큰 인기를 얻고 있지 않는 것 같습니다. 물론 파이썬이나 자바스크립트 같은 현대적 언어들에 대한 인기는 나날이 늘고 있죠. 하지만 세계적으로는 여전히 톱의 자리를 지키고 있고 앞으로도 C언어의 인기는 계속되리라는 전망이 있습니다. 물론 언어가 다 각자 역할이 있는 것이라... 하나의 언어가 최고다 이렇게 이야기 할 수는 없지만 프로그래밍을 진지하게 생각하는 사람들에게 중요한 언어임에는 틀림이 없습니다.

 

C 언어를 독학하는데는 더 좋은 방법도 있겠지만 시대가 좋아져서 찾고자 노력하면 이 보다 더 좋은 방법도 있을 것 같습니다.

 

이 포스팅이 이제 부터 C 언어를 독학하려고 준비하는 분들에게 혹시 조금이라도 도움이나 참고가 되었으면 좋겠습니다~

공유하기

facebook twitter kakaoTalk kakaostory naver band