Daybreakin Things

Posted
Filed under 살아가기, 생각하기
시험도 끝났고 하니(...) 간만에 말림성 포스팅을 좀 해봐야겠다;

일단 내가 있는 과는 전산과. 보통 다른 대학에서는 컴퓨터공학과라고 해서 전자공학이랑 전산학이랑 같이 섞어서 배우는 경우가 많은데 우리학교는 둘이 엄연히 다르다. 2학년 전공 과목 중에 디지털 시스템 및 실험이나, 3학년 전공인 전산기구조(일명 architecture) 과목은 내용이 비슷하게 겹치지만, 그 외는 상당히 다르다.

※ 내가 비교적 잘 아는 과목 위주로 적었음.

[1학년(무학과) 과목]
CS101 기초프로그래밍 -_-
과목의 존재 이유를 잘 알 수 없는 과목. 프로그래밍을 좀 해본 사람들한테는 귀찮을 정도로 쉽고, 프로그래밍을 전혀 안 해본 사람들한테는 매우 어렵게 느껴지는 과목이다. 이 과목을 듣는다고 해서 프로그래밍에 대한 이해가 높아진다거나 하는 것 같진 않다; 나는 프로그래밍을 배우고 싶다는 사람이 있으면 CS101 듣느니(어차피 기초필수라 다 듣지만-_-) 2학년 전공인 데이터구조를 들으라고 권한다.

[2학년 과목]
CS204 이산구조
전산학에서 다루는 다양한 이론들을 맛보기 형식으로 배우는 과목이다. 전산과 전공이 아니더라도 들어두면 도움이 될 때가 있는 것 같다. 수학과의 이산수학과 학점교환이 되는데, 이산수학은 훨씬 빡쎄다;; 주로 다루는 내용은 집합, Logic, Graph, 재귀수열, Bool 대수, 알고리즘 기초, Relation, Tree 등의 수학과 관련된 것들이다.

CS206 데이터구조(Data Structure; DS)
프로그래밍을 하는 데 있어서 뼈와 살이 되는 것들을 배우는 과목으로, 본격적인 전산과 코딩을 시작하게 된다. (코딩 스킬을 어느 정도 확립할 수 있기 때문에 타과생들도 많이 듣는 편이다) Stack, Queue, Tree, Recursion 등과 함께 Java의 object와 reference에 관한 개념도 같이 배운다. 내가 수강한 Otfried 교수님 수업 프로젝트는 변수와 함수 선언이 가능한 계산기 짜기나 간단한 게임 만들기, 한자 패턴 인식 알고리즘 개발이 있었다. (....) 다른 교수님들의 경우는 상대적으로 프로젝트가 널럴하다.

CS202 문제해결기법(Problem Solving; PS)
전공선택 과목으로, 말 그대로 정보경시에 나오는 문제들만 죽어라 숙제로 푸는 과목이다. 정보경시를 했던 아이들이나 수학적 머리가 뛰어난 사람들이 가장 기를 펼 수 있는 과목(...)이기도 하다.; (이번 학기에 듣고 있는데, 물리과에서 온 분이 거의 관광하다시피 하고 있는 듯? -_-) 자연히 숙제 로드가 상당히 세지만 그만큼 재미도 있다. 5번 숙제를 제출하기도 전에 7번 숙제까지 나오는 압박스러움이 좀 있지만;

CS230 시스템 프로그래밍(System Programming; SP)
누가 말했던가. '어둠의 마법 방어술'이라고 비유할 수 있을 정도로 교수님에 따른 편차가 심한 과목. K모 교수님과 S모 교수님 두 분이 번갈아 가며 강의하시는데 그 난이도 차이는 상상을 초월한다. -_-;;; S모 교수님은 우선 '당구는 이론으로 치지 않는다'라는 사상과 함께 철학적인 토론 수업 + 스스로 학습하는 실전 삽질 코딩(체감로드 9학점 이상)을 가르치시는 반면 K모 교수님은 성경이라고 불릴 정도로 잘 정리된 수업 자료와 물 흐르듯 흘러가는 명강의로 유명하다. 배우는 내용은 Linux에서 system call이라 불리는 API를 사용해 프로그래밍하는 것이고 주로 shell을 기본적으로 짜게 된다.
나는 지난 학기에 S모 교수님 강의를 들었는데 역대 최고의 로드를 자랑했다. 이제 리눅스에서 프로그램 짜는 거 두렵지 않아~라는 말이 나올 정도.; 전공선택임에도 사실상 전공필수로서 전산과의 문턱이 되는 과목으로, 잘만 통과하면 확실히 전산과에 적응할 자격이 주어진다고들 말한다.

