본문 바로가기
Etc

포큐 아카데미 - COMP 3200 수강 후기 | C++

by woohyeon 2020. 4. 25.
반응형

과장되거나 허위적인 내용 없이 작성했다는 것을 먼저 밝힙니다.

[포큐 아카데미란?]
포큐 아카데미는 렌더링 엔지니어이자 전 BCIT 대학 교수인 "김포프" 가 설립한 비인가 교육 기관이다. 주로 CS 기초를 위주로 가리키며 모든 과목을 포프님이 담당하신다. 해당 교육 기관의 목표는 모두를 위한 강의가 아닌, 정말 프로그래머를 자신의 업으로 삼고 10년 뒤에도 당당히 살아남을 수 있고 대체될 수 없는 프로그래머를 양성하는 것이 목표이다. 다음은 포큐 아카데미 사이트에 소개된 글을 인용한 내용이다.

유능한 소프트웨어 엔지니어 및 설계자이자, 유수 공사립 대학의 교수였던 김포프가 창립한 POCU는 탑 프로그래머가 평생 커리어를 유지하려면 반드시 알아야 하는 컴퓨터 공학 수업을 제공하는 온라인 우선 교육 서비스입니다.

POCU는 인가된 교육기관이 아니며, 저희는 이것을 매우 자랑스럽게 생각합니다! (추후에 블로그 글을 통해 그 이유들을 공유할 예정입니다.) 간단히 말하자면, 인가된 다른 교육 과정보다 저희의 12가지 기본적인 핵심 프로그래밍 과정으로 구성된 교육이 최상위 프로그래머가 되는 것에 훨씬 더 큰 영향을 미칠 겁니다. (대학을 졸업하는 수많은 컴퓨터 관련학과 졸업생들에게 무슨 일이 일어나고 있는지 찾아보시면, 저희가 의미하는 바를 이해하실 것이라 생각합니다.)

또한 이것은 POCU가 정부 및 기타 기관의 지원을 받지 않으며, 자체 자금으로 운영된다는 것을 의미합니다. 저희가 약속한 것을 이루지 못한다면 저희는 학생들로부터 외면을 받을 것이며, 따라서 학생들을 성공시키는 것이 저희의 성공을 보장하는 최선의 길입니다.

학점 및 학력 인정이 필요하다면 다른 교육기관을 찾아보세요.

 

[대표강사 김포프]
포프님은 포큐 아카데미 설립 이전부터 유튜브를 통해 프로그래밍 관련 지식을 공유하고 계셨다. 채널 이름은 포프TV이며, 나는 유튜브를 통해 포프님을 익히 알고 있었다. 때문에 누구의 추천 및 홍보가 아닌 듣고 싶어서 듣게된 케이스다. 주로 기본기, 저수준의 중요성을 강조하시고, 게임 프로그래머이기 때문에 게임 기술과 관련된 지식을 많이 나누기도 한다. 그리고 나의 경우엔 포프TV를 통해 우물 안 개구리에서 벗어나 제대로 된 공부를 할 수 있게 되었다. 프로그래밍이란 분야가 자칫하면 우물 안 개구리가 되어, 갈수록 그 격차가 커질 수 있는 분야이다. 포프TV를 더 일찍 알지 못한 게 후회될 정도.
포프TV와 포큐 아카데미는 공통적으로 다음과 같은 문제들을 던진다.

  • 컴퓨터 위에서 동작하는 프로그램을, 컴퓨터가 어떻게 도는지에 대한 이해 없이 작성하게 되면 어떤 일이 발생하는지
  • 저수준의 중요성을 모르고 무작정 추상적인 레벨에서만 프로그래밍을 하면 어떻게 되는지
  •  실제로 현업에서 자주 사용되는 개념과 그렇지 않은 개념들을 구분할 수 있는지
  • 10년 뒤에도 자신의 위치에서 대우받으며, 대체할 수 없는 소프트웨어 엔지니어로 나아가려면 무엇을 익혀야 하는지

첫 두 문제에 대한 답은 "프로그래머로서 살아남지 못한다" 이다. 남들 하는 만큼 적당히 공부하고, 자기 개발에 시간을 투자하기 싫은데 워라밸은 지키고 싶다면, 결국엔 전문성이 떨어지며 누구로부터도 쉽게 대체될 수 있기 때문이다.


