POCU 아카데미의 COMP2200(C 언매니지드 프로그래밍) 풀코스 수강 후기

 

 

- 목차

 

- C언어 수업을 선택한 이유

나에게 가장 익숙한 언어였다. 대학교 때 부전공으로 C언어를 배웠기 때문에 가장 잘 알고 있는 언어였다. 하지만 깊이 있게 공부하지 않았기 때문에 기본적인건 알고 있었지만 부족함이 많다고 느끼는 언어였다. 수강을 결정할 때쯤 다니던 회사에서 사용하고 있던 언어이기도 했는데 항상 일하면서도 C언어 실력의 부족으로 어려움을 겪었다.

 

게임 프로그래밍을 하고 싶다는 막연한 생각을 가지고 있었다. 내년이면 30대로 접어드는 나이에 너무 늦은 시작이란 생각도 들었지만, 해보고 싶었다. 그래서 내가 아는 선에서 시작할 수 있는건 C언어를 시작하는 것이었다. C++을 배우기 위한 첫 걸음이라는 생각도 C언어를 수강한 이유였다. 특히 포인터에 대한 이해가 많이 부족하다고 생각했다.

 

 

- C언어 수강 후회는 없었나

전혀 없었다. 위에서도 언급했지만, 부전공으로도 공부를 했고 회사에서도 사용하고 있는 언어였다.(현재는 퇴사) 하지만 실력적으로 항상 부족함을 느끼고 있었다. 파일 입출력, 문자열을 다루는 부분, 포인터의 사용 등등 실무에서 바로 써야하는 부분에 있어서도 어려움을 겪어 구글 검색을 끼고 살아야했다. COMP2200 수업은 나의 그런 부족함을 확실하게 메꿔줬다. 정확하게 말하면 내가 부족했다는 것을 뼈저리게 느끼게 해주는 수업이었다.

 

자신이 모른다고 생각하는 부분은 스스로 노력하면 채워나갈 수 있다. 하지만 부족하다고 느끼지 못하면 채워나갈 수 조차 없다. 강의를 듣는 내내 내가 들었던 생각은 '이런 것도 있었구나. ', '이런 것까지 생각해야 하는구나' 였다. 내가 원하던 부분을 확실하게 채워줌은 물론이고, 채웠어야 했지만 채워야하는지 조차 모르는 부분까지 확실하게 머릿속에 박아 넣어주는 강의였다.

 

 

- 수강 전 사전 지식에 대한 나의 생각

COMP1000 과목에서도 말했지만 COMP2200은 더욱 더 사전 지식이 필요하다. POCU 강의의 큰 장점이자 단점이라고 생각하는 부분 중에 하나인데, 최대한 가르쳐야 하는 주제에 대해서만 가르치고자 한다. '사전지식 얘기하다 왜 갑자기 헛소리지'라고 생각할 수 있다. 내가 하고자 하는 말은 기본적인 문법 수업은 최소한만 가르친다는 것이다. 이미 기본적인 프로그래밍은 그 전에 배웠다는 가정을 두고 바로 수업을 진행한다. 따라서 기본적인 프로그래밍에 필요한 C언어의 문법은 강의 시작 초반에 모두 끝난다. 반복문, 조건문, 배열, 함수, 변수, 재귀함수 등등의 사용법은 이미 알고 있어야 한다.

 

그렇다면 어떤 실습이 나올까? 기본적인 프로그래밍을 연습할 수 있는 문제들이 주어질까? 아니다. 그건 당연하고, C언어만의 특징을 복습할 수 있는 실습들이 주어진다. if문의 사용법, for문의 사용법을 고민하는 단계를 넘어서 포인터의 다양한 사용, 메모리 범위를 넘어서지는 않았는지 고민해야하는 그런 문제들이 넘쳐난다는 것이다. 프로그래밍이 낯설면 포인터를 고민하다가도 간단한 if문, for문 등의 사용법 등을 고민하면서 남들의 2~3배의 노력이 필요하게 된다. 따라서 사전지식이 없다면 기본적인 프로그래밍에 빠르게 익숙해질 시간이든, 실습과 과제를 위해 남들의 2~3배를 고민할 시간을 가질 필요가 있다.

 

- COMP2200 극복법

