POCU 아카데미 COMP2500 개체지향 프로그래밍 및 설계 (Java) 수강 후기

반응형

포큐아카데미-comp2500-로고
'강력한 캡슐화' 를 의미하는  COMP2500 의 마스코트

안녕하세요!🖐🏻

 

이번에는 POCU 아카데미의 [COMP2500 개체지향 프로그래밍 및 설계]를 수강하고, 후기를 공유하고자 합니다.

 

이번이 POCU 아카데미에서의 4번째 코스 수강입니다. 새로운 직장에 적응하랴, 수업을 들으랴 우여곡절이 많았지만 다행히도 통과를 했고, 이렇게 리뷰를 작성할 수 있게 되었습니다.

필자의-수료과목에-스탬프가-찍힌-포큐아카데미-커리큘럼
필자는 이번에 COMP2500 을 수강하였다. POCU 에는 2021년 5월 알고리듬 과목이 개설된다. 옆사람이 그러네요. 많이 한 것 같은데 아직 4과목밖에 안했어? ^^;;

 

본 글은, POCU 아카데미의 다른 코스를 수강해보셨거나, POCU 아카데미의 시스템에 잘 알고 계시는 분들을 대상으로 쓰여졌습니다.

 

POCU 아카데미의 기본적인 시스템에 관해 알고싶으시다면 제가 이전에 작성한 다음 글이 도움이 될 것입니다.

 

POCU 아카데미 COMP1500 실무 프로그래밍 입문 수강 후기, 수강 가이드

들어가기 🏃🏼‍♂️후기로 바로 건너뛰기 숲을 걸었다. 길이 두 갈래로 갈라졌다. 나는 인적이 드문 길을 택했다. 그리고 모든 것이 달라졌다. - 로버트 프로스트 포큐아카데미에서 제공하는

coldmater.tistory.com

제가 이전에 수강했던 POCU 아카데미 코스들의 리뷰는 다음 링크들에서 참고하실 수 있습니다.

 

POCU 아카데미 COMP1000 소프트웨어 공학용 수학 수강 후기 + 수강 팁

내가 더 멀리 보았다면 이는 거인들의 어깨 위에 올라서 있었기 때문이다. ~ 아이작 뉴턴 일러두기 필자의 POCU 아카데미의 전반적인 시스템에 대한 리뷰는 바로 아래 링크에서 확인하실 수 있습

coldmater.tistory.com

 

POCU 아카데미 COMP2200 C 언매니지드 프로그래밍 수강 후기

안녕하세요!🖐🏻 이번에는 POCU 아카데미의 [COMP2200 C 언매니지드 프로그래밍]을 수강하고, 후기를 공유하고자 합니다. COMP1500, COMP1000에 이어 POCU 아카데미에서의 3번째 수강입니다. 이전 수강

coldmater.tistory.com

수강을 결정하게 된 계기

COMP1500 을 수강할 때야 POCU 시스템에 관해서 무지했기 때문에 다양한 기준을 놓고 고민을 많이 했었습니다.

 

하지만, 이번에는 과연 내가 이 코스를 제대로 완주할 수 있을까? 하는 약간의 부담 때문에 수강을 망설였었습니다. 이직한 직장에 적응을 하는 것은 물론, 그에 따른 주변 환경정리와 더불어 본 강의까지 수강한다는 것이 부담되었기 때문입니다.

 

그런데 이런 생각이 머리를 스칩니다.

 

'일단 등록하자. 끝내 통과를 하지 못하더라도, 지금(1월)보다는 다가오는 4월에 조금이나마 성장은 해있겠지.'

그렇게 (수강을 말리던 아주 가까운 분의 만류에도 불구하고) 전진하기로 합니다.

황소가-돌진하는-모습
그렇다 2021년의 소의 해였던 것이다. 소처럼 우직하게 결제를 진행해버렸다.

망설이던 그 때, 수강하지 않은채로 지금을 맞이하면 웬지 허탈할 것 같음과 뭔가 잃어버린 것 같은 마음이 분명히 들것이라 생각했었는데, 이렇게 수강을 하고 심지어 (기대하지 않았던) 통과까지 하고 나니 너무나 기분이 좋습니다.

개체지향 vs 객체지향

본 과목에서는 흔히 CS 에서 '객체지향'이라고 부르는 대상을 '개체지향'이라고 부릅니다. 이유는 간단합니다.

(출처: 구글 사전)

 

'객체'의 사전적 정의 (링크)

  • '작용의 대상이 되는 쪽'
  • '행위가 미치는 목적물'
  • '문장에서 동사의 행위가 미치는 대상'

'개체'의 사전적 정의(링크)

  • 그 자신의 성질과 규정을 지니고 다른 것과는 구별되는 단일 고유의 독자적 존재
  • 하나의 독립한 생물체. 보통 더 이상 세분할 수 없는 하나의 몸을 갖고 생식·운동 등의 생명 현상을 영위할 수 있는 구조와 기능을 가짐.

