brunch

You can make anything
by writing

C.S.Lewis

by 조승혁 Jul 07. 2020

코딩 교육은 Python으로

C언어가 왜 어려운가

이제는 '의치한'이 아니라, '의치컴'이라 부른다며?


컴퓨터공학과는 그렇게 인기가 좋은 과가 아니었다. 취업은 '전화기'라는 말이 있듯이, 컴퓨터공학과는 공대 계열에서 크게 주목을 받지 못했다. 하지만 알파고와 이세돌의 경기가 있던 2016년도를 기점으로 이러한 추세는 완전히 바뀌었다. 단적인 예로 대학교 입결의 top 3인 '의치한'이 2018년도를 기준으로 '의치컴'으로 바뀌었다(https://orbi.kr/00018240030). 컴퓨터공학과에 대한 열망이 공대 계열 1위를 넘어, 한의대를 넘어섰다. 그리고 최근에 무학과 입학으로 전환한 포스텍의 경우, 과 선택에서 한 학년의 4분의 1이 컴퓨터공학과를 선호한다고 밝혔다. 그만큼 컴퓨터공학과에 대한 인기가 하늘을 치솟기 시작했다는 것을 알 수 있다. 그리고 네이버, 카카오 등의 IT 기업들의 성장도 이러한 인기에 날개를 달아줬다고 할 수 있다.


이러한 추세에 맞춰, 정부는 소프트웨어 교육을 의무교육에 포함시켰다. 정확히는 15년도 개정 교육과정에서 소프트웨어 교육이 초중고에서 의무가 되었다. 그러면서 소프트웨어 교육에서 빠질 수 없는 '코딩'에 대한 관심도 잇따라 늘어났다. 그래서 지금은 '코딩 입문', '프로그래밍 입문'이라는 키워드로 검색하면 아주 많은 글들이 나온다. 당장 브런치에서도 여러 가지 조언들을 찾아볼 수 있다.

브런치에서 '프로그래밍 입문'으로 검색한 결과

아무튼, 이러한 글들을 읽다 보면 코딩 입문은 거의 한 가지 선택지로 수렴한다. 바로 'Python'이다. 가끔씩 C언어가 튀어나올 때도 있지만, 태반이 Python을 추천한다. 이러한 Python을 추천하는 이유는 다음과 같다.


1. 문법이 쉽다.

2. 문법이 간결하다.


두 가지 이유 다 문법과 관련되어 있다. 코딩 교육은 컴퓨터 프로그램을 작성하는 데 사용하는 프로그래밍 언어를 가르치는 것이기 때문에, 언어의 문법이 매우 중요하다고 볼 수 있다. 다행히도 프로그래밍 언어는 종류가 다양하지만, 문법은 비슷하기 때문에 하나만 잘해놓으면 다른 언어도 쉽게 사용할 수 있다. 그렇기 때문에 사람들은 그중에서도 문법이 가장 쉬운 Python을 추천한다. 


여기까지만 보면, 매우 당연한 얘기인 것 같다. 하지만 필자가 생각했을 때는 Python이 코딩 교육에 적합한 이유는 간결하고 쉬운 문법이 아니라고 생각한다. 애초에 코딩 교육에서 구현하게 되는 프로그램들은 복잡한 코드들을 요구하지 않는다. 같은 프로그램을 C언어로 구현할 때 나오는 줄 수가 Python의 몇 배가 된다고 하지만, 코딩 교육에서는 의미가 없다. 복사-불여넣기는 이러한 차이를 더더욱 무의미하게 만든다. 더군다나 C언어는 엄격한 문법(type checking)과 이를 확인하는 프로그램을 가지고 있기 때문에, 실수들을 쉽게 잡아줄 수 있어 오히려 코딩 교육에 더 적합할 수 있다. 그리고 엄격한 만큼, C언어를 배워두면 다른 언어들을 배우는 것이 수월하다는 장점이 있다.

그러면 조금 힘들더라도 C언어로 코딩 교육하는 것이 좋은 거 아닌가?


문법적인 측면만 본다면, C언어가 Python보다 코딩 교육에 적합하다는 것에 동의한다. 하지만 이 글의 제목에도 써져있듯이, 필자는 Python을 코딩 교육에 제일 적합한 언어라고 생각한다. 도대체 C언어에 어떤 결점이 있기에, 앞의 장점들에도 불구하고 Python의 손을 들어준 것일까?

C언어의 결점을 보여주는 코드

C언어로 프로그래밍 교육을 이수한 사람들은 위 코드의 실행결과는 runtime error라고 설명할 것이다. 그리고 실제로도 그렇게 나는 것이 문법적인 관점에서 정상이다. 하지만 놀랍게도 위의 코드는 잘 돌아간다. Python에서는 무조건 out of range error가 나는 코드가 C언어에서는 잘 돌아간다. 그리고 위의 코드가 돌아가는 이유를 제대로 설명하기 위해서는, 컴퓨터공학과 학부 3학년 때 배우는 운영체제 수업을 들어야 한다. 1학년들이 듣는 코딩 교육을 이해하기 위해 3학년 수업을 선행해야 하는 것은 너무 가혹한 이야기 아닌가?


위의 예시를 통해, 아주 간단한 코드여도 C언어는 100% 이해하는 것이 힘들다는 것을 알 수 있었다. 그리고 저런 상황들이 생각보다 빈번하게 일어나, C언어로 교육받는 사람들이 난처한 상황을 겪는 것을 필자는 자주 볼 수 있었다. 그렇다면 이러한 결점을 일으키는 근본적인 원인은 무엇일까? 한 줄로 요약하면, C언어는 컴퓨터의 메모리에 대한 이해를 가지고 있는 사람들을 대상으로 만들어진 언어이기 때문이다. 대표적인 예시가 '포인터' 문법이다. C언어로 입문하다 포기한 사람들에게 그 이유를 물으면, 90%가 '포인터'라고 답할 것이다. '포인터'라는 것 자체가, 메모리에 대한 개념을 토대로 만들어졌기 때문에 문법을 익히려고 하는 사람들에게는 어려울 수밖에 없다. 그리고 많은 사람들은 이를 단순히 '어려운 문법'으로 생각하여, Python이 좋은 이유를 쉽고 간결한 문법이라고 착각한다. Python이 좋은 이유는 메모리에 대한 이해가 없어도 사용할 수 있다는 것임에도 불구하고.


돌고 돌아서, 대부분의 사람들이 내놓은 결론인 'Python'이 코딩 교육에 좋다는 결론으로 돌아왔다. 하지만 그 과정은 명백히 다르다. 흔히 말하는 문법의 간결함 때문이 아니라 C언어는 더 많은, Python은 더 적은 사전 지식을 요구하기 때문이다. 즉, Python은 문법에 온전히 집중할 수 있는 반면에 C언어는 그렇지 못하다. 그래서 C언어로 입문을 시도하다가 실패한 사람들에게 말하고 싶다. 여러분들이 실패한 이유는 C언어의 복잡한 문법이 아닌, 단순히 메모리에 대한 이해도가 없었기 때문이라는 것을, 그리고 초심자들이 그것을 이해하는 것은 당연히 어렵다는 것을.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari