파이썬 2.5 미리보기 3편: incremental codec

파이썬 2.5의 또 다른 주요 변화로 소개해 드릴 만한 것으로 incremental codec이 있습니다. 파이썬 유니코드 코덱의 기존 스펙에 대한 확장인데, 논의되는 과정 중에 여러가지 난관이 있었습니다. 확장이 쉬운 디자인이 어떤 것인가, 확장이 어려운 디자인을 택했을 때 나중에 확장을 어떻게 할 것인가에 대한 좋은 사례가 될 듯 합니다.

파이썬 2.0에서 처음 들어온 PEP-100 유니코드 통합에서는 4가지 코덱 방식을 정의하고 있습니다. 인코더, 디코더, 스트림 인코더, 스트림 디코더 입니다. 인코더와 디코더는 상태가 없는 (stateless) 단순 문자열 변환을 담당하고, 스트림 인코더와 스트림 디코더는 파일같은 스트림들에 대해서 상태가 있는 (stateful) 변환을 담당합니다.

얼핏 보면 상태가 있는 것도 있고, 없는 것도 있으니 괜찮은 디자인이 아닌가 하고 생각을 할 수 있는데, 파이썬 2.0이 릴리스 되고 나서, 그 이후에 JapaneseCodecs나 KoreanCodecs가 나오면서 문제가 발견되게 됩니다. 바로, 상태가 있는 문자열 변환을 할 수가 없다는 것입니다. 상태가 있는 변환을 하기 위해서는 스트림을 거쳐야하기 때문에, 엉뚱하게 계속 StringIO같은 것을 끼고 들어가야 하게 되어서, 번거롭기도 하고 느리기도 하고 아주 기분 나쁜 상황이 되어 버립니다. 게다가, 스트림은 끝이 단 하나만 존재하기 때문에, 현재 버퍼에 있는 미완성 부분을 완성하려고 파일 끝으로 표시해 버리면 더 이상 쓸 수도 없고 상태도 잃어버리는 문제도 있었습니다.

여기서 알 수 있는 디자인의 교훈은, 다른 언어에 있는 걸 무작정 따라하기 보다는, 해당 도메인에서 할 수 있는 작업들을 나열한 다음에, 각 작업들이 공통으로 가지는 최소한의 요소들을 뽑아서 그것들로 다른 작업들을 구성해 보면 좋겠다는 생각입니다. 간혹 어떤 라이브러리를 쓰다 보면, 한 함수의 극히 부분적인 기능이 필요한데, 더 작은 함수가 없어서 결국은 함수의 쓸데없는 다른 부분까지도 모두 에뮬레이트 해야 하는 경우가 있습니다. 그럴 때는 답답하고 억울해서 산에 가서 임금님 귀는~~ 이라도 하고 싶은 경험을 할 때가 있는데, 그 때의 경험을 마음 깊이 새겨서 그런 라이브러리를 안 만들도록 해야겠네요. 🙂

(얘기가 딴 데로 빠져서 다시 원래대로 오자면~) 그래서, 그동안 파이썬에서 여러모로 문제가 많았던 UTF-8 스트림 디코딩이 결국은 내부적인 상태 제어 함수를 만들어서 해결이 되었고, 애플리케이션들도 쉽게 이런 것을 쓸 수 있게 유니코드 스펙을 확장해서 기존의 4개에 2개를 더해 incremental decoder, incremental encoder가 추가되었습니다.

그런데 여기서 발생하는 또 하나의 디자인 문제! 코덱을 찾아 주는 codecs.lookup라는 함수는 위에서 언급한 4개를 tuple로 리턴해 주는 방식으로 되어 있다는 것! 그래서 결국은 이번에 새로 추가된 2개를 더하면 tuple의 크기가 바뀌어서 사용자 코드들이 하위호환성이 없어진다는 치명적인 문제가 생깁니다. codecs.lookup을 왜 public API로 공개해서 이런 문제를 만드냐~ 하고 이런 저런 서로 원망을 하다가 결국은 os.stat에서 쓴 트릭으로 처리가 되었습니다. 즉, 객체를 따로 하나 만들어서(codecs.CodecInfo) tuple 쓰듯이 접근하면 옛날처럼 4개를 돌려주고, 하위 속성을 접근하면 이름으로도 접근할 수 있게 하는 것입니다. 예를 들어, c = codecs.lookup(‘cp949’) 일 때, c[0]부터 c[3], len(c) 하면 옛날 tuple 쓰듯이 흉내를 내고, c.incrementalcodec 이나 c.encoder, c.streamwriter 같은 방법으로 새로운 API를 쓸 수 있게 하였습니다.

