내가 대학 때 배운 첫 언어는 C언어였고, 주 종목은 학과 수업을 따라 공부한 MFC였다. (정확히는 visual C++ 6.0 툴) 수업으로 들은 Html코드, 리눅스, Java기초 등등도 있긴 했다. 하지만 어디까지나 내 관심은 WIPI 라는 당시 휴대폰에 들어가는 플랫폼으로 모바일을 전문으로 하는 프로그래머가 되고 싶었다. (WIFI 아니고 위피)

image: shutterstock
image: shutterstock

WIPI는 대한민국 정부와 3대 이통사가 만들어 놓은 대책없는 플랫폼이었다. 하지만 국내에서 모바일 프로그래머가 되기 위해서는 어쩔 수 없이 접해야 했다. WIPI는 C혹은 Java중에 개발 언어를 선택할 수도 있었고 우리는 언어들을 각각 Clet과 Jlet 으로 불렀다.

그 때의 나는 모든 언어의 기본은 C로 시작한다는 C언어광이었고 Java는 VM 위에 올라가는 느려터진 암 덩어리라고 생각했다. (뭐 지금도 Java 를 좋아하지는 않는다…Oracle 때문이기도 하지) 그래서 Java 광들과 인터넷 상에서 극렬하게 키보드 배틀을 벌이기도 했지만, 그것이 큰 의미가 없다는 것을 나중에 한 SI 업체에서 근무하면서 알았다.

개발자 커뮤니티에서 활동을 하다보면 여러 부분의 전문가들의 글을 읽을 수 있고, 그에 대해 논쟁이 발생하기도 하는데 그 중 가장 극렬한 토론이 생길 때는 바로 언어에 대한 품평을 할 때다.

“PHP 같은 쓰레기 같은 언어가 비중이 높은 이유를 모르겠어요. JAVA 가 짱인데… ”

내 경우에는 C를 먼저 다루던 사람이었고 당시에는 Python으로 웹을 구축하는 사람으로서 “Python 도 좋던데 말입니다”라고 쓰려다가 말았다. 논점 이탈이기도 했고 의미없는 소모성 논쟁에 발을 담그고 싶지 않았다.

image: shutterstock
image: shutterstock

다른 논쟁도 있다. “프로그래머가 언어에 종속되면 안됩니다.” 이런 주제로도 많은 논쟁이 오간다. 완전히 상충되는 두가지 말인

1. 이 언어는 나쁘다. 내 언어가 최고 !!!
2. 프로그래머는 언어에 종속되면 안된다. 하나만 쓸 줄 알면 쓰래기!!!

를 주장하는 개발자들은 나는 나쁜 개발자의 유형중 하나인 ‘흥선대원군’이라고 칭한다. (다 똑같은 마음가짐을 가지고 있다는 말이다.)

프로그래밍 언어는 하나의 수단이기도 하지만, 그 수단이 가지는 의의와 숙련도는 별개이다. 1의 말처럼 어떤 언어는 나쁘다라고 말을 하기 위해서는 그 언어가 왜 나쁜지에 대한 내용이 있어야 합리적이다. 하지만 대부분은의 사람들은 보안이 취약하다, 언어적인 특성이 너무 수준이 떨어진다, 디버깅이 취약하다, 디자인패턴이 나쁘다, 효율적이지 못하다 등등 의 수 만가지 합리적이지 못한 이유를 댄다.

먼저 이것부터 말해보자. 언어는 하나의 도구이다. 이 부분은 많은 것을 알려준다. 도끼를 들고 나무를 베는 사람은 나무꾼이지만, 대결을 하면 전사다. ‘보안이나 디버깅이 취약하다’라는 말은 이미 보안 쪽이나 개발 진행에 문제가 제기되지 않았거나 극복한 사례로 입증되어졌고, 디자인 패턴 관련 문제는 언어의 문제점이라 보기 어렵다.

효율적이지 못하다는 것과 언어적인 특성이 너무 수준이 떨어진다는 말은 과연 무슨생각으로 한 말인지 의심이 될 정도로 저급한 비판이다. 디자인 패턴과 언어적인 특성은 언어 자체의 문제가 아니라 주어진 환경과 사용하는 사람에 의해 결정되기 때문이다. (일례로 Java로도 얼마든지 개판 오분전 패턴으로 막코딩한 프로젝트 수 억개는 봤다.)

“그 언어를 사용하게 되는 사람들이 대부분 나쁜 프로그래머가 되었더라”
(or 그 언어는 신입 프로그래머는 절대 배우면 안되는 언어다)

그건 배우는 사람이 잘못 배워서 그런 것이지 언어가 어디 그렇게 쓰라고 적혀져 있던가?

“지금이 어느 세상인데 객체지향의 ‘ㄱ’ 도 못 내밀만한 허접한 언어를 개발언어로 쓸수가 있는가?”

