brunch

You can make anything
by writing

C.S.Lewis

by InPixel Sep 07. 2020

학부 2년차 컴퓨터 전공생의
수업 감상평

0. 우리는 무엇을 배우고, 무엇이 환상인가?

 필자는 컴퓨터 과학을 전공하고 있다. 많은 이들이 이 분야에 관심을 보이는게 느껴진다. 대학 어디를 가도 AI와 학제 간 결합을 통한 연구가 진행되고, 다른 전공의 학생들이 컴퓨터 과학을 이중 전공 하고자 한다.

 지금까지 짧은 시간이지만 공부를 하며 느낀 점을 공유해, 이 글이 관련 분야에 관심이 있는 분들에게 도움이 되길 바란다.


우리는 무엇을 배우는가?

 컴퓨터학과를 대학 최고의 인기 학과로 만든 것은 단연 제 4차 산업혁명이다. 컴퓨터학과의 수업에서는 무엇을 배우는가?


경험담

 필자는 지금까지 전공은 5과목을 수강 했고, 4 과목을 수강 중이다. 이는 다음과 같다.


수강 완료

    + 자료구조

    + 알고리즘

    + 논리설계

    + 이산수학

    + 데이터베이스


수강 중

    - 프로그래밍 언어

    - 컴퓨터 구조

    - 데이터 통신

    - 확률 및 랜덤 과정


 주변에서 가장 많이 들었던 오해는, 컴퓨터학과의 수업이 코딩 능력을 배양해 줄 것이라는 기대를 가진다는 점이다. 문학 수업을 들으면 글을 잘 쓰게 되는가? 글 쓰기 수업이 아니고서야 그렇지 않다. 과제를 하면서 글 쓰는 연습을 하게 될 수는 있다. 동일하게 컴퓨터학과에서 코딩 능력이란 모두가 이미 가지고 있다고 가정되고, 또 학습의 목표가 아니었다. 그러고 과제는 코딩을 하게 한다. 이는 컴퓨터학과 학생들에게도 고통스러운 부분이다. 자신이 코딩에 자신이 있고 없고는 순전히 개인의 흥미와 능력에 달린 문제인데, 교수님들이 요구하는 능력은 높다. 코딩에 자신이 없다면 수업을 따라 가는게 힘들 수도 있다.


 그러나 이런 생각은 의외로 학년이 올라갈 수록 적어졌다.


자료구조

 가장 필자를 괴롭혔던 과목은 의외로 전공 중에서 가장 쉽다고 소문이 난 ‘자료 구조’이었다.

 ‘자료 구조’는 데이터를 메모리에 어떻게 효율적으로 저장할 수 있는지에 대한 학문이다. 먼저 들어간 데이터가 먼저 나오는 경우도 있고(선착순을 생각하면 된다), 먼저 들어간 데이터가 나중에 나오는 경우도 있다. 컴퓨터의 메모리는 놀랍게도 주로 먼저 들어간 데이터가 나중에 나온다. 인간의 눈에는 매우 매우 불합리한 방법이지만, (먼저 주문한 내가 나중에 햄버거를 받으면 얼마나 화가 나는가!), 컴퓨터 메모리에서는 효율적인 방법이다. 이론적으로는 매우 쉽다. 그렇지만 이론을 코딩으로 구현해야 한다는 게 문제다.

