C#이 예전 기억만큼 편하지 않다

근 일주일 동안, 새로 만들어야 하는 도구 – 라 고는 해도 서버 바이너리 3개 – 의 proof-of-concept 구현을 했다. 일단 기억을 되살리는 의미로 C#으로 짜(려고 해)ㅆ다.

예전 기억 – 아직 학생이던 2000년대 초반의 일 – 으로는 C#은 꽤나 편안한 언어였다. 그 최신 버전(.net framework 4.0)으로 프로그래밍하는데 생각만큼 편하지 않더라. 이건 왤까? 일단 내가 생각하는 원인 두 가지.

우선 C++이 지난 몇 년간 매우 발전했다. 특히 요즘 추가된 C++ 0x의 closure — 그러니까 lambda 문법 — 와 auto 같은 몇 가지 syntactic sugar 가 매일매일의 작업에 매우 도움이 됐다. Closure는 프로그래밍하는 “방식"을 상당히 바꿔 놓는다. 직업이 직업인지라, 비동기적으로 처리하는 코드를 많이 짜게 되는데, closure가 있는 언어는 이런 작업을 “그런대로 직관적으로” 작성할 수 있다. auto 도 C++ template의 iterator처럼 긴 타입 선언을 매우 간략히 만들어주기에, 귀찮은 boiler-plate code를 줄여준다. 그런 점이 “일상적인 편리함"엔 큰 부분이다.

둘째로, 훨씬 더 고수준 언어인 python을 더 자주 쓰게 되었다는 것. 매일매일의 잡일이나 속도가 최우선이 아닌 부분은 거의 python으로 작성하고 있다. 복수 언어를 위한 코드 생성기나, 특정 바이너리를 서비스처럼 바꿔주는 기능이나 소스 저장소에 접근해서 뭔가 하는 작업 등등을 전부 python으로 짰다. 그리고 C++로 짜야 하는 것도, 프로토타이핑 수준에선 상당 부분 python을 쓰고 있다.

그러다 보니 타입 안정성 같이 정적으로 뭔가를 제약하는 C#이 좀 답답하게 느껴진다. 아예 C++처럼 unsafe한 것들도 “할 수 있는 범위 내에서” 하는 것도 아니다 보니, C#으로 토해내는 코드가 생각의 속도를 따라가지 못한다는 느낌. 차라리 duck typing으로 후딱 완성하고 테스트를 더 하는 쪽이 취향에 맞다.

이런 부분 때문에 중간부터는 python으로 후딱 짜고, C#으로 옮기면서 정리하는 작업을 했다(…). 그래도 예전에 불만이던 부분 – 그러니까 generic container 류가 없는 것 – 은 이미 해결되었고, 네트워크 코드가 나름대로 간결하게 나오는 것도 만족스럽기도 해서 일단 이번 작업은 최대한 C#으로 하기로 했다. 그렇게 하면서 좀 더 익숙해지면 나아지려나?