E D R , A S I H C RSS

Programming Party Afterwords

2002년 5월 19일 서강대에서 있었던 프로그래밍파티 후기 (see also ProgrammingPartyPhotos)

다음은 파티 전체(파티 준비부터 뒷풀이 막판까지)에 대한 공동 기사로 가능하면 NoSmok:다큐먼트모드를 지킨다 -- 자기는 분명히 알고있는 사건(event)인데 여기에는 아직 기록되어 있지 않다면 그냥 적당한 자리(!)에 직접 보충해 넣도록 하고, 묘사가 미진하다면 좀 더 치밀하게(!) 가다듬는다. 페이지 마지막에는 NoSmok:쓰레드모드로 개인적인 감상, 소감 등을 적도록 한다.

보통, 전체 모임/파티 동안 한 사람이 참여하는 대화는 전체 발생 대화로 볼 때 극소수에 해당합니다(게다가 동일한 대화에 참여했으면서도 인식하는 것과 기억하는 것에는 개인차가 큽니다). 각자가 나눴던 이야기 같이 사실적인 것들은 모두 다큐먼트모드로 여러사람이 협동을 해서 채워나가도록 하면 좋겠습니다. 집합적 기억이 되는 것이죠 -- 개개인이 갖고있는 기억의 전체 합집합. "내가 있었던 테이블에서는 어쩌구에 대해 이야기 했는데, 저쪽에서는 저쩌구를 이야기 했군! 이야, 재미있는 걸. 저쩌구에 대해 좀 더 써달라고 부탁해야겠다." 그러면 모두가 이득을 볼 것이고, 심지어 그 뒷풀이에 오지 못했던 사람들도 뭔가 얻는 것이 있을 겁니다. --JuNe


파티 공동 기사

파티 직전까지

금요일, 토요일, 토요일 밤 약간 깊숙히 - 이번 심사와 Mentor 역할을 맡은 김창준, 채희상, 강석천은 임시 위키를 열고 문제 만들기 작업 관련, Moderator 로서의 역할을 정했다.

일요일.

12시 구근은 신촌역에 도착하여 ZP 사람들을 기다림. 12시 30분쯤 모두 모여서 밥먹으러 감. 밥을 다 먹고, ZP 일행등은 쵸코파이와 과자 2봉지를 사가지고 Sun 랩으로 향하였고, 1시 30분쯤 Sun 랩에 도착하였다. 인수는 신촌에서 희록이형,구근이형,석천이형을 만나 밥을 먹고 서강대로 갔다.

"근데 선랩이 어디지? -_-?"

"문자 날려보면 되겠죠. 희상이가 친구 핸폰 번호 주면서 문자날리면 전화한다고 했어요. (툭 툭툭...)"

"근데.. 그냥 니가 전화하면 되지 않냐? --a"

".... -_-;"


"희상아~ 1번부터 24번 보기를 줄께 자 몇번건물이야? "

" ...... -_-;"

" 건물이름이 뭐야? 아? 거기 운동장 너머 주차장쪽 그건물? 오케~"

그리하여 서강대 썬랩에 도착하였다.

서강대의 희상, 성근, 경훈은 미리 와서 리눅스에 Eclipse 를 깔고 그들을 기다리고 있었다.

1시 40분 경 문을 열고 들어오는 이가 오늘의 Mentor 중 한명인 김창준씨와 신제용씨였다. 그들은 오늘 프로그래밍 파티의 경기 규칙이나 룰, 시간 같은것을 말해 주었다. 2시 10분경 상협군이 헐러벌떡 뛰어 왔다. 쫌 전에 창섭이와 혁기도 왔다.

2시가 조금 넘어서 파티를 시작했다. ZP팀 중에 불참 인원이 두 명이 있어서 인원 조정을 했다. 그 결과로, 다음과 같은 배정이 되었다. 각 팀에는 한 명 씩의 멘터(도우미)가 붙었다. 그들은 문제 해결에 관련된 직접적인 조언은 피하고, 개발 과정이나 여타 문제에 대한 도움을 주기로 했다.

  • MOA : 최유환, 박성근, 윤혁기, 이경훈 + 강석천
  • ZP#1 : 남상협, 강인수, 정희록 + 채희상
  • ZP#2 : 이덕준, 이창섭, 임구근 + 김창준

