C#을 어떻게 공부해야 하나요?

View Comments

Written by 안재우(Jaewoo Ahn), 닷넷엑스퍼트(.netXpert)

가끔 DevDays와 같은 행사에서 Meet the Expert와 같은 행사를 진행하다 보면, 꼭 한번씩은 받는 질문이 아래와 같은 것들입니다.

".NET을 어떻게 공부해야 하나요?"

"C#을 마스터하려면 어떻게 해야 되죠?"

"ASP.NET을 잘하고 싶은데요. 무슨 책 보는게 좋아요?"

정리해보자면, 어떻게 공부를 해야 하는지와 어떤 책이 좋냐고 물어보는게 되겠네요.

질문을 하는 사람들은 개발자가 되고자 희망하는 사람들(주로 학생)도 있을테고, 기존 또는 다른 플랫폼에서 개발을 하다가 옮겨오려는 사람들인 경우가 많습니다. 물론 아주 가끔은 이미 .NET으로 개발을 하고 있음에도 불구하고 이런 질문을 물어보는 사람들도 있지요. ^^

자, 그럼 위의 질문들에 대한 해답은.....?

설마 이 글을 읽으시면서 바로 답이 나오기를 기대하시는건 아니시겠죠? ㅎㅎㅎ
사실, 이 질문에 대한 답을 바로, 섣불리 할 수 없는 이유에는 두가지가 존재합니다.

우선 첫째는 위 질문 자체가 잘못 되었기 때문입니다. 답을 해드린다고 하더라도 '에이~ 그게 어떻게 되요?'라고 부정하는 경우가 대부분이기 때문입니다. 그렇다면 제가 답을 엉터리로 드리는 걸까요, 아님 질문 내용과 질문자가 기대하는 것이 다르기 때문일까요?

구체적으로 만들어 보기 위해서 이번 글에서는 "C#을 마스터하려면 어떻게 해야 되죠?"라는 질문을 봅시다. 이 질문에 대한 제 답변은 항상 동일합니다.

"먼저 C# 언어 사양(C# Language Specification)을 보십시오."

C# 언어 사양은 http://msdn.microsoft.com/vcsharp/programming/language/default.aspx에 가면 다운로드 받을 수 있습니다. 또는 온라인 버전(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csspec/html/csharpspecstart.asp)을 보셔도 될 듯 합니다. 분량은 좀 많아 보이지만 최소한 이전에 OOP 프로그래밍 언어(C++, Java 등)을 한번이라도 보신 적이 있다면 실제로 보는데 크게 오래 걸리지는 않을 겁니다. 영어가 두려우시다구요? 그러면 친절하게 번역된 한글판(http://msdn.microsoft.com/library/KOR/csspec/html/CSharpSpecStart.asp)을 보셔도 됩니다.

제 경우는 이걸 읽어보는데 한 2일 정도 걸렸던 것 같습니다. 그리고 한 2일 정도 실제 코드로 만들면서 문법을 익혔던 것 같구요. 다른 분들도 넉넉하게 잡아서 1주일이면 다 하실 수 있을 겁니다.

어떻습니까? 지금까지 1주일 안에 C#을 마스터하는 방법을 알려드렸습니다.

아마 여러분들의 마음 속엔 '너 지금 장난하냐?'라는 생각이 드실 겁니다.

DB 연결은 어떻게 하고, 쿼리는 어떻게 실행하고, 결과를 화면엔 어떻게 보여줘야 하느냐는 생각이 드시겠죠? 그래서 여러분의 질문이 처음부터 틀렸다는 겁니다.
여러분은 C#을 마스터하고자 하는 것이 아니라 C#을 사용하는 방법을 마스터하고자 하는 겁니다.

그거 구분하는게 그렇게 중요하냐? 라고 또 물어보실 분도 계실 겁니다.
네, 그렇습니다. 중요합니다. 프로그래밍 언어 자체와 언어를 활용하는 방법은 분명히 서로 구분되어야 하는 장르이고, 학습하는 방법이나 형태도 달라질 수 밖에 없기 때문입니다.

어느 C# 책을 보던지.. 아마 제일 처음 시작하는건 Hello, World 예제부터 시작할 겁니다.
아마 여러분은 그 Hello, World 예제를 열심히 타이핑해서 콘솔에 결과가 출력되는 걸 보면서 뿌듯해할겁니다. '나 드디어 C#으로 프로그램 짜 봤다!'라고...
입력하는 키워드가 대체 무슨 뜻이고, 왜 이렇게 써야 하며, 문법이 어떻게 되는지에 대해서 전혀 알지 못하면서 말이죠.