알다시피 COMP2200 굉장히 어렵다. 그래서 일주일 중에 2~3일은 실습 생각만 하면서 보낸게 대부분이었다. 실습마다 난이도의 차이가 꽤 있지만, 퇴근 후에 프로그래밍 계속하고, 컴퓨터 앞에 앉을 상황이 안되면 안풀리는 부분만 따로 고민하고 종이에 손코딩이라도 해서 나중에 해보고 그런 식으로 진행했다.

 

또한 slack이 엄청난 도움이 됐다. 내가 막히는 부분은 나 말고 다른 수강생도 막히는 경우가 많다. 도움을 엄청 많이 받았다. slack에 올려진 힌트 하나하나를 엄청 곱씹어보며 생각하다 풀어낸 실습이 2개 중 하나꼴, 아니 그 이상일지도 모른다. 따라서 이 slack을 이용하기 위해 했던 나의 루틴(?)은 월요일 9시에 실습과 과제가 나오면 우선 바로 확인한다. 문제를 제대로 이해한 후에 며칠을 고민하고 풀어본다. 그러다 풀리면 내 실력에 감탄하고 기뻐하면 되고, 아니라면 그 때부터 slack의 힘(사실 다른 수강생분들의 힘)을 빌려본다. 모르는 부분, 막히는 부분은 질문해보고 다른 분들이 올린 글들을 꼼꼼하게 읽어본다. 그러다보면 어느 순간 막히는 부분이 딱하고 풀릴 때가 나타난다.

 

빌드봇은 미친듯이 굴려야 한다. 이렇게도 해보고 저렇게도 해보고 왜 그렇게 되는가를 고민하는 건 당연히 필요하지만 일단 몸으로 뛰는 것도 나한테는 필요했다. (머리가 나쁘면 몸이라도 굴려야 하니깐.) 가끔은 이게 왜 풀리는지는 몰라도 빌드봇은 합격을 주는 때가 있다. 물론, 거기서 끝내면 그건 운만 좋은 것이고 왜 그렇게 됐는지 역으로 따져봐야하는건 당연하다. 어쨌든, 실습과 과제 100점은 소중하니깐 아무리 고민해도 모르겠을때는 이것저것 뭐든 시도해보는 자세도 필요하다고 생각한다.

 

 

실습과 과제라는 고난과 역경을 헤쳐 나가며 100점의 쾌락에 젖어들어갈 때쯤, 중간고사와 기말고사 기간이 찾아온다. 실습과 과제를 극복하고 자신감에 충만할수도 있고, 실습과 과제의 압박에 눌려 두려움에 떨게 될수도 있다. 난 중간 때는 자신감에 충만했고, 기말에는 압박감에 시달렸다. 그리하여 중간은 말아먹고 기말은 생각보다 성적이 좋았다. 할튼, 중간, 기말도 어렵다. 실습과 과제를 해결할 때와는 전혀 다른 어려움이다. 구글링을 할 수 없다는 압박감도 있고, 모두 주관식이라는 압박감도 있다. 시험칠 때 종이에 적어가면서 시험을 칠 수 없다는 것도 힘들게 했던 것 중에 하나였다.

 

중간, 기말만의 독특한 난관이 기다리고 있기 때문에 철저한 준비가 필요하다. 개념을 묻는 문제, 코드를 구현해야 하는 문제, 코드를 읽을줄 알아야하는 문제 등이 나왔던 걸로 기억이 난다. 따라서 첫째, 중요한 개념은 달달 외워야 한다. 둘째, 중간, 기말에서는 IDE의 도움을 받을 수 없다는 것을 명심해야 한다. 자동 완성에 익숙해져 있다면 메모장 같은 하얀 시험 화면에 멘붕을 겪게될 수도 있다. 기본적으로 COMP2200에서는 메모장에서 코딩하는 것을 권장하는데 이 점을 따르는 것만으로도 자연스럽게 중간, 기말을 대비하게 된다. 세 번째, slack에서 공유되는 다른 수강생들의 코드들을 읽는 연습을 하는 것도 도움이 된다. 내가 작성한 코드만 읽는게 아니고 다른 수강생들의 코드를 읽으면 자연스럽게 시험칠 때 코드를 읽는 능력도 향상되는 것 같다. 이미 어떤 내용인지 알고 있어 접근이 쉽지만 변수, 로직 등에서 막히는 부분도 굉장히 많기 때문에 읽다보면 신선한 충격을 받을 수 있다. 네 번째, 목차별로 중요한 내용이나 함수 같은 것들을 체크해가며 개념을 확인하면 좋다. 내가 모르는 내용을 파악하기 용이하고, 시험 전 복습할 때 빠르게 훑을 때도 도움이 된다.

 

 

