POCU Academy COMP2500 개체지향 프로그래밍 및 설계 수강 후기
최근 3개월간 POCU Academy에서 개체지향 프로그래밍 및 설계 (Java)를 수강했습니다. POCU Academy나 COMP2500에 대한 사전 지식이 전혀 없다면 위 링크를 둘러보시면 도움이 되실 겁니다. 대학교 정규 학기처럼 3달간, 완전한 온라인 환경에서, 강의 그리고 과제와 실습을 통해 개체지향에 대해 배우는 과정입니다. 대학교와 같이 시험도 있고요. 기말고사가 끝나고 학기를 정리하는 차원에서 수강 후기를 작성했습니다. POCU Academy에서 수업을 듣고 싶지만 고민 중이신 분 들을 이라면 이 글이 도움이 되었으면 합니다. 전반부는 POCU Academy에 대하여, 후반부는 COMP2500에 대하여 느낀 점을 적었습니다.
비전공자가 POCU Academy를 만나기까지
독자 분의 수강 결정에 도움이 되시도록 저의 배경에 대해 설명드리겠습니다. 저는 컴퓨터 공학 전공자가 아닌 비전공자입니다. 기계공학을 전공했지만 졸업 이후부터 개발자가 되고 싶어서 개발 공부를 시작했습니다. 머리가 좋은 건 아니지만 성실하게 하게 해내는 끈기는 있다보니, 비교적 짧은 시간 안에 괜찮은 성과를 거뒀습니다. 졸업 직후 네이버 부스트캠프, 삼성SDS 알고리즘캠프, IT 창업동아리를 거쳐 6개월동안 프론트엔드 개발을 하고 꽤나 유망한 스타트업에서 2개월간 인턴으로 일했습니다. 이후 정규직 제의를 받았지만 이를 뒤로하고 SW마에스트로 라는 IT 인재 육성 지원 사업에 선발되어 6개월간 또 프론트엔드 개발을 하고 거기서 우수한 성과를 냈습니다. 활동을 기반으로 취업을 해서 현재는 SK하이닉스에서 IT 직무로 일하고 있습니다. 강의를 듣기 전에 이미 취업이 된 상태였습니다.
보시다시피 프론트엔드 개발만 하다보니 UI로직을 작성하는 것이나 JavaScript 생태계에는 익숙하지만 백엔드나 Java에 관해서는 거의 문외한이었습니다. 정말 아예 모르는 것은 아니고, 대학에서 Java 강의를 들어서 문법 정도는 알고 있고, Node로 간단한 서버 프로그램을 작성해본 적은 있지만 백엔드 개발자 1인분을 할 정도는 아닌... 그 사이 어딘가에 있었습니다. 계속 Java 공부를 미뤄왔는데, 회사에서 맡게 된 소스코드가 전부 Java로 작성되어 있어 더 이상 피할 수 없게 되었습니다.
Java를 공부하긴 해야 하는데, 단순히 문법 공부를 원한 건 아니었습니다. 문법은 이미 학교 수업으로 아는 상태였습니다. 단, 붕어빵 붕어빵 틀(...)로 설명되는 클래스까지는 어찌어찌 이해하지만 이후 추상클래스나 인터페이스가 나오면 '아 이런 게 있나 보다' 하고 넘어가기 일수였습니다. 문법적인 내용보단 시스템 설계라고 해야할까요, 백엔드 구조 짜는 법을 배우고 싶었습니다. 그런데 그런 시스템 설계의 초입이 OOP, 개체 지향 프로그래밍이라고 생각해서 해당과목을 수강하게 되었습니다.
POCU Academy란
POCU는 Proof of Concept University라는 뜻으로, 실제 대학은 아니지만 대학의 역할을 할 수 있는 새로운 패러다임을 갖는 교육기관입니다. Top 1%의 Great Programmer 양성을 목적으로 하는 비인가 교육기관입니다. 대표 강사인 Pope Kim 님(Linkedin, 나무위키)께 Top Programmer가 되기 위한 12가지 과정(현재 8개 정도 개설된 것 같습니다)을 배울 수 있습니다. 모든 교육 과정의 공통점은 기본적으로 컴퓨터가 어떻게 작동하는지 이해하고, 실수를 줄이기 위한 코드를 작성하기 위해 프로그래머들이 어떤 고민을 했고 어떤 개념들이 탄생했는지를 가르칩니다.
Pope님이 운영하시는 유튜브인 포프TV에는 포프님의 개발에 관한 주관적인 생각에 대한 내용들이 담겨 있습니다. 저도 처음에 유튜브를 통해 포프님을 알게 됐고, 그분의 철학에 공감이 돼서 POCU 아카데미 수업도 듣게 됐습니다. 여유가 되시면 영상을 몇 가지 보시면 도움이 되실 것 같아요. (추천영상1, 추천영상2)
기존 IT 부트캠프의 한계
앞서 잠깐 얘기했지만 저는 전공자는 아니지만 한국에서 비전공자가 돈 안 들이고 할 수 있는(= 선발 시험을 통해 뽑는, 전공자들과 겨뤄서 이겨야 하는) 개발자 교육 중 최상위권에 해당하는 교육은 대부분 받아봤고, 잘 적응했고, 그런 교육들의 장단점을 알고 있는 상태였습니다. 개발 교육 기관, 실무 환경, IT동아리 등등에서 제가 느꼈던 아쉬움은 다음과 같았습니다.
1. 학습 너비와 깊이에 대한 모호함
저는 상당수의 많은 교육기관이 학습자에게 학습 내용의 구성을 위임하고 있다고 생각합니다. 실제로 제가 소속했던 어떤 기관에서는 자기주도적 학습을 내세우며 개발을 배우는데 알아야 하는 '토픽'에 대해서는 제시를 해주지만 그 '내용'에 대해서는 깊이 있게 설명해주지 않았습니다.
물론 자기주도적 학습이 중요한 역량인 것은 사실입니다. 또 블로그에 학습한 내용을 기록하는 것도 좋은 습관인 것도 맞습니다. 하지만 경제적인 관점에서 효율을 추구해야할 필요도 분명히 있습니다. 공부할 시간이 무한정 있는 것은 아니니까요. 공부할 주제가 올바르다고 해도 그 내용을 학습자가 구글링을 통해 알아가는 방식은 단점이 많습니다. 인터넷에 있는 정보도 대부분 전문가가 기록해 놓은 것이 아닌, 같은 입장의 즉 공부하는 사람들이 기록해 놓은 것일 확률이 높습니다. '자기주도적' 그리고 '성장'이란 말로 포장이 되어 있지만, 누군가 블로깅한 것을 다시 블로깅하는데 시간을 낭비하고 있지 않은지는 돌아볼 필요가 있습니다. 그 정보들에는 불필요한, 부정확한 정보도 섞여있기 때문에 찾으면 찾을수록 얼마나 더 깊이 알아야 하는지, 얼마나 더 넓게 알아야 하는지, 이정도 찾아봤으면 내가 충분히 아는 것인지에 대한 점이 정말 애매합니다.
2. 높은 수준의 코드리뷰를 받을 수 없음
IT교육 기관에서도, 실무 환경에서도 저는 만족스러운 코드 리뷰를 받아보지 못했습니다. 같이 배우는 사람들끼리 코드 리뷰를 해줄 때는 '~하면 좋을 것 같아요.' 하는 식으로 리뷰를 하긴 하지만 주는 입장에서도 받는 입장에서도 그것이 합당한 리뷰인지 검증할 방법이 없습니다. 또 실무 환경에서도 코드리뷰를 하긴 했지만 코드 리뷰를 받으면서 들었던 의문은 '지적받지 않은 코드에는 결함이 없는가?'였습니다.
제가 경험했던 코드 리뷰에는 두 가지 문제가 있었는데, 1) 베스트 프랙티스의 부재와 2) 사람이 리뷰를 하기 때문에 생기는 한계가 그것이었습니다.
베스트 프랙티스의 부재는 1번에서 이어지는 문제이기도 한데, 제가 학습했던 환경에서는 더 좋은 코드에 대한 기준이 없기 때문에 리뷰도 모호해지는 경향이 있었습니다. 또 한정된 시간을 가지고 있는 사람이 리뷰를 하는 것이다보니 리뷰를 할 때마다 관점이 다르기도 하고, 결함이 있어도 잡아내지 못하는(결국 버그가 터지고서야 고치게 되는) 문제도 있었습니다.
3. 구현, 구현, 구현! 코드 품질보다 구현이 우선시되는 개발 환경
실무 환경에서도, 또는 프로젝트가 바쁘게 돌아가는 교육환경에서도 있었던 문제입니다. 일정에 맞춰 기능을 구현해야하다보니 코드 퀄리티는 신경 쓰지 못하고 구현하기에만 급급한 경우가 많았습니다. 하지만 그런 임기응변식 기능 구현은 문제를 초래하는 경우가 많았습니다. 또는 당장은 문제가 되지 않더라도 안 좋은 코드가 쌓여서 스파게티 코드처럼 알아보기 힘든 코드가 되는 경우가 많았습니다. 내가 좋은 코드를 쓰고 있는가에 대한 확신이 없지만 기한 안에 일을 다 쳐내려면 구린 코드를 쓰고 있다는 사실을 알면서도 앞으로 나아가야 하는... 그런 상황이 너무나 슬펐습니다. 그런데 단기간에 기능을 보여줘야 하는 스타트업이나, 단기 프로젝트로 발표를 해야하는 교육기관이나 모두 속도에 집중해야하다보니 일단 돌아가는 것처럼 보인다면 크게 문제삼지 않는 분위기가 당연했고 그런 점이 설계나 코드 품질에 집중하는데 방해가 되었습니다.
POCU가 가지는 차별점
앞서 제가 느꼈던 문제들을 POCU Academy에서는 거의 해결했고, 정말로 만족스러운 한 학기를 보낼 수 있었습니다. POCU Academy가 가지는 강점에 대해서 적어보려 합니다.
1. 업계와 교육계에서 공인된 강사가 제시하는 알아야만 되는 것, 몰라도 되는 것
위에 링크된 링크드인이나 나무위키에서도 확인이 가능하지만, 대표강사 포프님처럼 업계와 교육계 두 분야에서 공인된 경력을 가지고 있는 개발자는 그렇게 많지 않습니다. 포프님은 게임 업계에서 스페이스 마린, FIFA 14, 마인크래프트 등 굵직한 프로젝트를 담당한 유능한 프로그래머임과 동시에 Microsoft MVP 및 CTO 경력으로 프로그래머들을 리딩할 수 있는 리드 개발자이기도 합니다. 교육 쪽에서는 BCIT 교수로 재직했고 수강생들로부터 상당히 좋은 평가를 받았을 만큼 공인된 교수자입니다.
위는 강의자료마다 붙어있는 표기를 설명하는 장면인데, PPT의 모든 슬라이드에 중요한 내용인지 중요하지 않은 내용인지에 대한 구분이 되어 있고, 중요한 내용은 정말 깊게 다룹니다. 1) 베스트 프랙티스, 2) 예시 코드 슬라이드, 3) 실습, 4) 과제, 5) 시험을 공부하는 과정에서 수 차례 반복되면서 자연스럽게 체화됩니다. 노란색 부분은 중요하지 않지만 알고 있으면 좋을 수도 있는 내용으로, 과목에 대해 보다 풍성한 이해를 하는데 도움이 됩니다. 이렇게 업계 전문가가 알아야되는 것과 몰라도 되는 것을 명확히 구분해서 지식을 전달해주는 것에서부터 'POCU Academy의 과목들은 꼼꼼하게 설계가 됐구나' 하는 느낌을 받을 수 있었습니다.
2. 완전히 자동화된 코드리뷰, 빌드봇
POCU Academy에서는 슬랙봇을 통해 코드를 자동으로 채점받을 수 있습니다. 과제 기한이 지나지 않았다면 언제, 어디서든 채점이 가능합니다. 코드가 올라가있는 깃 저장소를 봇이 검사해서 점수를 매깁니다. 빌드봇은 여러 개 (과제의 경우 100개 이상의) 테스트 항목을 가지고 있고 각 항목을 내부적으로 테스트해서 코드를 잘 작성했는지 검사합니다. 업무 압박을 가지고 있는 개발자가 리뷰를 병행해서 수행하는 것보다 훨씬 꼼꼼한 리뷰를 받을 스 있습니다. 강의에서 가르친 중요한 내용들을 점검할 뿐만 아니라 띄어쓰기나 들여쓰기같은 코드 스타일도 꼼꼼히 채점합니다.
위 사진은 과제를 통과하기까지의 여정을 찍은 사진인데, 스무 번 가까운 재채점 끝에 만점을 받을 수 있었습니다. 실패한 테스트 케이스에서 왜 틀럈는지 어느 정도는 힌트를 주기 때문에 개선할 방향을 좇아서 코딩을 계속할 수 있습니다. 정말 고된 과정이긴 하지만.. 고생 끝에 과제가 100점이 나오는 그 짜릿함을 여러분도 느끼셨으면 좋겠습니다! 풀코스로 어서 오세요^^
3. 설계와 구현 모두 중요시되는 실습 & 과제 그리고 시험
강의 슬라이드가 잘 짜여진 것 만큼이나 제공되는 과제와 실습도 "깎아서 만들어진" 문제들입니다. 배운 개념을 자연스럽게 익힐 수 있도록 문제들이 구성되어 있습니다. 문제라고 해서 수학문제를 푸는 갓처럼 딱딱한 느낌은 아니고, 실제 업계에서 마주할 만한 상황을 개념과 자연스럽게 연결시켜 실무를 하는 느낌이 나기도 합니다. 빌드봇은 진도에 맞춰 설계의 허용 폭을 늘려갑니다. 배운 개념이 제한적일 때는 제한적인 구현만 허용하도록, 배운 개념이 많을 때는 비교적 자유로운 설계가 가능하도록 합니다. "설계"를 검사한다고 한 이유는 정말로 빌드봇이 기능 뿐만 아니라 설계를 검사하기 때문입니다. 작게는 올바른 변수명, 접근제한자를 썼는지, 불필요한 메서드를 추가하지는 않았는지부터, 크게는 클래스 간의 관계는 올바른지, 추상화 레벨이 적절한지, 올바른 예외 처리를 하고 있는지까지 검사를 해줍니다. 덕분에 구현 뿐만 아니라 설계에도 신경을 쓸 수 밖에 없게 만듭니다. 또 여러 작은 시스템을 설계해보면서 어떤 부분이 문제가 될 수 있는지를 경험시키면서, 단단한 코드를 안정적으로 확장시켜나가는 법을 연습할 수 있습니다.
그리고 그 연습은 시험으로 완성이 됩니다. 대학의 정규적인 중간, 기말고사처럼 온라인 환경에서 시험을 치면서 자신이 아는 것과 모르는 것을 최종적으로 점검할 수 있습니다. 오픈북이고 시간 제한 없는 상황에서 개발하는 것과, 클로즈드 북이고 시간 제한을 두고 코딩하는 것은 천지 차이임을 실감하실 수 있습니다. 시험을 준비하는 과정에서 지식이 더욱 단단해지는 것을 느낄 수 있습니다.
추가적으로, 강의-과제가 있어도 온라인 코스가 가지는 한계를 위해서 Office-hour와 조교님들이 존재합니다. 슬랙 방에서 활발히 토론할 수 있어서, 강의와 과제만으로는 부족했던 2%가 채워지는 느낌을 받았습니다.
POCU에서 배우는 개체 지향 프로그래밍
그렇다면 POCU에서 가르치는 OOP는 뭐가 다를까요? 한 학기동안 개체지향 프로그래밍을 배우고, 스스로 체감이 되는 달라진 점을 적어보겠습니다.
- 자바 탄생 배경과 기본문법에 대해 이해하고, 빌드 및 압축 시 디렉토리 구조에 대해 알게 되었습니다.
- 개체 지향 프로그래밍의 의의와 개체가 스스로 책임을 지게 하는 개체지향적 사고에 대해 알게 되었습니다.
- getter, setter의 올바른 사용법과 best practice에 대해 알게 되었습니다.
- 캡슐화, 추상화, 상속, 다형성, 연관, 컴포지션, 집합의 개념에 대해 설명할 수 있게 되었습니다.
- static 멤버 변수 및 메서드의 존재 의의, 싱글턴 패턴과의 관계에 대해 설명할 수 있게 되었습니다.
- 상속이 무엇인지, 캐스팅 시 컴파일 오류가 일어나는 경우와 런타임 오류가 일어나는 경우에 대해 알게 되었습니다.
- 상속과 컴포지션의 차이점과 언제 어떤 쪽을 선택하면 유리한지 알게 되었습니다.
- 다형성에 대해 알게 되었고, 다형성의 바인딩에 대해 알게 됐습니다.
- Object 클래스의 equals, hashCode 등의 메서드를 오버라이드 하는 법을 알게 됐습니다.
- 추상 클래스가 필요한 이유, 추상클래스와 추상 메서드를 이용하여 추상화하는 법을 알게 됐습니다.
- 어노테이션의 역할과 어떤 경우에는 컴파일 에러를 내고, 어떤 경우에는 허용이 되는지를 알게 됐습니다.
- Object의 clone 메서드를 오버라이드하려면 어떤 코드를 작성해야하는지, 참조형 필드를 가지고 있을 경우 깊은 복사를 해주려면 어떻게 코드를 작성해야하는지 알게 됐습니다.
- 인터페이스의 필요성과 인터페이스와 C 함수 포인터의 관계, 그리고 인터페이스를 이용한 추상화에 대해 알게 됐습니다.
- 결합도라는 개념이 무엇인지, 강하게 의존한다는 개념이 무엇인지, 디커플링을 시키려면 어떤 방법이 있는지를 알게 됐습니다.
- 시퀀스 다이어그램 읽는 법에 대해 알게 됐습니다.
- 디자인 패턴의 의의와 몇 가지 디자인 패턴에 대해 학습했습니다.
- OOP 및 디자인 패턴에 관해 토론 시 유의할 점에 대해 알게 됐습니다.
- 프로그램의 오류를 처리하는 방법에 대해 알게 됐습니다. 어떤 부분에서 오류 처리에 주의해야 하는지, 그리고 자바에 있는 checked 예외와 unchecked 예외에 대해 알게 됐습니다.
- SOLID 원칙 이라고 불리는 SOLID 설계 정신의 의의와, 각각의 한계에 대해 알게 됐습니다.
- 개체지향 관련 다양한 주장들에 대해 다수설이 무엇인지, 소수설이 무엇인지 왜 그런지에 대해 알게 됐습니다.
어떠신가요? 당장 생각나는 정도만 해도 이 정도인 것 같습니다. 시험과 과제를 치루면서 체화된 지식들은 덤이고요. 한줄평을 하자면 COMP2500 과목은 가장 주관적인 과목이지만 그 속에서 학습자가 바른 주관을 가질 수 있도록 객관적인 근거로 성장을 시키는 나침반같은 과목입니다. 개체지향이라는 개념을 어떻게 받아들여야 할지, 시스템을 설계한다는 것에 어떤 식으로 접근해야할 지의 자세를 배울 수 있어 정말 큰 도움이 됐습니다.
아쉬웠던 점
모든 점이 100% 만족스러웠다면 그건 거짓말이겠지요. 제가 느꼈던 POCU Academy에서의 아쉬웠던 점에 대해서도 얘기해보겠습니다.
1. 빌드봇 쿨타임
빌드봇은 정말 꼼꼼한 상사이기도 하지만, 때로는 까칠한(?) 선생님이기도 합니다. 새로운 코드를 푸시했다고 항상 채점을 할 수 있는 것은 아니고, 일정 쿨타임이 지나야 다시 채점을 받을 수 있습니다. 실습에서는 짧은데 과제에서는 꽤 깁니다. (20-30분 정도) 그렇기 때문에 빌드봇 쿨타임을 기다리느라 과제 수행시간이 길어지는 부분도 있습니다. 사실 이 부분은 과제를 미리미리, 매일매일 조금씩 하면 해결 되는 문제이기는 합니다. 하지만 마법처럼(?) 과제를 몰아서 하는 상황이 다가오기 때문에(...) 혹시라도 수강하시게 된다면 과제를 미리미리 하시는 게 좋을 것 같습니다. ^^;;
2. 시험 채점 관련
시험 기간에는 1주간의 응시 기간을 주고 1주간 채점 내역을 검토할 수 있는 검토 기간이 주어집니다. 그 때 시험 환경과 비슷한 환경에서 검토를 할 수 있는데, 이 때 정답이 제공되지 않는 부분이 좀 아쉬웠습니다. 그래서 시험을 마치고는 문제를 복기해놓고, 검토를 하기 전 슬랙 방에서 몰랐던 문제의 답을 알고 들어가야 검토를 제대로 할 수 있습니다. 왜 틀렸는지 모르면 재채점 요청도 할 수 없으니까요. 이 부분이 실제 대학에서 교수님 방으로 가서 시험지를 받아보고 그 자리에서 이의를 제기하고 시험지를 반납하고 오는... 그 과정과 정말 비슷하면서도 조금 아쉽기는 했습니다. 아마도 문제 유출 방지를 위한 것이겠지요.
마치며
좋다고 알려진 IT 부트캠프나 교육기관을 상당수 경험해본 학생 입장에서, POCU와의 3개월은 효율 그 자체였습니다. 괜히 POCU의 반댓말은 비효율이라는 말이 있는게 아니더군요. 한국에 이만한 퀄리티의 교육기관이 거의 없다는 데에는 동의할 수밖에 없을 것 같습니다.
처음 풀코스를 들을 때는 가격적인 부분이 많이 망설여졌지만, 한달에 30만원 꼴이라고 생각하면 웬만한 과외보다 훨씬 싼 가격이라는 생각이 듭니다. 거기다 검증된 일류 개발자에게 교육을 받을 수 있다는 점도 참 매력적인 것 같고요. 저는 앞으로도 몇 가지의 과목을 더 이수할 계획입니다. 수강을 고민 중이신 독자분이 계시다면 함께 포큐했으면 좋겠습니다. 생각했던 것 이상으로 얻어가는 것이 많을테니까요. ^^
'Diary' 카테고리의 다른 글
자라자. 함께. (2) | 2022.10.27 |
---|---|
ABOUT (1) | 2022.08.11 |
삶은 문제의 집합이다. (0) | 2022.06.06 |
2022 상반기 생존신고 (0) | 2022.05.22 |
저는 시간을 이렇게 씁니다. (1) | 2022.02.05 |
댓글
이 글 공유하기
다른 글
-
자라자. 함께.
자라자. 함께.
2022.10.27 -
ABOUT
ABOUT
2022.08.11 -
삶은 문제의 집합이다.
삶은 문제의 집합이다.
2022.06.06 -
2022 상반기 생존신고
2022 상반기 생존신고
2022.05.22