Hello, World 예제에서 여러분이 얻어야 할 지식은 콘솔 화면에 글자를 찍는 방법을 터득하는 것이 아닙니다. 가장 간단하게 실행되는 프로그램을 보여줌으로써 전반적인 C# 코드가 이렇게 생겼고, 각각의 키워드가 무엇을 의미하고 문법이 어떻게 되는지를 보라고 알려주는 것이 가장 중요한 목적입니다.

좀 더 예를 들기 위해.. 귀여운 후배가 다음과 같은 질문을 해왔다고 가정합시다.
"선배님~ C#에서 메서드 어떻게 만들어요오~~~?"

여러분이라면 어떻게 답을 해주시겠습니까?

밑으로 내리기 전에 잠깐 스스로 한번 생각을 해보시기 바랍니다.

......

물론 사람의 심리상(?) 별로 귀엽지 않은 후배인 경우는 외면해버릴수도 있지만..
상당수 분들은 아마 이렇게 답을 할 겁니다.

public void Method()
{
}

생각하신 것이 맞습니까?
이대로 친절하게 후배에게 메서드 작성법을 알려주었다고 하겠습니다.
이제 이 후배에게 다음과 같은 걸 요구하면 수행이 가능할까요?

이 메서드를 오버로딩해서 string 형 가변길이 매개변수(매개변수 배열) 하나를 입력으로 받고 int형을 반환하는 메서드를 작성해라.

이것이 예제 위주, 활용법 위주로만 공부를 하는 경우 발생하는 문제입니다. 개발 커뮤니티 게시판의 질문 중 상당수는 이러한 문제로부터 기인하는 경우가 대부분입니다.
귀여운 후배한테는 가혹(?)하다고 생각될 수도 있지만, 질문에 대한 답은 다음과 같이 해주는 것이 후배의 미래를 위해 더욱 바람직합니다.

http://msdn.microsoft.com/library/KOR/csspec/html/vclrfcsharpspec_10_5.asp

진정하게 후배의 미래를 생각하는 사람은 다음 두개의 URL을 덧붙일 것입니다.
http://msdn.microsoft.com/library/KOR/cpgenref/html/cpconMethodNamingGuidelines.asp
http://msdn.microsoft.com/library/KOR/cpgenref/html/cpconParameterNamingGuidelines.asp

