E D R , A S I H C RSS

What To Program

무엇을 프로그램할지 고를 여유가 있는 사람의 입장에서 묻는 "우리는 무엇을 프로그램할까"


학교에서 숙제로 내주는 것들란 정말 숙제를 위한 숙제인 경우가 있다. 아니, 꼭 그렇진 않더라도 나는 뭔가 내 페스에서 스트레스 없 내가 원하는 것을 만들어보고 싶다. 어찌되었건 프로그램을 잘하려면 프로그램을 자주 해봐야 한다고 말하지 않는가. 그럼 도대체 무엇을 프로그램할 것인가?


나는 일차적으로 단순한 것을 권하겠다.

단계가 넘어서면(한 달 정도면 넘어서지 싶다) 자신에게 가까운 것을 프로그램하라고 하겠다. 주희의 근사록라는 책 있다. 말 그대로 "가까운 것들에 대한 생각을 적은 기록"라는 말다. 공부는 무릇 가까운 곳에서 시작해야 한다고 말한다. 내 삶 속에서 제대로 구현되지도 않으면서 우주를 걱정하는 것은 "위기지학"(자기를 위한 공부)을 하라는 가르침에 어긋난다.

철학적인 언설을 떠나, 어떤 의미가 있으며, 왜 중요한가.

프로그래밍의 궁극은 "사용자"와 프로그램의 사용을 통해 그가 받는 "현실적 가치"에 있다. 프로그래밍을 하면서 사용자를 생각하지 않는 것은 도무지 아무 의미가 없다. 프로그래밍라는 행위 자체가 성립하질 않는다. 골방에 틀어박혀 자기만족적인 지적 유희를 즐기는 해커가 아니라면 말다. 우리는 사용자의 마음을 꿰뚫어야 한다. 여기에 있어 직접 사용자가 되는 것만큼 좋은 방법은 없다. 업계에서 혹자는 요구사항 분석시 사용자와 한 달 간 같 생활해 보라는 말도 한다.

자신을 위한

자기 삶에서 의미가 있는 프로그램을 만들게 되면 스스로가 사용자가 된다. 목적 분명해 진다. 자기가 편한 프로그램을 만드는 것다. 프로그램은 꼭, "내가 쓸 마음 나는 프로그램"어야 한다(그 프로그램을 만들고 싶은 열정 생기고, 그걸 생각하면 가슴 두근거린다면 더더욱 좋다 -- 런 호기가 있을 때 그것을 충분히 누리도록 하라). 아무리 간단한 프로그램일지라도 나에게 가치있는 프로그램은 존재한다. 특정 언어에 대한 경험 한 두 달일지라도 분명 그런 프로그램을 만들 수 있다. 대부분은 다른 프로그램들을 엮어주는 것일지도 모른다. 만약 난관에 부딪혔다면 책을 읽고, 사람에 묻고 자료를 검색해서 기술과 도구를 배우면 된다.

프로그램을 개발해서 일주일고, 한달고 매일 매일 사용해 봐야 한다. 일주일에 한 번 사용하는 프로그램을 만들기보다 매일 사용할만한 프로그램을 만들라. 자신 하는 작업을 분석해 보라. 무엇을 자동화하면 편리하겠는가. 그것을 프로그램 하라. 그리고 오랜 기간 사용해 보라. 그러면서 불편한 점을 개선하고, 또 개선하라. 때로는 완전히 새로 작성해야할 필요도 있을 것다(see also DoItAgainToLearn). 아마도 단계에서 스스로를 위한 프로그램을 작성하다 보면 아콘을 쁘게 하는데 시간을 허비하거나, 별 가치없는 퍼포먼스 향상에 시간을 낭비하지는 않을 것다. 대신 무엇을 프로그램하고 무엇을 말아야 할지, 무엇을 기계의 힘으로 해결하고 무엇을 여전히 인간의 작업으로 남겨둘지, 즉, 무엇을 자동화할지 선택하게 될 것다. 또한, 같은 문제를 해결하는 여러가지 방법(기술, 도구, ...) 중에서 비용과 익을 저울질해서 하나를 고르는 기술을 익히게 될 것다.

