최근 많은 비전공자들이 프로그래밍 분야에 발을 내딛고 있는 것 같다. 나도 지난 여름까지 비전공자였던 사람 중 하나로(현재는 제 2전공을 통해 소프트웨어를 따로 공부하고 있다), 프로그래밍에 새로이 발을 디딛고자 하는 분들에게 조금이나마 도움이 되고자 내가 어떻게 C를 통해 프로그래밍에 입문하였는지에 대한 간략한 후기글을 남기고자 한다.
비전공자가 아니거나, 이미 Visual C 등을 통해 프로그래밍 언어를 접해본 분이 지금 이 글을 읽고 계시다면 과감하게 ‘뒤로 가기’를 눌러주시기를 권고한다.. 나도 아직 미흡한 점이 많은 초보 학부생이기 때문에..
사실 Machine Learning에 대한 관심의 급증과 더불어 요즘 대세라 칭할만한 Python이나 생활코딩의 이고잉님이 가르치시는 CSS, HTML 등 비전공자들이 처음으로 프로그래밍에 입문하기에 충분한 동기부여와 학습 의지를 줄 수 있는 많은 다양한 언어(?)들이 존재한다. 그럼에도 내가 C를 첫 프로그래밍 언어로 선정한 데에는 두 가지 이유가 있다.
-
프로그램이 돌아가는 컴퓨터 작동 원리에 대해 더 자세히 알고 싶었다.
-
Native Language 하나를 제대로 알면 다른 언어를 쉽게 알 수 있을 것이라 믿었다
-
학교의 자료구조 수업이 C로 진행되었다..
이러한 이유(사정)들로 인해 나는 C를 나의 첫 언어로 선택하였고, 내가 선택한 첫 책은 지금은 절판된 최호성 저자의 ‘최호성의 C 프로그래밍’ 이었다. 이 책을 선택한 이유는 우선 절판된 책이었기에 인터넷 상에서 PDF를 무료로 구할 수 있었고, 목차를 살펴본 결과 C 언어를 상당히 Hardware의 관점에서 다룬다는 점이 내가 원하는 부분과 일치했기 때문이다. 또한 유튜브를 통해 무료 강의를 제공한다는 점에 있어서도 상당히 매력적인 교안이라고 생각한다.
<최호성 강사의 YouTube 채널, 자신의 모든 책들에 대한 강의를 ‘무료’로 제공한다>
결과적으로 이 책을 첫 C 교재로 선택한 것은 정말 탁월한 선택이었다. 나는 당시 여름방학을 이용해 2학기에 있을 자료구조, 컴퓨터구조 등의 수업에 대비하기 위해 C 언어를 시작하였는데, 이 때 당시의 예습이 2학기 수업을 따라감에 있어 정말 많은 도움이 되었다. 앞서 언급한 것과 같이 C를 Hardware로 접근하기 때문에 최호성 강사는 디버깅을 굉장히 많이 실습시킨다. 디버깅을 통해 내가 사용한 변수와 포인터 등이 메모리에서 어떻게 자리잡고 변화하는지에 대한 흐름을 익히라는 뜻에서였을 것이다.
디버깅: 쉽게 말하면 작성한 코드를 한 줄 한 줄 따라가며, 그에 따라 생기는 변화를 확인하는 과정 (to find bug)
이렇게 시작 언어였던 C에서부터 메모리를 뒤지고, Data가 담기는 과정을 확인하는 등의 방식을 학습 하니 컴퓨터구조를 학습함에 있어 레지스터와 메모리 PC(Program Counter) 등의 변화에 대한 공부에 정말 많은 도움이 되었다. 또한 내가 다니는 학교는 자료구조를 C로 구현하도록 하였는데, 생각보다 많은 학생들이 Pointer를 제대로 활용하지 못해 제대로 된 자료구조를 구현하지 못하였다. 그러나 최호성 강사는 Pointer를 정말 이해하기 쉽게 가르치기에 이 책을 통해 공부한 나는 큰 어려움 없이 수업에 임할 수 있었다.
내가 그랬듯, 처음 입문하는 비전공자분들이 이 수업을 처음으로 선택하는 것에는 많은 노력이 필요하다. 강사의 스타일이 Pointer, 메모리 구조 등의 어려운 부분을 초반 부에 미리 주입시키는 방식으로 가르치기 때문이다. 따라서 초반에 많이 고전할 가능성이 크지만, 그 힘든 초반을 잘 이해하고 넘어낸다면 후반 부의 내용을 만나는 순간 ‘아, 이런거였구나.’ 라는 탄식을 내뱉고 있는 자신을 발견하게 될 것이다. 개인적으로도 이같이 초반에 고생하고 후반에 깨우치는 수업을 굉장히 좋아한다.
앞서 소개한 ‘최호성의 C 프로그래밍’을 다 학습한다면, 2015년에 새로이 나온 최호성의 ‘독하게 시작하는 C 프로그래밍’을 학습하는 것이 좋다. 아니, 처음부터 이 책으로 시작하면 더더욱 좋다. ‘최호성의 C 프로그래밍’을 먼저 소개한 이유는 PDF를 통해 지금 당장이라도 쉽게 구할 수 있는 책이기에 소개를 한 것이며, 개정된 이 ‘독C’를 사실 더 추천한다. 이 책은 앞전에 소개한 책에는 존재하지 않는 C 언어의 함수에 대한 고급 이론 등을 더 수록하고 있다. 그리고 일단 무언가를 공부한다면 서적을 하나 가지고 있는 것이 좋다고 생각한다. 모르는 부분이 생겼을 때 언제건 책을 꺼내 확인할 수 있는 것이 좋다고 생각하기 때문이다.
두 책의 저자인 최호성 강사는 네이버에 개인이 운영하는 카페(http://cafe.naver.com/windev)가 따로 존재하니 질문 등 저자와 소통하고 싶으신 분이 있다면 가입을 해두는 것도 좋을 것 같다. 나는 개인적으로 정말 많은 도움을 받은 두 강의였고, 카페를 통해서도 다양한 정보를 꾸준히 받고 있어서 참 감사한 인터넷 스승(?)이 아닌가 싶다. 지난 여름방학 이전까지 컴퓨터라곤 온라인 게임을 즐기는 용도로만 사용한 나도 이 강의들을 통해 수준을 많이 끌어 올렸으니, 나보다 뛰어난 비전공자 여러분들은 훨씬 더 고급진 개발 지식을 함양할 수 있을 것이다. 무료로 강의까지 제공하는데 굳이 마다할 이유는 없지 않는가?
C언어를 통해 전반적인 프로그래밍 언어에 대한 지식을 다졌다면 다음으로는 자료구조와 알고리즘을 학습하는 것이 좋다고 생각한다. 물론, 바로 실무적 지식을 쌓고자 하는 분들은 이 두 과목의 중요성에 의문 부호를 품겠지만, 기업 취업은 물론이거니와 Computer Science의 근간이 되는 두 과목은 ‘내 입장에서는’ 정말 중요한 과목이라고 생각한다. 두 과목의 대한 공부 방법은 다음 포스팅으로 잠시 미룬다.
나를 비롯한 많은 비전공자 출신 개발자 지망생들이 더 많아졌으면 좋겠다는 생각을 한다. 그리고 그들이 모여 그들만의 시너지를 낼 수 있다면 더 할 나위 없이 좋지 않겠는가? 뒤늦게 시작하다 보니 고충을 나눌 주변 사람이 없다는 것이 참 서글프다는 것을 이제야 느끼고 있다. 아무튼 많은 분들이 더 함께 공부하고, 더 같이 소통할 수 있는 날이 왔으면 좋겠다 :)