그래서, 어제 Walter가 작성한 기본 패치에 맞게 CJKCodecs 패치도 만들었는데, 이제 본격적으로 incremental codec을 쓰는 세션을 하나 보겠습니다. 🙂

cp949는 사실 좀 밋밋하긴 한데, 살 떨리게 재미있는 ISO-2022로 한 번 해 보면..

처음에는 이런 것을 지원해 주기 위해서 incremental codec이 아니라 feed style codec이라는 것이 나왔었는데, 뭔가 부자연스러워 보이는 것이 관련있는 사람 대부분이 답장도 안 올리고 바쁜 척을 했었습니다. 그런데, 새롭게 incremental codec이 나오고 나니까 다들 훨씬 깔끔하다고 칭찬을! 으흐흐. 아무래도 문제 해결을 억지로 라도 한 번 해 보고 나면, 훨씬 더 좋은 다른 방법을 발견하기도 쉽다는 것도 있겠고.. 다른 사람들이 바쁜 척하는 것 같으면 잘 눈치를 채야 한다는 뭔가가… -o-

다음 시간에는 뜨거운 감자였던 조건적 표현식(C에서 보통 삼항 연산자라고 부르는 그것)에 대해서~

점점 알 수 없어지는 구글의 구인

“저는 구글에서 일하고 있는 누구입니다. 구글에서 일하는 것이 관심 있으시면 저에게 알려주세요.” 작년부터 오픈소스 메일링 리스트 곳곳에서 볼 수 있는 이제는 흔한 구글의 구인 문구. 작년에는 그래도 기존에 오픈소스 커뮤니티에 적극적으로 참여하고 있던 사람들, 특히 영향력이 있는 유명한 사람들이 자발적으로 올려서 친구들에게 좋은 기회를 제공해 주려고 하는 의도가 강했습니다.

그런데, 얼마 전부터 구글이 사람이 많이 모자랐는지, 광고 대상 커뮤니티의 관례에 대해서 잘 알지 못하는 리크루터들이 메일 양식을 만들어서 이름과 사이트 이름만 바꿔가면서 메일을 돌리고 있고, 심지어 메일링 리스트에 올리는 일까지 발생하고 있습니다. 저도 그동안은 말로만 듣고 있다가 오늘 그 메일을 직접 받게 되었는데, 메일링에서 그런 메일 받았다는 사람들이 많은 것 몰랐으면 괜히 좋아할 뻔 했습니다. 흐흐흐..

구글은 오픈소스 개발자들에게 무작정 스팸 뿌리듯이 구인 광고를 뿌리기 보다는, 정말로 각 개인이 어떤 특징이 있는지 뭐에 관심이 있는지, 각 커뮤니티의 특성이 어떤지를 파악한 다음에 좀 더 덜 스팸스럽게 보내는 정도의 성의를 보여야 될 것 같습니다. 이렇게 계속 스팸 돌리듯 돌려서, 길고 따분하기로 유명한 구글 인터뷰 과정을 거친 다음에 탈락했다는 사람들이 대량으로 나오면 안 좋은 인상이 제곱이 되지 않을까 싶군요. 지금 취하는 형식으로는 “대출승인 안 되신 분 다시 신청 받습니다”, “한의사의 꿈 당신도 이룰 수 있습니다” 이런 메일들과 얼마나 차이가 있을까요..

파이썬 2.5 미리보기 2편: Arena-freeing obmalloc

PyCon 2006이 끝나면서 스프린트의 결실이 속속 올라오고 있습니다.
귀도보다 더 파이썬을 잘 안다고 말할 수 있는 몇 명 중의 하나인 팀 피터스는 이번 스프린트에서 파이썬 메모리 관리 시스템을 작업해서 드디어 끝을 냈다고 합니다. (팀의 얼굴이 궁금하시면, 위의 pycon 홈페이지에 보면 앞에 나오는 사진에서 왼쪽부터 순서대로, 귀도, 팀, (떼), 배리, 짐 입니다.)