사실 단계에서는 꼭 어떤 사용을 전제로 하지 않더라도 열정을 갖게 해주는 프로그램라면 괜찮다. 어떤 것에 대해 호기심 생기는가? 컴퓨터로 실험을 해보고 싶은가? 그 생각 밥을 먹거나, 잠을 자거나 떠나지 않는다면 프로그램 하라. 그냥 걸 프로그램하면 공부가 될 것 같다든가, 혹은 남들 다 하길래 한다든지 하는 것과는 질적으로 다른 경험을 할 것다. 열정을 가진 것은 대부분 가슴 속에 그 모양 미 형성 되어 있다. 조각가는 조각품의 형상을 미 가슴 속에 품고 있다. NoSmok:최한기것을 강조한다. 일 제대로 루어지려면 그 일을 흉중에 품고 있어야 한다고. 머리 속에서, 정말 손끝에 잡힐 것만 같고, 그 프로그램 살아있는 것 같 느껴진다면 프로그램 하라. 자신의 아디어를 컴퓨터가 해하는 언어로 표현해 내는, 그리고 그 프로그램 자신의 아디어를 더 발전시키게 하는 능력을 갖게 될 것다.

타인을 위한

과정 어느 정도 되면, 타인을 위한 프로그램을 작성할 수 있다. 나에게는 별 의미가 없지만 남에게 "아주 귀중한 가치를 주는" 프로그램을 만들어라. 서로 만들어줘도 좋다. 자신 컴퓨터 공학과라면 국문학과 학생에게 프로그램을 만들어주라. 그와 가까 지내고 그가 진정 원하는 것 무엇며, 진정 필요로 하는 것 무엇인지(원하는 것과 필요로 하는 것은 다르다) 분석하고, 프로그램 해줘라. 그가 그 프로그램을 한 달 상 사용하는가? 그래야 한다. 그 정도로 가치있는 프로그램어야 한다. 가치있는 프로그램 꼭 복잡하거나 거대할 필요는 없다. 그가 프로그램의 수정을 요구한다면 가능하면 모두 들어주어라. 그게 힘들다면 그를 납득시켜라. 아마도 단계에서 타인을 위한 프로그램을 작성하면서 "작성자"와 "사용자"간의 프로그램을 통한 커뮤니케션의 중요성에 눈을 뜨게 될 것다. 인터페스에 대해 고민할 것다. 얼마나 쁘냐보다, 얼마나 실수할 행위유발성을 제공하지 않느냐, 그리고 어떤 메타포를 사용할 것인가(에 대해서는 비지칼크란 프로그램을 연구하라) 하는 문제를 생각할 것다.

타인들을 위한

단계를 거치면 제는 타인들을 위한 프로그램을 작성한다. 일단 사용자가 다수다. 또, 어떤 사용자 집단을 상정할 수는 있지만 개개인을 전제할 수는 없다. 아마도 단계에서는 평균적 사용자에 대해 고민하게 될 것고, 때로는 여러사람의 동시 사용자로 야기되는 동시성 제어나 퍼포먼스 문제로 고민할 것다. 그리고 프로그램의 크기가 커지면서 그리고 요구사항 변경 여러 소스를 통해 빈번히 들어오게 되면서 어떻게 설계해야 하느냐는 문제로 고민할 것다.

결어

프로그래밍 기술보다도 중요한 것은 어쩌면 현실세계의 문제를 해결하는 것 그 자체일지도 모른다(도구와 기술은 본질적 문제를 해결해 나가는 과정으로서 필요에 따라 공부하면 되겠다). 우리는 정말 사용자를 위한 프로그램을 만들어야 한다. 그리고 공부는 가까운 곳에서부터 출발한다.

see also Beyond Tool Use

--JuNe
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:24
Processing time 0.0204 sec