[COMP 3200]
포큐 아카데미엔 전체 CS 과목에 대한 커리큘럼(로드맵)이 있으며, 아직 모든 강좌가 존재하는 것은 아니다.

로드맵

내가 수강한 강좌는 COMP3200 C++ unmanged programming이며 꽤 어려운 편에 속하는 과목이다. 심지어 현업에 계시는 분들도 기본기가 부족하다고 판단하여 수강하시는 분들도 있다.

포큐 아카데미는 기본적으로 동영상 강의풀코스(동영상 강의 + 실습,과제,시험 등)로 나뉜다. 동영상 강의는 모두 영구 소장 가능하며, 추후에 동영상 강의에 대한 내용 추가와 같은 업데이트 역시 받을 수 있다. 풀코스는 학기제로 진행되기 때문에 시간이 없다면 동영상만 들어도 되지만, 확실히 풀코스만큼의 결과를 기대하긴 어렵다. (참고로 나는 풀코스를 수강했다) 

동영상 강의는 teachable이라는 사이트에서 듣고, 실습 및 과제와 시험은 포큐 아카데미 사이트에서 진행하는 방식이다. 

 

[동영상 강의]
동영상 강의만으로 풀코스의 효과를 기대하긴 어렵지만, 개인적으로 동영상 강의에선 다음과 같은 내용을 얻을 수 있다고 생각한다.

  • 어떠한 중요한 개념 및 기능이 등장한 이유와 내부적으로 어떻게 구현되었는지, 동작 원리 등(e.g: std::string) 
  • 실제로 현업에서 자주 사용되는 기능과 그렇지 않은 기능
  • 어떤 기능에 대한 제대로 된 사용법 및 모범사례(best practice)와 잘못된 사용법(bad practice)
  • 한 번쯤 고민해보면 도움이 될만한 주제들 (e.g: malloc과 new의 차이)
  • 컴퓨터처럼 생각하는 사고력

사실 위 내용만으로도 많은 도움이 되는 것은 사실이다. 우리가 C++의 string 클래스를 사용할 때 또는 vector 컨테이너를 사용할 때 그 내부가 어떻게 구현되어 있는지 모르고 사용한다면, 내가 효율적으로 사용하고 있는지 비효율적으로 사용하고 있는지 조차 모르며, 이 내부와 관련된 내용을 응용하여 다른 곳에 적용할 수도 없다. 내부 구조를 안다면 "아 이건 내부적으로 이렇게 구현되었으니 이런 식으로 사용하면 어떤 과정을 거칠 수밖에 없으니 느려지겠구나" 와 같은 생각을 하게 된다. 결국 다른 곳에도 의문을 가지게 되며 점점 자가발전할 수 있는 기회를 얻게 된다.

이러한 내용들을 기본으로 알아두면 기술 면접에 대한 부담이 줄어든다. 실제로 이 과목을 듣고 C++에 대한 기술면접 단골 질문들을 봤을 때 기본적인 대답은 물론이고, 더 깊게 들어가서 답변할 수 있다는 자신감이 생겼다.

참고로 여느 책이나 강의처럼 C++의 문법을 단순히 차례대로 소개하고, 하나하나 사용법을 알려주는 강의를 기대한다면 맞지 않는 강의이다. 이러한 강의는 모두를 위한 강의이지 소수를 위한 강의가 아니기 때문에 포큐 아카데미의 취지와 맞지 않다. 어떤 내용을 배우는지는 여기를 확인하자.

참고로 동영상 강의는 배속 기능을 지원하며, 화질 또한 1080p 까지 지원한다. 원래는 Udemy라는 사이트를 이용하였는데, 한국에서 특정 통신사 환경에서 버퍼링이 심해 teachable까지 지원하기로 했다고 한다. teachable은 버퍼링이 거의 없다. (내 인터넷이 매우 좋지 않음에도)

[풀코스]
풀코스는 동영상 강의에 양질의 실습과 과제, 시험, 토론이 더해진 학기제 수업이다. 실습은 중간 및 기말고사 주를 제외하고 매주 나오며, 과제는 3주 간격으로 나온다. 토론은 슬랙(Slack) 이라는 유명한 협업 도구를 통해 강사, 조교, 수강생 분들과 실시간으로 소통 및 토론을 할 수 있다. 가끔 포프님이 토론 거리를 던져주기도 하시며, 수강생 분들 중 활발한 분들은 서로 질문과 답변을 하기도 한다. 또한 매주 Office hour라고 포프님한테 익명으로 질문을 제출할 수 있다. 유튜브로 답변을 해주실 수도 있고, 간단한 답변이면 슬랙 채팅방에서 답변을 올려주신다.

 

