개발자 영어

코스 전체목록

닫기

튜토리얼 소개

프로그래밍 시작하기 좋은 곳

이 모든 것이 시작한 때를 생각해보면, 2002년으로 거슬러 올라갑니다. 저는 프로그래밍을 가르치는 것에 대해서, 그리고 루비라는 프로그래밍 언어가 프로그래밍을 배우는 데 있어 얼마나 대단한 언어인가에 대해서 생각했죠. 사실 당시 저와 제 주변 분들은 루비에 대해서 흥분을 감추지 못하고 있었습니다. 왜냐하면 루비는 강력하고 우아하고 정말 재미있기 때문입니다. 하지만 이것 외에도 저는 루비가 처음 프로그래밍을 배울 때 사용하는 언어로 아주 좋을 것 같다고 생각했습니다.

아쉽게도 당시에는 프로그래밍 초보를 위한 루비 문서가 별로 많지 않았습니다. 같은 커뮤니티에 있던 몇몇 분은 초보를 위한 루비라는 튜토리얼을 만든다면 어떤 게 들어가야 하는지에 대해서 얘기를 나누었습니다. 그리고 나아가 프로그래밍이란 것을 어떻게 가르치면 좋을지에 대해서 얘기나누었습니다. 이것에 대해새 점점 생각하면 할수록, 더욱 하고 싶은 얘기가 많아지더군요. 사실 저도 좀 놀랐어요. 급기야 누군가가 저에게 말했습니다, "크리스, 얘기만 하지 말고, 그냥 네가 튜토리얼을 만드는 게 어때?" 그래서 만들었습니다.

만들고 보니, 별로 괜찮지 않더군요. 이론상으로는 괜찮은 아이디어들이 많이 있었지만, 실제로 프로그래머가 아닌 분들을 위한 튜토리얼을 만드는 것은 제가 생각했던 것보다 훨씬 더 어려운 일이었습니다. 제가 쓴 튜토리얼을 제가 보면 그런데로 괜찮아보였는데, 문제는 저는 이미 프로그래밍을 할 줄 안다는 것이죠.

정말 도움이 되었던 것은, 그 때 사람들이 제게 연락을 취하기 쉽게 만들어두었다는 거예요. 사람들이 튜토리얼을 읽다가 뭔가 막히는 부분이 있으면 항상 도와드리려고 노력했습니다. 튜토리얼 내의 특정 부분에서 많은 사람들이 많이 막혀한다는 것을 알게 되면, 그 부분을 다시 썼습니다. 작업량이 많았지만, 그렇게 하면서 튜토리얼이 점점 나아지더군요.

몇 년을 그렇게 하고 나니, 튜토리얼이 꽤 괜찮아졌습니다 :-) 아주 좋아졌어요. 그래서 사실은 튜토리얼 작업은 이 정도면 됐다고 하고 다른 것을 할 참이었어요. 바로 그 때 쯤, 튜토리얼을 책으로 만들 기회가 생겼습니다. 튜토리얼 자체는 이미 작성이 된 상태였기 때문에, 책으로 만든다고 할 때 별 문제가 없을 것 같았어요. 그래서 몇몇 부분을 정리하고, 몇 가지 연습문제들을 추가하고, 예제와 챕터도 약간 추가했어요. 그리고 50명의 검토자를 추가로 두어서 확인했습니다...

이렇게 하다보니 1년이 더 가더군요. 지금 생각하면 튜토리얼은 굉장히 좋습니다. 그리고 튜토리얼이 괜찮아지게 된데 많이 기여한 분은 튜토리얼을 고치게 도와주신 수백명의 용감한 분들이죠. 

이 사이트에 올려둔 것은 처음에 작성했던 튜토리얼 원본입니다. 2004년 이후로는 별로 변경이 안되었고요. 최신본, 그리고 최고의 버전을 원하시면 책을 보시기 바랍니다. 

프로그래밍을 가르치는 분들께

제가 지키려고 했던 몇 가지 기본적인 원칙들이 있습니다. 이런 원칙들을 지키면 배우는 과정이 훨씨 ㄴ수월하다고 생각합니다. 프로그래밍을 하는 것이 어려운 것 만큼이나, 프로그래밍을 배우는 것도 어렵거든요. 여러분이 누군가에게 프로그래밍을 가르치거나, 또는 프로그래밍을 배우는 것을 도와주는 경우에는, 이런 생각들이 조금 도움이 될 겁니다.

우선, 저는 개념은 최대한 나누어서 설명하려고 노력했어요.  즉 학생들은 한 번에는 한 가지 개념만 배우게 되는 거죠. 처음에는 어려웠지만, 몇 번 연습하다보니 쉬워지더군요. 어떤 것들은 배우는 데 순서가 있죠. 이것을 먼저 배워야 다른 것을 배울 수가 있죠. 하지만 저는 그런 순서가 별로 없다는 사실에 놀랐습니다. 결국은 그냥 순서를 고르면 되었어요. 순서를 어떻게 골랐냐면요, 새로운 단원이 들어갈 때 그 내용이 이전 단원에서 동기부여를 할 수 있도록 순서를 정했어요.