모두 리눅스에서 개발을 했고, MOA팀은 C+ViImproved 를 사용했고, ZP#1, ZP#2는 모두 Java+Eclipse를 사용했다.

먼저, 김창준씨가 앞으로 나와서 인사를 하고 이 파티의 의의를 설명했다. 그리고는 바로 파티의 스케쥴과 간략한 참가방법을 설명했다. 멘터(Mentoror)와 퍼실리에이터(Facilliator)의 역할, 소개 등이 있었고, 심사방법이나 심사 요소에 대한 자세한 설명이 있었다..

다음으로는 요구사항에 대한 해설이 있었다. 당시의 문제는 http://no-smok.net/seminar/moin.cgi/ElevatorSimulation 에 가면 볼 수 있다.

이렇게 2시 40분까지 Requirement 와 이번 행사에 대한 설명을 마친뒤, 드디어 개발이 시작되었다.

ZP#1팀의 경험

먼저 ZP#1팀은 Mentor 채희상씨와 함께 요구분석을 시작하였으나 어떤 방법으로 이루어져야 하는지 어떤 형식으로 하여야하는지 서로 명확히 몰랐기 때문에, 아무도 말을 하지 않고 있었다. 희록님이 생각하기에 '이렇게 아무말도 없다면, 시간만 흘러가게 될 것이다. 내가 약간 분위기를 만들어야겠다'는 생각을 했다. 그래서 "자 우리 모두 자기가 생각하는 요구사항을 말해보기로 하자"라고 하였고, 우리는 서로의 요구사항에 대한 논의가 있었다.

시간이 좀 흘렀을 때, 희록님의 생각은 '우리 모두 이 프로그램을 짜는데서 왜 알고리즘이 사용되어야 하는지 모르고 있다. 이는 문제를 제대로 파악하지 못했다는 것을 의미한다' 라는 생각을 하였다. 그 때, 누군가가 입력 형식에 관해서 Mentor에게 물었다. 하지만 아쉽게도 입력형식에 대해서 명확한 답을 얻을 수는 없었지만, 몇가지 새로운 사실들을 알수 있었다. 하지만 진행은 계속 지지부진하게 되었다. 희록님은 다시 그것을 깨고자 "CRC카드를 한번 사용해서 문제를 다시 한번 생각해보자"라고 하였다. 우리는 CRC카드를 작성하기 시작하였고, 우리가 CRC카드를 이용해서 시뮬레이션을 실행해보고서는 요구사항을 분석하는데는 크게 도움이 되지 않았지만, 우리가 프로그래밍시에 어떤 객체들이 필요할지와 그 속성들에 대해서는 약간 명확해졌다.

그 때쯤인가, ZP#2팀의 Mentor이신 김창준님이 '슬쩍' 오셔서 Design이 잘 떠오르지 않는다면, 비슷한 아키텍쳐를 가진 문제를 풀어서 그 아키텍쳐를 재사용해 보라는 말씀을 하셨다. 하지만, 우리 팀원중 아무도 그것에 대해선 이후에 언급하지 않았다.(묵살되었다. --) 그러다가 우선 요구분석에 대한 이해를 높이고, 디자인을 상세화하기 위해서(디자인->코딩->디자인->코딩 단계를 반복하였다.) 코딩을 시작하기로 하였다. 상협군과 인수군은 매직펜을 맡았고, 희록군은 키보드를 맡았다. 희록군은 Unix환경에서의 Eclipse의 작업 문제로 인해 심각한 스트레스를 받고 있었다. 그러다가 컴퓨터를 한번 옮겼으나 그 스트레스를 줄이진 못했다. 아무래도 공동으로 프로그래밍 하는거에 익숙하지가 않아서 좀 서투룬 감이 있었다. 그래도 해야 겠다는 생각을 하고 문제의 요구 사항을 분석하고 어떻게 설계를 해야할지 의논했다.

