TheArtandScienceofSmalltalk:Chapter 01: Difference between revisions
Onionmixer (talk | contribs) No edit summary |
Onionmixer (talk | contribs) No edit summary |
||
Line 29: | Line 29: | ||
스몰토크 학습 곡선, 올바른 방향으로 시작 시 납작해지고 길이가 줄어들 수 있다. | 스몰토크 학습 곡선, 올바른 방향으로 시작 시 납작해지고 길이가 줄어들 수 있다. | ||
[[image:ass_image_01_01.png|thumb|512px|Running Curve]] | [[image:ass_image_01_01.png|thumb|left|512px|Running Curve]] | ||
Revision as of 05:00, 14 June 2022
- 제 1 장 시작을 위한 충고
시작을 위한 충고
제 1장은 스몰토크를 처음으로 사용하는 사람을 위해 작성되었다. 이에 앞서 하나의 과제를 (스몰토크를 학습하는) 하나 맡게 될 것인데, 이러한 작업은 혜택이 많은 동시 매우 불편할 수 있다. 이 책의 목표들 중 하나는 혜택은 늘이고 불편함을 줄이는 데에 있다. 제 1장의 목표는 당신이 올바른 방향으로 시작하도록 돕는 것이다. 객체 지향 프로그래밍(OOP)과 스몰토크로 어떻게 전향하는지를 간략하게 살펴보고, 주의해야 할 사항을 몇 가지 언급한 후, 책의 나머지 부분에서 다루는 주제에 대한 배경 지식을 제공할 것이다. 스몰토크 프로젝트의 사실적 관리는 마지막 장에서 좀 더 자세히 살펴볼 것이다.
스몰토크에 능숙해지기 위해 고려해야 할 것은 자신의 상황, 배경, 경험, 목표, 자원 등에 따라 다를 것이다. 그 결과 이번 장은 과거에 당신과 비슷한 위치에서 다른 사람들에게 효과가 나타난 것으로 알려진 의견과 생각을 제시한다.
스몰토크를 이미 사용하고 있는 사람이라도 이번 장에서 흥미로운 점을 발견할 것이다. 사실, 현재 어떤 특정한 문제가 있다면 문제가 어디서 발생했는지 발견할 수 있을지도 모른다. 하지만 이번 장이 자신에게 맞지 않다고 생각한다면 다음 장으로 넘어가도 무방하다.
스몰토크 학습 곡선
새로운 언어를 힘들이지 않고 학습하는 경우는 없다. 애석하게도 스몰토크의 경우 다른 새로운 언어에 비해 학습해야 할 것이 조금 더 많다. 객체 지향 프로그래밍을 배우고, 스몰토크 언어 자체를 배우고, VisualWorks 개발 환경을 사용하는 방법을 학습하며, 자신만의 스몰토크 프로그램을 작성하는 방식과 시스템의 코드-라이브러리에 코드를 재사용하는 방법도 배워야 할지도 모른다. 가장 중요한 것은, 자신만의 프로그래밍 문제를 해결하기 위한 완전히 새로운 방법을 학습해야 할 수도 있다는 점이다.
스몰토크를 처음 이용하는 많은 사람들은 시작은 매우 열정적일지 모르나 그들이 흡수해야 하는 변화가 증가하면서 생긴 불편함으로 인해 처음 갖고 있던 열정이 급속하게 떨어진다. 스몰토크에서 프로그래밍은 다른 많은 언어에서의 프로그래밍과 다르기 때문에 너무도 자연스러운 일이다. 이러한 차이의 범위는 아래 도표에서 질적으로 표시된 특유의 스몰토크 '학습 곡선'을 야기한다. 곡선의 기울기와 길이는 물론 이전 경험, 그리고 자신의 기대치에 따라 많이 좌우된다. 스몰토크에서 프로그래밍 시 덜 불편하고 더 편안한 느낌을 가지기 위해선 2주~6개월 정도의 시간이 필요할 것이다.
다행히도 불편함의 수준도 줄이고 학습 곡선의 정점까지 가는 데에 걸리는 시간을 줄이기 위한 적극적 조치가 몇 가지 있다.
문화적 충격 대비하기
스몰토크 학습 곡선, 올바른 방향으로 시작 시 납작해지고 길이가 줄어들 수 있다.
스몰토크는 다른 프로그래밍 언어와 다르다는 점은 아무리 강조해도 지나치지 않다. OOP를 처음으로 시도한다는 이유(물론 충분한 이유가 되겠지만!) 때문만은 아니다. 스몰토크와 다른 언어들 간에 실제 관리 및 기술적 차이가 존재한다. 예를 들어, 스몰토크는 다른 언어들에 비해 훨씬 더 상호작용적이고 탐구적인 프로그래밍 스타일을 촉진하고 안전하게 지원한다. 이것이 바로 스몰토크의 생산성이 그리도 유명한 이유이다. 그렇다고 스몰토크 프로그램을 디자인할 필요가 없다는 의미는 아니다. 오히려, 스몰토크를 최상으로 이용하길 원한다면 자신이 익숙한 것보다 더 상호작용적인 디자인과 프로그래밍 스타일을 채택해야 함을 의미한다. 이러한 점이 매우 불편하게 작용할 수 있는데, 특히 전형적인 '단일 경로(single-pass)' 또는 '폭포수(waterfall)' 방법론을 이용해 시스템을 개발하는 데에 익숙하다면 더 그러할 것이다.
기술적인 측면에서 보면 완전한 프로그래밍 언어인 스몰토크는 다른 언어들보다 훨씬 더 많은 일을 할 수 있다. 그렇지만 완전히 다른 방식으로 일을 진행함을 자주 발견할 것이다. 예를 들어, PC, 매킨토시 또는 유닉스 워크스테이션에 그래픽 사용자 인터페이스(GUIs)를 이용해 애플리케이션을 작성하는 데에 익숙한 사람은 스몰토크 GUIs도 똑같은 일을 수행할 수 있음을 발견할 것이다. 하지만 완전히 다른 방식으로 빌드된다 (주로 역사적 이유로 스몰토크 사용자 인터페이스는 이벤트 위주보다는 '폴링(polling)'을 통해 작업한다).
이러한 유형의 차이는 포기하는 듯한 느낌이 들게끔 만들기도 하는데, 어렵게 얻은 지식과 경험 대부분이 스몰토크 환경에서 잘 사용되지 않는 것처럼 보이기 때문이다. 꼭 그럴 필요가 없다는 사실을 보이는 것 또한 이번 책의 목표에 해당한다.
작은 것부터 시작하기
첫 번째 스몰토크 연습, 작은 것을 선택하라는 말은 명백하게 보이지만 다시 언급할 가치가 있겠다. 처음 빌드하는 데에 익숙한 시스템 크기는 아무리 일부(fraction)만 빌드를 시도한다 하더라도 사서 고생하는 격이다. 작은 것부터 시작하는 편이 위에서 언급한 문화적 충격을 줄이는 데에 큰 도움이 될 것이다. '미션 크리티컬' 애플리케이션으로 바로 착수하기보다는 실험적 프로젝트에 먼저 스몰토크를 시도해보는 편이 낫다는 사실은 두말할 필요도 없다. 물론 이 모든 것은 상황에 따라 달라진다.
프로그래머들로 구성된 큰 팀을 스몰토크로 전향할 계획을 세운 관리자라면, 두 명이나 세 명으로 시작하는 편이 훨씬 낫다. 그들에게 새로운 기술을 탐구할 자유를 부여하고, 학습 곡선의 정점으로 스스로 이동하도록 놔두라. 나머지 팀 구성원들이 곡선의 정점으로 오르도록 도와줄 수 있는 지역 전문가들이 될 것이다.
독자가 만일 그러한 팀의 구성원이거나 혹은 스몰토크를 개별적으로 학습하고 있다면, 스스로 행할 수 있는 일들이 많이 있다. 다른 사람의 스몰토크 프로그램에 접근할 수 있는 운을 가진 사람이라면 그들의 프로그램을 단순한 방식으로 수정해보라. 그런 기회가 없다면 자신의 프로그래밍 문제의 부분 집합을 작업해보라. 예를 들어, 주요 데이터 구조 중 일부를 스몰토크 객체로서 표현해본다든가, VisualWorks GUI 개발 툴을 이용해 주요 윈도우 대화상자(window dialogue)를 빌드해보도록 한다.
상호작용적으로 탐구하고 작업하라
스몰토크를 강력하게 만드는 것들 중 하나로 대화형 프로그래밍 환경을 들 수 있다. 이러한 환경을 더 많이 활용할수록 학습 곡선을 빠르게 따르고 문화적 충격은 줄어들 것이다. 순식간에 코드의 토막(snippet)을 생성하고 실행할 수 있음을 기억하라. 이는 특정 기능이 어떻게 작용하는지 이해할 수 없을 때 이상적이다. 그것을 이해하기 위해 매뉴얼을 훑어보는 데에 시간을 허비하지 말라. 애석하게도 스몰토크는 책을 통해 학습할 수 없다. 대신 실험을 하라! 숙련된 스몰토크 프로그래머들은 초보자들에 비해 매뉴얼을 사용하는 일이 적은데, 시스템에 대해 더 많이 알아서가 아니라 그들이 알아야 하는 것을 발견하기 위해 시스템을 사용하는 방법을 학습하였기 때문이다. 이와 관련된 기술은 제 2부-스몰토크의 예술-에서 상세히 다룰 것이다.
무언가가 작동하는지 시험하기 위한 실험을 준비하는 데에는 약 30분 정도 소요되지만, 결정적 답을 얻으려면 그 정도 시간은 투자할 가치가 있다. 실험할 가치가 있는 것이다. 물론 여기서도 주의사항이 있다:
코드를 버릴 준비를 하라
스몰토크에서 많은 코드를 빌드하기란 매우 쉽다-어쨌든 매우 생산적인 환경이다. 하지만 실험이 끝났다면 자신의 코드를 버릴 준비를 해야 한다. 그렇다고 해서 엄격한 실험 단계를 거친 후에 처음부터 모든 것을 다시 작성해야 한다는 의미는 아니다. 이는 무언가를 프로그래밍하는 데에 있어 첫 시도보단 두 번째 시도가 훨씬 더 나을 것이라는 사실을 이용해야 한다는 의미다. 많은 언어에서는 이것이 사실일지 모르나, 대개 이러한 이점을 활용할 수 있는 여건이 안 된다. 스몰토크에서는 두 번째 시도가 훨씬 더 나을 뿐 아니라 짧은 시간 내에 생산하도록 해줄 것이다. 그만큼의 가치가 충분히 있다.
도움을 얻어라
너무나 당연하겠지만 스몰토크의 경험이 어느 정도 있는 사람에게 도움을 요청하여 얻으면 학습 곡선을 따르고 자립성을 키우기가 훨씬 수월해질 것이다. 간단한 질문에 대한 답을 찾는 데에 몇 시간씩 들이지 않아도 될 뿐만 아니라 훨씬 쉽게 훌륭한 스몰토크 '스타일'로 곧바로 프로그래밍을 시작할 수 있을 것이다. 다시 말하지만, 처음부터 훌륭한 스몰토크 스타일을 이용하도록 돕는 것은 이 책의 목표에 해당한다.
자신의 조직에서 도와줄 사람을 찾을 수도 있고, 외부에서 알아볼 수도 있다. 하지만 스몰토크는 심지어 다른 대화형 객체 지향 언어들과도 다르다는 점을 명심하라. 스몰토크 경험이 있는 사람과 작업하도록 하라.
도움을 받을 수 없거나 설사 도움을 받는다 하더라도 이 책을 읽으면 스스로 학습 곡선을 따르는 데에 많은 도움이 될 것이다. 하지만 스스로를 도울 작정이라면 스몰토크 시스템을 준비하여 실행시키는 것이 최선의 방법이다. 무언가를 탐구하고 시도하는 것은 객체 지향 프로그래밍과 스몰토크의 개념에 대한 자신의 이해를 시험하는 유일한 방법으로, 이제부터 이를 논하고자 한다.
여기부터 어디까지?
스몰토크의 예술과 과학은 VisualWorks 프로그래밍 환경(을 비롯해 다른 환경들)에 기반이 되는 개발 시스템, 코드-라이브러리, 스몰토크 언어를 학습하고 이해하도록 돕기 위한 것이다. 이 책은 두 가지 부분으로 나뉜다.
제1부, 스몰토크의 과학은 스몰토크 자체를 소개한다. OOP의 기본 개념을 살펴보고 스몰토크 언어를 이야기한 후 시스템 라이브러리에서 가장 중요한 클래스를 몇 가지 다룬다. 개발 환경도 간략하게 살펴보겠지만, 이 분야에서 스스로 준비하여 실행하는 데에 어느 정도 책임질 준비가 되어 있어야 한다. 자신이 정말로 이해해야 하는 시스템의 부분들에 대해 스스로 알아낼 필요가 있는 기본 지식을 제공하는 것이다. 따라서 전체 시스템을 철저하게 다루지는 않는다.
이 책의 두 번째 부분은 스몰토크의 예술로, 스몰토크로 작업 시 수반되는 좀 더 까다롭고 일반적인 문제를 다룬다. 스몰토크 프로그램을 어떻게 디자인하는지를 살펴볼 것이다 (가령 객체 지향 프로그래밍을 어떻게 하는지). 이에 더해, 스몰토크에서 어떻게 코딩하는지, 어떻게 개발 환경의 기능을 최상으로 활용하는지도 고려할 것이다 (디버깅에 관한 장도 포함).
바로 다음 장은 객체 입문으로, 처음부터 시작하고자 한다. 이전에 OOP의 경험이 전혀 없다면 여기부터 시작한다. 하지만 OOP가 무엇인지 (그리고 OOP를 재교육할 필요가 없다고 생각되면) 확실히 알고 있으나 스몰토크의 경험이 없다면 제 3장-스몰토크의 입문-부터 시작한다. 모두에게 행운을 빌며, 한 가지만 기억하길 바란다. 스몰토크는 즐거워야 한다.