스택에 객체 할당을 하지 않는 언어들의 속도에 가장 치명적인 부위 중의 하나가 바로 객체를 위한 힙 할당 부분인데, 파이썬은 이 문제를 해결하기 위해서 2.3부터 pymalloc이라는 것을 넣어서 비슷한 크기로 할당하는 메모리들을 풀로 관리해서 한꺼번에 크게 할당하고, 해제되더라도 pymalloc 측에서 다시 풀에 넣어서 관리를 하는 방식을 취하고 있습니다. 따라서, 시스템 라이브러리 측의 힙 관리가 단순해 지고, 메모리 단편화(fragmentation)가 줄기 때문에, 대략 20~30% 정도의 속도 향상이 있었습니다.

그런데, 이 문제가 또 다른 문제를 불러 일으키는데, 메모리 해제가 일어나더라도 pymalloc은 메모리를 시스템의 free함수로 해제하지 않고 그냥 스스로 계속 다 가지고 있기 때문에, 메모리를 먹기는 먹지만 절대로 뱉지 않는.. 마치 집을 늘일 수는 있지만 줄여서 살 수는 없다는 것을 몸소 실천하는 태도를 보입니다. 그래서, 임시로 100만개짜리 리스트를 만들었다가 삭제하면 그 리스트에 쓰려고 할당한 메모리가 계속 쫓아다녀서, 오랫동안 파이썬이 돌아가면 메모리가 모자라는 시스템에서는 난감한 상황이 옵니다. 그래서, 결국에는 소형 시스템에 들어가는 경우에는 pymalloc을 빼라는 매뉴얼이 부지기수로 나올 정도가 되었습니다.

여러 사람들이 도대체 왜 메모리가 늘기만 하고 줄지는 않느냐! 파이썬 메모리 새는 것 아냐! 하고 굉장히 주기적으로 따졌는데, 답장은 어쩔 수 없다 우리가 하는게 가장 간단하고 빠른 방법이다, 그것 싫으면 pymalloc 빼고 컴파일해라.. 이런 답장들로 일관 했었습니다. 그러던 중, 2005년 PyCon에서 Evan Jones라는 사람이 “잔다르크처럼 나타나”서는(여자라는 말은 아닙니다;;) 체계적인 설명과, 설명에 따라 구현한 패치의 벤치마크까지 들고 와서 발표하는 사건이 일어났습니다. 그래서, 그동안 몰라요~ 하고 있던 파이썬 개발자들이 번쩍 하면서 이 패치를 긍정적으로 검토하기로 했고, 이번에 이렇게 마무리 되게 된 것입니다.

결과적으로, 이제 숫자 1000000개가 들어가 있는 리스트를 할당했다가 풀면 메모리가 줄어듭니다. FreeBSD에서는 phkmalloc이 또 내부적으로 하는 짓이 있어서 윈도우에서처럼 극적으로 줄어들지는 않는데.. 그래도 저거라도 줄어드는게.. 🙂

그 원리는 자료구조를 공부하신 분이면 쉽게 예상할 수 있듯이, 객체 해제가 일어날 때 메모리 풀이 다시 프리 리스트에 추가되면서 아레나가 완전히 비게 되면 메모리를 해제하는 구조로 일어납니다. 역시 C 언어로 되어 있는 터라, 모든 포인터를 모두 따라가서 고칠 수는 없기 때문에, 듬성듬성 차 있는 아레나들을 정리하기 위해서 적극적으로 풀을 모으는 등의 행동은 어렵습니다. 그 문제를 해결하기 위해서 이 패치에서는 그냥 많이 차 있는 아레나들을 풀 프리 리스트의 앞쪽에 가도록해서, 많이 찬 것을 먼저 채우도록 한 것으로 보입니다.

그동안 메모리 안 줄어들어서 고생하신 파이썬 사용자 여러분 힘 내세요 -O-

파이썬 2.5 미리보기 1편: with 절

이제 파이썬에 새로운 것이 계속 들어와도 놀라지 않을 만큼, 파이썬은 끊임없이 새로운 문법이 매 버전마다 들어오고 있습니다. 파이썬 2.3에서 generator/bool, 2.4에서 generator expression이 하이라이트였다면, 2.5에서는 단연 PEP-343 with 절이 가장 주요한 문법의 변화가 되겠습니다.

