[POCU 아카데미] COMP2500 개체지향 프로그래밍 및 설계 풀코스 수강 후기
2020년 5월 학기 POCU Academy의 새 과목인 COMP2500 개체지향 프로그래밍 및 설계 과목을 수료해서 후기 남깁니다.
간만에 블로그 글을 작성하면서 저번 학기 들었던 COMP2200 후기를 다시 보는데 본인의 소감 같은 것 보단 커리큘럼과 수업 방식(덤으로 배웠던 내용 자랑?)들 위주더군요. 후기라기보단 COMP2200 소개글 같은 느낌도 드네요 ㅋㅋ. 아무튼 이번엔 제가 느낀점 위주로만 간략하게 후기를 써볼까 합니다.
지난 4월 COMP2200을 수료하고 한 학기 정말 제대로 공부했구나 하는 만족감에 홀린듯이 새로 열린 COMP2500 강의를 수강신청하고 말았다. 주제는 개체지향 프로그래밍 및 설계. 고등학교 2학년 때 Java를 배우면서 캡슐화, 상속 등 개체지향 프로그래밍(이하 OO)에 대해 배운 기억이 있으나 그 때는 새로운 프로그래밍 언어를 다뤄보는 것에만 집중해서 그랬던건지 애초에 당시 수준에서 이해하기가 어려운 개념이었던건지 머릿속에 남아있는 이론적 내용이 별로 없었다. 그러다보니 새로 배울 내용과 설계를 해볼 수 있다는 기대를 가지고 수업을 듣기 시작했던 것 같다.
결론부터 말하면 이번 강의에서 가르쳐주는 내용도 이번에도 알찼다. 기본적으로 Java 언어를 사용하는 강의지만 Java에 종속되지 않는 OO의 특성들을 배운다. 그 특성과 개념들이 어떠한 필요에 의해서 생겨났고 종종 C#과 C++과 같은 다른 주류 OOP 언어들도 나오면서 프로그래밍 언어에는 어떻게 스며들어있는지, 여러 응용법의 소개와 사용 할 때 주의해야 할 점들 그리고 올바른 오류 처리 방법 등 많은 내용을 듣고 배우고 실습 해볼 수 있었다.
강의 소개 영상에서 부터 또 수업 중간중간마다 언급되는 것이 OO라는 분야를 이야기 할 때 사람의 주관성이 들어갈 수 밖에 없다고 한다. OO의 주관성에 대해선 처음엔 그냥 그런가보다 듣고 넘어갔는데 계속해서 수업을 듣고 풀코스를 진행하면서 직접 느끼게 된다. (특히 설계 과제에서 수업에서 권장하는 답과 본인의 생각의 차이로 인해 통과되지 못해 당황하는 사람들이 종종 보였다.) 수업에서 주관성이 들어간 내용들은 주류가 되는 의견에 대해서 설명한 뒤 여기서 그치지 않고 소수측에서 주장하는 의견들도 같이 설명한다. 수강생들에게 어떻게 현재의 주류 의견이 형성됐는지 근거를 들어가며 설명하고 소수측의 의견도 이러한 의견이 나온 배경과 장단점을 짚어보면서 왜 위험한 것인지 또 어떠한 상황에 받아들이면 유용한지 납득시키는게 이 과목의 특징 중 하나라고 생각한다. COMP2200에서 공부한 내용들은 이건 이런거고 저건 저런거라는 확실한 정답이 보이는 것들 이었으나 이번에 공부한 OO는 확실한 답이 없고 이런 저런 생각들을 해보며 어떤 것이 올바른 방법인지 고민해야할 필요성을 보여주었다. 이러한 내용들은 아마 특정 언어를 익히기 위해 OO를 배우는 강의에선 경험해보지 못할 것들이라 생각한다. 덤으로 강사님과 같은 사고의 흐름을 가지고 싶다는 생각도 들었다 ㅋㅋ
강의도 강의지만 풀코스의 꽃은 역시 실습과 과제인 것 같다. 아이러니한게 학교에서 과제가 나오면 귀찮기만 한데 POCU의 과제들은 이게 참 요상한게 재밌고 더 하고 싶다!! 주어진 명세대로(꽤나 자세함) 프로그램을 작성해야하는 과제는 내가 정말 실무자가 된 듯한 기분이 들게 해준다. 일정이 지나면 더이상 빌드봇에게 코드를 채점 받아볼 수 없다는게 아쉬울 정도. 슬랙방에서 미리 과제를 끝낸 사람 중에 다음 과제가 기대된다 얼른 새 과제가 나왔으면 좋겠다 말하는 기이한 광경도 볼 수도 있다. 난이도가 마냥 쉬운 것도 아닌데 말이다.
이번 COMP2500에선 실습과 과제에 확실한 차이가 있었는데 실습은 그 주에 학습한 개념을 직접 사용해보는 정도의 내용이라면 과제는 이들을 응용하여 명세에 주어진 조건대로 프로그램을 직접 설계해보는 내용이었다. 그러다보니 실습과 과제의 난이도 차이가 이전 과목에 비해 더 크게 느껴졌던 것 같다. 실습이 쉽게 끝났던 만큼 과제를 하는데 시간을 많이 썼는데 이전 과목에 비해 기본점수를 받는 커트라인이 높다는 느낌도 받았다. 수업에서 권장하지 않는 설계 방식대로 구현 했거나(위에서 언급한 주관성) 잘못된 변수명을 사용하면(코딩 표준 위반은 아니고 올바른 단어를 골라 사용하는 부분) 아무리 열심히 고쳐 빌드해도 0~20점 사이에 머무는 기간이 꽤나 길었기 때문이다. 보통 빌드봇의 채점 결과를 보면 어디가 잘못되었는지 금방 유추할 수 있었는데 COMP2500의 과제들은 올바른 설계 방법이 무엇인지 내가 무엇을 실수했는지 알기위해 많이 고민하고 슬랙방에서 토론도 해야했다. 덕분에 그 순간들에는 스트레스를 받기도 했지만 힘들었던 만큼 과제를 완료하였을 때 만족감도 더 컷다. 비록 화려한 GUI에서 돌아가는 제품은 아니지만 제대로 동작하는 하나의 시스템(치고는 좀 작을지도? ㅎㅎ)을 완성했다는게 뿌듯했다고 해야하나?
전체적인 수업의 난이도는 COMP2200이 조금 더 어려웠던 것 같다. 다만 주관성이 섞인 내용을 받아들일 때나 프로그램을 설계해보기에 앞서 스스로 생각해보는 과정들이 더 필요했던 것 같다.
아 시험은 COMP2500이 확실히 더 어려웠다. 코드량의 압박이 상당하고 짧은 시간 내에 개체 모델링을 해보는 문제들도 있다. 이전 과목보다 시험시간도 길어졌는데 겨우겨우 시간에 맞춰 제출할 수 있더라 -_-
이번 학기는 대학 정규 학기를 같이 진행하며 풀코스를 듣느라 시간이 부족하고 많이 힘들었다. 동영상 강의가 밀려 뒤늦게 후다닥 본 파트도 있었고 과제도 막판에야 겨우겨우 제출하고 그랬다. 아마 코로나 사태로 대학 수업이 비대면 강의로 대체되지 않았으면 학교만 왕복 4시간이니 풀코스를 따라가는게 힘들지 않았을까 싶다.
하지만 결과적으로 본인이 많이 성장한 것이 느껴진다. 고작 두 과목 밖에 안들었으면서 이런말을 하는게 웃기지만 8개월간 수강하면서 얻은 지식과 기술들이 개인 작업물의 코드나 팀 프로젝트의 작업물에서 묻어나온다. 뭔가를 남들에게 가르쳐 줄 때도 보다 명확하게 알려줄 수 있게 되었다. 전체적인 식견이 넓어졌다 해야하나? 뭐 자만할 수준은 절대 아니지만 ㅎㅎ…
아무튼 저는 다음 학기에 또 COMP3200 C++ 언매니지드 프로그래밍 과목을 이어서 수강할 예정이랍니다~