- COMP2200 강의 내용, 강의에서 느낀 점

강의의 순서가 C언어의 버젼을 따른다. C89/ANSI-C에서의 내용이 70% 이상 되는 듯 하고 그 이후로 C99, C11 등에서 나온 개념을 배운다. 강의를 듣기 전까지 나는 최신 버젼의 좋은 기능들을 가져다 쓰는 것이 무조건 좋은게 아닌가 하는 생각을 했다. 하지만 강의를 들으면서 그런 생각을 고칠 수 있었다. 비슷한 개념으로 포팅에 대한 얘기도 종종 등장한다. C언어로 개발을 해본 적도 드물고, 임베디드 쪽은 더더욱 해본적이 없기 때문에 포팅과 관련한 부분을 신경쓸 일이 없었지만, C언어를 배우면서 꼭 염두해둬야할 부분이라는 것을 알게 됐다. 포팅에 대한 부분을 고려해주는 강의는 내 기억상 처음이었다.

 

설명 중간중간에 stack메모리, 어셈블리어 등을 보여주면서 설명을 진행한다. 수업을 들으면서 내부에서 어떤 식으로 로직이 진행되는지 알 수 있게 된다. 또한 모르는 코드를 볼 때도 내부에 대한 고민을 나도 모르게 하게 된다.

 

어렴풋하게 알고 있던 개념, 전혀 몰랐던 개념 등을 바로 잡을 수 있었다. goto문의 사용은 무조건 좋지 않다고 생각했지만, 강의를 통해 어떤 부분 때문에 좋지 못한지, 어떤 때 사용해야 하는지 등을 제대로 잡을 수 있었다. goto문 뿐만 아니라 다른 문제가 될 수 있는 소지를 가지고 있는 것들을 설명할 때는 항상 베스트 프랙티스를 제공하여 깔끔하게 정리해주는 부분이 굉장히 이해가 쉽다. goto문 외에도, inline 사용법, 동적/정적 Library에 대한 개념, register 키워드, restrict 키워드, 가변인자 등 구글에서 찾아봐도 쉽게 이해되지 않던 많은 개념들을 쉽게 이해할 수 있었다.

 

 

이 강의만의 거의 유일한 강의 내용인 빌드 과정에 대해서 이해할 수 있다. 소스 코드에서 실행 파일이 만들어지기 까지의 과정을 각 단계별로 상세히 설명해준다. 이를 통해 빌드 과정은 물론이고, 이를 통해 뒤에서 나오는 개념들을 이해하는데에도 많은 도움이 된다. 많은 수의 헤더, C파일들을 include 할 때 많은 실수가 있을 수 있는데 빌드 과정에 대해 이해하며 조금은 그런 부분에서도 개선을 할 수 있지 않았나 생각이 들었다. 이런 부분은 최적화에 대해 고민할 때도 필요한 부분이라고 한다.

 

포인터에 대해서 체득하게 된다. 강의만으로도 포인터에 대한 이해도가 달라진다. 하지만 여기서의 체득은 풀코스를 기준으로 했다. 난 눈으로만 봤을 때는 이미 모두 이해했다고 생각했지만, 역시나 실제로 코드를 만들어볼 때는 전혀 다른 얘기였다. 이중 포인터만 써도 머리가 터질 것 같았고, '널문자'와 '널포인터'도 구별하지 못해서 애를 먹기도 했다. 하지만 실습과 과제에서 다양한 방법으로 포인터를 사용하도록 만들기 때문에 실습과 과제만 완벽히 해결해도 일정 수준 이상의 포인터에 대한 내용을 몸으로 익히기 된다.

 

기본적인 자료구조를 공부할 수 있는 기회가 된다. 스택, 큐, 연결리스트, 해쉬 테이블 등이 어떻게 구현되어 있는지 배우고 이를 통해 실제 구현해볼 수 있다. 실제로 구현하는 과정을 통해 해당 자료구조에 대해서 자연스럽게 이해하게 된다.

 

- COMP2200의 장점, 추천 이유

사실 위에서 이미 많은 장점들을 언급했다. 하지만 너무 흩뿌려놓아기 때문에 정리하는 느낌으로 적어보려고 한다. 

 