이와 같이 객체와 개체는 엄밀히 다릅니다. 우리가 흔히 사용하는 '객체'는 '목적의 대상'이 된다는 의미가 강합니다. 반면, '개체'는 '다른것과 구별되는 존재 자체'를 의미하죠. (물론, 실제 프로그래밍에서 Object 가 '객체'의 의미를 가질 수도 있습니다만, 이는 일부에 지나지 않죠.)

 

이 수업에서 '개체지향'이라는 용어를 사용하는 것은, 프로그래밍에서 뜻하는 Object 가 '개체'의 의미를 갖고 있기 때문이죠.

 

POCU 아카데미의 COMP2500 이 그만큼 제대로된 개체지향을 가르치겠다는 의지를 엿볼 수 있는 부분입니다.

혼돈을 막기 위해 글에서 등장하는 흔히 CS 에서 사용하는 객체지향은 모두 개체지향 으로 표기하도록 하겠습니다. 언젠가는 '개체지향'이 표준 용어가 되기를 소망해보면서.

COMP2500을 수강해야하는가?

도구로서의 개체지향

강의에서는 개체지향을 도구라고 표현하고 있습니다. 다만, 그 도구에 짝퉁이 너무 많은게 문제죠. 흔히 RPG 게임을 하다보면 네임드 아이템, 유니크 아이템을 얻기 위해 이리저리 모험을 하게 됩니다.

 

프로그래밍의 세계에서 제대로된 개체지향 강의를 찾지 못하셨기에, 지금 이 글을 읽고 계실거라 생각합니다.

 

POCU 아카데미에서 강조하는 '기본기'란 것이 또 어떤 의미를 갖는지 이번 COMP2500 을 통해서 다시 한번 느낄 수 있었는데요. 이 강의를 수강하고 나시면, 코드를 짜면서 '이 부분은 다형성을 사용하여 추상화시키면 코드의 재사용성이 증가하지 않을까?' 이라며 스스로 질문하는 본인을 발견할 수 있을겁니다.

당신이 배워온 흔한 OOP

The Inefficient Way

우리는 흔히 개체지향이라는 대상을 기계적으로 배우고 맙니다. 사실 그렇기 때문에 개체지향이 진정 추구하고자 했던 관점이 흐려진채로 저희에게 어렴풋이 기억되어있을 뿐입니다.

 

개체지향을 구성하는 대상 중 하나인 접근제어자를 가지고 먼저 질문해봅시다.

 

  • JAVA 의 4가지 접근제어자가 무엇인가?
  • 주로 사용하는 2가지 접근제어자와 각각은 어떻게 작동하는가? 또 어떤 경우에 사용하는가?
  • default 접근제어자는 어떻게 작동하는가?
  • default 접근제어자는 언제 사용하는것이 적절한가?
  • 접근제어자가 존재하는 이유는 무엇인가?

다음은, 개체지향을 배우는 데 얼마만큼의 시간을 할애하였는가에 대해서입니다. 저는 적어도 이번 코스를 수강하면서 100시간은 넘게 시간을 쓴 것 같습니다. 강의와 해당 내용을 정리하는데만도 50여시간정도를 할애했죠.

 

그럴진대, 양산형 학원에서 보통 개체지향을 다루는 시간은 얼마나 될까요?

혹시 다음과 같은 커리큘럼으로 개체지향을 다루지는 않았나요?

 

OOO (Orientation about Object Orientation) - 흔한 OO 에 대한 소개

  • 클래스를 배운다. 멤버변수, 생성자, 메서드를 배우고 간단한 예제를 진행한다.
  • 멤버변수는 private 으로 한다. 정확한 이유는 모르겠지만, 그렇게 하라고 하니 그렇게 한다.
  • 그리고는 getter, setter 에 대해서 배운다. 잘은 모르겠지만, 메서드를 통해서 접근하는게 좋다고 하니 그렇게 한다.
  • 상속을 배운다.
    • 아마 당신은 protected 접근제어자와, 상속과 컴포지션에 관한 내용을 배우지 않았을 가능성 내지는 기억하고 있지 못할 가능성이 크다.
  • 추상클래스, 추상메서드를 배운다.
    • 아마 당신은 추상클래스, 추상메서드의 동작 방식과 문법에 대해서는 알고 있을지 모른다. 하지만 왜 추상화된 클래스와 메서드를 활용해야 하는지 이해하고 있지 못할 가능성이 크다.
  • 인터페이스를 배운다. (사실 커리큘럼상 여기까지도 가지 않을 가능성이...)
    • 추상클래스와 마찬가지로, 문법 및 동작방식에 대해서는 알고 있을 수도 있다. 그래도 이렇게 질문할 가능성이 크다. 그래서 도대체 인터페이스를 왜 쓰는데?
    • 인터페이스의 메서드의 접근제어자가 될 수 있는 접근제어자는 무엇인가? 그 이유는?
    • 내부적으로 추상클래스처럼 작동하는데, 그 증거를 제시할 수 있는가?

