대학 컴퓨터공학부 신입생에게 프로그래밍 과목에서 C언어는 적당한가?

(들어가기 전에 - 의욕에 비해 문서가 꽤나 성급니다. 결론도 없고 ㅠㅠ)

C

학부(02학번)에서 컴퓨터 공학 내지는 컴퓨터 과학 수업이나 소학회 스터디를 할 때 나는 주로 C 언어를 통해 컴퓨터 프로그래밍 언어를 접했다. 컴퓨터 공학에서 가장 기초가 될 만한 과목인 데이터 구조나 알고리즘 수업은 C 언어를 사용한 수업이었고 나아가 시스템 프로그래밍(IPC), 컴파일러(C with Lex & Yacc), OS 등의 수업도 C를 기반으로 하는 과제를 하곤 했다.

아마도 80년대 말에서 90년대 초부터 프로그래밍 과목에서 C언어를 사용하여 주요과목 - 자료구조, 알고리즘, 시스템 프로그래밍, 컴퓨터 구조 - 를 가르쳤을 것이다. 내가 배우던 때도 C언어를 사용했고, 지금도 여전히 주요 과목은 C언어를 사용하여 가르친다. 즉 C언어를 학부 프로그래밍 교육과정에서 사용한지 적어도 20년 이상은 되었다는 이야기다.

10년이면 강산이 변하고 특히나 IT기술은 하루가 다르게 기술 및 개념이 바뀌는데 비해 교육 과정은 그다지 바뀐것이 없는 듯 하다. 물론 컴퓨터 프로그램의 기본을 이루는 언어는 아직도 C가 많고, 현업에서도 아직 많이 쓰이긴 하는걸로 안다. 2000년대 이후 웹 관련 프로그래머의 수요가 많아짐에 따라 학부에서 C를 배우다가 갑자기 Javascript라던가 php등의 뭐랄까 학술보다 현업에서 요구하는 인스턴트 커피 느낌의 언어를 학부에서 가르치기도 하는 뭔가 불균형적인 교육과정을 가지기도 했다.

시대가 원하는 일꾼(업체가 현업에서 쓸 프로그래머)를 양산하기 이전에 대학교는 학교로서 컴퓨터 공학에 대한 교육을 해야할 의무를 가진다. 물론 기업들이 원하는 학생들을 배출해내느라 요즘 학교들은 원론적이고 이론적인 것에 별로 신경을 쓰지 않겠지만, 학생으로서 의무적으로라도 이론과 그 바탕에 대한 공부는 필요하다고 생각한다.

다시 원래 물음으로 돌아와서, 과연 현재시대에도 프로그래밍 이론과 원리를 가르치는 과목에서 C 언어는 적당할까? 현재 우리학교 커리큘럼에서 C언어를 공부하지 않고는 학부 2-4 학년에서 맞게 될 수업에서 대부분 C로 작성된 과제 제출을 원하므로 수업을 듣기가 힘들 것이다.

내가 수업을 들었는 2000년대 초반으로 돌아가서 생각해보면 C언어로 프로그래밍의 기본 지식을 공부할 때 뭐 딱히 어렵거나 한건 없었다. 다만 C언어라는것이 별로 흥미를 끌거나 쉽게 사용할 수 있는것은 아니었다. 생각대로 작성하면 거의 에러가 나기 때문에 종이에 간단한 수식 계산을 해 가면서 프로그래밍을 했었던 기억이 난다.

나는 학부 과정에 오기전에 간단한 프로그래밍 지식을 가지고 있었기 때문에 그나마 C언어의 내용을 익히는 데는 어렵지 않았지만 C의 문법이나 프로그래밍 방법(코드를 짜고, 실행을 하고, 결과를 보고)에 대해서는 이해하는데 쉽지도 않고 재미도 없었다. 사전 지식이 없었던 친구들은 더 힘들어했던 것 같다. 그에 비해 취미로 하던 웹 프로그래밍 언어는 그 프로그래밍하는데 내용은 비슷하더라도 좀 더 쉽게 했었던 기억이 있다. C는 프로그래밍 자체보다 프로그래밍을 하기 위한 자질구레한 작업과 뭐랄까 머릿속의 생각과는 직관적이지 않은 전개(C 언어의 문법을 맞추기 위해)를 해야했던것 같다.