Stack 과 Queue. 이미지 출처 [https://gohighbrow.com/stacks-and-queues/]

  글에서 파악할 수 있듯이 필자는 코딩에 자신이 없다. 그런 필자에게 과제와 평가 모두 코딩으로 진행되는 이 과목은 최악의 성적인 B를 줬다. (혹시 B 정도면 포상이라고 생각하는 한량 대학생이 읽을까봐 말하지만 필자는 기만을 하는게 아니다… 필자의 대학은 C+ 이하는 자유롭게 재수강 할 수 있다. 즉, 학점을 높이기 위해 모든 과목을 재수강 한다면 B는 이론 상 최악의 학점이 된다.)

 필자의 현 모습이 컴퓨터학과를 이중 전공한 자신의 미래라고 생각이 드는가? 자료 구조와 같은 과목에서 학점이 깨지는 것은 아마 피해갈 수 없을 것이다. 코딩에 숙달 된다는 것은 결국 경험에 차이이니까. 그렇지만 코딩이 중요한 과목은 학년이 올라갈 수록 적어졌다.


알고리즘

 컴퓨터과학에 조금이라도 관심이 있으면 한 번 쯤은 들어 보았을 이야기이다. ‘알고리즘’. 카카오 같은 IT 기업은 최근 개발자를 채용할 때 알고리즘 테스트를 한다. 이는 물론 코딩 테스트이다. 그렇다면 왠지 알고리즘은 자료구조보다 더 흉악하고 끔찍한 코딩 과목이지 않을까? 그렇지 않았다.

 알고리즘은 ‘Introduction to Algorithm’이라는 컴퓨터 과학계의 영원한 바이블을 교재로 수업을 진행했다. 성서 보다는 역사 책이 더 적절한 비유 일지도 모르겠다. 우리 이전 세대에 존재했던 현인들의 지혜를 모아둔 책이기 때문이다. 알고리즘을 배운 다는 것은 선인들의 지혜를 전수 받는 느낌이었다. 1부터 100까지가 적힌 카드가 섞여 있을 때, 가장 효율적으로 정렬하는 방법은 무엇인가? 한 번에 문제를 풀 수 있는 알고리즘이 없을 때, 어떻게 문제를 쪼개서 해결할 수 있는가? 모두 알고리즘을 수강하면 알 수 있다. 이런 문제를 맨 땅에 헤딩해서 해결하고 싶은가? 알고리즘은 후대의 사람들이 문제를 풀 때 삽질하지 말라는 따뜻한 사랑이 담겨 있다. 우리는 이를 이해하고 받아 들이면 된다.

Introduction to Algorithms. 이미지 출저 [https://www.amazon.ca/]

 그런데 이런 과목이 코딩을 안 시킨다고? 교수님들 입장에서 과제로 코딩을 시키면 얼마나 편한가. 알고리즘 하나를 가르치고, 다음 주까지 관련된 코딩 테스트 문제 10개를 풀어보라고 시키면 학생들의 성취도(동시에 드랍 비율도)는 쭉쭉 올라갈 것이다. 그렇지만 알고리즘 과목에서 코딩을 단 한 번도 시키지 않았다. 과제는 오직 알고리즘의 수학적인 증명에 대해서만 배웠다.

 또 만약 알고리즘이 작동하는 코드를 보여줄 필요가 있을 때에는, 특정한 프로그래밍 언어로 작성되지 않고, 자연어 위주의 의사 코드 (pseudo code)로 작성되었다. 쉽게 풀어 썼다는 뜻이다. 그리고 이런 ‘의사 코드’도 시험에는 한 문제도 나오지 않았다.


이론 위주의 과목? 코딩 위주의 과목? - 컴퓨터 전공은 전문 대학원이 아니다.

 컴퓨터 공학과 학생들이 코딩 실력이 없다는 비판을 자주 들을 수 있다. 4년 동안 공부해서 학위를 받은 후 기업에 가니 처음부터 다시 가르쳐야 된다고 한탄한다. 그렇지만 필자가 생각하기에, 컴퓨터과학이라는 학문은 코딩을 잘 하기 위해 존재하지 않는다. 그렇다면 무엇이 목적인가?


다음 글은 나머지 과목에 대한 경험담과, 컴퓨터과학이 가르치려는 핵심이 무엇인지 필자가 생각하는 내용을 이야기 하겠다.

작가의 이전글 뛰어가는 기술, 기어가는 인간
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari