POCU COMP2200 C 언매니지드 프로그래밍 후기

수강 목적

POCU 아카데미의 로드맵을 쭉 따라가서 "전문 프로그래머가 되기 위한" 과정을 밟아가고 싶었다. 현재 총 7개의 로드맵이 열려있는데, 이제 3개의 로드맵이 끝났다.

 

C 프로그래밍 수업은 사실 대학교때도 수업을 들었다. 하지만 C언어로부터 컴퓨터 공학 지식을 배운다기보다는 단순히 그 언어를 배우는데 초점을 두고 배웠기 때문에 당시에 공부를 할 때도 깊은 이해를 할 수 없었던 것 같다.

 

과목 이름에서도 "언매니지드" 가 붙어있듯이 "관리되지 않는" 이라는 말을 몸소 경험해보고 싶었다.

 

백엔드 개발자로 살아가고는 있지만, 기초를 잘 아는 것이 항상 중요하다고 생각했고 이러한 욕망은 COMP2200 수업으로 채우기에 충분했던 것 같다.

강의 내용

POCU 강의를 여러번 들어본 결과, 항상 초반에는 해당 강의에서 사용하는 언어의 특징을 한 주차 정도 설명해주신다.

C언어도 마찬가지로 진행되었다. 그런데, C언어는 단순히 기본 자료형을 익히는 것을 넘어서서 하드웨어를 이해해야 했다. 이러한 히스토리들을 자세히 설명해고 있기 때문에 단순히 기본 자료형에서 한번 더 생각하는 시간을 가질 수 있었던 것 같다.

 

또한, 프로그램 빌드 과정, 스택 메모리, 포인터 등을 학습하면서 스택 메모리를 어셈블리어까지 뜯어가며 공부한 내용이 가장 인상 깊었고, 머릿속에 깊게 박혔다. 내용이 어려웠던 만큼 이를 이해하기 위해 고민하고 검색도 하며 부족한 부분을 채워나갔고, 이러한 시간들이 쌓여서 이제는 함수가 호출될 때 메모리에서 어떤식으로 메모리가 동작이 될 것인지 조금이나마 상상이 되는 것 같아 좋았다.

 

이를 기반으로 C 언어 문자열, 콘솔 입출력 들을 계속해서 "메모리" 관점에서 생각하며 학습을 하는 것이 추후에 구조체, 함수 포인터, 구조체, 가변인자 함수 등등 을 학습하는데 많은 도움이 되었다.

 

그리고 앞서 배운 포인터를 기반으로 동적 메모리 할당, 다중 포인터 등을 배우고, 이를 기반으로 간단한 자료구조 및 구현까지 배움으로서 포인터를 아주 통달할 수준까지 머릿속에 집어 넣었던 것 같다.

 

앞서 언급한 내용은 모두 C89 기반으로 강의 내용이 진행되었다면, 강의 후반부에는 C99 기반으로 어떠한 점이 개선되었는지 쉽게 알려주어서 어떤식으로 C언어가 발전해 나가고 있는지까지 이해할 수 있었다.

 

강의 실습 & 과제

C 언매니지드 프로그래밍 수업의 실습 과제는 앞서 들었던 기초, 수학 과목과 차원이 다를 정도로 어려웠다.

 

모두 C언어의 특징을 이용하여 실습과 과제를 구현해야 했고, 실습과 과제 하나하나 모두 쉽지 않았다.

 

특히, 자료구조를 구현해야 하는 실습8과 다중 포인터를 사용하는 과제3을 진행하면서 정말 많은 것을 배울 수 있었다.

특히 과제 3의 경우 4중 포인터까지 써야했고, 동적 할당된 메모리를 일일이 다 내가 메모리를 열어준 놈은 내가 알아서 다 닫아주는 작업을 진행했다. 이 과정에서 정말로 프로그래머로서 C언어를 사용한다면 메모리 할당을 해주는 만큼 메모리 해제를 놓치지 않고 실수 없이 잘 해내는 것이 정말로 중요하겠구나 많이 생각했던 것 같다.

 

 

중간 & 기말 시험

우선 해당 과목에서는 IDE 를 사용하지 말고 메모장에서 프로그래밍을 하는 것을 권장했다. 

이는 머릿속에서 내 코드를 보며 뇌버깅을 할 수 밖에 없었고, 이러한 연습을 통해서 코드만 보고도 런타임 오류인지, 컴파일 오류인지를 판단해보는 연습을 많이 했던 것 같다.

 

실제로 시험에서도 위와 같은 내용을 집요하게 물어보고, 이러한 훈련들이 시험을 보는데 도움이 됐던 것 같다.

 

점수는..?

사실 C언어 수업은 재수강을 했다. 지난 학기에 들었지만, 기말고사를 공부를 할 수 있는 시간을 도저히 낼 수 없어서 포기를 했었다. 

 

지난 학기에서는 기말고사를 보지 않았고, 실습 8과 과제 3을 만점받지 못했다.

 

재수강을 하면서 놓쳤던 실습과 과제를 모두 다시 도전하면서 놓친 포인트를 이해하고 만점을 받을 수 있었다.

 

중간고사때는 문자열과 관련된 내용들이 많이 등장하는데 이 부분에서 지난 학기 중간고사의 경험이 있음에도 문자열부분에 대한 디테일한 부분까지 챙기지 못해서 점수가 썩 좋지는 못했던 것 같다.

 

기말고사는 그래도 악착같이 동적할당부터 놓치는 부분 없이 꼼꼼히 공부해서 점수를 만회할 수 있어 좋았다.

 

느낀점

 

C 언매니지드 프로그래밍 수업을 들으면서 컴퓨터 동작 원리 중, 메모리가 어떻게 동작하는지 머릿속에 적립이 되었다. 또한 프로그래밍의 동작 원리까지 이해를 하면서 기본적으로 언매니지드, 컴파일 언어에 대한 원리를 깨우치는 시간을 가질 수 있었다. 그리고 포인터가 더이상 두렵지 않았고 오히려 이를 통해서 메모리를 관리하는 프로그래머가 작성하는 코드들이 정말로 컴퓨터의 low 영역을 건드릴 수 있다는 사실을 깨우칠 수 있었다.

 

단순히 동작만하는 코드를 다루는 것이 아니라 더 깊게 사고하고 어떠한 문제가 있을지 사고하는 능력을 배웠고 이러한 지식들은 저수준 언어를 사용하든 고수준 언어를 사용하든 항상 어떠한 영향을 끼칠지 사고하면서 코드를 작성할 수 있는 능력을 배웠다고 생각한다.

 

이제 POCU 수업의 3/(7 to 12) 을 들었다. 사실 이번학기 개체지향 설계 과목도 들었는데, 두 과목을 같이 하는 것과 회사 생활까지 같이하는게 상당한 무리가 있는 것 같다... 개체지향 설계 과목은 재수강을 할 것 같고, 그 다음 과목인 C++ 언매니지드 프로그래밍과 같이 진행할 예정이다. 힘들지만 그래도 배움이 너무 즐겁다.

 

댓글

Designed by JB FACTORY