지금 와서 생각해보면 프로그래밍에 대한 기본 공부를 하는것을 어떤 미술의 밑그림을 그린다고 생각했을 때 4B 연필 하나만 필요한 것을, 각종 제도용구와 수 많은 연필들을 사용하여 마치 설계도면을 그리듯이 한 것 같은 느낌이다. C언어 보다 덜 복잡하고 사용하기 쉽고 이렇게 저렇게 가지고 놀 수 있으면서 프로그래밍의 원리와 구조를 배울 수 있는 다른 언어를 사용하는것도 좋지 않을까? C언어를 통해 배우는건 지금 상황에서 좀 구시대적인 도구를 사용하는 것은 아닐까?

image

MIT의 Computer Science의 2008-09년 교과과정

위의 그림을 살펴보면 아래쪽이 MIT 컴퓨터공학 학부생이 입학해서 배워야 하는 수업들이다. 프로그래밍에 관해 가장 기본적인 개념을 잡는데는 Python을 사용하고 있고, 중요 과목에서는 주로 Java 및 Python를 사용하고 있다.

  • 6.00(Introduction of Computer Science and Programming) - Python
  • 6.01 - Python - OOP, Signa., Feedback, Controller, Circuit, Op-amps
  • 6.02 - Volt by Volt, Bit by Bit, Packet by Packet
  • 6.004 - Computer Archetecture - Assembly - JSIM(java based simulator)
  • 6.005 - Software - Java, FSM, Sream, decoupling(modulation, Interface), Test, Debug
  • 6.006 - Algorithms - Python

image

Carnegie Melon Computer Science 학부의 교과과정

Carnegie Melon의 컴퓨터공학 커리큘럼의 예시를 보면 일부 C를 사용하기도 하지만 주로 Java를 통해 기본 프로그래밍 구조를 배우는 것을 알 수 있다.

주요 프로그래밍 과목

  • 15-000 Java
  • 15-111 프로그래밍 기초 Java
  • 15-211 자료구조와 알고리즘 Java
  • 15-123 Unix 프로그래밍 C
  • 15-212 프로그래밍의 원리 Standard-ML
  • 15-213 컴퓨터 시스템 개론 C
  • 15-451 알고리즘 설계와 분석 Handout

물론 컴퓨터 공학이 아닌 전자전기컴퓨터공학부(Electronic Computer Science)의 경우 C가 많았다(Embedded System).

외국의 경우 프로그래밍 이란 주제에 대해서 교육(중/고등/대학 교육에서)을 할 때 C언어 보다는 주로 Smalltalk, Haskell, Scheme(프로그래밍 구조와 해석:SICP-MIT 교재)과 같은 언어를 사용하였다. C언어와는 다르게 본디 프로그래밍의 기본 개념들을 충실히 구현한 언어라는 것을 알 수 있다(C는 ASM의 추상화로부터 출발).

C를 쉽게 다른 언어로 바꾸지 못하는 몇 가지 문제 중 하나는 또 대학과 MS의 정치적-상업적 문제일 것이다. MS는 Academy에 거의 무료다 시피한 상태로 MS제품을 제공 한다. 그러다 보니 대부분의 대학에서 문서는 기본적으로 MS의 Office에서 사용하는 문서를 표준적으로 사용할 것이며, 프로그래밍에서는 MS의 Visual Studio를 사용한 프로그래밍을 가르칠 것이다. 물론 MS의 도구들을 사용하면 좋은 면도 많지만 학부를 졸업할 때 까지 VS가 아니면 프로그래밍을 전혀 하지 못하는 친구도 있다. VC, VC++, VB, C# 언어를 배우고 졸업을 하면 기업에서도 MS의 제품을 구매할 수 밖에 없고 이는 다시 MS의 매출로 다시 이어진다. MS의 매출을 올려주는 MS특화 프로그래머가 된다는 것이다.

다시 주제로 돌아와서 즐겁고 쉽게 프로그래밍을 배우기에 C언어는 그다지 적합한 언어는 아니라는 것이다. 십 수년전에 졸업하신 선배도 그리고 수년 후배인 친구들도 거의 바뀌지 않는 C언어 커리큘럼을 듣는것은 뭐랄까 비정상적이라는 느낌이 든다. 게다가 요즘 세대의 신입생에게 C언어를 통해 컴퓨터 공학을 가르치는 것은 흥미유발이나 이론학습에 대한 면에 있어서 수업을 듣지 말라고 간접적으로 이야기하는것 같아 불편하다.

뭐 결론은 C는 좀 아니지 않나… 하는 생각이고, 아래 관련 링크들을 참고 해 봤으면 좋겠다. 우리나라의 다른학교는 어떤 교과과정을 가졌는지 한번 찾아보곤 싶으나 일단 여기서 정리. 다른 할게 너무 많다.

(역시 바쁠때 딴짓과 딴생각은 더 재미있다.)

관련 링크