[실습과 과제]
실습은 보통 과제에 비해 난이도가 낮고, 과제는 실습에 비해 난이도가 높다. 그러나
어쩔 땐 과제보다 어렵다고 느껴지는 실습도 있다. 참고로 실습과 과제에 투자해야 하는 시간이 꽤 많다. 나는 실습과 과제 모두 100점을 받았지만(자랑아님), 길게 투자한 실습 및 과제는 일주일 또는 2주 내내 붙잡았던 적도 있다. 따라서 쉽게 생각하면 절대 안 된다. 

실습과 과제는 fresh한 방법으로 채점된다. 우리가 실습 및 과제를 작성하여 개인의 git 저장소(e.g: github)에 업로드를 하면 슬랙의 빌드봇(Build bot)을 통해 채점을 받을 수 있다. 채점은 24시간 가능하며, 빌드봇이 실시간으로 채점을 해주고 2~3분 뒤에 채점 결과를 알려준다. 실습 및 과제 마감 전까진 무제한으로 채점받을 수 있으며, 실습은 5분, 과제는 30분이라는 채점 가능 쿨타임이 있다. 때문에 여유 있게 시작한다면 충분히 100점을 받을 수 있다.



(참고로 마감 후엔 코드를 베끼거나 하는 부정행위도 체크하여 심하면 퇴출당할 수도 있다고 한다.. 하지만 바보가 아닌 이상 자기 돈 주고 듣는데 부정행위를 하는 사람은 없을 거라 생각한다.)
 

여기서 풀코스의 진가가 드러난다. 채점은 우리가 정말 신경 쓰지 못한 부분 구석구석까지 검사를 해준다.

     1. 클래스를 구현할 경우 각 함수가 제대로 동작하는지, 어떠한 상황에서도 바람직한 방향으로 동작하는지
     2. 메모리 누수가 나지 않는지
     3. 실행 시간이 너무 오래 걸리지 않는지
     4. 사용한 자료구조가 효율적인지, 혹은 금지된 라이브러리를 사용하지 않았는지
     5. 작성한 코딩 스타일이 가독성에 좋은지
     6. Warning(경고)이 발생하지 않는지 

현재 기억나는 정도는 여기까지이다. 혼자서 개발할 경우 이런 것을 모두 세세하게 신경 쓰는 것은 쉽지 않다. 이 채점 시스템을 통해 내가 얻은 것은 다음과 같다.

1. 여러 테스트 케이스를 작성하는 능력
: 클래스의 완성도와 신뢰도가 높아진다. 이는 결국 내 개발 능력이 높아지는 것이다.

2. 디버깅을 하는 능력
: "개발의 반이 디버깅이다" 라는 말이 있는데, 디버깅은 개발에서 빠질 수 없는 능력이다. 개인적으로 더 공부하여 어셈블리단 까지 보게 되는 실습 및 과제도 있었다.

3. 미리 구현된 라이브러리를 사용하지 않고 스스로 밑단부터 설계하고 구현하는 능력
: 이게 어떤 식으로 구현된지 모르고 사용한다면 심하면 얼마나 끔찍했을지 느낄 수 있음. 끔찍까진 오바인 것 같다.
게다가 자연스럽게 기술 면접에 대한 지식들을 터득할 수 있다. 그리고 자료구조에 대한 복잡도? 전혀 외울 필요가 없다. 동작 원리를 알기 때문에 어떻게 도는지 생각해보면 쉽게 나온다. 그리고 다른 언어의 마법 같던 기능들이 실제론 이렇게 구현되는구나! 느낄 수 있다.

4. 메모리 관리 능력
: C/C++과 같은 언매니지드 언어가 어려운 이유 중 하나가 메모리 관리이다. 프로그래머가 메모리를 효율적으로 다루고 관리하는 능력이 얼마나 중요한지는 두 말하면 잔소리, 세 말하면 뺨 맞는다.