with 절은 이미 다른 언어에 많이 소개가 되어 있는 개념을 구현하기 위한 것인데, ruby의 block이나 자바의 synchronized 같은 것들과 비슷한 개념을 지원합니다. 그렇지만, 비주얼 베이식의 with같이 네임스페이스를 줄이는 목적으로 쓰는 것은 아니기 때문에 서로 다릅니다.

with 절은 원래 PEP-340 Anonymous Block Statements에서 소개되었던 문맥 처리 기능들을 PEP-340이 몇가지 문제로 인해서 거부되자 대체 문법으로 등장한 것입니다. with 절의 문법은 이렇습니다.

as VAR 부분은 생략이 가능합니다. 이렇게 쓰면 내부적으로 다음과 같이 번역이 되어서 실행이 되게 됩니다. (소문자로 된 변수들은 VM 내부적인 변수이므로 소스코드에서는 접근 가능하지 않습니다.)

번역 부분을 약간 살펴보면 새로운 메쏘드 이름인 __context__, __exit__, __enter__를 쓰고 있습니다.
with x as y: 라고 쓰면 x.__context__()를 호출한 다음,
그 녀석이 리턴한 객체의 __enter__()를 호출해서 리턴된 것을
y에 넣어줍니다. 단, with절은 블럭 안에서 프레임이 생성되지 않기 때문에
y의 유효영역은 with절 안이 아니라, 외부의 지역 네임스페이스입니다. (밑줄 쫙~)

자.. 과연 이런게 어디에 쓸모가 있을까! 생각해 보면, 당장 생각 나는 것은 임시 파일을 생성했을 때 귀찮게 finally로 감싸서 파일 지워주는 경우가 생각납니다. 그런데, 이런 사용 사례들을 일일이 위와 같이 __context__, __enter__같은 것을 다 구현해 주기는 굉장히 귀찮기 때문에, 실제로는 제너레이터로 간단하게 구현할 수 있도록 contextlib이라는 모듈이 신설되었습니다. contextlib에는 contextmanager라는 데코레이터가 있어서, 제너레이터를 구현할 때 @contextmanager를 통과시켜 주면 쉽게 with용 컨텍스트매니저로 변신을 시켜 줍니다. closing이라는 것도 있어서 with를 벗어나면 자동으로 파일 닫게도 할 수도 있고요~

한 번 시험해 보기 위해서, 대표적인 with절 예상 사용 사례인 SQL 데이터베이스의 트랜잭션 처리 부분을 한번 해 봤습니다. 🙂

with절에 진입하면서 자동으로 데이터베이스 접속을 맺어주며, 안에서 예외가 발생하면 롤백하고, 예외가 발생하지 않고 빠져나오면 자동으로 커밋하게 해 줍니다. 이와 비슷하게 threading.Queue같이 쓰레드 간 동기화나 임시 객체가 생성되는 온갖 사용처에 아주 유용하게 쓰일 수 있을 듯 합니다~ (위 예제를 유심히 보시면 with절 외에도 2.4에서는 안 되던 문법이 2가지 숨겨져 있습니다. 이히히히~)

그런데, with는 새로운 키워드이기 때문에, 2.5에서는 from __future__ import with_statement를 해야지만 사용할 수 있고, 2.6부터는 정규 키워드로 지정될 예정입니다.

자, 이제 파이썬이 프로그래밍을 안 해본 사람도 하루만에 배울 수 있는 언어라는 굴레에서 해방되었습니다. -O-;;;;;

《대체 뭐가 문제야?》

제럴드 와인버그의 또 다른 유명한 책 《대체 뭐가 문제야? Are Your Lights on?》가 번역되어 나왔습니다. 먼저 번역서가 나온 《컨설팅의 비밀》도 무척 재미있게 읽었기에, 이 책도 다른 책 읽던 도중에 참지 못하고 덥썩 읽어버렸습니다. (지금 사 놓고 안 읽고 쌓아둔 책이 5권 =.=;)

이번 책은 문제를 해결하는 전문 컨설턴트가 아니더라도, 인생에서 문제가 한 번이라도 있었던 사람들이라면 언제나 그 문제를 해결할 때 도움이 될 만한 내용을 다루고 있습니다. 아침 먹다가 밥풀 흘리는 사소한 문제부터 시작해서, 버스에서 출근할 때 자리에 못 앉아서 피곤하게 서있다가 낮에 존다던지, 한 번 죽을 때 마다 수천만원의 손실이 발생하는 프로그램이 왜 죽는지 모를 때 문제를 “다루는” 방법에 대해서 시야를 넓혀줍니다.