제가 약간은 희화화한 부분도 있지만, 저 스스로를 대상으로 OOP 에 대해서 어떻게 교육받았었는지를 적어보았습니다. (다시 보니 심각하네요... 😅)

 

저는 COMP2500 강의를 통해 제공되는 수많은 예제와, 실습과 과제를 진행하면서 OOP 의 뼈대가 되는 개념들과 그 필요성을 몸소 체험하며 학습할 수 있었습니다.

 

그동안 제대로된 개체지향 코스에 대해 갈급하셨다면, 포큐아카데미를 통해 긴 호흡(15주)을 갖고 제대로 된 개체지향을 수강해보시기를 추천합니다.

알고 있다는 착각

'설단현상'이라 불리는 '혀끝의 감각(tip of the tongue)'이라는 용어를 들어보셨나요?

 

어떤 개념을 제대로 설명할 수 있을 때라야 비로소 그 개념을 제대로 이해하고 있다고 말할 수 있습니다. 설단현상이란 단어가 나올듯 말듯한 상태를 이야기하는데, 넓은 의미로는 알고 있는듯한 느낌을 의미하며, 어떤 개념에 대해서 충분한 학습이나 훈련이 되지 않았기 때문에 발생합니다.

 

프로그래밍의 세계에서도 비슷한 용어가 있습니다. '튜토리얼의 함정'이죠. 튜토리얼 영상이나 글을 보고 한 번, 두 번 따라해본 것만으로 해당 기술을 마치 알고 있는듯하게 착각하게 하는 그것이죠.

 

시중에 존재하는 수많은 강의들이 강의를 막 마치는 순간 수강생들로 하여금 이러한 '알고 있다는 착각'을 불러일으키고 순간적인 성취감을 주며, 그저 그런대로 만족하게 하고는 그걸로 끝일 뿐입니다.

The POCU Way

하지만, 포큐아카데미의 풀코스는 길을 알려주고, 그 길을 직접 걷게 합니다. 심지어, 다른 목적지를 갈 때도 그 길을 거치게 하여 같은 길을 3~4번씩도 지나가도록 설계되어있습니다.

 

한 번 가본 길은 당연히 잊기 쉽습니다. 하지만, 3~4번 가본 길이라면 오히려 잊기 어려워지죠. 심지어 머릿속에 그 길이 떠오르기까지 합니다. 바로 이것이 포큐 아카데미가 설계된 방식입니다.

 

교육학적 관점으로도 수강생들이 어떻게 하면 개념을 학습하는데 가장 효율적일지 고민한 흔적이 여기저기 묻어있습니다.

 

그렇습니다. POCU 의 반댓말은 비효율(inefficiency)입니다.

주관성의 객관화

철저하게 설계된 빌드봇

개체지향은 컴퓨터공학 과목 중에서도 가장 주관성이 강한 과목입니다. 그렇기 때문에, 사람마다 다양한 의견을 가질 수 있죠. 그럼에도 POCU 의 COMP2500 에서는 최대한의 객관성으로 개체지향의 정수를 얻어갈 수 있습니다.

 

그것은 실습과 과제를 통한 '체험'과 '훈련'을 통해 가능하게 됩니다.

 

실습과 과제에서 주어진 요구사항을 수없이 다양한 방법으로 구현할 수 있을겁니다. 이 때 빌드봇이 큰 역할을 해냅니다. 사실상 제출 횟수의 제한이 없기 때문에 여러번 제출해보면서 본인이 제대로 된 개체지향을 따르며 코딩했는지 몇번이고 검사해볼 수 있습니다.

 

과제-제출에-대해-빌드봇이-답함
빨리 채점해 주세효....ㅠㅠ '제출자의 시간은 느리게 간다.'

아시겠지만, 포큐의 COMP2500 개체지향 프로그래밍 및 설계 과목은 '개체지향은 이렇게 코딩하는 것이다.'를 가르치는 것을 넘어 스스로 그 길을 어떻게든 찾아갈 수 있게 도와주는 일종의 극기훈련같은 특수훈련과 같습니다.

스토리텔링1 - 기억될 수 밖에 없는 강의 구성

누군가가 주장하는 '주관'을 이해하기 위해서는 그 사람이 그 '주관'을 내세우게 된 환경과 상황, 즉 맥락을 이해해야한다고 생각합니다.

 

저는 개인적으로, 이제 막 코딩을 배운 코린이들에게 '개체지향'이라는 대상이 와닿을 리가 없다고 봅니다. 그렇기에, POCU COMP2500 에서는 개체지향이 탄생한 맥락과 상황을 이해할 수 있도록 강의가 구성되어있습니다.

 

개체지향 프로그래밍 및 설계 (Java) - POCU

정규 학기 ₩800,000 (학기) + ₩220,000 (동영상 강좌) 총 가격: ₩1,020,000 강좌 구매 로그인 후 등록 가능

pocu.academy

