글 작성자: Key Ryung

0. Background

후기를 쓰기에 앞서 듣기 전의 프로젝트 수준을 적고 시작하려 한다.

 

-> 졸업 전

  1. H/W 설계 & Android App 연동 개발
  2. Android App(Server랑 통신하는)
  3. Matlab으로 이미지 분석
  4. 간단한 쇼핑몰 홈페이지 제작
  5. H/W 설계 / MCU 프로그래밍

> 졸업한 학과에는 H/W 위주로 커리큘럼이 있어서 S/W 관련 커리큘럼이 너무 빈약해서 독학 위주로 진행했다. S/W수업으로는 C언어, Java 정도 들었는데 Java는 클래스 맛보기 정도까지 진도를 나갔다(+Android...) 그 뒤 Abstract class나 Interface는 알지만 왜 써야 되는지 어떻게 써야 되는지는 모르는 상태...

-> 졸업 후 첫 회사

  1. H/W 설계 + 데이터 분석 프로그램(Matlab/Python) 

> H/W와 분석 프로그램 + 실험의 업무를 주로 진행했다.

 

 아두이노나 MCU 이런 부분 제어하는 것 뿐만 아니라 MCU/FPGA 주변 회로 설계도 그리고 전원/분석/증폭/연산 파트 등등 Chip 선정하고 PCB Routing 해서 납땜해서 노이즈 제거하고 임피던스 매칭 해서 나온 Output을 DAQ로 받아(Binary Data) 해당 데이터(~160GB/file * 8)를 연산해서 Plot 하고 그에 대해서 영역 Segmentation, 영역 별로 정규화하고 계산 값과 실험값 비교하는 업무...

 프로그래머라고 하기에는 너무나 많은 영역을 맡고 있었고 다른 의미의 풀스택 개발자로 커리어를 쌓고 있었다. 그래서 프로그래머로써 집중된 커리어를 쌓고 싶어 이직을 하겠다고 마음의 결정을 내리게 된다.

 

1. Why POCU?

 프로그램을 독학하면서 이미 포프 선생님을 포프 TV를 통해 알고 있었고 유튜브를 구독하고 있었기 때문에 POCU Academy를 런칭한다고 알고 있었지만 회사의 업무를 하느라 너무 바빠서 들을 생각조차 못하고 있었던 상황이었다. 그러던 와중에 이직 결정을 하고 이직(구직) 시장을 알아보게 된다.

> 봤던 공고문 자격 요건 예시
ㆍ디자인패턴에 익숙한 분
ㆍSOLID한 Code에 일가견이 있는 분
ㆍTDD에 대해 경험이 있는 분

 

 개념으로는 공부하면서 한번씩 접해보았지만 실제로 이런 원칙들을 적용해야 되는가에 대해 의문만 갖고 넘어갔었다.(분명히 적용하면 좋다는 것은 알겠으나 현실적으로 가능한지에 대한 의문) 그런데 진짜 필요했다니... 역시나 공부를 잘 못하고 있었다고 생각도 많이 들고 아직 프로그래머로써 많이 부족하다는 생각이 들었다. 그래서 구글을 찾아보면서 개념을 다시 정리하기 시작했다. 하지만 내가 하던(?), 알던 프로그래밍과는 다르게 너무 주관적이었다.
예시를 들면 한 클래스 내의 method를 4개까지만 만듦으로써 단일 책임을 지킬 수 있다. 인터페이스와 구현 클래스를 1:1로 매칭함으로써 설계가 유연해지고 미래에 대비할 수 있다. 등등


 기술 블로그마다 쓰여 있는 개념과 구현 코드의 내용이 제각각이었다. POCU를 듣기 전까지만 해도 OO 설계에 대한 기준이 없었기 때문에 내가 그동안 짰던 코드가 모두 잘 못 되었다고 생각했다. 왜냐하면 내 코드는 getter/setter만 해도 메서드가 4개가 넘어가고 getter/setter를 제외해도 4개가 넘어갔기 때문에 단일 책임 원칙을 지키지 않았으며 내 코드는 미래에 대비하지 않는 무책임한 코드구나... 디자인 패턴을 사용하지 않고 짰기 때문에 더 좋은 코드를 짤 수 없었구나

TDD 개발론의 도입을 통해 내 코드가 더 좋아질 수 있겠구나!

 

 공부하면 할수록 의심이 들었던 시기였다. 그래서 클론 코딩이라고 불리는 학습도 해보고 프레임워크도 배우고 정말 이것저것 프론트엔드~백엔드에 대한 로드맵을 그려 학습하고 있었다.(앞서 말한 것들이 안 좋다는 것은 아니다. 다만 순서가 잘 못 되었다고 느낀다.)

 