면접 준비에 참 좋은 강의라고 생각한다. 실제 포프님이 면접관으로써 다뤘던 부분이나, 업계에서 현재 많이 보는 것들을 콕콕 집어서 말해주시기 때문에 그런 점에서 유용하다고 생각한다.

 

C는 절차적 언어이며, 언매니지드 언어이다. 컴퓨터가 작동하는 방식과 가장 유사하게 작동하는 언어라고 생각한다. 따라서 C에 대해서 잘 이해하는 것만으로도 컴퓨터에 대한 이해도가 올라갈 수 있는 길이라고 생각한다. 

 

강의 내용 자체가 여러 기능이 내부에서 어떻게 만들어지고, 함수는 어떤 로직으로 구성되어 있는지 등을 설명한다. 그래서 점점 처음 보는 함수나 기능을 볼 때 자연스럽게 내부에서 어떤 식으로 돌고 있는지를 고민하게 된다. 이런 생각의 변환은 빠르게 배우면 배울수록 더욱 강점이 된다고 생각한다. 마치 게임에서 일정 시간마다 스탯을 영구적으로 올려주는 패시브 스킬을 배우는 것과도 같다. 나는 프로그래밍을 C로 배우고, 그 전 회사에서도 써오고 있었지만 내부의 기능 구현에 대해 크게 고민한 적이 없었다. 이래서 제대로된 강의를 통해 어떤 방식으로 접근해야 하는지를 배우는게 중요하다고 생각한다. 그리고 COMP2200은 C에 대한 완벽한 접근이 가능한 강의라고 생각한다.

 

성적 인증샷!

 

- 그 외 POCU 및 기타 후기

2020.12.23 - [자기계발/강의 리뷰] - 포큐 아카데미 COMP1000(소프트웨어 공학용 수학) 수강 후기

 

포큐 아카데미 COMP1000(소프트웨어 공학용 수학) 수강 후기

포큐 아카데미의 COMP1000(소프트웨어 공학용 수학) 풀코스 수강을 마치고 수강 후기를 작성합니다. 강의 수강을 결정하는데 많은 도움이 됐으면 좋겠습니다. - 목차 수강을 결정하게 된 이유 왜 PO

naenjo0315.tistory.com

2021.01.14 - [자기계발/강의 리뷰] - 노마드코더(Nomad Coders) 코코아클론 챌린지 후기

 

노마드코더(Nomad Coders) 코코아클론 챌린지 후기

오래간만에 강의 후기로 찾아뵙네요. 정확히 말하자면, 강의 후기 + 챌린지 후기입니다. 챌린지란 노마드 코더(Noamd coders)에서 과목에 따라 2주 ~ 6주 동안(과목마다 달라요) 일요일만 빼고 매일

naenjo0315.tistory.com

2021.01.08 - [일상 리뷰] - 42서울 온라인 테스트 및 체크인 미팅 신청 후기

 

42서울 온라인 테스트 및 체크인 미팅 신청 후기

오늘 있었던 42 seoul 체크인 미팅 신청을 마치고 지금까지 온라인 테스트 및 체크인 미팅 신청 후기를 짧게 적어보려고 합니다. 우선 42서울에 대해서 제가 이해하고 있는 대로 설명을 드리자면,

naenjo0315.tistory.com

 

- POCU 관련 링크

POCU 블로그

 

POCU 블로그 | 진정한 프로그래머의 기본기

부정행위 안녕하세요, POCU 아카데미 수강생 여러분. 윤아입니다! 오늘은 부정행위에 대해 알아보겠습니다. 어떤 건 부정행위에 해당하고, 어떤 건 부정행위에 해당하지 않는지 정확히 알아야 좀

blog.pocu.academy

POCU 공식 홈페이지

 

진정한 프로그래머의 기본기 - POCU

POCU를 듣고 산업 기능요원으로 취업에 성공했습니다. 그동안 흔하디 흔한 언어에 대한 기초적인 문법만 가르치는 게 아닌 진짜 개발자들을 위한 강의를 기다리고 있었습니다. 내가 작성한 코드

pocu.academy

포프TV(youtube)

 

포프TV

탑 프로그래머/엔지니어가 즐겨보는 유튜브 채널 포프TV 전 피파, 헤일로, 마인크래프트, 스페이스 마린 등 게임 개발자(선임 렌더링 엔지니어), 실리콘 밸리 CTO, 컴공 대학 교수이자 현 포큐 아

www.youtube.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기