개체지향의 가장 기본이 되는 캡슐화부터 시작해서 개체지향의 정수인 다형성을 배우기까지 충분히 긴 호흡으로 30시간동안 풀어 설명해줍니다.

엄마와-아들이-책을-읽는-모습
강사는 타고난 스토리텔러

강사는 마치 타고난 이야기꾼같습니다. 강사는 우리가 뭘 모르는지, 어떤 부분을 어려워하는지, 이 부분을 이해하기 위해서는 어떤 지식이 필요한지 무서울 정도로 철저히 알고 있습니다. 이를 기반으로 마치 블럭놀이를 하듯 여러분이 모르는 부분을 척척 끼워맞춰가며 강의를 들으실 수 있습니다.

스토리텔링2 - 중요도를 표현하는 방식

"그런거였어?" "그래서 그랬구나!" - POCU 를 수강중인 본인

강사들이 흔히 어떤 개념에 대해 '중요하다'고 표현하는 것을 들어본 적이 있으실겁니다. 하지만, 곰곰히 생각해보면 '중요하다'라는 표현은 책임감 없는 표현이라고도 생각됩니다. 보통 '중요하다'가 너무 남발되다 보니 중요하다고 별표를 치고 밑줄을 친들 딱히 기억에 더 오래남지도 않는 것 같아 보입니다.

 

사실 이 부분도 맥락과 관련이 있다고 생각합니다. 어떤 개념의 중요한 정도는 수강생 개인마다의 기존 학습량에 따라서도 달라질 수 있습니다. POCU COMP2500 개체지향 프로그래밍 및 설계 강의에서는 뜬금없이 새로운 개념이 등장하는 것이 아니라, 강의의 시작부터 끝까지 모든 개념들이 거미줄처럼 엮여진 채로 제시되기 때문에, 특정 개념의 중요도는 수강생 스스로 판단할 수 있게 됩니다.

 

외부로부터 중요성이 강제로 인식되는 것이 아니라, 내부로부터 자연스레 발현되는 '아하!'를 외치게 되는 순간 곧 유레카적(?)인 깨달음을 이끌어내는 방향으로 수업이 구성되어 있다라는거죠. 이렇게 학습에 타당성이 부여되다보니 그 개념을 받아들이기에 훨씬 수월한 상태가 됩니다.

 

하드웨어와 개체지향

Java 라는 언어는 C 언어를 사용한 개발자들이 메모리를 직접 관리하며 발생한 문제들을 없애기 위해 메모리 관리 부분을 추상화하여 더 이상 개발자들로 하여금 메모리 부분을 신경쓰지 않도록 하기 위해 만들어진 언어로 알려져있습니다.

자바는 메모리 관리를 프로그래머가 볼 수 없게 감췄다.
그리고 자바로 인해, 디버깅하기 더 어려운 새로운 버그 종류가 생겨났음이 드러났다.
메모리를 이해하는 것은 프로그래머에게 핵심 기술에 속한다.
 - '한 권으로 읽는 컴퓨터 구조와 프로그래밍' by 조너선 스타인하트

컴퓨터-구조와-프로그래밍-책-표지
by 조너선 스타인하트 (COMP2500과는 관련이 없습니다.)

COMP2500 개체지향 프로그래밍 및 설계 과목에서 공식적으로 채택하고 사용하는 언어는 'JAVA'이지만, 성능과 메모리에 관련된 부분이면 꼭 짚고 넘어간답니다. 코드적으로는 사소할 수 있어 놓치기 쉬운 부분이지만, 이 부분을 챙겨갔을 때 하드웨어에 미칠 영향은 어마어마할지도 모르죠. 이 과목에서 성능과 관련된 이슈를 다루는 주제들은 다음과 같습니다.

 

  • 클래스의 상속과, final 키워드와 성능
  • 옵저버패턴과 성능의 관계
  • 상속 vs 컴포지션 그리고 성능

누군가 얘기했듯 메모리를 이해하는 것이 프로그래머에게 핵심이라면, COMP2500 은 제대로 된 방향으로 교육을 이행하고 있는 것이죠.

POCU Trinity - 신년 다짐, 이제는 지켜보자

'계획'과 '목표'는 다릅니다. 무엇인가 이룰 대상을 '목표'라고 한다면, 그 목표를 이루기 위해 미리 설계된 프로세스가 '계획'이죠. 곧 '로드맵'이라고 할 수 있겠습니다.

 

'진정한 프로그래머'가 목표라면, '포큐 아카데미'는 그 계획 중의 일부가 될 수 있습니다.

 

사놓고 보지 않는 강의가 얼마나 쌓여있으신가요?

강의를 완주하셨다고 하더라도 그 개념이 얼마나 머리 속에 남아있나요?

배운 내용을 막상 적용해보려고 하니 막막하시지는 않으신가요?

 

앞선 리뷰에서 입이 닳도록 소개드린 "강의 - 실습 & 과제 - 시험" 으로 이어지는 POCU 의 삼위일체 시스템은 목표를 이루는데 그 가능성을 매우 높여줍니다.

 