ZP#2팀의 경험

이 때 ZP#2팀은 Mentor 김창준씨가 지켜보는 가운데 바로 요구사항 분석에 들어갔는데, 이를 보던 김창준씨가, "저라면 시간 계획을 먼저 세우겠습니다"라고 말을 해서 그들은 이에 동의하며 시간계획을 먼저 짰다. 20 분 정도를 요구 분석, 다음 20분을 디자인, 그리고 남은 시간엔 구현과 디자인 반복하기로 계획을 세웠다. 구현, 디자인 반복을 하는 방법은 멘터의 조언에 따라 두명이 짝으로 구현, 나머지 한명은 디자인 다듬기로 하였다. 팀원은 긴장한 채로 문제에 집중하려 애썼다.

요구분석을 마치고 디자인을 하기로 한 시간이 되었기에 팀원들은 한 테이블에 모였다. 그리곤 CRC 카드를 이용해서 디자인에 들어가기 시작했다. 암묵적으로 구근님이 ZP#2의 무게중심이 되어서 디자인 회의가 시작되었다. 어떤 클래스들이 필요한가, 어떤 이벤트를 누가 발생시키고 그 이벤트를 누가 알아야하는가에 대한 이야기가 오가는 가운데 데기는 문제파악 조차 제대로 안되어서 무척 혼란스러웠다. 서로 요구분석 이해에 차이가 있었음에도 불구하고 디자인은 계속 진행되었고, 시간은 계속 흐르고 흘러서 구현을 시작하기로 한 시간을 훌쩍 넘어버렸다.

MOA팀의 경험

한편 실습실 구석에서 Mentor 1002씨가 함께한 Moa팀은 처음에 책상 하나를 두고 4명이서 서로 대화를 하면서 Requirement 를 이해해나갔다. 그러다가 중간에 2명은 Person - Elevator 의 전반적 구조를, 2명은 Elevator 알고리즘에 대해 생각을 전개해 나갔다.

'오.. 대화진행속도가 빠르다!' 1002 가 본 moa 의 마치 평소 손발을 맞춰본 팀같았다. 근데, 토론하는 것을 들으면서 1002가 생각하기엔 '음.. 근데, 너무 초반에 Algorithm-Specific 하게 생각하는게 아닐까. 일단은 문제를 간단한 문제로 분해하는(보통 1002가 'Design' 을 간단하게 정의하라고 할때 저렇게 표현한다.) 과정이 더 중요할것 같은데'

3시 40분쯤. 1002는 시간이 너무 지체된다고 판단, '처음부터 일반화 알고리즘을 생각하시는 것 보다는, 사람수 한명일때라 생각하시고 작업하신뒤 사람수는 늘려보시는것이 더 편할겁니다' 라고 했다. 이는, 금요일, 토요일때 미리 엘리베이터 시뮬레이션을 만들때 느낀점이긴 했다. Moa 팀에서는 동의를 했고 직원 한명에 대한 여정부분을 Hard-Coding 해나갔다.

중간 4시가 넘어간 즈음, 1002는 시간이 지체된다고 판단, 프로그래밍에 들어가기를 유도했다. '처음부터 디자인을 해 나가시는 방법도 있겠지만요. 디자인을 도출해 내기 위해 프로그래밍을 병행하시는 방법도 있습니다. 대강의 디자인이 나왔으면 약간 코딩해보신뒤 다시 모여서 재디자인해보세요.'

그리고. Moa 팀의 열혈플밍모드 돌입.~!