[3학년 과목]
CS300 알고리즘
2학년 때 PS로 삽질했던 것을 체계적인 이론과 함께 배우는 수업이다. Introduction to Algorithms를 교재로 쓴다. 로드가 좀 있는 편이지만 확실히 익혀두면 두고두고 써먹는 과목인만큼 전공 필수. 배우는 내용은 Divide & Conquer, Recursion, Search & Matching, Dynamic Programming, Backtracking 등의 알고리즘 설계 기법과 알고리즘의 시간복잡도나 공간복잡도를 분석하는 방법들이다.

CS311 전산기조직(Architecture of Computer;아키)
CPU에 들어가는 명령어 set이 어떻게 구성되는가라든지, 기초적인 전자회로를 이용하여 원하는 operation을 구현하는 방법, 연산/제어/입출력 장치 등을 배운다. 전자과적인 면이 짙지만 잘 알아두면 프로그래밍을 할 때 두고두고 도움이 되는 내용들이다. 임베디드 관련 계통을 할 생각이 있다면 정말로 중요한 과목. 전산과 과목 중에 유일하게 코딩을 하지 않아도 되는 과목이다.;

CS320 프로그래밍 언어(Programming Language; PL)
Prolog, Lisp, ML 등 함수형 언어 등 평상시 잘 접하지 않게 되는 다양한 프로그래밍 언어를 배운다. 또한 프로그래밍 언어를 설계하는 데 있어서 필요한 개념이나 자료 구조에는 어떤 것들이 있는지, 각 패러다임(functional인지 object-oriented인지 등)에 따라 어떤 issue들이 있는지를 개괄적으로 배운다. 전산과 과목 중 가장 코딩이 적은 과목 중 하나. 컴파일러의 선수과목이라고 볼 수 있다.

CS322 형식 언어 및 오토마타
프로그래밍 언어의 구성을 좀더 이론적으로(집합이라든가) 배우고, 이산구조 때 맛보기로 했던 오토마타를 본격적으로 다룬다. 오토마타는 쉽게 설명하자면 입력에 따라 자동으로 자신의 상태를 바꾸어가며 문제를 해결하는 자동 기계 정도로 생각하면 되겠다.; (가장 대표적인 예로 한글입력기를 들 수 있겠다)

CS330 운영체제 및 실험(OS)
전산과 전공필수 중 가장 고비가 되는 과목이다. 실습용 프레임워크 위에서 SP에서 사용했던 다양한 system call들, thread manager, virtual memory manager, filesystem 등을 직접 구현한다. 이 과목을 들을 때는 15학점 이하를 권장하고 있다.;; 다만 조별 프로젝트이기 때문에 학점이 반드시 실력과 비례하지는 않는다.;

CS360 데이터베이스 개론(Introduction to Database Systems; DB)
이건 H모 교수님과 K모 교수님(위와 다른 분)이 번갈아 강의하시는데 역시 어느 분이냐에 따라 수업 내용이 완전히 다르다.; 일명 황DB라고 불리는 H모 교수님 수업은 SQL Parser부터 시작하여 직접 DBMS를 구현하는 것이 한 학기의 목표고, K모 교수님은 SQL을 어떻게 하면 잘 사용할 수 있을까에 관한 수업이다. -_-; (이로부터 전자는 프로젝트가 빡세고, 후자는 숙제와 시험이 귀찮다는 것을 알 수 있다)

[4학년 과목]
CS420 컴파일러 설계
전산과 과목 중 가장 빡센 과목이다. 말 그대로 소스코드를 컴파일해 실행파일을 만드는 컴파일러를 만든다. Lexical analysis부터 시작해서 optimization에 이르기까지.. 정확히는 모르지만 C/Java를 변형한 스타일의 고유한 언어를 컴파일하게 된다고 한다.

CS441 전산망 개론(Network)
TCP/IP를 구성하는 각 네트워크 레이어에 대해서 차례로 배운다. 전산과 과목이 언제나 그렇듯 프로젝트의 압박이 좀 있는 과목.

CS480 컴퓨터 그래픽스
3D 그래픽을 DirectX 등을 쓰지 않고 직접 구현해보기도 하고, 간단한 지형 표현 엔진이나 미니 게임 등을 만들기도 한다. 꼭 들어보고 싶은 과목이나 로드가 만만치 않다. 기계과의 CAD/CAM과 학점교환이 된다고 알고 있다.

...

자, 이 정도면 대충 내가 아는 과목들은 소개한 것 같다. 물론 이 외에도 유명한 과목들이 더러 있기는 하지만, 전산과에서 대충 이러한 내용을 배운다는 것을 알 수는 있을 것이다.

근데, 다른 사람들 얘기 들어보면 울학교가 제일 빡신 것 같다. ㄱ-;