스스로를 강제할 필요성이 느껴지신다면 POCU 가 답입니다.

강의-시험-과제-삼위일체
공부를 할 수 밖에 없게 만드는 공포의(?) 삼위일체 (feat. 등록금)

궁금한 이야기

이번 섹션은, 제가 COMP2500 과목을 수강하기 전에 본 과목에 대해 궁금했던 점을 중심으로 작성했습니다.

실습과 과제 구성

모호할 수 있는 테스트케이스 기준

개체지향의 주관성에 걸맞게 과제 또는 실습의 채점 대상이 모호하게 느껴지는 부분들이 있었습니다. 그런 경우에는 꼭 슬랙 대화방에서 조교님들 또는 직원분들의 도움을 받아야만 하는 경우들이 있었죠.

 

제가 궁금하거나 해결하지 못했던 부분들은 대부분 앞서 과제를 해결하셨던 분들께서 질문하신 대화 내용들을 통해서 해결할 수 있었습니다.

 

그럼에도 불구하고 해결하지 못한 문제들이 있었는데, 저같은 경우는 실습 또는 과제를 너무 늦게 시작해버리는 바람에 도움을 받을 기회를 놓쳐버렸습니다. 꼭 미리(과제가 뜨자 마자) 시작하셔서 모두 좋은 점수 얻어가시길 바랍니다.

하나-고치면-더-큰-문제가-터지는-움직이는-그림
제발 그만좀 터져주겠니...?? ㅠㅠ

흥미를 돋궈줄 내용 구성

개체지향은 실세계의 사물들을 모델링하는 것으로부터 그 개념이 시작되었습니다. 마찬가지로, 실습과 과제를 통해서도 실생활의 실제 사물들을 모델링해보게 될 것입니다. 특히 기억에 남는 '스타크래프트'를 모방해보는 과제였습니다. 이 과제는 유닛들을 모델링해보고, 그 유닛들을 실제 전장에 소환하여 서로 싸우도록 하는 것이지요.

 

화려한 그래픽과 사운드는 없지만, 터미의 글자로 표현되는 유닛들이 움직이며 서로 데미지를 주고 받는 모습을 보는 것 만으로도 굉장히 황홀한 경험이었습니다. (빌드봇에게 얻어터진건 비밀...ㅋㅋ)

시험

중간고사는 포큐 수강생분들 사이에서도 COMP2200 중간고사와 함께 악명(?) 높은 시험이라고 합니다. 그만큼 어려웠고 저 또한 높은 점수를 받지는 못했습니다.

 

시험은 직접 코딩을 많이 해보면서 평소에 감을 높여두는 것이 도움이 된다고 생각합니다. 강의에서 제시되는 샘플코드나, '코드보기'를 통해서 제공되는 코드들을 직접 타이핑해서 결과를 확인해보며 공부해두는 것을 추천드립니다.

작은 팁 하나

문제 유형 중에 다음과 같은 유형이 있습니다.

  1. 이 코드에 문제는 없는지? (컴파일오류, 런타임오류 판단)
  2. 문제가 있다면 그 이유는?
  3. 문제가 없다면 출력되는 결과는?

이 문제 유형에 함께 제공되는 코드의 길이가 상당한 경우들이 많은데요. 코드를 완벽히 분석하다가는 시간이 부족할 수 있습니다. 그래서 이 유형같은 경우에는 코드를 전체적으로 한번 훑으면서 문법적인 카테고리를 파악하고(i.e. 추상클래스) 해당 문법에 비추어 오류는 없는지 먼저 판단을 해보는겁니다. (i.e. 메서드에는 abstract 키워드가 있는데 클래스에는 abstract 키워드가 없다거나) 이 경우에는 코드 자체가 어떻게 진행되는지 파악하지 않아도 되기 때문에 시간을 절약할 수 있습니다.

디자인패턴

일반적인 코딩 교육 컨텐츠들의 마케팅에 자주 노출된 분이시라면 '디자인패턴'이 프로그래머에게 굉장히 중요한 주제로 인지하고 계실것 같습니다.

 

하지만 POCU 에서는 '디자인패턴'의 잘못된 교육 방법이 어떻게 소프트웨어계에 어떻게 병폐로 작용했는지부터를 소개하며, '디자인패턴'을 꼭 공부해야한다는 부담감으로부터 해방시켜줍니다.

 

대한민국에서 수학 교육을 받아본 분들이시라면 모두 '근의공식'을 알고 계실겁니다. 이 공식을 외우는 것도 중요하다고 할 수 있지만, 그 이전에 인수분해라든가, 완전제곱식을 이해하고 근의공식의 원리를 파악해두는 것이 훨씬 중요합니다. 근의공식만 외운 사람은, 2차방정식을 보자마자 일단 근의공식으로 해를 구하려고 시도합니다. 그 문제가 근을 구하라는 문제가 아닌데도 불구하고 말이죠. (제가 그랬습니다...)

 