또 하나의 원칙이 있었다면, 무언가를 구현할 때에 단 한가지 방법만 알려주는 거예요. 전에 프로그래밍을 해본 적이 전혀 없는 분들을 위한 튜토리얼에는 이런 방법이 장점이 많습니다. 한 가지 장점으로는, 어떤 것을 하기 위한 방법으로 두 가지를 배우는 것 보다는 한 가지를 배우는 것이 더 쉽다는 것이 있습니다. 더욱 중요한 장점은 더욱 적게 알려줄수록, 배우는 분들은 프로그래밍을 할 때 더욱 창의적이고 영리해져야 합니다. 프로그래밍에서의 대부분은 문제 해결에 대한 거예요. 그래서 배우는 분들이 각각의 단계에서 창의적으로 머리를 사용할 수 있도록 최대한 독려하는 것이 매우 중요합니다.

저는 프로그래밍에서 쓰이는 개념을 설명하기 위해 프로그래밍을 해본 적이 없는 일반인들이 이미 알고 있는 개념을 사용하려고 했습니다. 튜토리얼을 통해서 개념들을 설명하려고 하기 보다는 일반인들이 직관적으로 이해할 수 있는 방식으로 개념을 소개하려고 했습니다. 객체지향프로그래밍에 대해 설명할 때 특히 그렇게 했습니다. 객체지향프로그래밍에 대해서는 언급하기 매우 이전엔 초기 단계에서 저는 '객체' 라든지 '여러 종류의 객체'라는 표현을 슬쩍 집어넣어 사용했습니다. 물론 다음과 같은 말은 하지 않았습니다. "루비에 있는 모든 것은 객체입니다" 또는 "수나 문자열은 일종의 객체입니다" 이런 말은 하지 않았어요. 왜냐하면 일반인들에게는 이런 진술들이 큰 의미가 없거든요. 저는 "문자열 객체"라는 표현 대신에 문자열이라고 얘기했고요, 가끔은 "이 프로그램에 있는 것들을 가리키"는 의미로 "객체"라는 말을 사용하기도 했습니다. 루비 안에 들어있는 이런 모든 것들은 사실 객체이죠. 그렇기 때문에 제가 이렇게 은근슬쩍 객체라는 표현을 쓰는 것이 적절하게 되었습니다.

굳이 필요하지 않은 전문 용어는 가급적 사용하지 않으려고 노력했습니다. 어떤 단어를 알려드리는 경우에는,  정확한 단어를 알려드리려고 노력했습니다. 배우시는 분들이 그 단어를 여러 번 배우실 필요는 없잖아요? 그래서 문자열의 경우 저는 '문자열'이라고 하지, '텍스트'라고 하지 않았습니다. 메서드도 뭐라고 부를 이름이 필요했죠, 그래서 저는 '메서드'라고 칭했습니다.

제 생각에는 연습문제들이 괜찮다고 생각하지만, 많으면 많을 수록 좋은 법이죠. 솔직히 말씀드리면, 이 튜토리얼을 작성하는 데 들인 시간의 절반 이상은 흥미롭고 재미있는 연습문제를 생각해내는 데에 쓴 것 같습니다. 연습문제가 지루하면 프로그램을 하고 싶은 생각 자체가 사라지죠. 연습문제가 완벽하면 초보 프로그래머가 시작하지 않고서는 못견디게 근질근질하게 만들죠. 즉 연습문제를 잘 만드는데 시간을 쓰는 것은 하나도 아깝지 않습니다.

원본 튜토리얼에 대해서

이 페이지를 포함해서 튜토리얼은 물론 루비 프로그램을 사용해서 작성하였습니다 :-) 예제로 삽입한 코드들은 모두 자동적으로 실행이 되며, 결과물 역시 실제로 실행한 결과로 나오는 것들입니다. 제 생각에는 이 방법이 제일 쉽고 좋은 것 같습니다. 이렇게 해야 제가 설명드린대로 바로 그대로 코드들이 작동할 테니까요. 예제의 결과물을 잘못 복사했을지도 모른다고 걱정하지 않으셔도 됩니다. 아니면 어떤 코드를 테스트하는 것을 잊었을 것도 염려하지 않아도 되요. 모두 테스트 했습니다.

감사의 말씀

마지막으로, 루비-talking 메일링 리스트의 멤버분 모두에게 감사의 말씀을 드립니다. 아이디어를 나누어주고 용기를 주신 분들입니다. 그리고 정말 멋진 리뷰어 분들에게도 도움을 주신데에 대해 정말 감사를 드립니다. 이분들이 있었기에 책이 훨씬 더 좋아졌습니다. 사랑하는 아내에게도 특히 감사의 말을 전합니다. 리뷰어 역할도 해주고 테스터 역할도 하고, 실험쥐 역할도 하고, 저에게 영감을 주는 뮤즈 역할도 해 주었습니다. 또한 이 멋진 언어를 만들어 준 Matz에게도 감사드립니다. 그리고 이 언어에 대해서, 그리고 제 책을 출판하는 것에 대해서 저에게 많은 얘기해주는 프로그래머들에게도 감사를 드립니다.
 
어떤 에러나 오타를 발견하시거나, 의견이 있으시거나, 제가 포함시키면 좋을만한 연습문제를 알려주실 분은 다음의 이메일 주소로 연락해 주세요.

 

참고

댓글

댓글 본문
버전 관리
김나솔
현재 버전
선택 버전
graphittie 자세히 보기