그러던 와중에 POCU Academy에서 OO 클래스가 딱 9월에 열리는 것을 보고 커리큘럼을 봤다.

 

<fig1. POCU OO 커리큘럼 - 상속 vs 컴포지션>
<fig2. POCU OO 커리큘럼 - 디자인 패턴>

pocu-ko.teachable.com/p/comp2500

 

COMP2500: 개체지향 프로그래밍 및 설계 (Java)

개체지향 프로그래밍 및 설계 (Java) 이 과목은 '개체지향 프로그래밍(OOP)'과 '개체지향 분석 및 설계(OOAD)'를 한꺼번에 가르치는 과목으로 OO 언어의 사용법을 배우는데 그치지 않고 실세계를 컴퓨

pocu-ko.teachable.com

 개인적으로 커리큘럼을 보고 이거다!라고 생각했었다. 인트로 혹은 링크에서 말씀하신 것 같이 Java 강의가 아니다. 강의 내용 중 C#에서는 이런 문제점을 어떻게 해결하고 이런 점에서는 Java가 강점을 보인다 등등 OO(Object-oriented) 프로그래밍 및 설계에 대한 강의이다. (이 강의를 보고 Kotlin을 다시 보니 Kotlin이라는 언어가 Java의 어떤 점을 해결하고자 했는지 알 수 있었다.)

 

 지금까지 프로그래밍을 하면서 느낀건 컴퓨터 언어라는 건 결국 컴퓨터가 이해할 수 있는 어떤 정보를 주고받는 방식을 추상화한 것이고 추상화를 어떻게 구현하느냐에 따라 C/C++/C#/Javascript/Java/Kotlin/Swift 등등 다양한 언어로 나뉘는 것이지 언어로써의 구조는 같다는 것이다. 그렇기 때문에 Java라는 언어에 대해서만 배우는 강의는 나에게 크게 필요하지 않았다.(실제로 지금은 Kotlin이라는 언어를 사용해서 Android App을 개발하는 업무를 맡고 있다. 과거의 나는 C/JAVA를 죽어라 파서 좋은 프로그래머가 될 수 있다고 믿고 있었다.) 

 

이런 이유로 개체지향 프로그래밍 및 설계를 Full-Course로 신청해서 시작하게 되었다. 

 

2. So...?

> 가격

 강의를 신청할 때 가장 걱정되었던 것은 가격이었다. (월세 + 생활비 + 적금 + 기타 비용까지 하면 교육비까지 내기에는 너무 빠듯한 것이 현실이었다.) 게다가 문의 결과 카드 할부는 지원하지 않는다라는 답변까지 받았다그래서 하나를 포기하기로 했다. 바로 적금...! 아직 만기까지 10개월이나 남은 따끈따끈한 적금이었다. 하지만 많은 조사 결과 이런 커리큘럼은 찾을 수 없었고 이율이 2%도 안되는데 이직 성공해서 그 이상의 수익을 이뤄내자는 원대한 포부(타협)를 갖고 해지 후 신청했다.(결론적으로 너무나 탁월한 판단이었다고 생각한다.) 강의와 풀코스까지 다하면 100만 원 정도의 금액이고 이를 진행하는 3~4개월 정도로 나누면 25~33만 원 정도의 금액이고 코스의 내용을 생각하면 괜찮다고 느껴졌다.


 여러 후기들을 찾아봤는데 다양한 의견이 있었다.(요약하면 잘하면 굳이 들을 필요 없고 못하면 못해서 듣기 힘들다. 가격 대비 굳이 그냥 책보는게 낫다. 인*런 강의가 더 싸고 가격 대비 퀄리티가 좋다. 실습/과제 부분이 좋았다. 들으려면 강의와 풀코스까지 모두 듣는 게 좋다.)

모두 정답이라고 생각든다. 좋은 강의란 것은 상대적이라서 모두에게 좋은 강의가 있을 수가 없다.(누군가에게는 개념부터 차근차근 알려주는 강의가 좋을 수도 있고 누군가에게는 자유방임형으로 이거 만들어봐 이런 스타일의 강의가 좋을 수도 있다.)
나에게 필요하고 맞는 커리큘럼의 강의가 제일 좋은 강의라고 생각든다.

이런 점 때문에 스스로가 판단하는 것이 중요하다고 생각한다!

 