비슷한 예시로 못과 망치의 예도 들 수 있습니다. 이제 막 망치로 못을 박는 방법을 배운 사람은, 튀어나와있는 모든 대상만 보면 망치질을 하고싶어진다는 것이죠. 

망치와-못-망치질-배우면-모두-못으로-보인다는-짤
"가지고 있는 도구가 망치뿐이라면, 모든 것을 마치 못인 것처럼 대할것이다."

 

포큐아카데미에서도 디자인패턴을 비슷한 대상으로 소개하고 있습니다. 인간의 사고는 여러 구체적인 것들로부터 하나의 일반적인 것을 추출해내는데 익숙합니다. 수학교육에서 병폐로 지목되는 하는 '공식만 외우는' 학습법과 비슷하게, 디자인 패턴을 애매하게 배운 뒤 무조건적으로 디자인패턴을 적용하려고 하는 시도를 경계하라고 가르치죠.

 

이렇게, 현업에서의 풍부한 경험을 가지고 있는 사람들이 모여 제작된 포큐아카데미의 방향성이 '집중할 것에 집중'할 수 있도록 도와준다고 생각합니다.

C를 먼저 들어야 하는가?

POCU 의 공식 입장은 COMP2200 과 COMP2500 둘 중 어떤 것을 먼저 들어도 상관 없다는 입장입니다. 하지만, 제가 C 과목 COMP2200 을 먼저 듣고 와본 입장에서 가능하면 COMP2200 을 먼저 듣는 것이 본 과목(COMP2500) 을 수강하는 데에도 도움이 되는것 같습니다.

 

만약, COMP2200 을 건너뛰고 COMP2500 을 바로 수강하게 되시더라도 다음 개념들은 한번 훑어보시는 것이 도움이 될 것 같네요.

 

  • C언어의 함수포인터의 개념
  • 해시함수의 원리

수강시간

개인적으로 수강에 어느정도의 시간이 걸렸는지 개략적으로 추측해본 자료입니다. 실측 자료가 아니고, 단순히 느낌이기 때문에 객관적인 자료가 아님에 주의 부탁드립니다.

 

  • 동영상 강의시간은 약 30시간입니다.
  • 강의를 보면서 되돌리기도 하고, 잠시 멈추고 정리하는 시간까지 합친다면 추가로 10~20 시간정도가 소모된 것 같습니다.
  • 실습은 총 11개이며 평균적으로 실습 하나에 3시간정도면 해결할 수 있었던 것 같습니다.
  • 과제는 총 4개이며 평균적으로 과제 하나에 10시간 정도면 해결할 수 있었던 것 같습니다.

 

한 주에 넉넉히 10시간정도는 여유시간을 잡아야 할 것으로 판단됩니다.

상대적 노잼 😅

너무 좋은 이야기들만 한 것 같아, 조금은 분위기를 식히고 가보도록 하겠습니다.

 

사실... 저는 이 수업이 COMP1000, COMP1500, COMP2200 에 비해서 상대적으로 재미가 덜했습니다.(그래서 강의 중간에 특별한 이벤트가 삽입된 것일지도...) 그렇다고 재미가 없었다는 것은 아니에요. ^^;; 다만, 다른 과목에 비해서 강의를 듣고 실습과 과제를 진행하는데 보다 높은 인내력과 지구력이 필요했던 것 같습니다.

 

하지만, 입에 쓴 약이 몸에는 좋은 법이지요. 저도 그 생각을 하며 꿋꿋하게 전진했답니다. 물론 이번에 배운 개체지향의 내용이 당장 실무에 도움이 된다고는 말씀드리기 어렵겠지요. 다만, 적어도 개체지향이라는 과목에 대해서 '확실하게' 정리하고 넘어가는 느낌입니다. 덤으로, JAVA 의 기본에 대해서는 더더욱 확실하게 정립할 수 있는 경험이었습니다.

교재

공식적인 강의 소개 자료에는 링크되어있지 않지만, 강사는 [Object-Oriented Thought Process - Matt Weisfeld] 도서가 그나마 시중에 나온 개체지향 관련 서적들 중에서 개체지향 공부에 가장 도움이 될만한 책으로 소개한 적이 있습니다. 아쉽게도, 한국어 번역본은 절판되어 따로 링크를 하지 않았다고 밝힌 적인 있는 것으로 아는데요.

 

다행히도 최근 한국어판으로 다시 출판된 것 같습니다. 참고하실 분들은 참고하시면 좋을듯 합니다. (포큐아카데미에서 공식적으로 선정한 교재가 아님에 유의해주세요. 어차피 선정된다고 하더라도, 교재와는 독립적으로 강의가 진행됩니다. 실제로 참고용일 뿐, 수강 중에 사용하거나, 과제 또는 실습에 사용되지 않습니다.)

객체지향-추천-도서
(좌) Object-Oriented Thought Process (우) 객체지향 사고 프로세스 by Matt Weisfeld

결과