5. 코딩 스타일을 지킴으로써 얻는 가독성과 일관성
: 예전엔 내가 따로 지키는 코딩 스타일(코딩 표준)이 없었다. 그래서 클래스를 작성할 때에도 변수나 함수의 이름에 대한 규칙성이 없었기 때문에 가독성과 일관성이 떨어졌다. 하지만 지금은 그렇지 않다.
 

참고로 실습과 과제의 예를 조금만 보여주자면 다음과 같다. 

실습8

 

과제3


저작권 때문에 모든 내용을 보여줄 순 없지만 위처럼 과제의 소개와 함께 추가로 상세한 명세가 나온다. 그러면 우리는 머리를 쥐어짜서 코드를 작성하면 된다. 가끔 스토리가 있는 재미있는 실습이나 과제도 나온다... 확실한 건 학부생 때 했던 과제에 비해 퀄리티가 훨씬 높다고 생각한다. 얻어가는 것도 많고.

[시험]
중간고사와 기말고사는 해당 주 7일 중 시간에 상관없이 자기가 원할 때 볼 수 있다. 시험은 데스크탑 또는 노트북으로 진행하며 데스크탑이라면 캠이 필요하고 노트북은 내장된 캠으로 가능하다. 정말 엄격한 시험 환경을 통해 부정행위를 방지한다. 일반 오프라인 시험보다 더 엄격함
시험시간은 1시간 40분 정도이며 꽤 많은 문제가 나온다. 시험은 포프님이 시험 전 주에 공부할 목록을 주시며, 연습 문제 또한 제공해 주신다. 시험 유형은 코드에서 틀린 곳 찾아 고치고 결과 쓰기, 에러가 난다면 컴파일 에러인지 런타임 에러인지 구분하기, 간단한 코드 작성, 개념 서술하기 정도이다.

시험에서 개인적으로 좋았던 점은 대학교에서 처럼 정말 중요도가 낮은 부분까지 모든 내용을 다 외우거나 할 필요가 없다는 점이다. 실제로 잘 사용되지 않는다고 한 부분은 시험에 출제하지 않으신다. 시험 내용 또한 기술 면접에 도움되는 내용들이 많다. 

참고로 실습, 과제, 시험은 아래와 같이 수강생들의 점수 분포도 나온다.

점수 분포

 

풀코스의 통과(수료)기준은 아래와 같다. 실습과 과제에서 모두 만점을 받는다는 가정 하에 시험은 각각 70점 이상만 받으면 된다.

 

[아쉬운 점]
실습과 과제가 쉽진 않았지만 그래도 무언가 좀 모자라다는 느낌이 들었다. 참고로 나는 갓 졸업한 취준생이며 아무 일 도하지 않고 이 과목만 공부했기 때문에 이렇게 느꼈을 수 있다. 그래서 수료 점수에 영향을 미치지 않는 선에서 추가로 도전해볼 수 있는 도전 실습 및 과제 같은 것이 있으면 더 좋을 것 같다. 

[티끌 같은 팁]
- 포프님과 조교님들을 최대한 괴롭히자
: 모두 친절하시다. 궁금한 것이 있다면 최대한 많이 질문하자. 그러면 얻어갈 수 있는 것이 많다. 물론 질문도 성의 있게 해야 한다. 그냥 구글링 해서 나오는 답변 같은 것은 잘해주시지 않는다. yes or no로 대답할 수 있는 질문이 좋다. 질문하는 것도 실력이다. 

- 자만하지 말고 실습, 과제는 미리미리 시작하자.

- 질문하기 전에 슬랙에 다른 수강생들이 토론하거나 질문한 내용을 미리 확인하자. 도움되는 것들이 많다. 

[마무리]
정말 솔직하게 보람찬 3.5개월이였다. 이 강의를 들으면 무조건 잘해진다라고 할 순 없지만, 세상에 어떤 강의가 듣기만 한다고 실력이 크게 향상될 수 있나 싶다. 하지만 이건 확실히 말할 수 있다. 일반적인 보통 강의가 열심히 했을 때 10만큼 얻어 간다면 이 강의는 열심히 하면 20만큼 얻어갈 수 있다.  

'Etc' 카테고리의 다른 글

체스 - 기본 행마법  (0) 2021.07.02
Real-time rendering 원서 도전  (0) 2021.04.30
위쳐 짤  (0) 2020.04.17
프로그래밍 관련 영단어 모음  (0) 2020.03.18
[MarkDown] .md 파일 제목 타입 표시하기  (0) 2020.02.28



댓글