> 실습 및 과제

 말로만 듣던 실습과 과제, 그리고 시험까지 정말 정신없었지만 재밌었던 시간이었다. 본격적으로 Resume와 포트폴리오, 깃헙 정리, Resume와 같이 제출할 홈페이지 제작까지 시작해서 이력서 제출과 면접을 병행하면서는 하루에 4시간에서 5시간 정도 잤었다.(최근까지!ㅎㅎㅎ 이직 준비를 회사를 다니면서 진행했었다.)


 본론으로 돌아가서 실습과 과제에 대해서 말하면 강의를 통해 배웠던 개념을 코드로 구현할 수 있도록 내용을 정말 잘 설계해서 구성해 놓으셨다. 나 같은 경우 머릿속으로 생각해놓고 이렇게 구현해야지라고 그림으로 옮겨보고 코드를 작성했는데 빌드봇이라는 채점 시스템이 기가 막히게 내가 설계한 코드의 허점을 파고들었다.(함정은 모두 과제 명세서에 명시되어 있다. 내가 이런 부분은 간과하고 설계했을 뿐...) 이런 허점들을 하나씩 수정하고 수정하기 위해 테스트 케이스를 작성하고 코드를 갈아엎다 보면 점수가 조금씩 혹은 많이 올라간다! 신기한 것은 이런 과정을 통해 강의로만 배웠던 내용이 체화된다. 또한 내 코드의 전체적인 흐름이 보인다. 막연한 설계가 아니라 설계가 머릿속에 와 닿는달까?! 이런 점 때문에 98점에서 멈출 수가 없다. 2점을 올리면서도 배우는 게 너무나도 많았다. 이래서 풀코스로 신청하는구나 느껴졌다.

> 질문 시스템(feat. 슬랙)

 이 부분에서는 사람 by 사람으로 의견이 갈릴 것으로 생각된다. 내가 한 질문을 누군가 1대 1로 전담해서 답변해주는 시스템을 원한다면 POCU 질문 시스템과 맞지 않다. 경험해 본 결과 40명이 넘는 수강생 중 질문을 하고 답변해주는 수강생도 어느 정도 정해져 있었다.(물론 조교님도 잘 답변 주신다.) 다른 질문에 답변해주신 분이 내 질문에도 답변해주시고 첫 번째로 질문하시는 분도 거의 정해져 있었다. 더 신기한 건 내가 질문하려고 글을 정리하다 보면 이미 위에 똑같은 질문을 하신 분들이 계시고 어떤 방식으로 설계? 생각이 변해가시는지 볼 수 있다. 따라서 내가 질문을 할 필요가 없어진다. 이 정도 시스템으로도 나는 충분히 도움을 많이 받았고 수업이 진행되가면서 수강생들의 질문이 명확해지면서 더더욱 질문이 줄어들었다.

 

처음에는 A라는 기능이 안돼요. 이런 느낌이었다면 나중에는 A라는 기능에서 (ㄱ) 방식으로 구현했을 때 이런 부분이 문제가 있어서 (ㄴ) 방식과 (ㄷ) 방식을 도입했지만 여전히 (ㄱ)의 문제를 해결하지는 못했다. 새로운 방식으로는 (ㄹ)을 구현하는 방식으로 해보려고 한다. 가는 방향이 맞나요?

 

 이 수업에서 내가 원했던 것은 생각하는 방식, 문제 해결을 어떻게 시작하고 생각을 풀어나가는 방식이지 문제 풀이를 바로 알 수 있는 만능 개념? 원칙?("Silver bullet")을 원했던 것이 아니라 나와 잘 맞았다.

 

3. Then

이직은 성공!, POCU OO 수료는 fail?

<fig3. 최종 성적표>

결론적으로 OO를 수강해서 기말고사까지 완료하면서 하나의 과제와 중간고사와 기말고사를 말아먹었다...(아쉬움이 많이 남는다.)

 정말 신기하게 중간고사 기간과 과제 기간과 맞물려서 기술 면접이 잡혔고 업무가 미친 듯이 몰리면서 과제 3을 제출 전날 저녁부터 시작했다. 중간고사는 마찬가지로 개념만 복습하고 실습 코드를 다시 작성해 본다거나 해볼 생각을 못했다. 기말고사는 이직하는 시기와 겹쳐 인수인계와 이직하는 회사에 온보딩 하는 중에 준비해서 진행했다. 후...

 시험 검토하면서 이런 와중에 그래도 끝까지 끝마쳤다는 대견함과 좀 더 시간 관리를 잘했으면 두 마리 토끼를 잡을 수 있었겠다는 아쉬움이 교차했다.

<fig4. 필기 리스트>

그래도 OO에 대해서는 정말 듣고 난 전과 후의 차이가 확연히 차이 나는 것을 느끼고 아직 부족하지만 성장한 나 스스로 너무 뿌듯하다. 정말 다사다난한 시기에 POCU OO를 들었던 것은 좋은 판단이라고 생각한다. 그래서 이번 학기에는 C를 다시 POCU에서 수강하고 싶어 신청했다. 다음으로는 C++, 알고리즘(아직 안 열림), C#을 수강해볼 생각이다.

강의에 대한 후기와 더불어 어떤 과정에서 진행했는지 기록하는 목적으로 작성했다.