그래서 결국 개체지향 설계를 잘하게 되었나? 라고 물어보신다면 아직 아니라고 대답해드릴 수 있을 것 같습니다. 하지만, 적어도 개체지향의 올바른 방향과 개체지향의 근간을 이루는 개념들이 무엇인지는 확실하게 파악할 수 있었던 시간이었습니다.

 

더욱 확실한 것은 이 수업을 듣고 보니, 나는 개체지향이라는 단어만 알았을 뿐 그 대상에 대해 이해가 거의 전무하다시피 했었음을 알게 되었다는 것입니다. 그리고 또 깨달은 한가지는, OO 에 대한 이해 및 설계를 잘하게 되기 위해서는 어떤 방향으로 어떻게 노력해야 하는지 그 방향성을 알게 되었다는 것입니다.

 

기회가 되면 다시 한번 수강하고 싶은 과목입니다. 몇몇 과제와 실습에서 100점을 받지 못한 것도 그 이유이지만, 교양같은 수업이기도 했기 때문입니다. 교양은 나의 지식을 담는 그릇을 넓혀주는 것이니까요.

 

앞으로 제가 개체지향적으로 프로그램을 설계할 때 이번에 배웠던 경험과 지식들이 분명히 조금이나마 영향을 줄 것이라는 확신이 생긴다는 점이 무엇보다 좋네요. 

성적

성적표

작년 2020년 1월 POCU COMP1500 입문 과정을 수강하면서 세웠던 기준이 있었습니다. 내가 포큐 풀코스를 통과해내지 못한다면 내겐 프로그래머로서 자질이 없는 것이라고요. 하지만 이렇게 조금씩 스스로를 증명해나가고 있답니다. 앞으로 남은 8과목을 통해서도, 계속해서 스스로를 증명해보이겠습니다.

고난의 길

앞선 디자인패턴 부분에서도 이야기를 살짝 드렸지만, POCU 의 방향은 어쩌면 대중성과는 어느정도 거리가 있는 것일지도 모릅니다. '애자일 소프트웨어 개발 선언'으로 유명한 사상가(?) 분들과는 어느정도 그 결을 반대로 하는 것 같은 느낌입니다.

 

그렇다고 그 분들의 주장을 무조건 반박하는 것은 아닙니다. 오히려 극단주의자들이 '무조건 이래야 한다'라며 주장하는 내용들이 어떤 상황과 맥락에서 적절한 이야기인지 이야기합니다. 왜 그들의 주장이 '모든 상황'에 들어맞는 방법인 것은 아닌지 조목조목 따져준답니다. 뭐 이건 평소 포프TV를 애청해오신 분들이라면 이미 알고 계시는 내용이겠지만요.

 

COMP2500 을 수강하면서 저도 모르게 무조건적으로 신뢰하고 있던 상식들에 대해서 다시 한번 생각해보는 계기가 되었습니다. 프로그래머라면 갖추고 있어야할 자세중의 하나가 '비판적 사고'임을 다시 한번 상기시켜주었죠. 그 전까지는 프로그래밍의 세계가 굉장히 객관화되어있는 것 같아보였습니다. 그 안에도 소위 '약장수'들이 존재하니 조심해야 한다는 사실을 알기 전까지는요. 그런 의미에서 COMP2500 은 어느정도 안전 예방교육의 의미도 갖는 것 같습니다. 보통 누구나 중요한 것임은 알고 있지만, 평소에 놓치게 되는 부분인 것 같아요.

 

포큐에서 제시하는 관점을 지닌다는 것이 당장은 고난의 길일 수 있다고 생각합니다. 마치 지동설을 주장했던 갈릴레이 갈릴레오처럼요. 잘못된 유행에 동조하느니 차라리 갈릴레요.

 

갈릴레이-갈릴레오-초상화
"진실을 모르면 바보요, 진실을 알고도 거짓을 가르치면 범죄다."

반성

코드리뷰

시간이 없다는 것을 핑계로, 다른 분들의 코드를 보는 데 인색했습니다. 특히 주관이 강한 분야이기 때문에 같은 목표에도 다양한 방향성이 존재하는 점을 인지했는데도 불구하고 말이죠.

 

사실 생각해보면 다른 분들의 코드를 통째로 보는 것도 무리는 맞는 것 같습니다. (실제로 개체지향 과목의 실습과 과제들의 코드는 클래스가 여러개일 수 있기 때문에 공유되는 파일이 20~30개가 되기도 합니다.)

 

그래서 과거의 나에게 조언을 해줄 수 있는 기회가 주어진다면 다음과 같이 조언해주고 싶습니다.

 

"실습과 과제를 작성하는 중 확신이 서지 않는 코드에 대해서는 주석 또는 메모를 해놓아라. 그리고 그 부분만이라도 다른 사람들의 코드와 비교를 해보는 것은 어떨까?"

 

라고 말이죠.

과제계획

