POCU 소프트웨어 공학용 수학 후기 (COMP1000)

CaChiJ·2021년 8월 22일
2

후기

목록 보기
3/3
post-thumbnail
이미지 출처 : POCU 아카데미 (pocu.academy)

👀 소프트웨어 공학용 수학?

필자는 수학을 썩 잘하지 못한다. 그래서 좋은 프로그래머는 수학적 능력도 갖춰야 한다는 소리를 들을 때마다 늘 마음 한 구석이 찜찜했다. 아마 꽤 많은 사람들이 이런 찜찜함을 쌓아두고만 있으리라 생각한다. 고등수학을 처음부터 갈고닦을 순 없으니 말이다. 그러던 차에 POCU의 소프트웨어 공학용 수학 강의를 보게 됐다. 여기서 '소프트웨어 공학용 수학'을 쉽게 풀어 말하면 '프로그래밍할 때 필요한 수학 지식'이다. 이것만 들으면 프로그래밍에 필요한 수학적 지식을 모두 채울 수 있다는 말에 풀코스를 신청했다. 이 글에서는 3개월 간 POCU 소프트웨어 공학용 수학 풀코스를 수강하며 느낀점, 장단점을 솔직하게 적어보려 한다.


📚 배우는 것들

  • 1주차: 숫자 체계(진법), 비트와 바이트
  • 2주차: 컴퓨터의 정수/문자 표현법
  • 3주차: 컴퓨터의 유리수 표현법
  • 4주차: 집합론
  • 5주차: 명제, 불 대수, 논리 회로 설계
  • 6주차: 조건 명제, 증명
  • 7주차: 과학적 사고방법, 비트 마스킹
  • 9주차: 수학적 귀납법, 재귀, 분할 정복
  • 10주차: 벡터, 튜플, 행렬
  • 11주차: 경우의 수, 확률
  • 12주차: 몬테카를로 알고리듬, 통계
  • 13주차: 도수 분포표와 히스토그램, 데이터 비닝, 근사
  • 14주차: 점근 표기법, 지수와 로그

필자는 이 코스를 듣기 전에도 위 항목들에 대해서 적어도 한 번씩은 공부한 적이 있었다. 솔직하게 말하면 쉽게 통과할 수 있을 줄 알았다. 그런데 코스를 들으면서 '그 중에 제대로 알고 있던 건 거의 없었구나'하고 느꼈다.

이 과목에서는 부동소수점형의 유효범위나 유니코드의 비트 단위 구성 같은 부분까지 세세하게 살펴본다. BCD처럼 잘 쓰이지 않아 학생들에게 외면받는 내용들까지 자세하게 다룬다. 2~3주 동안 기본 자료형의 이해에 쩔쩔 매는 자신을 보다보면 아직 갈 길이 멀구나... 하고 겸손한 마음을 갖게 된다. (인성교육까지 시켜주는 포큐 아카데미...)

5주차에는 생소할 수도 있는 논리 회로를 배운다. 늘 컴퓨터를 저수준에서 이해하라고 강조하시던 포프님의 철학이 담긴 부분이라고 생각한다. 필자는 논리 회로에 관련해 이전부터 꾸준히 공부해봤기에 큰 감흥은 없었다. 하지만 컴퓨터의 가장 작은 구성 요소부터 뜯어 보는 것은 논리 회로를 처음 접하는 분들에게 아주 흥미로울 것이라 의심치 않는다.

6주차 ~ 15주차까지는 고등학교에서 조금이라도 배운 내용들일 것이다. 고등학교 수학에 컴퓨터 공학이 많이 첨가된 형태라고 보면 된다. 통계 부분은 고등학교 확통을 대충 암기식으로 넘겼다면 힘들 수도 있다. 고등학교 때 느꼈던 수학에 대한 공포가 다시 떠오를 수도 있다. (경험담이다) 본인의 고등학교 수학 실력에 아쉬움이 남는다면 부족한 부분을 채울 수 있는 훌륭한 시간이 될 것이다.


🎈 COMP1000의 구성

1. 실습과 과제