SI 프로젝트를 하다가 꼬일 때, 대체로 보면 문제가 뭔지 제대로 파악을 못한 경우가 많습니다. 저도 2004년에 했던 K모사 프로젝트를 되돌이켜 보면, 처음 1달간, 발주사의 구체적인 문제가 무엇인지, 무엇이 필요한지, 해결 방법이 어떤 영향을 주는지를 파악하지 않고, 나름대로의 상상을 곁들여서 마구 커다란 스펙을 잡아놓고 진행하다보니 결국에는 기능은 엄청나게 많고 발주사는 그래도 기능이 모자란다고 화를 내는 지경에 이르렀던 적이 있습니다. 프로젝트를 다 끝내고 나서 되돌이켜 보면 그 사람들이 필요했던 것은 우리가 만든 기능의 극히 일부분에 지나지 않는데, 문제가 뭔지도 모르고 나름대로의 가정을 덧붙인데다가, 문제를 제시한 사람들이 말하는 해결방법을 곧이 곧대로 다 듣다보니 일이 커질 뿐만 아니라 문제 해결도 어려워지게 되었던 정말 살아가는데 이렇게 하면 안 되는구나 하는 온갖 교훈을 다 얻은 프로젝트였지요. -.-;;

이 책에서는 문제 해결의 가능성을 넓히기 위해서, 누구의 문제인가?, 무엇이 문제인가?, 문제의 핵심은 무엇인가? 같은 기초적인 것을 찾는 방법을 왕공룡씨 엘리베이터을 사례로 들고 있습니다. 한 건물의 엘리베이터 트래픽 문제가 주지사나 법의 문제까지도 생각해 볼만한 가치가 있다는 점이나 엘리베이터 주위에 낙서할 수 있는 크레용을 놓는 것으로도 해결이 가능하다는 것 같이 문제 자체에 더 집중하면 얻을 수 있는 손 쉬운 해결 방법을 찾는 것을 보여주고 있습니다.

책이 굉장히 짧기 때문에, 내용을 더 소개하다보면 스포일러가 돼 버릴 것 같아서, 내용 소개는 여기서 줄이고, 인상적이었던 부분 몇 개 인용해 봅니다. 🙂

유머 감각이 없는 사람의 문제를 해결하려고 노력하지 마라.
– 책 44페이지

(13명의 학생 중 1명이 교실에서 자꾸 담배를 피울 때 학생들이 토론해서 해결하려고 하는 이야기 중에서)
만약 앞서의 답이 3이었다면, 즉 ‘교수’의 문제였다면 그 결과가 어떠했을까 생각해 보자. 아마 다음과 같이 하지 않았을까?

  • ‘담배를 피울 수 없도록’ 규정을 만들고 흡연 학생이 수업을 그만 두도록 해서 그가 분개하도록 만든다.
  • 담배를 피우도록 규정을 만들어서 담배를 못 피우는 일부 학생들이 수업을 그만두도록 하거나 혹은 담배 연기의 영향으로 점심조차 못 먹게 만든다.
  • 흡연 강의와 금연 강의로 나누어서 날짜나 시간을 분리하여 모든 사람을 불만족스럽게 만든다.

그러나 이처럼 무언가를 규정으로 만드는 대신 교수는 그 자신만의 문제해결 교훈을 따랐다.

그들 스스로 문제를 완벽하게 풀 수 있을 때에는 그들의 문제 해결에 끼어들지 않는다.
– 책 111페이지

학교에서 제대로 된 문제 해결사들을 배출하지 못하는 이유는 아마도 학생들에게 무엇이 문제인지 찾을 수 있는 기회를 주지 않았기 때문알 것이다. 학교에서는 선생님들이 문제라고 ‘말하는’ 것이 그냥 문제인 것이다.
– 책 164페이지

오랜만에 디자인 교체

개강을 기념해서 그동안의 단아한 디자인에서 좀 변화를 줘서
어둠컴컴하고 습한 디자인으로 바꿔 봤습니다. -ㅇ-
제목을 붙이자면…. “해그리드의 주방” 쯤..? (별 생각 없이 -ㅇ-)

