리뷰

"가장 필요하지만 가장 몰랐던..." POCU 소프트웨어 공학용 수학(COMP1000) 후기

Ja_Hwang 2021. 12. 24. 01:15

COMP1000 소프트웨어 공학용 수학

 소개

저는 202105 [COMP1500] 실무 프로그래밍 입문(이하 COMP1500)을 시작으로 현재 [COMP1000] 소프트웨어 공학용 수학 (이하 COMP1000)까지 수강한 학생입니다. 이 후기는 COMP1500 수강 후 만족하셔서 계속 더 나아가시려는 분 또는 'POCU 아카데미를 시작하려는 모든 분'들의 선택에 도움 되길 바랍니다.

 


 선택(고민)

개인적으로 수강하기 전까지 다른 과목들에 비해 가장 고민이 되는 코스라고 생각됩니다.

고민의 이유는 다를 수 있지만 제가 했던 고민 2가지와 과목 선택 시 필요한 것들을 얘기해보겠습니다.

1.  수학이 프로그래밍하는데 필요해?

제가 했던 가장 큰 고민이자 가장 크게 간과(이 후기의 제목을 지어준) 했던 부분입니다.

저 생각의 실제 속 마음은 지금 당장 쓸모가 없을 것 같고, 흔히 생각하는 수학 때문에 학기를 하는 동안 프로그래밍 자체는 별로 안 할 것 같은 느낌을 받았습니다.

아래 COMP1000에 관하여 에서 더 자세히 얘기하겠지만 COMP1000의 내용은 한마디로 기본기라고 볼 수 있습니다.

기본기가 갖춰지면 훌륭한 프로그래머가 되는 건 아니지만 훌륭한 프로그래머는 기본기가 갖춰져 있다고 봅니다.

지금 당장은 아니지만 결국 지나쳐야 하는 부분의 것들을 올바르게 배울 수 있었습니다.

 

2.  내 수학 실력으로 가능할까?

혹시 이와 같은 고민을 하고 계신 분이 있다면, 내가 어느 정도(애매한 표현이지만) 논리적으로 생각할 수 있고 프로그래밍을 할 수 있다고 판단된다면 '흔히 생각하는 수학(학교에서 배웠던 수학)'을 못해도 할 수 있다고 생각됩니다.

객관적인 기준을 드리기 위해 제 수준을 조금 말씀드리면 수강하기 전까지 저는 로그가 뭔지 몰랐습니다. 저는 이 과목을 수강하는 데 있어 약간 부담이 있었습니다. '그런데 어떻게 수강을 하게 되었냐?'라고 하면, 유튜브 포프TV 채널에 프로그래머에게 있어서 수학이 어떤 의미인지 얘기하는 비디오들을 봤었고, 결국 프로그래머에게 수학이란 여태 내가 단순히 떠올렸던 수학을 말하는 게 아니라 '프로그래머의 논리력을 판단할 수 있는 잣대중 하나'라는 걸 알게 되었습니다.

그렇다면 언젠가는 지나쳐야 하는 부분이라고 생각돼서 이번 기회에 공부해보자는 마음으로 수강하게 되었습니다.

[프로그래머가 수학을 못하면], [논리력은 어떻게 판단하나요?]

 

3.  선수과목

  • COMP1500

COMP1000의 과제/실습은 전부 C#과 Visual Studio로 진행됩니다. COMP1500을 수강한 저는 어려움이 없었지만 이 과목을 시작으로 POCU 아카데미를 처음 들으시는 분들은 학기 초반에 어려움 느끼시는 것 같았습니다. Visual Studio 같은 경우에 몇 번 사용하면 크게 어려움은 없지만 C#에서의 Class, List 등등 기능에 관한 부가적인 설명은 없기 때문에 C#을 한 번도 사용해보지 않았다면 어려움을 느끼실 수도 있습니다. 더 자세한 내용은 아래 페이지에서 강좌 소개 영상으로 확인할 수 있습니다. 애매 하시다면 영상 시청을 추천합니다.

https://pocu-ko.teachable.com/p/comp1000

 


COMP1000에 관하여

COMP1000의 전체적인 특징과 인상 깊은 단원들 또 고등학교 수준의 수학을 잘 몰랐던 제가 어떤 식으로 공부했었는지 얘기해보겠습니다.

증명은 안 합니다...

[소프트웨어 공학용 수학] 제목에서도 살짝 느껴지듯이 강좌 소개 영상에 나오는 '순수 수학'과 '응용 수학' 중 응용 수학에 더 비중이 있는 과목입니다. "어떤 내용인지 알고 필요할 때 찾아서 사용하면 돼요" 증명보다는 원래 있는 개념을 어디에 어떻게 사용할 수 있는지 배우는 과목입니다.

 