수학 과목이지만 여전히 코딩 실습과 과제가 존재한다. 배운 이론을 이용해 프로그래밍하는 방식이다. 예를 들면 다음과 같다.

숫자 체계(2/10/16 진수) 강의 -> 2/10/16 진수간 변환 함수 코딩
행렬 강의 -> 행렬 간 스칼라곱 수행 함수 코딩

이 과목에서는 때때로 코딩 실습 대신 퀴즈가 나온다. 퀴즈로 10문제가 나오고 제한 시간 안에 풀어서 제출하면 자동으로 채점되는 방식이다. 퀴즈들의 전체적인 구성은 동일하고 퀴즈에 제시된 숫자들만 바뀌는 형식으로 출제된다. 퀴즈는 제한 없이 풀어볼 수 있어서 문제 풀이 -> 틀린 문제 점검 -> 다시 문제 풀이 순서로 반복하면서 부족한 부분을 채워나갈 수 있다.

2. 빌드봇

실습과 과제 코드는 포큐 빌드봇으로 채점된다. 뭔가 잘못 생각하고 코드를 짜면 아래 캡처처럼 빌드봇이 바로 알려준다.

과목 위키 문서에 들어가면 내가 틀린 테스트 케이스의 설명을 볼 수 있다. 틀린 테스트 케이스를 통해 내가 어느 부분의 이해가 미흡한지 파악할 수 있었다. 필자는 빌드봇이 찝어준 부분을 집중적으로 복습하면서 잘못 이해하고 있던 수학 개념을 알아차린 경우도 있다.

사실 원래 필자는 수학 과목에서 코딩, 빌드봇의 역할이 크지 않을 것이라고 생각했다. 하지만 실제로 수강해보니 수학 과목과도 꽤 잘 맞는다고 느꼈다. 이는 뒤의 '😍 좋았던 점 - 2'에서 조금 더 자세히 풀어보겠다.

3. 슬랙방

포큐 풀코스에서는 다른 수강생들과 토론할 수 있는 슬랙방에 들어갈 수 있다. 아래 캡처처럼 슬랙방을 이용해 추가로 궁금하거나 애매한 부분에 대해 질문하거나 토론할 수 있다.

다른 수강생분들의 질문과 답변을 읽고 자신의 막힌 부분을 해결할 수도 있다. (Sherlock님 정말 감사했습니다ㅠㅠ) 커리큘럼 진도보다 앞선 부분에 대한 질문을 올리면 포프님께서 직접 답변주시기도 한다.

슬랙방을 제대로 활용하는 방법은 질문이든 답변이든 적극적으로 참여하는 것이다. 다른 수강생의 질문이나 답변을 읽어보면서 스스로의 생각을 확장해나갈 수 있다.

4. 시험

매우 어렵다. 특히 기말고사가 힘들다. 사실 COMP1500은 어찌저찌 벼락치기로 해결할 수 있었다. 그런데 COMP1000 과목은 수학 계산이 많기 때문에 헷갈리거나 망설여지는 부분이 있다면 정해진 시간에 맞추기 힘들다. 때문에 실습 퀴즈들을 여러번 반복해서 풀면서 계산 과정에 충분히 익숙해지는 것이 중요하다.


😍 좋았던 점

1. 수학 자체에 매몰되지 않는다.

강의 후반부에는 통계, 행렬과 같이 얼핏 컴퓨터공학과 관련 없어 보이는 수학 이론들이 나온다. 이런 내용들은 메가스터디나 이투스 인강 1타 강사가 나을 것이라 생각할 수도 있다. 하지만 필자는 이런 내용들도 포큐가 더 낫다고 생각한다. 포큐에서는 프로그래머가 강의를 만들기 때문이다. 행렬을 배운 뒤에는 행렬 계산 순서에 따른 계산량 차이, 수학적 귀납법을 배운 뒤에는 그를 이용한 프로그램 성능 개선을 다룬다. 이처럼 프로그래머의 시선에서 수학을 배울 수 있다는 점이 포큐 수학 과목의 가장 큰 장점이다.

2. 수학 이론을 코드에 적용해볼 수 있다.