이번에도 역시 실습과 과제를 마감 하루, 이틀 전에 시작한 것이 큰 화근이었습니다. 과제3에서 멘탈이 털리고 난 후, 과제4에서는 다음 프로세스를 지키려 노력하였습니다. 다행히 과제4에서는 100점을 맞을 수 있었는데요. 그 프로세스는 다음과 같습니다.

 

  1. 강의는 3주 분량을 앞서 들어둔다.
  2. 과제가 열리는 날, 과제 명세를 1회 정독한다.
    • 가능하면, 코딩을 시작한다.
  3. 첫째주. 첫 번째(최초) 과제 제출을 마친다. (빌드봇 제출)
  4. 둘째주. 통과하지 못한 테스트케이스들을 하나씩 천천히 해결해나간다.
    • 아직 1~2주가 남았기 때문에 여유롭다. 여유가 있기 때문에 발생한 문제들에 대해서 깊게 생각하고 더 근본적인 해결책을 생각해낼 수 있는 계기가 된다.
    • 하루에 두 번 정도만 제출한다고 해도, 1주일에 14번의 과제 제출이 가능하다. 이를 몰아서 한다고 하면 30분의 쿨타임때문에, 7시간에 해당하는 분량이다.
  5. 셋째주. 풀리지 않는 이슈(테스트케이스)들을 집중적으로 해결해나간다.
    • 2주차에 대부분의 문제는 잡혔을 것이다. 슬랙채널의 도움을 받을 여유도 있었기에 수번만의 제출만으로 100%를 달성할 수 있는 가능성이 높아진다.
    • 다른 학우들의 이슈 상황들이 공유되면, 해당 이슈들을 보고 도움을 준다. '교학상장'이다. 이건 결국 자신의 성장에 밑거름이 된다.
  6. 넷째주. 과제 제출은 마감되었지만, 학우들간에 공유되는 코드를 서로 리뷰해본다. 자신의 코드와도 비교해보고, 상호간의 코드에서 더 나아질 점은 없는지 회고해본다.

 

실습은 차치하고서라도, 과제만큼은 꼭 미리 하시길 권장드립니다. 과제 기간은 총 3주가 주어지지만, 꼭 마지막 주 주말이 시작될즈음에서야 시작하게 되는 마법같은 현상은 도대체 뭐라 설명드려야할지...

 

'깨달음'은 꼭 컴퓨터 앞에서 코딩을 하는 순간에 오는것만은 아닌 것이 확실한 것 같습니다. 실제로 창의성 기반의 직업을 갖고 계신 분들도 화장실에 있거나, 산책을 하면서 다양한 아이디어들을 떠올린다고들 하죠. 이처럼 '깨달음'을 채집하기 위해 다양한 기회의 순간들을 접할 방법은 단 하나. 미리 시작하는 것 뿐입니다.

앞으로의 계획

이번 2021년도 5월학기에는 '알고리듬' 과목이 개설되었습니다. 마침 참 적절하게도 제가 개체지향을 끝내는 시점에 맞춰서 알고리듬 과목을 수강하게 되어 다행입니다.

 

아시다시피, 개설 과목에는 여러가지 장점이 있다고 생각하는데요. 얼리버드 수강료 할인도 있고, 무엇보다 많은 분들이 한꺼번에 수강을 하러 오시기 때문에 좋은 수강생분들을 또 만나게 될 것이라는 점입니다.

 

과목이 개설될 때 들어보는 것은 처음인데, 이번에 알고리듬 과목으로 그 경험을 할 수 있게 되어 기분이 좋습니다.

COMP3500-알고리즘-및-자료구조-로고
2021년도 5월학기에 새롭게 개설된 'COMP3500 알고리듬 및 자료구조'

 

마치며

처음 시작은 수강 자체에 의미를 두었었으나, 우여곡절 끝에 통과까지 하게 되어 얼마나 기쁜지 모릅니다. 그리고 또한 개인적으로도 한 층 더 성장한 것 같은 느낌이 듭니다.

 

그리고 이번 학기 중에 '수료증' 기능이 추가되었는데요. 과목을 수료하게 되시면 수료증을 발급받으실 수 있습니다. 기말고사 전에 이 소식을 접하고, 어쩌면 수료증 발급받아보려고 더욱 열심히 했는지도 모르겠네요. 이번에는 뱃지를 많이 얻지 못하였습니다. 실습과 과제를 모두 통과하면 받게 되는 Perfectionist 뱃지도 받지 못해서 아쉽지만, 통과를 했다는 사실 하나에 큰 의미를 두려고 합니다. (그래도, 나중에 보니 Medic 뱃지를!! 앞으로 더 많은 수강생들과 상부상조하라는 의미로 받아들이겠습니다. ^^❤)

 

이번 리뷰는 제가 수강을 제대로 하지 못한만큼... 내용도 부실한것 같습니다...

다음 알고리듬 리뷰에서 풍성한 내용으로 다시 한번 찾아뵐 수 있었으면 좋겠습니다.

 

그럼 모두들 즐코하시길 바라면서 글을 이만 마치겠습니다. Adios!

반응형

Designed by JB FACTORY