떡밥 맛집

"뒤에서 더 배울 거예요", "다른 과목에서 더 자세히 다룰 거예요" 영상에서 포프님이 자주 하는 얘기 중 하나로, 실제로 나중에 더 자세히 그 내용을 배울 때 이전의 것들과의 연관성을 보여주면서 재미를 더해 주는 것 같습니다. 예시로 COMP1500에서 다른 과목에서 배운다고 했던 자료형(부호 있는, 부호 없는)의 비트 패턴, 부동소수점의 정밀도 등등 '확실한 떡밥 회수'로 큰 그림을 그리고 디테일을 추가하는 느낌을 받았습니다.  또 이번 COMP1000에서의 떡밥들로는 다음 과목인 C 언매니지드 프로그래밍에서 약간의 자료구조, 알고리듬 배운다고 했습니다. 기대가 되네요!

 

⭐️ 실습 / 과제  (난이도, 디테일) ⭐️

제가 느낀 POCU의 가장 큰 강점은 '절대 뻔하지 않다'라는 것입니다. 어떤 개념에 대해서 배우면 실습 과제들은 완전히 응용된 개념으로 나옵니다. 강의 영상의 큰 단원들을 보면 대부분 한 번씩은 들어 본 내용일 겁니다. 하지만 실습과 과제는 절대로 뻔하지 않습니다. 검색해도 잘 나오지 않는 내용들도 있었습니다. 그런 문제들은 공부한 개념의 성질을 잘 이용할 수 있는지를 확인하는 좋은 방법이었습니다. 그로 인한 장점으로 정해진 풀이법이 없다보니 문제를 학생들 각자의 창의적인 방법으로 해결하는 걸 볼 수 있었습니다. 그렇게 문제 해결 훈련을 통해 사고력을 기를 수 있었고, 다른 사람들과 공유하면서 더 좋은 방법 또한 생각해볼 수 있었던 것들이 POCU를 하면서 가장 좋았던 점입니다. 또 어떤 건 올바른 사용방법을 유도하는듯한 느낌도 받았습니다. 그러다 보니 가끔 내가 뭘 틀렸는지 파악하기 힘든 경우도 종종 있었지만 그것도 의도된 훈련이라고 생각합니다.

 

처음 보는 응용된 개념들이어도 '이런 식으로 하면 가능하지 않을까?'라는 생각이 들게 하는 포인트를 꼭 남겨놓았습니다.

물론 그렇게 해결한듯해도 빌드봇은 "짜잔 이건 예상 못했지?" 하면서 여러 줄의 실패한 테스트들을 뱉어 내겠지만요 :) 🤦

 

 

기본 of 기본 컴퓨터의 수

전반기는 컴퓨터에서 사용하는 수에 관한 내용과 집합, 논리, 조건 명제 등 비교적 순수 수학에 가까운 내용들을 배웁니다.

시작은 진법에 관해서 배웁니다. 어떤 후기들에서는 진법에 관한 내용이 필요한지 모르겠다는 얘기도 있지만 이 강의를 듣는 수준이 가장 배우기 좋은 타이밍이라고 생각됩니다. POCU에서도 한 번에 익힐 수 있도록 실습을 여러 번 반복해서 푸는 퀴즈로 출제했습니다. 사실상 진법 변환에 관해서는 여기서 모든 걸 익힐 수 있게 됩니다. (일상생활 중 0, 1 으로만 돼있는 수를 보면 변환하는 패시브 (능력?)를 얻게 됩니다.) 

 

COMP1000 마스코트 (논리 회로 설계)

어떤 후기를 봐도 전부 나오는 과제인 '논리 회로 설계'

수강 전까지 저는 후기를 본 적이 없어 과제를 하면서 처음 접했고 COMP1000에서 가장 인상 깊은 과제 중 하나였습니다.

개념적으로만 넘어가 버릴 수도 있었던 명제, 불 대수 논리 회로 설계 단원을 POCU에서 자체적으로 제작한 프로그램 덕분에 회로에 대한 직관적인 이해를 할 수 있었던 과제였습니다.

 

재미는 덤입니다

 

논리의 필요성