요새 유행하는 스타일로 본문만 흰 바탕에 나오게 했구요~
전반적인 글꼴 크기를 약간씩 키웠습니다. 그래서 스크롤을
안 하고서는 한 화면에서 볼 수 있는 것이 별로 없군요! 하하하..
제가 요새 눈이 침침해서 큰 글씨가 좋아져서 –;;;;;

작업 도중에 css 문제 해결에 도움을 주신 소타님과 klutzy님 감사합니다~

쓰시는 브라우저에서 이상하게 보이는 부분이 있으면 알려주세요~

생물정보학 S/W 교육을 마치고

얼마 전에 썼던 지난 5일간의 교육이 드디어 끝났습니다. 준비 기간을 포함하면 8일 정도 되는데, 빡빡한 일정으로 끝내고 나니까 무척 뿌듯하고 감동의 밤이었습니다. 🙂 수강생 분들께서 맛있는 밥을 사 주시고 해서, 배부르게 먹고 와서 자느라 배가 안 꺼져서 한참을 잠을 못 자고 뒤척였지만.. 킁.

이번 워크샵은 다른 분들도 대안언어축제나 코드레이스 같은 공개 행사에서 보신 전통적인 형식에서 벗어난 학습자 중심의 참여가 풍부한 코스를 구성하려고 많은 노력을 했습니다. 그리고, 계획을 착실하게 따르기 보다는, 시시각각의 상황에 맞는 최적의 다음 행동을 고려해서 계획을 계속적으로 수정했습니다. 그래서 원래 계획에 있던 것들 중에 못한 것도 상당히 많았지만, 그렇게 했기에 더 나은 것을 전해드릴 수 있었다는 점에서, 원래의 목적을 잘 살린 것 같아서 마음이 좋습니다. 🙂

준비 기간 중에 코치들끼리 같이 공부한 책에서 몇 가지 방법을 도입해서 실험을 해 봤던 것도 대부분 결과가 나쁘지 않았습니다. 강규영씨가 후반기에 질문의 답을 학습자가 이미 알고있는 사실로 부터 연역적으로 알아낼 수 있도록 계속 질문을 던져주는 방법을 시도해 보았는데, 몇 번은 정말로(!) 성공했었고, 처음부터 여러 분들의 개인적인 성장 단계를 세밀하게 파악했더라면 더 좋은 결과를 얻을 수 있지 않았을까 합니다. 그리고, “학생들의 입을 열기” 기법 몇 가지도 시도를 해 보았는데, 영향이 뚜렷하게 있지는 않았지만, 후반기에 활발하게 질문하시는 분들이 많이 늘어나기는 했습니다. 무엇보다도, 학습자의 성취감과 상태를 구체적으로 고려하게 되어서 재빠르게 대응한 것은 책에서 얻은 좋은 결실인듯 합니다. 그렇지만 다른 단계에서는 성취감 관리가 약간 부족했던 것은 아쉬움이 남습니다.

개인적으로는 첫 날에는 하려고 하는 이야기도 하다가 까먹고 그랬었는데, 점점 말하는 것에 좀 더 익숙해진 것이 좋았고, 한 사람이 말하는 동안에 다른 사람이 보고 있다가 넓은 시야로 보고 말을 잇는 페어 티칭의 위력을 느낄 수 있었습니다. 오히려 너무 상세하게 미리 준비하는 것 보다, 2명 이상이 페어로 상황에 맞게 이야기 하는 것이 더 생생하고 시의적절한 이야기가 많이 나왔던 것 같습니다.

4일째에 냈던 숙제는 아무래도 너무 많아서 아무도 안 해올 것 같았는데, 한 분이 집에서 새벽까지 해 보시고서는 그 다음 날 아침에 와서 주변 분들에게 숙제가 재미있어서 열심히 해 봤는데, TDD로 했더니 자신이 전에 짰던 코드들 보다 훨씬 질이 좋았다는 걸 말씀하시는 것을 듣고는 무척 뿌듯했습니다. 그리고 마지막 날에는 새벽 4시 넘어서까지 숙제 하신 분도 있었습니다. 숙제하느라 밤새신 분들에 감동해서, 아침에 가는 길에 사진을 인쇄해서 모든 분들의 이름을 외워서 아침 1문장 발표 시간에 개개인의 이름을 불러드렸는데, 한 분이 무척 헷갈려서 틀릴까봐 고민을 많이 했는데, 결국 다 맞아서 안심.. ^.^;;

