왜 다시 C언어를 공부할까?
RTOS를 만들어보는 공부를 시작하면서 잘 모르던 C언어 문법을 만나게 된 것이 계기입니다. 구조체를 이용한 비트 필드 표현이나 가변 인자 함수가 있다는 것을 알게 된 것도 최근 일이지요. 저는 C언어를 그래도 좀 안다고 생각했는데 너무 얕게 알고 있었던 모양입니다. 그래도 개발을 하면서 밥을 벌어 먹고사는 사람이 자신의 주력 언어는 자신 있게 '잘 안다'고 말할 수 있어야 하지 않을까 생각했습니다. 그래서 다시 C언어를 공부하기 시작했습니다.
무슨 책을 참고하지?
제가 처음 C언어를 접하게 된 것은 2013년 대학원 생활을 시작하면서였습니다. 예술과 공학을 융합한 학과에서 '비전공자' 신분으로 개발 공부를 시작하였지요. 그때는 많은 C언어 입문 서적들을 뒤적거리며 공부를 했었지요. 그렇다고 지금 와서 다시 그때 봤던 책을 반복해서 보려는 것은 아닙니다. 이미 C언어를 알고 있으니 다시 한번 기초를 다지며 비어있는 틈을 메꿔줄 만한 책이나 자료가 있었으면 좋겠다 싶었습니다. 그렇게 선택한 책이 브라이언 케니핸과 데니스 리치가 쓴 "C언어 프로그래밍(The C Programming Language)"입니다.
그 책을 선택한 이유는?
이 책을 선정하게 된 것에는 이곳에 적힌 내용이 크게 영향을 주었습니다. 그 일부를 살펴보면 이렇습니다.
K&R이 바이블 취급을 받는 이유는 단순히 역사적이고 C 언어 창시자가 쓴 책이기 때문만은 아니다. C 언어가 겉으로는 심플해보이지만 워낙 숨은 함정이 많은 언어라 저런 부분들을 제대로 다 짚고 넘어가야 하는데, K&R 이외에 제대로 완전하게 짚어주는 교재가 거의 없다. 보통의 고수준 언어들처럼 접근해서 직관적으로 '이렇게 하면 된다.' 식으로 설명을 하는 교재들이 많은데, 사실 온갖 정의되지 않은 행동(Undefined Behaviour)과 구현 특화 상세내역(Implementation-specific Details), 하드웨어에 의존적인(Hardware Dependent) 함정들이 곳곳에 숨어있는 C 언어는 '이렇게 하면 된다.' 보다 '이렇게 하면 안된다.'를 중점적으로 설명해야 하는 언어이다.
...(중략)...
본격적으로 C 프로그래밍을 하려는 사람들 사이에서는 해외 기준으로 K&R과 C Programming: A Modern Approach(일명 K&K) 두 가지 정도만이 제대로 된 교재 취급을 받는다. K&R이 나온 지 오래된 책이기는 하지만 중요하고 핵심적인 사항들은 오늘날에도 변함없이 적용되는 내용들이다. K&R을 나온 지 오래 된 책이라고 무시하기엔 좋은 내용들이 굉장히 많다.
그래서 어떻게 공부해?
한 문장을 곱씹으며 읽어봐야 한다는 책이니만큼 가능한 한 정독을 하면서 읽어보려 합니다. 이미 아는 내용이라고 설렁설렁 읽다보면 다시 공부하는 의미가 옅어질 것 같으니까요. 그리고 예제 문제는 하나도 빠짐없이 풀어보려 합니다. 제가 작성한 문제 풀이 코드는 Github에 올려놓을 테니 관심 있는 분들은 참고하시면 좋을 것 같습니다.
꾸준함이 힘
사실 이제 와서 C언어를 공부한다는 게 크게 의미가 있을까 싶었습니다. 고수준의 생산성 좋은 현대 언어나 프레임워크를 공부하는 것이 자기 개발에 더 도움이 되지 않을까 생각도 했지요. 그래도 지금은 '기초 다지기'에 조금 더 힘을 쓰고 싶은 마음이 들었습니다. 어쨌든 다시 잘 할 수 있는 기회를 얻은 것 같아 설레고 기쁜 마음이 듭니다. 가능하면 조금씩이라도 매일 진도를 나가려고 합니다. 천재가 아니라면 꾸준히 하는 것이 힘이 될 테니까요.
'연구 노트 > C, C++' 카테고리의 다른 글
C++를 사용할 수 있는 GUI 라이브러리 모음 (0) | 2022.08.24 |
---|---|
[다시 C언어] 함수 반환형, 안적어도 될까? (0) | 2021.02.18 |
C언어에서 가변 인자 함수를 만들려면? (0) | 2021.02.07 |
구조체 내부 변수 뒤 이것 ':'의 정체, '비트 필드' (0) | 2021.01.26 |
헤더 파일 중복 방지 왜 필요할까? (0) | 2019.08.31 |