예를 들다보니, 약간 얘기가 빗나갔는데...
정리하면 공부해야 할 대상을 명확하게 구분하라는 것입니다.
C#을 배우겠다면 C# 언어 자체와 C# 언어 활용법으로 나누라는 말이죠.
그리고, 이중 언어 자체를 배우는데 있어서 가장 좋은 교재는 바로 C# 언어 사양이라는 겁니다.
언어 사양으로는 도저히 진도가 안나간다는 사람은 다음의 자습서(http://msdn.microsoft.com/library/KOR/csref/html/vcoriCSharpTutorials.asp)를 활용해보는 것도 좋습니다.

주의해야 할 사항은 사양을 공부하라고 해서 밑줄 쳐 가면서 키워드 하나하나까지 다 외우라는 의미가 아닙니다. 읽단 읽어보고 나머지는 필요할 때 Reference를 참조하면 되니까요.

그 다음 활용법..
UI 다루기, DB에 접근하기, 컴포넌트 또는 컨트롤 만들기 등등...
활용법은 말 그대로 많이 써보는게 가장 좋은 겁니다.
이건 어떤 기술을 쓰던지, 어떤 프로그래밍 언어를 사용하던지 마찬가지입니다.
예를 들어 DB 액세스라고 할 때, 어떤 언어를 쓰더라도 DB에 연결하기, DB에 명령 수행하기, 결과값 받아오기, 트랜잭션 처리라는 항목들을 배워야 한다는 것은 변하지 않는다는 것입니다.
사실상 .NET에서 이러한 DB 액세스는 C#의 영역이 아닌 ADO.NET의 영역입니다. 즉 여러분이 공부해야 할 대상은 이제 C#이 아니라 ADO.NET이라는 것이죠.

활용법 역시도 책을 보면서 익히는 방법도 있겠지만...
제가 제일 추천하는 방법은 .NET Framework SDK에 포함되어 있는 QuickStart 예제를 전부 따라해보거나 MSDN 내의 연습을 따라해보는 것입니다. MSDN 내만 하더라도 유용한 연습 자료들이 엄청나게 많습니다. 다음은 Visual Studio 2003 기준으로 연습 예제나 활용법을 배우기 좋은 내용들에 대한 URL입니다. 아마 어떠한 책들도 MSDN에 있는 것만큼 광범위하고 풍부한 내용을 다루는 것이 없을 겁니다.

http://msdn.microsoft.com/library/KOR/cpqstart/html/_NET_Framework_QuickStart_Samples.asp
http://go.microsoft.com/fwlink/?linkid=516
http://msdn.microsoft.com/library/KOR/vsintro7/html/vbconVisualStudioSharedWalkthroughs.asp
http://msdn.microsoft.com/library/KOR/vbcon/html/vboriVisualBasicInActionEndtoEndSolutions.asp
http://msdn.microsoft.com/library/KOR/cpguide/html/cpconBuildingNETApplications.asp

QuickStart 예제의 경우, 아마 마음먹고 하면 1주일이면 충분히 끝날 겁니다.

결과적으로 C# 언어 사양 1주일 + Quick Start 1주일 = 2주일이면 두꺼운 책 붙들고 한달 넘게 씨름하는 것보다 훨씬 나을 것이라고 감히 자신합니다. 모든 내용들은 다 배우고 외워야 하는게 아니라 나중에 어디를 참조하면 되는가만 기억해 두면 됩니다. 대신 언어 사양을 통해 기반을 다지기 전에는 절대 활용법에 손을 대지 않는 것이 좋습니다.

이쯤에서 질문에 대한 답을 선뜻 할 수 없는 두번째 이유를 적어본다면...
이렇게 알려 드려도 이게 여러분에게 적합한 방법이라는 보장도 없고, 이를 실천하는 것도 쉽지 않은 일이기 때문입니다. 하지만 적어도 이 방법들은 저를 포함한 대부분의 나름(?) 전문가라고 불리는 개발자들이 새로운 기술을 익힐 때 사용하는 학습 패턴이라는 점은 확실합니다.

이 패턴은 앞으로 나올 어느 기술을 공부할 때도 마찬가지로 적용됩니다. 예를 들어 WinFX에서 WPF를 공부할 때도 XAML의 스펙부터 볼 것이고, WCF를 볼 때도 역시 스펙부터 볼 겁니다. 스펙을 보고 되는 것과 안되는 것, 이전과 달라진 것, 새로운 것이 무엇인지를 확인한 다음 실제로 활용하는 방법만 몸에 체득하면 되니 새로운 기술이 나온다고 하더라도 별로 두렵지 않습니다.

바탕을 다진 후, 활용법을 배우면서 맨땅에 헤딩을 하다보면 개발을 하면서 생기는 문제에 대처하는 것도 그다지 어렵지 않으며, 꽁수라고 불리는 팁과 트릭들은 자연적으로 얻어지게 됩니다. 저희 회사의 김현승 책임의 경우 "정도를 걸어야지 꽁수에 집착하지 말라"라는 말을 즐겨하곤 합니다. 그런데 모순적이게도 저희 회사에서 꽁수의 최대 대가는 바로 김현승 책임입니다. 이를 보면서 얻을 수 있는 것은 '꽁수도 정도를 걸어본 사람에게서야 나온다'라는 겁니다.

그냥 이것저것 편한대로 써봤는데, 여러분들에게 도움이 되었는지 모르겠습니다. 오히려 혼란스럽다고 원망하는 분들도 계실지도 모르겠지만, 다시 한번 말하지만 이것이 프로그래밍 언어를 공부하는 정석이라는 것은 변하지 않는 사실입니다.

다음 번엔 좀 더 구체적으로 들어가서..
ASP.NET을 최단시간 내에 가장 완벽하게 정복(?)하는 방법을 한번 써보도록 하겠습니다. 반응이 별로 안 좋고 재미없다고 하시면 안 쓸 수도 있습니다. 여긴 제 블로그인데다 카테고리도 FreeTalk니깐.. 제 맘대로인거 아시죠? ^^

p.s. (2006.4.20) Advice to Beginner라는 카테고리를 신설해서 이동했습니다. ^^


출처 : lancers, .NETXPERT "C#을 어떻게 공부해야 하나요?"

2007/01/22 00:59 2007/01/22 00:59

댓글0 Comments (+add yours?)

Leave a Reply

트랙백0 Tracbacks (+view to the desc.)

Trackback Address :: http://paewang.net/trackback/34

Newer Entries Older Entries