이전까지 제가 생각 했던 논리란 뭔가 말을 잘하거나, 생각을 잘 정리하는 능력?(둘 다 같은 것 같지만) 정도로 생각했습니다. 이번 논리 파트를 대해 배우면서 논리에 대한 시각이 바뀌었습니다. 결국 논리는 왜 필요할까요? 이건 프로그래머에게만 국한된 내용이 아닙니다. 논리는 '올바른 소통을 위한 도구'라는 걸 알게 되었습니다. 우리는 다른 사람들과의 의사소통, 협업을 위해서는 서로 이해할 수 있는 객관적인 데이터 또는 기준이 필요합니다. 그 데이터가 사실인지 거짓인지 판단하고, 그로부터 다른 사람을 설득시키는 것들이 '논리'라고 합니다. 프로그래머는 사람들과의 소통도 하지만 컴퓨터(기계)와의 소통도 합니다. 컴퓨터는 100프로 논리로 돌아가는 기계이기 때문에 프로그래머에게는 논리가 더 중요하게 여겨질 수밖에 없는 것 같습니다. COMP1000에서는 더 확장된 '과학적 사고'에 대해 중요하게 다루면서 프로그래머의 올바른 생각하는 습관을 배울 수 있었습니다. POCU의 방향성인 10년 후에도 대우받는 프로그래머가 되기 위한 올바른 첫 스텝이라는 생각이 듭니다.

 

확률과 통계

후반기의 절반은 확률과 통계라고 생각해도 될 정도로 많은 비중을 차지하고 있습니다. 확률과 통계를 제대로 공부해 본 적이 없어 부담이 있었지만 일단 영상 강의로 큰 흐름은 이해할 수 있었고, 같이 학기를 진행한 수강생분의 공부방법 공유로 제가 부족한 부분은 EBS를 활용했습니다. 또 EBS에서 'AI 문제 추천'이라는게 있는데 이걸로 확률과 통계에 관한 많은 문제를 풀어 볼 수 있었습니다.

그리고 이 공부방법을 공유 해줬던 동기분이 실습으로 나온 퀴즈들을 각자 컴퓨터에서 계속 풀어볼 수 있도록 만들어서 공유 해준 덕분에 문제를 푸는 훈련을 많이 할 수 있었습니다. 저도 참여하고 싶었지만 일단 제 실력이 안되다 보니 참여할 수 없었습니다. 다시 한번 감사합니다!! 👍🏻 🐈

 

 

애매함은 없다.

“모르면 일단 해보고 관찰한 다음에 그 관찰한 결과들이 왜 나오는지 보면 되요” - 포프

과제를 하는 과정에서 코드를 전부 작성하고 빌드봇에게 채점을 받을 때 "이 방향이 맞나?" 하는 생각이 정말 많이 들었었습니다. 그렇게 빌드봇에 채점을 받아보면 실패를 하죠... 그렇게 이리저리 시도하다 보면 '모든 걸 관통하는 룰'을 만나는 지점이 있었습니다. 그 룰을 만났을 때는 위와 같이 애매한 느낌이 아니라 "이거다!!" 하는 아주 명확한 느낌이 들었습니다. 그렇게 과제 통과를 하면서 성취감도 느낄 수 있었습니다.통과하는 과정에서의 여러 시도들이 고통스럽게 느껴졌지만 이런 식의 경험들이 COMP1500과 COMP1000을 지나며 지난 몇 개월 동안 쌓이다 보니 과제를 헤맬 때에도 '결국 해낼 수 있다'라는 확신이 들었습니다. 이런 경험 덕분에 끝까지 잘 수강 완료할 수 있었습니다.

 

위에 말은 영상에서 포프님이 아무렇지 않게 한 말이지만 계속 부딪힐 수 있는 힘을 줬던 말이었습니다.💪🏻

 


 에피소드

믿음에 관하여

한 실습 중 명세서의 의미가 뭔지 파악해야 풀 수 있는 실습이 있었습니다. 명세서의 의미는 여러 방향으로 해석할 수 있었습니다. 그렇게 여러 방향 중 한 방향을 잡고 진행하는 중 선택한 방향이 아닌 것 같아 다른 의미로 해석해서 해보고 또 아닌 것 같아 다른 의미로 다시 해보고 이런 과정을 거쳤습니다. 그러다 슬랙 채팅방에서 어떤 분이 "이거 이런 의미로 하니까 풀 수 있었다"라고 얘기한 걸 봤고, 그 내용은 제가 처음에 생각했던 방향과 같았습니다. 저는 얼른 다시 해보았고 이번에도 중간에 아닌 것 같은 느낌을 받았지만 이 방향이 맞다는 말이 있었기 때문에 계속 진행했고 끝내 '모든 걸 관통하는 룰'을 만날 수 있었습니다. 그렇게 처음에 생각했던 의미가 맞았고 저는 여러개의 의미를 조금씩만 시도하다 보니 이도 저도 아닌 결과를 봤었던 겁니다. 내가 어떤 방향을 정했으면 그게 아니라는 확실한 증거가 있기 전 까지는 시도 해보아야 한다라는 교훈을 얻을 수 있었습니다.

 

예전에 포프님이 올렸던 영상중 [믿음과 학습 속도] - 포프TV의 내용을 조금 이해할 수 있었던 것 같습니다.

 