객체지향의 개념이 없는 언어도 당당히 현역으로 많은 개발자들이 다루고 있으며, 사회의 중추적인 역할을 하는 부분도 많다.

그럼 여기서 2.에 해당하는 개발자들은 고개를 끄덕이겠지. (하지만 너희들도 똑같다)

언어에 종속되지 말아야 한다는 자체는 인정한다. 하지만 한 언어의 사용에 있어서 숙련도는 절대 무시할 수 없다. 프로그래밍 언어는 필연적으로 언어적인 특성과 함께 플랫폼의 특성도 함께 따라가며 그것을 다루는 개발자 역시 플랫폼과 언어에 숙련도를 쌓기 마련이다. 그러다 보면 어쩔 수 없이 한 언어와 플랫폼에 종속되어버린 개발자들도 있다. 안 된다고 하지만, 그들은 이미 한 언어에 종속되어버린 친구들이고 그들이 역시 잘못된 혹은 나쁜 프로그래머가 되어버린 것일까?

천만에,

이런 개발자들은 한 분야에 대단한 숙련도를 쌓은 베테랑 중에 베테랑들이다. 그런 그들에게 ‘개발자는 한 언어에 종속되면 안된다’라고 말 할만큼의 전 언어의 베테랑들이 몇이나 될까? 개발자 커뮤니티에서 활동을 하다보면 처음에야 멋 모르고 날뛰다가 어느정도 시간이 흐르고 머리속에 들어간게 많아지다 보면 함부로 ‘ XX언어는 쓰레기다’ 혹은 ‘XX는 하지 말이야 한다’라는 말을 하지 않게 된다.

다른 커뮤니티에서는 모르겠지만, 개발자 커뮤니티에서는 적어도 개발부분에 있어서 무엇이 좋지 않다라고 말하는 것에 대한 검증을 하지 못하는 한, 심증적인 주장을 할 수 밖에 없고 그게 쌓이다 보면 결국 ‘꾸준하게 글 쓰는 봇’ 정도 밖에는 안된다.

그래서 어느정도 커뮤니티 경력이 쌓이다 보면, 부정하는 것 보다는 추천이나 더 나은 방향을 제시하는 내용이 많아지는 것도 다 이런 이유에서이다. (그러면서 나는 블로그에 ‘나쁜 프로그래머’라는 글을 쓰고 있다. 뭐하는거니 난..)

해당 언어를 사용하는데 다 이유가 있고, 쓰는 사람에 따라서 성능이 결정이 나는 것이 대부분이다. 그리고 한 언어만 사용해왔고 그것만을 고집하는 환경에 있다고해서 싸잡아 무시하는 생각도 버려야 한다.

개발언어를 품평하는 것을 스포츠에 빗대어 표현하자면 축구, 야구, 농구, 배구, 피겨 스케이팅, 아이스 하키, 미식축구를 두고 어떤게 더 좋다, 나쁘다라고 평하는 거처럼 아무런 의미가 없는 일이다. 축구보다 미식축구가 더 좋은 스포츠다? 피겨스케이팅 보다 배구가 더 좋은 스포츠다?라고 아무도 말할 수 없다. 위의 2번의 말도, ‘진정한 스포츠맨이라면 모든 운동을 골고루 해야지’라는 말로 대입시켜보면 합리적이지 않다라는 게 더 쉽게 느껴진다.

제목을 흥선대원군이라 칭한 것은 이런 것 때문이다. 흥선대원군이 어떻다라고 논하기 보다는 쇄국정책이라는 이미지를 차용한 것이다. 하나의 자신의 생각에 사로잡혀 있으면 안 된다고 말하고 싶다. ‘개발자는 언어에 종속되면 안되, Java가 짱이지, 평생 Java만 해먹고 살아라.’ 이런 닫혀진 생각에서 자유롭지 못하면 나쁜 개발자가 되어간다고 생각한다.

정리하자면

A. 그래 지금 내가 다루는 이 언어가 짱이야.
B. 다른 언어도 장점이 있지만, 지금 나는 이 쪽에 숙련도가 높아서 장점을 잘 살릴수 있어.
C. 나는 많은 언어를 다루어 봐서 각자의 장단점을 알고 있지만 해당 언어에 숙련된 사람들도 그에 맞는 장점을 많이 가지고 있으니 그 또한 대단하다고 본다.

난 A 보다는 B, C가 더 좋은 개발자의 마음가짐이 아닐까 라는 것이다.

교류하자. 누구나 본인이 다 옳다고 생각하는 것에 대해 반론하기 보다는 그들이 왜 그렇게 생각하고 있는지에 포인트를 두고 생각해보자. 하나를 중점적으로 파는 사람들도 많은 부분의 경험을 지향하는 사람들도 결국은 서로 같은 것을 추구하는 사람들이다.