끝나고 모여서 봤던 교육평가에서는 실명제 평가의 위력인지(-O-) 굉장한 점수가 나왔는데, 그래도 교육을 받는 동안에 많은 분들이 느끼셨던 마음이 그대로 전해지는 것 같아서 짠~ 하는 마음이..

저도 이제 내년에는 생물정보분야로 대학원에 진학하려고 하는데, 분야의 많은 분들을 알게 된 것도 좋은 기회였고, 사용사례 같은 것들과 회사나 연구실에서 어떤 것이 필요한지도 어렴풋이 알게되어서 개인적으로도 많은 도움이 되었습니다. 이런 좋은 기회를 같이 할 수 있었던 30분의 교육생분들과 다른 코치분들 모두 정말 감사합니다. 상상을 초월하는 놀라운 열의 때문에 이 겨울에도 강의실이 무척 더웠던 기억은 무척 오래 갈 것 같습니다. 🙂

참고: 교육 중에 사용된 정보 대부분은 NGIC 위키에 공개되어 있습니다.

28명의 Io 프로그래머 탄생~

이번 주 초부터 1주일간의 일정으로 『생물정보학 소프트웨어 개발방법 워크샵』을 진행하고 있습니다. 곁에 있으면 하루 종일 배울 것이 솔솔 들어오는 세 분, 김창준, 김형용, 강규영씨와 함께 코치로 참여하고 있는데, 숭실대학교에서 하루종일 하고 있습니다. -O-

시작 전에는 2박 3일 합숙도 다녀오고, 나름대로 준비를 열심히 했지만, 그래도 늘 빠듯한 일정에 쫓기고 피곤한 것이.. 하루 종일 수업하는 초등학교 선생님들 목 아프다고 그러던 것이 이제서야 고마운 생각이 드네요.

제가 참여하지는 않았지만, 지난 번 워크샵까지는 주로 파이썬으로 진행을 했다고 합니다. 그렇지만, 모두가 모르는 언어를 공통으로 새로 배우면서 시작하는 효과를 위해 실험적으로 상당 부분을 Io로 여러 XP 프랙티스를 실습하고 있습니다. 즉, 이미 한국에 28명의 새로운 Io 프로그래머가 탄생한 것! (한국언론식 부풀리기를 약간 이용 -.-;)

저도 Io를 처음 볼 때, 굉장히 서먹서먹한게 괄호, if, Sequence 등 온갖게 다 거슬리다가 차차 적응을 했었는데, 놀랍게도 이번 교육에 참가하시는 참가자분 28명 모두 거의 문법에 대한 설명을 하지 않았음에도 불구하고, 1 페이지짜리 위키에 적은 짧은 가이드를 읽으시면서 순식간에 적응해서 코딩을 하는 장관을 연출하였습니다! 강의실 곳곳을 돌아다니면서 봐도 모든 모니터에 “abcd” println이나 x := (y – z) abc 이런 것 타이핑하고 계신 것 보고 있는게 마치 앨리스가 굴에 들어간 기분이더군요~

돌아오는 버스에서 여러 가지 생각해 보면, 아무래도 모두가 다 모르는 언어라는 점이 크게 작용한 것 같습니다. 만약에 파이썬이나 자바 같은 언어로 했다면, 모르는 분도 있고 아는 분도 있기 때문에, 아는 분은 문법 설명하면 졸리고 지루해지는 감이 있는데, 모르는 분은 또 따라가기 힘들고 옆 사람들이 알고 있다고 생각하면 쉽게 물어보기도 힘들지 않을까 싶네요.

물론, 배우는 분들의 열의에도 매일 놀라고 있습니다. 보통 다른 곳에서 TDD나 리팩토링 얘기를 하는 것을 보고 있으면 듣는 사람들은 대체로 기존의 손에 익숙한 방법과 완전히 다른 것에 적대감까지도 보이기도 하는데, 대부분 분들이 적극적으로 생판 처음보는 언어로 가이드를 대체로 지키면서 하시는 것을 보고 많은 감동을 받았습니다. 저도 앞으로 다음학기에 들을 미적분학-_-과 유기화학-_-, 미생물학-_- 열심히 해야겠다는 다짐을 해 봅니다;;