팀의 사람수가 4명인 관계로 다른팀이 컴퓨터 1대를 쓰는 동안 두 팀으로 나누어 컴퓨터 두대를 이용, 작업을 해 나갔다. 다른 팀을 많이 둘러보진 않았지만, Pair 간의 대화가 잘 이루어지고 있었다. 단, 두팀으로 나누어진 관계로, 서로의 작업부분에 대한 통합부분에 대해서는 특별한 진행을 하지 않는 것 처럼 보였다.
멘터인 1002는 '저렇게 하면 나중에 main 함수 어떻게 만들까.. OO Style 이라면 main 루틴 부분이 좀 짧긴 하겠지만, C 라면 좀 힘들지 않을까' 라고 생각, 5시가 가까워지는 4시 20분쯤에 각 모듈 부분을 통합할것을 제안 했다. 통합 중간중 의견 조율을 하는 중간에 ZP#2 멘터인 김창준씨는 두 팀으로 나누어졌을 때 서로 엇갈려서도 Pair 를 바꿔보도록 제안, Moa 의 두 팀은 한명씩 서로 바꾸어보기도 하며 일을 진행해 나갔다.


토론, 발표

각 팀별로 전지에 자신들의 디자인을 표현하고 모두에게 그 디자인에 대해 설명하는 식으로 발표를 하였다. 각 팀별 디자인의 특징을 볼 수 있었다. '뭘 잘못했느냐?'가 아니라 '어떻게 해야 잘할 수 있었을까?'와 같은 '올바른 질문'을 던짐으로써 더 배울 수 있다는 것을 확인할 수 있었다. 그리고 발표할때 What 과 How 를 분리하고 What 만을 전달해야 한다는 것이 중요하다는 것을 관찰할 수 있었다.

세 팀의 발표를 모두 듣고 멘터 3명은 각 팀의 소스를 프린트해서 채점을 위해 잠시 장소를 옮겼다.

그동안 각 팀들은 퍼실리에이터와 함께 인포멀한 토론을 하였다고 한다.

각 항목별로 50점만점에 멘터 3명이 각각 점수를 매겼고 그 합산에 항목별 가중치를 곱하여 총점을 내었다. 평가 결과 ZP#2 팀이 가장 높은 점수를 받았다. 1등을 위한 모종의 선물이 있었더라면 더 좋았을것 같다.

결과를 발표하고 그 사이에 이루어졌던 토론에 대한 내용을 멘터들에게 전했다.

뒷풀이

서강대 근처에서 밥을 먹고 난 뒤 맥주를 마시러 갔다. 세 테이블로 나누어서 자리를 잡고 1시간정도 흐른후에 한 차례의 자리바꾸는 타임을 가지고 서로 이것저것 이야기를 나누었다.

그때 나누었던 얘기에는, 최근에 공부하고 있는 것, 자기 학교에서 배우는 것, 서강대와 중앙대의 비슷한 과목에서 어떻게 다르게 배우나, moa 와 zp 에 대한 얘기등이 있었다.


쓰레드 모드


근데 다들 모두 바쁜가요? 멘터 말고 참가자들도 써넣을 부분이 많을텐데...? 꼭 "잘" 쓸 필요 없습니다. 누군가가 고쳐주겠죠. 기억이 희미해져가기 전에 빨리 채워넣읍니시다! --김창준
우..~ 기사 쓰기쪽에 열올리다 보니 스레드까지 커서가 안넘어가져요;; --석천


이런 시뮬레이션에 관심이 있다면 다음의 자료들을 참고하길 바랍니다. (일단 두 번 정도는 스스로의 힘으로 풀어보고 나서 참고하면 좋을 것임)
  • NoSmok:StructureAndInterpretationOfComputerPrograms에 나온 Event-Driven Simulation 방식의 회로 시뮬레이션 온라인텍스트
  • NoSmok:TheArtOfComputerProgramming에 나온 어셈블리어로 구현된 엘리베이터 시뮬레이션 (NoSmok:DonaldKnuth가 직접 엘리베이터를 몇 시간 동안 타보고, 관찰하면서 만든 알고리즘이라고 함. 자기가 타고 다니는 엘리베이터를 분석, 고대로 시뮬레이션 해보는 것도 엄청난 공부가 될 것임)
  • Discrete-Event System Simulation : 이산 이벤트 시뮬레이션 쪽에 최고의 책으로 평가받는 베스트셀러. 어렵지도 않고, 매우 흥미로움. 도서관에 있음
  • Seminar:ElevatorSimulation문제, 일반적인 discrete event simulation 패턴 소개 등


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