수학강의인데도 코딩 실습이 중요한 이유는 다양한 입력이 주어질 때 수학 이론이 어떻게 적용되는지 생각해볼 수 있기 때문이다. 예를 들어 두 벡터의 스칼라 곱을 계산하는 함수를 짠다고 해보자. 가장 먼저 '내가 두 벡터를 어떻게 곱했더라?' 하고 생각할 것이다. 그리고 벡터의 길이가 1인 경우, 2인 경우, 3인 경우 등을 생각해보며 문제 상황을 점차 추상화한다. 이 과정을 통해 문제에 대한 통찰을 얻었다면 마지막으로 문제를 해결하는 코드를 짠다. 이처럼 '코드를 짜는 것'은 문제를 분석하고 그에 따른 문제 해결 방식을 기술하는 것이다. 따라서 이 과정에서 자연스레 이런 저런 상황을 가정해보며 수학 개념에 대한 여러 분석을 얻게 된다.

3. 공부 대상에 대한 확신

마지막으로는 심리적인 부분이다. 필자는 수학 공부를 시작하려 하면 어디서부터 어디까지, 얼마나 깊이 파야하는지 막막하기만 했다. 또는 아주 넓은 범위를 잡았다가 시작하자마자 지쳐서 그만둔 적도 있다. 그런데 이 과목의 내용들은 포프님께서 '이거랑, 이거, 이거는 꼭 알아야 돼요~'하고 찝어주신 부분이다. 그래서 내게 꼭 필요한 것을 배우고 있다고 확신하며 공부할 수 있어 좋았다. 만약 수학공부를 하고 싶은데 어디서부터 해야할지 감이 안잡힌다면 이 과목을 강력히 추천한다.


🤔 아쉬운 점

COMP1500에서는 코딩 스타일, 프로그램의 성능, 자잘한 개선사항 등 슬랙방에서 다른 수강생과 토론할 부분이 많았다. 하지만 COMP1000은 수학에 대한 내용을 다루다보니 슬랙방에서 토론할 부분이 비교적 적다고 느꼈다. 실제로 필자가 참여했던 COMP1500 1월 학기 슬랙방에 비해 COMP1000 5월 학기는 수강생 간의 교류가 현저히 적었다. (물론 이 부분은 학기마다 편차가 있다) 만약 슬랙방에서의 활발한 토론을 기대한다면 조금 더 고민해 볼 필요가 있다.


🎯 FAQ

1. COMP1500과 병행할 수 있을까?

필자도 이전에 많이 고민했던 부분이다. COMP1000을 들은 입장에서 '정말 어렵다'고 생각한다. COMP1000의 커리큘럼은 수강생이 C# 코딩에 익숙해지기까지 기다려주지 않는다. 실제로 필자가 가장 힘들었던 실습 중 하나는 4주차에 진행되는 과제1이었다. 물론 C#에 대해 충분히 잘 알고 있다면 상관 없을 수 있다.

2. 풀코스? 동영상 강의?

동영상 강의만 듣다보면 모르는 것도 안다고 생각하기 쉽다. COMP1000이 수학 강의이기 때문에 더욱 그럴 가능성이 높다. 다시 말해 개념들을 주르륵 정리해놓고 이해했다고 착각하기 매우 쉽다. 하지만 풀코스의 실습, 과제들을 해결하다보면 자신의 부족한 부분을 스스로 알아채고 채워나갈 수 있다. 만약 풀코스를 들을만한 여건이 된다면 풀코스를 들을 것을 추천한다.


📝 끝맺으며

아쉬운 점도 있었으나 충분히 많은 것을 배울 수 있었다. 힘든만큼 얻는 것도 많은 과목이었다. 포큐는 역시 포큐라는 생각이 들었달까... 필자는 아직 이 과목의 내용들을 완벽히 흡수하지 못한 것 같아 실습과 과제를 한 번 더 해보려한다. 막 COMP1500을 끝내고 COMP1000을 수강하려고 한다면 마음 단단히 먹으라고 조언하고 싶다.


0개의 댓글