보니까 어제 밤에도 C 언어 떡밥이 돈 것 같아서 한 번 써본다. 오키 같은데서 내가 가끔 C 언어에 대해 부정적인 이야기를 하곤 했는데, 제대로 읽어 보면 알겠지만 난 언어 자체가 나쁘다 한 적은 없어.


지금도 C언어를 꼭 써야하는 분야가 있고, 그런 분야에선 그게 필수 지식이 맞거든. 그 오랜 시간 동안 대안이 안나왔다는 건 그 만큼 쓸만한 툴이란 이야기이기도 하지.


그런데 C 언어 중심으로 개발 배운 애들 중 심심찮게 C 언어가 '모든 언어의 근본'이라느니, "메모리 직접 안다루는 언어를 하면 절대 고수가 못된다"느니 하는 뻘소리를 하고, 또 멋모르는 입문자들이 거기에 낚이더라.


뭐 내가 배운게 킹왕짱 그런거야 어디에나 있으니까 무시하면 그만인데, 그런 애들 때문에 가뜩이나 늦게 시작해서 기초 배울 시간도 없는 비전공 초보자들도 가끔 엉뚱한데서 헤매는 거 보니까 이 건 좀 아닌 것 같더라.


내가 볼 땐, 주력 분야가 자바나 C#, 자바스크립트, 파이썬 이런 부류의 언어를 다룰 영역이면 C부터 배우는 게 오히려 독이 되는 경우도 있어. 주력 언어 어느 정도 한 다음에 저수준도 좀 해볼까 하고 배우는 거면 좋은 건데, C가 기초라고 C부터 배운 경우 보면, 자바를 배워도 C로 이해하려고 하는 경우가 심심찮게 있다. 대충 오키에서 질답 게시판 쭉 봐온 경험을 봐도, 뭐 싱글턴이나 상속 같은 개념을 메모리 차원에서 이해하려고 한다거나, 마이크로 최적화에 집착한다던지, API 파악하라면 소스부터 까본다던지, 메인 함수를 찾는다던지 그런 거지.


그중에서도 가장 안좋은 건, C가 다른 패러다임 배우기엔 최악의 언어란거야. 프로그래밍 언어를 제대로 쓰기 위해선 패러다임 이해하는 게 가장 중요하거든. 그래서 자바나 C# 같은 언어 제대로 다루려면 객체지향을 어느 정도 능숙하게 쓸 줄 알아야지 뭘 해도 할 수 있는 건데, C 언어는 사실상 절차지향 딱 하나로 고정된 언어다 (GTK나 리눅스 커널 이야기 하지 마라, 입문자 수준 이야기니까).


그래서 C부터 배우면 객체지향이나 함수형 같은 패러다임을 익히기 힘든 건 물론 익히는데 방해가 되기까지 함. 왜냐하면 C언어에 익숙해지면 사고 방식 자체가 구문단위, 그리고 포인터에 고정되기 때문이야. 그러니까 모든 문제는 다 if/for/함수 조합하면 해결 할 수 있는 걸로 보이고, 객체지향 같은 것도 다 메모리 차원에서 이해하게 된다.


그런 페널티 없어도 비전공 입문자들이 객체지향 같은 거 제대로 이해하는 거 엄청 어렵거든. 특히나 국비 학원 같은데서는 최단시간에 스프링으로 페이지 찍어내는 거 가르치는게 목적이라 패러다임 같은 거 중요하게 안다루니까. 가뜩이나 생각의 단위를 구문에서 타입으로 옮기는 게 어려운데 거기에 C 언어적인 선입관을 끼얹으면 망하는거지.


차라리 주력 언어가 C인데 자바를 어쩌다 하는 사람이 그러면 뭐 우물안 개구리는 되겠지만 그렇다고 C언어 실력에 흠이 되진 않으니 나쁘진 않아. C가 '모든 언어의 근본'이라고 헛소리하는 부류가 대체로 그런 식으로 편견이 굳어진 경우인데, 그런 사람들은 C라도 잘하거든.


근데 자바, 파이썬, C# 이런 거 하는 분야 사람이 그렇게 시작하면 초급 수준으로 배운 C는 어차피 쓸 일도 없고, 그 것 때문에 정작 자기 분야 패러다임은 제대로 모르고, 막연하게 난 C를 더 깊게 안파서 실력이 안느나보다, 비전공자는 원래 안되나보다 그런 식으로 열등감만 키우게 될 수도 있다.


내가 가끔 C/C++이 최고인 줄 아는 부류가 입문자에게 무턱대고 C부터 배우라고 하면 비판하는게 그런 이유다. 적어도 입문자가 하고 싶은 분야가 뭔지라도 물어보고 그런 소리를 해야지, 대부분 웹이나 앱 같은 분야로 갈 애들인데 그러면 안되는 거니까.


입문자 입장에선 분야를 먼저 정하고, 무슨 언어건 그 분야에서 주로 쓰는 언어를 최소한 패러다임을 능숙하게 다룰 줄 알고 이디오매틱한 코드를 짤 수 있을 정도로 배워 놓고 다른 언어를 배우는 게 맞다고 본다.