잠깐 시장 조사차
게시판 놀이를 잠시 했습니다. 이런 글을 적을 자격이나 있는지 모르겠지만 느낀점과
하고싶은 말을 몇 자 끄적여
봅니다...
아... 구린 닷넷이여...
라고 말하는 사람들을 개발자 게시판 등을 돌아다니다 보면 많이 볼 수 있다. C++에는 있는 소멸자(destructor)가
C#에는 없다는 둥... MFC에는 이게 되는데 닷넷은 안 된다는 둥... 자바는 이게 편한데 닷넷은 이게 불편하다는 둥... 프로그래밍 언어적인 불편함부터 시작해서 개발툴에 대한 불만 등등...
이런 불만을 갖는 사람들이 비단 닷넷 개발자들만 있겠는가? C++ 개발자들도, PHP 개발자들도, 자바 개발자들도
항상 자신이 사용하는 프로그래밍 언어, 개발 환경, 응용 프로그램 플랫폼, 운영체제에 불만을 가진 개발자들이 많이 있을
것이다. 필자도 성인군자가 아닌지라 일련의 불만을 가지고 있다. 뭐 구차하게 나열하진 않겠지만 말이다.
이러한 불만 사항은 개발환경, 프로그래밍 언어 등을 발전시키는 밑거름이 되곤 한다. 소프트웨어(그것이 개발환경이건
개발도구건 운영체제이건)는 버전이 올라갈 수록 기능적인 면부터 시작해서 성능적인 면, 편의적인 면, 하다못해 가격적인
면에서라도 변화하게 되고 그 변화는 대개의 경우 발전적인 방향을 띠는 것이 일반적이다. 이러한 무엇이 소프트웨어 발전을
도모하는 것일까? 소프트웨어를 개발하는 개발사의 기획팀이 발전적인 모습을 리딩 하는 것일까? 소프트웨어의 개발자들이 새로운
기능을 능동적으로 추가하는 것일까? 물론 그럴 수도 있겠지만 대부분의 소프트웨어의 발전적인 변화 사항은 고객의
피드백(feedback)으로부터 나오는 것이 일반적이다.
공연히 말을 좀 길게 했는데, 아쌀하게 말하면 사용자(개발자도 개발환경, 개발도구의 사용자이다)의 발전적인 불만
사항을 토대로 소프트웨어는 발전된다는 얘기가 되겠다. 필자가 하고 싶은 말은 건전(?)하고 발전적인 불만은 소프트웨어 그
자체와 프로그래밍 환경을 발전시키는데 원동력이라는 것이다.
불만을 갖는 것과 싫어하는 것은 다르다.
하지만... 몇몇 프로그래밍 게시판을 보면 자신이 사용하는 개발환경, 프로그래밍 언어 등에 대해 발전적인 불만을 토로하는 것이
아닌 단순한 불만을 토로하는 사람을 볼 수 있다. 필자의 짧은 지식과 경험에 의해 그러한 불만을 검토해 보면 대개 해당
플랫폼에 대한 이해가 부족한 경우가 많더라는 것이다. 예를 들어 닷넷에 소멸자가 없는 것을 토로하는 불만은 소멸자가 왜
없을 수 밖에 없는지(가비지 컬렉션 때문이다) 그리고 닷넷의 가비지 컬렉션이 주는 장점이 얼마나 큰지, 그리고 이 장점이
소멸자가 없음에서 오는 불편함에 비해 트레이드 오프(trade-off)가 있는지에 대해 잘 생각해 보지 않았기 때문이라고
생각된다. 그리고 소멸자가 없는 점에 대해 Dispose 패턴이 존재하며 이것으로 충분히 소멸자 역할을 대신할 수 있을
텐데 말이다. (이점에 대해서 논란이 있을 수 있겠지만, 필자의 생각이 그렇다는 얘기이다)
닷넷에 소멸자가 없다는 사실(fact)에 대해서 어떤 이는 "이건 뭐 병신도 아니고... 쓰바 숏 같네..." 라고
불만을 토로하고 어떤 이는 "아... 그럴 수 밖에 없겠구나..." 라는 반응을 나타낼까? 해당 플랫폼을 이해하는 지식의
깊이에 차이일까? 물론 그럴 수도 있다. 가비지 컬렉션이 주는 장점이나 Dispose 패턴이란 것을 모른다면 그럴 수도
있을 것이다.
필자의 싸가지 없는 개인적인 생각은 약간 다르다. 이런 류의 불만 표출은
지식의 깊이와 상관없이 자신이 사용하는
플랫폼을 좋아 하지 않는, 아니 싫어하는 생각이 은연중에 있기 때문이 아닐까라는 생각을 해본다. 자기가 프로그램을 개발하는데 사용하는 프로그래밍 언어를 좋아 하지 않는 상황에서는 아주 사소한 것도 불편하게 생각하기
마련이고 이런 것들은 점차로 플랫폼 자체를 싫어하고 신뢰하지 못하는 상황까지 오기 마련이다. 이런 상황이 오게 되면 이제
개발자는 플랫폼에 대한 그 어떤 신뢰도 갖지 못하므로 플랫폼에 대한 열정도 없이 단순한 코드만을 생산해 낼 뿐이다. 어떤
문제가 발생하면 왠지 내 잘못이 아닌 플랫폼 문제인 것처럼 보이게 되고 플랫폼에 대한 신뢰는 더욱 더 떨어지는 악순환이
반복될 뿐이다.
내 탓이요, 내 탓이요, 내 큰 탓이로소이다.
자신이 사용하는 프로그래밍 언어, 개발도구, 플랫폼을 믿지 못하면, 그 분야에서 성장하기란 힘들다고
생각한다. 개발 상 어떤 문제가 발생했을 때 그 문제를 해결하고자 하는 활동과 노력으로 실력이 향상이 되며 노하우가 쌓이게
된다는 것이 필자의 지론이라는 것에 비추어 볼 때, 자기가 사용하는 플랫폼을 신뢰하지 못하는 이는 어떤 문제에 부딪치면
그것을 해결하려는 노력보다는 플랫폼의 문제로 치부해 버리는 경우가 많고 문제를 해결하기 위한 '즐거운' 고생을 거부하는
경우가 많다. 하지만 대개 문제의 원인은 프로그래밍 언어와 플랫폼에 대한 이해 부족, 개발자 자신의 부주의함, API에
대한 이해부족, 잘못된 코딩 패턴 등이 대다수 이다.
개발언어, 플랫폼을 탓하기 전에 스스로에게 어떤 문제가 없는지 살펴보는
자성의 시간을 가져볼 필요가 있다. 사실 개발 환경이나 제품 자체에 버그가 있을 수도 있다. 그런
버그를 발견했을 때 자신이 사용하는 개발 환경, 플랫폼을 믿고 좋아 하는 사람의 반응은
"우와... 내가 이런 버그를 발견하다니... 버그 리포트를 해 볼까?"
하며 기뻐하거나 희열을 느낄 수 있다. 반면 자신이 사용하는 개발 환경, 플랫폼을 믿지 못하고 싫어하는 사람은
"아놔 이럴 줄 알았어... 아니 씹쉐이들이 잘 좀 만들어 놓지..."
하면서 더욱더 자신이 사용하는 개발환경, 플랫폼을 믿지 할 수도 있다. 놀라운 반응의 차이 아닌가? (아님 말고...
-_-; )
지극히 개인적인 생각이지만...
자신이 사용하는 프로그래밍 언어, 개발 환경, 플랫폼 등(그것이 무엇이
되었건)을 좋아하지 않고 신뢰하지 않는 사람은 그 분야에서 대성하기 어렵다는 것이 요번 포스트의 싸가지 없는 필자의 생각이
되겠다.
"농구를 싫어하는 농구선수의 연봉이 높을 수 없지 않은가 !"
무엇으로 어떤 환경에서 어떤 플랫폼을 기반으로 개발을 하건 그 환경에 대한 믿음을 갖고 즐겁게 개발한다면 없던 열정과
재미도 솟아오를 것이며 재미있어서, 즐거워서 하는 프로그래밍은 자연스럽게 내공 증가에 연결되지 않을까?
이래서 블로그란 것이 좋다. 어디 커뮤니티 게시판에 이런 글을 올릴 수 있을까도 생각되고 올렸다 한 들 그 안에서
어떤 공격을 당할지도 모르기 때문이다. 그렇다고 필자가 이성적인 반론이나 비판을 거부하는 것은 아니다. 다만 비 이성적이고
소모적인 논쟁이 싫다는 것...
이럴 때 쓰라고 피드백이 있는 것이다. 필자의 생각과 다른 생각을 가진 독자들이 있다면 바로 꼰질러 주기 바란다.
단... 앞서 필자가 말했던 전제 조건을 쬐금만 생각해 보고 키보드에 손가락을 들이대길...