슬랙 약? or 독?

POCU 풀코스를 수강 하게 되면 슬랙 채팅방에 초대됩니다. 채팅방에서는 POCU 아카데미 공지, 학생끼리 실습, 과제를 하면서 모르는 부분에 질문과 답 할 수 있는 공간입니다. 이번 과목은 비교적 학생들의 슬랙 활동이 적었던 것 같습니다. 다행히 이런 현상 때문에 제가 슬랙에 의존하고 있었다는 걸 알 수 있었습니다. 실습을 하는 도중 막히는 부분이 있었고 저는 아무 생각 없이 슬랙에 들어가 보았습니다. 그런데 이전과 다르게 실습 채널에 아무런 글이 없어 저는 스스로 생각해 볼 수 밖에 없었습니다. 결국 그 내용은 충분히 혼자 할 수 있는 내용이었습니다... 그 순간 제가 슬랙 채팅방에 의존하고 있다는 걸 알 수 있었습니다. 그냥 습관적으로 들어가 보는 것이었습니다. 이건 공부할 수 있는 기회를 스스로 뺏는 행동이라 생각이 들었습니다. 그래서 이후의 실습, 과제는 습관적으로 들어가서 보는 일은 없게 유의하면서 학기를 진행했습니다.

POCU에서 슬랙 채팅방은 분명히 큰 역할을 담당하고 있습니다. 실습, 과제가 끝난 후 각자의 코드 공유, 내가 놓치고 있던 것들 발견 등등. 하지만 잘 못하면 그게 스스로 생각 해 볼 기회를 자기 손으로 뺏는 행동이 될 수 있다는 걸 알고 조심 해서 사용해야겠다고 느꼈습니다.

 

반의 반은 테스트 케이스

POCU의 장점중 하나인 빌드봇의 여러 줄의 실패한 테스트(?)ㅋㅋㅋ 가끔은 "와 이런 테스트 케이스도 있구나" 하는 것들이 있는데요. 과제마다 다르지만 입력 값이 뭐였는지, 올바른 결과는 뭔지 알려주는 과제가 있는 반면 글로만 힌트를 주고 실제 어떤 입력값들이 들어왔는지는 알려 주지 않는 과제들도 있습니다. (안 알려주는 과제가 훨씬 많은 듯?) 그때 도움을 받을 수 있는 게 이 과목을 수강했던 수강생들 남기고 간 테스트 케이스가 있습니다. 그 테스트 케이스를 돌리다 보면 과제를 해결하는데 많은 도움이 됐습니다. 그로 인해 테스트 케이스의 중요성을 알게 되었고 내가 만든 프로그램이라면 스스로 테스트를 만들어서 돌리는 것 까지 할 수 있어야 한다 라는 생각이 많이 들었습니다. POCU에서도 이렇게 많은 테스트케이스가 있는 걸 보여주고 그저 기분 좋은 Happy Path가 아닌 좀 더 현실성 있는 프로그램을 만들 수 있도록 도와준 것 같습니다.

 

어떤 문제가 생겼을 때 잘 대처하는것도 중요하지만 미리 예상하고 방지할 수 있는 프로그래머가 훌륭한 프로그래머이지 않을까?라는 생각이 듭니다!

[프로그래밍의 반은 디버깅] - 포프TV 테스트 케이스를 만드는 것도 디버깅의 일부라고 볼 수 있을 것 같네요.

 


 마치며

 

지난 3개월 동안 가장 크게 얻은 거라면 수학에 관한 막연한 부담감을 버릴 수 있었던 것 같습니다.

이런저런 수학 개념을 코드로 옮겨 보는 작업들, 어떤 공식이 프로그래밍에서 어떻게 사용되는지, 머리로는 자동적으로 되던 수학 개념을 의식으로 꺼내보면서 조금은 다른 시각들을 얻을 수 있었던 것들이 이런 결과를 보이지 않았나 싶습니다. 또 앞으로의 POCU의 코스들을 진행 하면서 필요한 팁, 유의 할 점도 많이 느낄 수 있었습니다.

이번 후기를 작성하며 역시 POCU 아카데미 풀코스의 최대 강점'과제와 실습'을 통해서 많이 배울 수 있었다는 걸 다시 한번 실감하게 되었습니다. 이런 경험을 준 POCU 아카데미에 감사의 말을 전합니다. 🙏🏻

저는 앞으로 또 어떤 걸 배울 수 있는지 기대감을 안고 다음 과목인 [C 언매니지드 프로그래밍] 으로 나아갈 예정입니다.

이 후기가 수강한 분들께는 공감을, 수강을 고민 중이신 분들께는 선택에 도움이 되길 바라면서 후기를 마치겠습니다.

읽어 주셔서 감사합니다.