.netbooks의 편집자, 마노하 카마스는 제스 리버티와 최근에 나온 그의 저서
『Programming C#』에 관한 인터뷰를 했습니다.
카마스 :
.netbook에 오신 것을 환영합니다. 당신의 저서,
『Programming C#』에 대한 생각을 듣고 싶습니다. 이 책은 누구를 대상으로 하고 있나요?
리버티 :
『Programming C#』은 C# 언어와 .NET 구조에서의 C# 자습서입니다. 제 목표는 마이크로소프트의 문서를 재현하는 것이 아니라 독자들이 C# 환경에서 개발의 효율을 더욱 높일 수 있도록 C#과 .NET에 관한 이야기를 해 주는 것 입니다.
1장에서는 C# 언어에 대해서 가르치고, 2장에서는 윈도우, 그리고 웹 서비스와 웹 응용프로그램을 작성하는 방법을 보여줍니다. 3장에서는 닷넷의 구조(framework)와 Class Library에 대해 깊이 파고듭니다. 제가 대상으로 하고 있는 독자층은 경험이 풍부한 C++, Java, 그리고 VB 프로그래머들입니다. 그렇지만 저는 다른 언어를 쓰는 프로그래머, 그리고 심지어는 초보 프로그래머들도 이 책을 읽을 수 있도록 책을 썼습니다.
카마스 : 이렇게 포괄적인 책을 쓰기 위해 오랜 시간동안 C#을 써 보셨겠군요. 당신이 C#에서 가장 매력을 느낀 부분은 무엇이었나요?
리버티 : 저는 PDC bits와 일을 시작했고, 그리고 물론 Beta 1 버전과 다양한 Beta 2의 pre-release를 접했습니다. 약 1년 전에 저의 목표는
오라일리사에 내가 C#에 관한 책을 쓰게 해달라고 설득시키는 것이었습니다. 저는 그 언어와 구조에 흥미를 느꼈고, 그런 이야기를 쓰기에 오라일리가 적당하다는 것을 알았습니다.
C#에서 가장 매력적인 부분은 이것입니다. 마이크로소프트는 VB의 프로그래밍의 용이함과 C++의 객체 지향을 결합했습니다. 그리고 그 모든 것은 믿을 수 없을 정도로 풍부하고 강력한 Class Library의 위에 놓여있습니다. 저는 닷넷에 열광하고 있으며 그래서 마이크로소프트와 한 패거리라는 비난을 받은 적도 있습니다. 그것은 원인과 결과가 뒤바뀐 것이라고 생각합니다. 전 닷넷에 너무 흥미를 느껴 C#에 관해 쓴 것이지 다른 이유가 아닙니다.
저는 C++과 VB로 10년 정도 개발을 해 왔습니다. 그리고 저는 결코 C#와 이 둘을 비교할 수 없다고 봅니다. C#에는 C++과 VB를 능가하는 상당한 개선점이 있습니다. 그리고 제가 개인적으로 사용하려고 할 때 그러한 개선점을 별로 가격 부담을 받지 않고 쓸 수 있습니다. C#에서 포인터가 없는 것은 아무런 문제가 되지 않았습니다. C#은 더 깨끗하고, 더 간단하고 더 프로그래밍하기 쉽습니다. 그리고 만약에 당신이 포인터를 필요로 한다면, C++을 쓰면 됩니다. 그러나 포인터가 그리 자주 필요하지 않습니다.
C++프로그래머들에게 있어서, 제가 생각하기에 가장 큰 변화는 .NET이 관리가 잘 이루어지는, 그리고 garbage-collection이 잘 이루어지는 환경이라는 점입니다. 물론 foreach loop나 열거형(enumeration)을 만드는 것, 그리고 첫 번째 Class 멤버를 대표로 하는 것 등의 작은 변화도 있습니다. 그렇지만 이 관리환경이 모든 것을 바꿉니다. 저는 이 내용에 관해 MSDN에 다음과 같은 기사를 쓴 적이 있습니다. -
C#에서 당신은 어느 정도 이상의 관리를 할 필요가 없습니다. 그리고 그만큼 당신은 개발에 집중할 수 있습니다.
VB 프로그래머들에게 있어서 가장 큰 변화는 C#이 완벽한 객체지향이라는 것입니다. 이것은 매우 큰 변화이며 몇몇 VB 프로그래머들은 문화적인 충격을 받을 것입니다.
저는 VB .NET으로 작업하여 낸 결과물을 보고 그들이 행복해하는 것을 생각해보았습니다. 몇몇 프로그래머들은 의심 없이 C#으로 건너뛸 기회를 잡을 것이지만 많은 사람들은 VB에 머물러 있을 것입니다. 전 제 생각대로 VB 대신에 C#을 선택했습니다. 저는 단지 일을 떠맡았을 때 C#이 더 편안하다고 생각합니다. 제가 이단자가 되었음을 고백합니다. 어쩌면 C#이 대소문자 구별을 하지 않아서 C#을 선호하고 있는지도 모르죠. 으음 제 목소리가 너무 큰가요?
물론, 실제로 C#과 VB는 공통적인 type system을 가지고 있습니다. 이것은 당신이 VB에서 객체를 만들어서 C#에서 그것을 상속받고, 다시 그것을 VB.NET에서 상속받는 것을 가능하게 해 줍니다. 매우 멋진 일이죠.
마이크로소프트가 실제로 한 것은, 제 생각에는 Fred.NET 이라는 완전히 새로운 언어를 만든 것입니다. Fred.NET이 멋진 점은 두 종류의 구문이 있다는 것인데, C#라고 불리는 C 비슷한 구문과, VB.NET이라고 부르는 VB 비슷한 구문입니다. 실제로 그것은 하나의 새로운 언어일 뿐입니다.
카마스 : 두 언어의 구문은 다소 비슷합니다. VB.NET은 거의 C#과 다름없습니다. 특히 그들은 공통적인 Class Library를 공유하고 있기 때문에, 만약에 제가 VB.NET으로 된 코드를 가지고 있다면 저는 그것을 쉽게 C#으로 바꿀 수 있고 그 반대의 경우도 가능합니다. 아마도 자동화된 변환기를 쓰겠지만 말이죠. 당신도 동의합니까?
리버티 : 저는 그렇게 생각하지는 않습니다. 비록 제가 당신에게 당신이 변환할 수 있는 가장 간단한 프로그램을 제시한다고 해도 당신이 두 구문에 익숙하지 않은 이상에는 그렇게 간단한 일은 아닐테지요.
확실히 C#과 VB.NET의 차이는 VB.NET과 VB6 의 차이보다도 훨씬 더 작습니다. 구문이 쉽다는 것을 기억해주십시오. 그것은 익숙한 의미로의 변화입니다. 적어도 몇몇 VB6 프로그래머들이 VB.NET으로 가는 것보다 C#으로 가려고 결정할 것이라고 전 느끼고 있습니다. VB6에서 C#으로 건너가는 것은 VB6에서 VB.NET으로 건너가는 것에 비해 그다지 크지 않습니다.
카마스 : C++을 기반으로 만들어진 언어로서, low-level 프로그래밍을 하거나, 특히 포인터를 쓰거나 메모리 조작을 할 때 애를 먹지 않습니까?
리버티 : 그렇지 않습니다. 당신은 쓰고 싶다면 포인터를 써도 됩니다. 그렇지만 low-level 프로그래밍을 한다거나 메모리조작을 하는 것은 대부분의 .NET 개발에는 부적합합니다. .NET 개발은 믿을 수 없을 만큼 강력한 플랫폼에서 이루어집니다. 그리고 거기에 당신은 포인터나 메모리조작 없이 관리되는 안에서 코딩을 하게 됩니다.
카마스 : .NET은 언어에서 온 대부분의 일을 처리하고 그것을 class framework와 CLR에 집어넣습니다. 여기에, C#로 하는 프로그래밍이 다른 언어로 하는 프로그래밍과 비교해서 매력적인 것이 있나요?
리버티 : 저는 그들이 언어에서 일을 .NET으로 보내고 그 만큼 그 구조가 커진다는 생각에는 확신이 서지 않는 군요. .NET은 실제로 객체지향 API가 지원되는 전혀 새로운 OS입니다. 간단히 말해, 그들은 배관공사에 신경을 쓰고, 당신은 응용프로그램 개발에 초점을 두게 됩니다.
C#이 다른 언어와 비교하여 매력이 있냐구요? 나는 그런 것에는 신경 쓰지 않을 생각입니다. 몇몇 VB 프로그래머들은 아마도 VB가 과소평가되었다고 생각할 것입니다. 제 생각으로는 두 언어가 둘 다 성공할 것이라고 봅니다. "내가 쓰는 언어가 네 것보다 더 좋아" 라는 것은 어떠한 경우에서라도 바보와도 같은 짓입니다.
카마스 : 바보 같다구요? 그것들이 지금은 모두 "같기"때문인가요?
리버티 : 이러한 결정은 개인의 가치판단을 수반하지요. 이 말은 당신이 심사숙고 후에 결정을 한다는 것입니다. 왜냐하면 프로그래머들은 어떤 언어를 배워야 할지 내지는 적어도 어느 언어를 먼저 배워야 할지에 대해서는 알고 싶어하기 때문입니다.
저는 몇 가지 이유로 C#을 VB.NET보다 선호합니다. 우선 C#의 구문이 VB의 그것보다 맘에 드는데다가, 마이크로소프트에서 나온 많은 문서들 또한 C#에 관한 문서입니다. 이 사실은 변하고 있습니다만, 아직도 대부분의 시간에 C#을 디폴트로 두고 있는 거 같습니다.
세 번째로, 더 반론을 하기 어려운 것은 사회적인 양상입니다. 역사적으로, C++프로그래머들은 VB 프로그래머들보다 더 분석능력과 객체 지향 설계능력이 뛰어났습니다. 그리고 C 나 C++프로그래머들은 VB프로그래머들보다 수입 또한 많았습니다. 저는 그 추세는 적어도 당분간은 유지되리라고 생각합니다. 그러나 적어도 앞으로의 몇 년은 C#이 더 우세할 거라는 것이 제 생각입니다.
카마스 : 초보자의 관점에서, C#을 배워야 하는 5가지 이유를 제게 설명해주시기 바랍니다.
리버티 : 만약에 당신이 웹 프로그래밍이나 윈도우 프로그래밍을 하고 싶다면, C#을 선택하십시오. 웹이나 윈도우 프로그래밍은 두 가지 경향으로 나누어집니다.
바로 닷넷 언어를 사용한 경우와 그 나머지 경우입니다. .NET 구조로의 탐험이 증명해 줬듯이 .NET 언어를 사용함으로써 오는 이점은 매우 압도적입니다. .NET 언어들 중에서, C#은 유리한 위치를 차지하고 있습니다. 초기에 쓰여졌던 문서를 보기 바랍니다. 거의 모든 것이 C#에 관한 것입니다. 경쟁자라면 좋은 대안이 될 수 있는 VB.NET 뿐일 것입니다.
예, 여기에는 5가지의 이유가 있습니다:
- Garbage collection
- C-스타일의 구문
- 객체지향 컴포넌트 기반 프로그래밍의 완벽한 지원
- 매우 집약적인 Class Library
- 높은 성능
카마스 : 비록 .NET이 그들 언어에 객체지향을 가져다준다고는 하지만 그건 아직 완벽한 객체지향의 일부일 뿐입니다. .NET에는 Class의 다중 상속이 빠져있습니다. 이것에 대해서는 어떻게 생각하십니까?
리버티 : 저는 그렇게 생각하지 않습니다. C#은 encapsulation(또는 data hiding), Polymorphism(다형성), inheritance(상속) 이라는 객체지향 프로그래밍의 세 개의 "기둥"을 완벽하게 받치고 있습니다. 당신이 말했듯이 C#에는 Class의 다중상속(Multiple inheritance)이 없습니다. 그렇지만 Interface의 Multiple Implementation은 존재합니다. 그것은 당신이 원하던 것입니다! 제가 10년 남짓 프로그래밍을 해오면서 Interface로는 풀지 못했을 지도 모를 다중 상속을 할 필요성을 느낀 적이 없습니다. 그건 문제가 되지 않습니다.
C#에서의 객체지향과 콤포넌트 기반의 프로그래밍의 지원은 제 관점에서 보기에 매우 뛰어납니다. 그렇지만 저는 객체지향 프로그래밍에 대해 그다지 학술적인 관심이 있지 않습니다. 제 목표는 단지 강하고, 계속 유지할 수 있고 , 효율적인 애플리케이션을 만드는 데 있습니다. 객체지향 프로그래밍은 그 중간의 것일 뿐입니다.
카마스 : 비슷한 질문이지만, 모든 .NET 프로그래머들은 현재 OO(객체지향)를 잘 알고 있어야 합니다, 그리고 그것들은 몇몇 프로그래머들을 괴롭히지요. 당신은 OO가 C#에서 뿐만이 아니라 어떠한 프로젝트에서도 중요한 것이라고 생각하십니까?
리버티 : 캡슐화와 다형성, 그리고 상속의 핵심에 대한 이해가 C#에서 필요하고 그것은 또한 다른 .NET 언어에서도 필요합니다. .NET 플랫폼은 원래부터 객체지향이었고 이 시각을 피하려는 사람은 의문의 여지없이 불이익에 처하게 될 것입니다.
저는 이것을 .NET의 버그가 아닌, 특징이라고 생각합니다. .NET의 객체지향의 양상은 API를 가지고 작업을 하기 쉽게 만들어주고, 그 결과로 나온 프로그램을 강하고, 더 유지하기 쉽게 만들어 줍니다.
완벽을 추구하기 위해서, 무언가에 능숙해지기 위해서 하나하나씩 그것을 만들어 가는 프로그래머들이 있습니다. 나는 이러한 프로그래머들이 .NET을 밀어내려는 열망을 가지는 경향이 있다고 생각합니다. .NET은 그들이 일해 온 것을 어느 정도는 성공적으로 손상시킨다고 생각하기 때문이죠. 저는 그건 착각이라고 생각합니다. 우리가 짜고 있는 프로그램은 5년이나 10년 전의 것에 비해 더 복잡해졌습니다. 판매시장 그리고 저 또한 마이크로소프트가 그것을 .NET 안에 받아들인 것이 절대적으로 옳았다고 생각할 것입니다.
카마스 : 저는 독자들에게 당신의 멋진 저서 『Clouds to Code』에 대해 지적하고자 합니다. 그 책은 프로그래밍 책이라기보다는 C++과 UML을 강조한 프로그램의 구조에 관련된 책이라고 생각하는데요, 그 책을 C#에 대해서 다시 쓰실 생각은 없으신지요?
리버티 : 오, 멋진 생각이군요. 그렇지만 록스와 오라일리가 어떻게 생각할지 모르겠군요. 그런데 그 책은 일하는 프로그래머들의 사례에 관한 공부로서 쓰여 있는 것입니다. 그것은 여러모로 언어에 대해 중립적이죠.
카마스 : Java와 C#의 논쟁에 관해서는 어떻게 생각하십니까?
리버티 : C#은 Java와 C++을 배운 사람들에 의해 만들어졌습니다. 저는 Java가 굉장한 언어라고 생각합니다. (제가 쓰는 새로운 고등학교 컴퓨터과학 서적은 Java로 쓰여질 것입니다.) 그렇지만 그것은 .NET을 위해 선택하는 언어는 아닙니다. 만약에 C#과 Java로 동일한 플랫폼 위에서, 그리고 동일한 라이브러리의 집합에서 작업을 한다면 그 선택이 더 의미가 있겠죠. C#을 선택하는 이유에 대한 좋은 주장은 계속 존재하겠지만, 지금으로는 .NET 플랫폼에 접근하기 위한 것이 그 실제 이유가 되겠지요.
카마스 : 당신은 C#에 있어야 한다고 생각하는 것 또는 없었으면 하는 것에 관한 ‘목록’을 가지고 있나요?
리버티 : 저는 템플릿을 만드는 아이디어에 호기심이 생겼습니다. 그렇지만 저는 어떻게 그것이 구체화 되어 나타날 것인지 지켜보기로 했습니다. 하지만 숨을 참으려고 하지는 마십시오. 제게 가장 큰 소망사항이라면 C#이 대소문자 구별을 하지 않는 것입니다.
카마스 : 당신의 웹사이트에는 당신이 당신의 책을 개인적으로 지원하고 있다고 언급을 하고 있는데, 그에 대해 좀 더 자세히 이야기 해 주실 수 있겠습니까?
리버티 : 수년 전에 저는 제 책에 대한 지원을 제공하기 위해 일 하나를 꾸몄습니다. 저는 제가 낸 책에 대한 교정, FAQ, 완전한 소스코드, 그리고 추가적인 지원정보를 제공하는
웹사이트(www.LibertyAssociates.com)를 운영하고 있습니다. 저는 또한 제 책에 대한 질문에 답하는 토론그룹도 제공하고 있습니다. 추정하건대, 저는 제 책에 관해 일주일에 300개가 넘는 메시지를 받습니다, 그리고 모든 메시지에 개인적으로 답해드리고 있지요. 게다가 저는 제 시간의 많은 부분을 training(저는 회사들을 위한 on-site training을 제공합니다)에 사용하고, 그것은 제가 서로 다른 프로그래머들이 어떻게 배우는지에 대해서 이해할 수 있게 해 줍니다. 제 남은 시간은 계약되어 있는 프로그래밍을 합니다, 그리고 제가 프로그래밍 하면서 배운 것은 다시 제 글에 feedback이 되지요..
카마스 : 리버티씨, 당신과의 인터뷰는 굉장했습니다. .netbook 과 인터뷰해주신 것에 대해 감사드립니다.
리버티 : 이런 인터뷰를 할 기회를 내주셔서 감사합니다. 당신의 웹사이트는 매우 가치 있는 서비스를 하고 있더군요, 그리고 저는 여기에 참여해서 매우 기쁩니다. 다시 한번 감사드립니다.
제스 리버티는
『Programming C#』과 곧 출간 예정인 『Programming ASP.NET』의 저자입니다. 리버티는 QUE 출판의 the Jesse Liberty"s Programming From Scratch series 의 편집자일 뿐만 아니라, 『XML Web Documents From Scratch』 의 저자이고 세계적인 베스트셀러인 『Teach Yourself C++ In 21 Days』 의 저자이기도 합니다. 그는 웹 애플리케이션 개발과 객체지향 프로그래밍에 관한 많은 책을 써 왔고, C++ Report, MSDN, Microsoft Internet Developer 와 PC Week에도 많은 기사를 써 왔습니다. 그는 포츈 100 회사들을 위한 실세계 응용프로그램을 만들었고, 전국적인 프로그래머 교육 등을 통해 그의 경험을 쌓아갔습니다, 그리고 독특한 일련의 On-site training Seminar를 만들었습니다.