C#은 정말이지 잘 만든 언어가 맞습니다. 저는 C++과 JAVA의 장점들을 잘 골라서 취합했다는 느낌을 받았어요.
JAVA는 아무래도 언어의 나이가 많은데다가, 지금처럼 생산성을 추구하는 여러 언어들이 경쟁하던 시기에 나온 것도 아니죠. 불편한 게 있더라도 언어 자체를 확장하기보다는 문제를 우회할 수 있는 라이브러리를 만들어서 표준에 포함시키는 방식으로 해결했기 때문에 더 그런 것 같습니다. 그래서 JRuby, Jython, Groovy 등이 요새 주목받는 것이구요. JVM 위에서 보다 세련된 언어를 사용해서 코딩할 수 있다는 장점이 있어요.
다만 마이크로소프트가 다른 플랫폼에서 동작하는 .NET framework를 발표하질 않아서 문제지요. 게다가 내부 구현이 MS의 특허와 엮여 있어서 오픈소스 진영에서 제대로 구현하기도 어려운 노릇이고.
C#은 이거 뭐 비주얼 스튜디오가 버전업될 때마다 끊임없이 언어가 확장되고 있죠.
partial도 2005던가 2008에서 새로 추가됐고, DB 연동을 쉽게 해 주는 것, 람다 대수학에 있던 개념도 새로운 문법으로 등등...
정말 화려하더군요.
다만.. 말씀하신 것처럼 단순히 C++ + MFC 쓰는 것보다도 MS 플랫폼에 더욱 종숙되고 발이 묶이게 되는 건 각오해야겠습니다.
이 점에서는 비주얼 베이직과 비슷한 차원이겠네요. ^^
사실은 좋은 프로그래머라면 기술, 플랫폼에 종속되지 않고 어느 환경에서든 잘 적응해서 자기의 사고방식을 코드로 잘 옮길 수 있어야 하지요.
저도 고등학교 시절에 축적해 놓은 밑천인 Win32 API에 너무 묶여 있는 게 한계입니다.
간단한 유닉스 내지 파이썬 스크립트로 해도 되는 일상생활의 자동화 작업조차도 다 C++ 프로그램으로. ㅋㅋ
하지만 이게 윈도우 운영체제 하에서는 제일 원천적이고 강력한 기술이란 점은 다행임.
mono는 물론 어느 정도 성공한 케이스이지만 결국 리눅스와 맥에서만 의미가 있고, 그나마 제한적이지요. MS .NET Framework와 호환되지 않으며, 버전이 올라갈 수록 완벽에 가까운 구현은 점점 멀어져만 갑니다. 게다가 위에 적었듯이, MS가 가지고 있는 특허들 때문에 100% 호환은 원천적으로 불가능하기도 하지요.
그리고 mono의 최대 단점은 이거죠. Visual Studio에서의 편리함을 mono 기반에서 개발해서는 도저히 누릴 수가 없습니다. 그렇다고 맥이나 리눅스에 VS를 설치하게 되어서야... 차라리 윈도를 쓰는 게 낫습니다.