- Response
- No Trackback , No Comment
7.
예리한 직감을 따르고 부족하지만 아는 것을 실천하는 친구들, 당신들을 존중한다. 순수함과 직감과 나라사랑에서 출발한 그대들의 판단은 필경 바를 것이다. 그러나 바른목적지가 항상 바른 경로는 보장하지는 않으며 더욱 지금의 경로가 적합한 것인지는 지금의 나로서는 알 수 없다. 적합한 길을 찾는 것이 젊음을 놓치지 않는 것보다 중요하다고 믿기에, 나는 전자를 택한다.
Posted by 발당
어메 조교 관두나요 ㅠ
누군가의 장학금이 걸려 있고 또 누군가의 유학길과 누군가의 미래계획이 걸려있을 프로젝트 채점을 끝으로, 프로그래밍 원리 수업의 조교 업무가 끝났다. 시간사용과 고민한 분량과 기울인 노력을 돌이켜볼때 지난 학기(이렇게 부를 수 있는 날이 오다니!) 나의 직업은 "프로그래밍 원리 조교" 다. 공부는 회사원 야학다니는 수준으로 했고, 연구는 교수님에게 까이지 않을 만큼 했다. 그래도 조교일에서 배운게 있으니까, 매주 한번 수업하고, 채점하고, 상담하고, 프로젝트 진행하고. 어거지로 수업으로 환산하면 이론 2학점에 실습 3학점짜리 전공과목쯤 될까.
학생을 가르치는 것과 교사가 되는 것은 차원이 다른 일인듯하다. 한 사람의 학생을 키워내기 위해서는 가르칠 내용을 이해하고 한 사람 몫의 관심만 투자하면 되지만, 50명의 학생을 가르치려면 50명의 상관관계를 고민해야하니까. 잟 하는 녀석이 관심을 잃지 않게 재미있는 주제를 던져주면서 잘 따라오지 못하는 녀석이 따라올 수 있게 챙겨야하고. 학생들이 괴로워하는 것을 보며 안타깝더라도 "고민할 분량"만큼 고민하도록 내버려 둬야 한다. 그 와중에 자학하는 학생이 나올지라도 뒷짐지고 쳐다볼 수 밖에. 더 알려주고 싶어도 시간의 한계에 막혀 나가지 못하는 아쉬움. 따라오지 못하고 떠나가는 수강생을 말없이 보내주는 아쉬움. 점수를 주고 줄을 세운다는 것. 시간과 커뮤니케이션의 한계로 인해 학생이 기울인 노력과 성취의 만가지 얼굴을 다 고려해주지 못하는 아쉬움. 장례혁교수님이 컴퓨터 시스템 설계와 내장형과목에서 모두에게 좋은 학점을 주는 심정을 조금은 알것 같다. 그토록 머리 좋은 학생들이 머리를 쥐어짜게 만드는 문제를 내고 감독하기 위해 교수가 쏟아부은 열정의 양은 어떠할 것인가. 어마어마한 열정을 쏟아부은 학생들이 예뻐보이지 않겠는가. "모두에게 A를 주고 싶지만, 규정상 그럴 수 없다"는 말은 판에 박힌 멘트가 결코 아니다.
객관적으로 내 프로그래밍 원리 조교질(나는 이렇게 부른다)에 점수를 준다면 70점 정도. 기울인 열정의 총량에 90점을 주고, 열정을 꾸준히 기울이지 못한데서 10점을 뺀다. 다시 학생들의 상황을 충분히 고려하지 못해 5점 감점, 무리한 프로젝트를 강행한데 5점 감점이다. 하지만 다시 한다고 해도 비슷한 길을 조금더 나아진 방법으로 갈 뿐, 방침을 수정하지는 않으련다.
결정권자라는 자리가 가지는 무서움. 행정처리를 위한 다양한 스킬과, 여러 사람과 의사소통을 하는 가운데 진척을 만들어 나가는 법. 그리고 열정을 세련되게 쏟아내는 방법. 새로운 자리에서 새로운 일을 하는 경험. 프로그래밍 Geek처럼 지냈던 학부때는 결코 알지 못했던 많은 것을 얻어간다. 내가 얻은 만큼 수강생들도 배웠을지.
돌아오는 월요일 부터 다시 대학원생으로 성실하게 살아야지.
Posted by 발당
정말 멋진 조교님이었어요. :)
수고했어-
근데 장례혁교수님은 의도한거야?(...)
Posted by 발당
원태님이 만들면 ㄲㄲ 석사 논문 ㄲㄲ
[존 말코비치 되기, 1999]
[티파니에서 아침을, 1961]
[이키루, 1952]
[End of Spear, 2008]
[Sabrina, 1954]
[Serendipity, 2002]
Posted by 발당
말코비치? 말코비치, 말코비치?
말코비치!! 말코비치!?!?!?
아는사람은 알겠지만, 나는 겉보기와 달리 단순하게 결정을 내리는 편이다. 아프리카는 "늙으며 못갈 것 같아서" 갔고, 호주는 "준기가 가자니까" 갔었다. 컴공과는 "독학 못할것 같아서 골랐고", 수능공부는 "서울대가면 재밌는 사람 많을 것 같아서" 하기로 결정했다. 악랄한 TA가 된건 단순히 "재미있을것 같아서" 그랬다. 대신 결정하고 나서 상황에 맞닥뜨린 다음에는 고민을 많이 한다. 말하자면 뛰면서 생각하는 성격이다.
Any way, 1년전에 대학원 시험보기 전에 연구실을 결정할 때 고민하기 싫어서 딱 두가지만 생각했다.
1. 빡센 상황 아래서 나를 다스리는 법을 배워보자.
2. 생각을 정제해서 표현하는 방법을 배워보자.
이렇게 두가지만 보면 로파스 밖에 견적이 안나온다. 합격발표 나고 노는 중에 찬찬히 생각하면서 추가적인 목표들도 세웠지만, 딱 이 두가지만 이뤄지고 있다. 조교하고 랩미팅하면서 정리해서 표현하는 일만 하고 있고 (생각할 시간은 많이 없다), 프로젝트 두개에 얽혀서 제대로 빡센 스케쥴에서 나를(분노를!) 다스리고 있다. 한동안 잘 나간 시크릿이란 책의 메세지가 "생각대로 될지어다" 였다고 한다. 어느 시점의 생각이 이루어지는지가더 중요한거 아녀? 오늘의 결론은 방학만 기다리고 있다는거다.
Posted by 발당
나도 분노를 다스려야겠다
이번학기 조교를 하고 있는 프로그래밍 원리 과목의 프로젝트가 시작되었다. 대대로 프로그래밍 원리 과목은 조교가 게임을 제공하고 학생이 AI를 작성하는 전통이 있다. 교수님은 게임이 아닌 대안을 원하지만, 학부 시절 가장 즐거웠던 과제였기에 (그리고 프원 조교로 게임을 만들수 있다는게 중요한 연구실 선택 동기였기에) 게임을 밀어붙였다. 연구고 공부고 재쳐두고 3일째 게임을 기획하고, 문서화하고 실행기를 짜는 중이다. 오늘 밤에 실행기가 끝나고 나면 몇일은 쉴 수 있겠지. 스펙 문서에는 학생을 괴롭히는 악랄한 TA의 음모에 맞서라고 했지만 악랄한 조교는 자기 꾀에 넘어가 제대로 병맛을 보고 있다.
ML로 게임을 짜면서 느낀 것을 몇가지 적어두려고 한다.
1. ML이나 C나 기본은 Divide and Conquer
현실은 수식으로 간단하게 기술되지 않는다. 수학으로 깔끔하게 기술되는 작은 문제와 문제들을 결합하는 부분으로 쪼개서 생각하는 것 밖에 도리가 없다. 때문에, 언어가 자연스럽게 기술할 수 있는 작은 조각들 (문교수님 표현을 쓰면 빌딩블럭) 뿐 아니라, 자연스럽게 기술되지 않는 문제를 작은 문제로 분할하는 그 언어만의 독특한 방법을 배워야, 현실문제를 해결하는 툴로서 활용할 수 있다. 그런데 ML이란 언어를 공부하면서 접하는 예제에 문제가 있다. 초심자들을 ML로 빨아들이는데 집중한 나머지 자신에게 유리한 예제들만 다루고 있다. ML 초심자가 중급자로 넘어가면서 하는 첫 고민은 함수형 언어로 어떻게 큰 프로그램을 짜야 하나 하는 것이다.
게임을 짜면서 ML로 자연스럽게 표현되지 않는 것을 어떻게 짤까 고민하면서 ML에서의 모듈 분할에 대한 통찰이 조금 생겼다. 그리고 그 양상이 C와 조금도 다를바가 없어서 충격을 받고 있다. C에서 Header와 File Scope를 이용해 프로그램에 추상화 계층을 구축하는 것과 정확히 동일한 방법이 ML에서 사용된다. Module과 Signature 라는 것이 있는데 Module이 File Scope이고 Signature가 Header의 역할을 한다.
2. 함수형 언어의 프로그래밍 idiom : State Transition Function
모듈을 자연스럽게 활용하려면 함수형 언어에서 잘 사용하는 몇가지 프로그래밍 Idiom을 익혀야 하는것 같다. 그중 하나가 State Transition Function이다. OOP에서는 객체가 실행 경로를 타고 흘러다니며 변해간다. ML에서는 값에 State Transition Function을 반복 적용하여 같은 짓을 한다. 함수형 언어에서 loop 을 재귀함수로 구현한다는 것은 프로그래밍 조금 한다는 사람은 다 아는 사실이지만, Mutual Recursion과 Exception을 이용해서 Stats Transition Function 이 자연스럽게 구현된다는 사실을 깨닫기가 쉽지 않다. State Transition Function의 인자로 흘러다니는 값은 Reference를 이용해서 변하게 만들어도 전혀 어색하지 않다.
3. 함수형 언어의 프로그래밍 idiom : 메세징을 이용한 병렬 프로그램
프로그램을 State Transition 형태로 기술했다면, 그 안에 메세지 패싱을 밖아넣어서 병렬화할 수 있다. 메세지를 기다리는 동안 블럭되있는 것은 스테이트가 제자리에 머무는 것이고, 메세지를 받아서 움직임이 변하는 것은 스테이트가 전이되는 것이다. 자연스럽다. ML만 쳐다보면서 이해하기는 어렵다. 나는 Erlang의 논문을 읽다가 깨닳았는다. 학부에서 Erlang을 다뤄주기를 기대하기는 어렵고 Prolog를 이용해서 Logic Programming하는 것을 심도있게 다루는 코스가 있다면 센스있는 학생들은 감을 잡고 졸업할수 있지 않을까 한다.
4. ML의 프로그래밍 idiom : 소규모 인터프리터
ML에서만 가능한 또 다른 idiom 이랄까? 쉽게 구현할 수 있고 효과적인 빌딩블럭이 인터프리터다. 원자수준의 단순 작업으로 분해 가능한 일군의 작업이 있다면, 작업을 기술하는 작은 언어와 실행기를 만든 다음에, 해당 언어로 작업을 기술하는 편이 모든 작업을 다 ML로 기술하는 것보다 효율적인 경우가 제법 있다. 학부 프로그래밍 언어 시간에 ML로 인터프리터를 짜 본 경험이 있다면 ML로 소규모 인터프리터를 짜기가 어렵지 않다는데는 수긍할 것이다. 관건은 작업을 기술하는 언어를 만드는 것이 쉬우냐는 것인데, 이 부분은 State Transition Function 처럼 트레이닝을 받는 수 밖에 없다. 사실 PL 지식 학부수준이면 충분한 것 같다. PL 지식보다는 언어를 만들어서 공략하고자 하는 작업에 대해 얼마나 아느냐가 관건이다.
5. 일단락
ML이든 OOP든 Logic Programming이든 큰 규모에서 문제를 공략하는 기법은 동일한듯 하다. 문제가 크다면, 중간 규모의 문제들로 쪼개지고 중간규모의 문제는 다시 작은 규모의 문제로 쪼개질 것이다. 중간 규모의 문제를 합해서 큰 규모의 문제로 조합하는 방식은 언어가 달라도 크게 차이가 없을 것이다. 그 수준에서는 언어보다는 라이브러리의 생김에 의해 프로그래밍 방법론이 결정될 테니까. 언어가 영향을 줄 수 있는 부분은 하위의 두 수준인듯 하다. 작은 규모의 문제를 얼마나 쉽게 만들고 변경할 수 있느냐. 그리고 작은 문제를 조립해서 중간규모의 문제를 해결하는데 어떤 방법론이 존재하느냐. 어린 해커들은 작은 문제를 기술하는데 집중하기 때문에 퀵소트를 짧게 구현할 수 있는 언어가 나올 때 마다 열광한다. 그러나, 객관적으로 볼때 성공하는 언어는 대체로 중간규모의 문제를 효과적으로 해결하는 방법을 제공하느냐에 달려있다. 한 카테고리의 중간규모의 문제만 해결할 수 있어도 살아남을 수 있고, 여러 카테고리를 해결할 수 있으면 번성한다. ML이 일반에 퍼지지 못하는 원인중의 하나는 ML로 중간규모의 문제를 해결하는 방법론이 축적되지 않았기 때문이라 생각한다. 언제까지 ML을 쓸지는 모르지만, 쓰면서 느끼는 것을 이렇게 차곡차곡 정리하는 것도 유익하겠다는 생각이 든다.
Posted by 발당
Posted by 발당
nML을 채점하는 nML
스킴을 채점하는 스킴
스킴이라니 ! nML이라니 !
언제봐도 오타는 안타깝군요.
퇴고없이 올리면 오타투성이
퇴고를 하자니 귀찮아서 글을 않써
짜장과 짬뽕사이의 선택만큼 어려운 일이야
스킴와 nML 의 실용적 사용법에 대해 꼭 한 번 들어보고 싶어요! 코드와 함께 :)
연구실에서 작업용 컴퓨터로 맥미니를 쓴다.
맥빠는 아니지만, 지도교수님의 논높이를 따라가려다보면
Omnigraffle와 Texshop을 써서 문서를 만들게된다.
(연구실 선배들이, 수준높은 문서로 교수님 눈을 버려놨다)
Tex이야 어디서든 사용할 수 있지만, Omnigraffle은 맥 전용이다.
교수님이 문서를 요구하면, 집에 있다가도 연구실에 가야하는 아픔이 있다.
토요일 저녁에 학교에 가는 일도 종종 있고, 맥 본체를 챙겨서 집에 오기도 하고.
맥미니가 작고 가벼워 보이지....만 작기만하고 가볍진 않다.
연휴 첫 날 아침, 연구실에 들려 맥미니를 가방에 넣고 놀러 나선적이 있다.
몸살나서 연휴내내 아무것도 못했다.
돈도 없는데. 맥북을 사야하나. 싸게 맥미니를 집에 놔야하나.
한 학기동안 안사고 버티다가 드디어 맥북을 사는 쪽으로 마음이 기울었는데
오늘, VNC로 맥을 원격제어할 수 있다는 것 알았다.
우리 잡스횽아는 생각보다 관대하시다.
주말에 일하려고 맥미니 들고다녔던 날들을 생각하면 눈물이 난다.
무거운 날들이여 안녕. 괴로운 눈물이여 안녕.
이제는 가벼운 몸으로 통근할 수 있다.
Posted by 발당
아~ 너무 눈물겨운 이야기다. 우리 연구실 사람들이 원격접속의 편리함을 깨닫는 데에도 꽤 오랜 세월이 걸렸는데. (아직 모두 깨달은 것은 아님)
오오 VNC 오오
오오 MAC 오오
원격접속툴이 따로 있긴 한데. 유료더라구-
드디어 맥북을 샀구나. ...
맥미니를 들고 다니다니 대단하다.
맥 라인업 곧 바뀐다던데, 어떻게 나올지 궁금하다.
날로 강대해지는 CPU 및 컴퓨터 성능을 이용하잔건지, 요즘은 가상화가 대세던데.. 컴퓨터를 충분히 좋은걸 뽑고(그렇게 좋을 것도 없이 요즘 사람들 많이 사는 수준이어도 충분할텐데) 가상 머신 안에서 맥을 돌리는 건 어떠했을까? ㅎ


Posted by 발당
이 아저씨 정말 지금 생각해도 멋있었어.
Posted by 발당
Posted by 발당
Posted by 발당
나는 jstrane 블로그 갔다가 알았음
근데 내가 너한테 언제 소개시켜줬지? [...]
ㅇ군과 채팅을 하다가 나온 이야기
"내 대학생활 4년에 가장 큰 영향을 준건, 연락도 안되는 잠깐 스친 여자애구나"
그렇게 따지자면 보면 뉴욕에 내린 비는 동경의 나비때문이겠지.
자신의 순박함에 기가차기도 하고 신기하기도 하다.
Posted by 발당
2년전 이었나.
한비야씨의 책을 읽으며 "생활이 묻어나는 문장" 의 맛을 알았다.
맛깔스런 글을 읽는 만족감. 그러한 문장에 대한 부러움.
그런 문장을 낳은 한비야씨의 삶에대한 존경심.
그러나 그것들은 내 머리와 가슴속에 길게 살아남지 못했다.
프로그램코드도 글인데, 코드 위에도 삶이 얹어질까.
공학. 수학적인 통찰이 아닌 일상적인 것의 영향력은 없을까.
낙엽처럼 차곡차곡 쌓인 시인의 일상이 시에 알알이 들어차듯
엔지니어의 삶과 작업물도 그러할 수는 없을까.
삶이 기술을 타고 뻗어나갈 수 없다면
어떠 일상도 기술자의 관점에서는 동일한 것이 된다.
반대로 기술을 얻기위해 혼신의 힘을 다해 공부하는 사이
기술을 사용하는 인간인 나는 퇴보하는 느낌도 참기 힘들다.
이 질문 하나만 살아남아 나를 공부하게 하고 또 절망케 했다.
그리고 이제는 거의 잊었다 싶었다.
대학원에 들어와 처음 프랑스와 덴마크사람들의 논문을 읽었고
독일유학을 다녀오신 교수님을 모신 세미나에도 참석했다.
각 나라마다 참 다른 방식으로 엔지니어링을 하고 있음에 놀랐다.
국민성이란 그 나라국민의 매일매일의 삶의 경험에서 형성될게다.
그리고 국민성은 생각하는 방법을 다르게 함으로서 프로그래머에게 지대한 영향을 준다.
경험이 생각의 틀을 결정하고 프로그램은 생각의 한가지 표현형이다.
엔지니어의 삶은 결국 그의 작업물속에서 다시 피어난다.
늦기는 했지만 너무 늦지는 않게 한가지 증거물을 얻은셈이다.
이런 별것 아닌 깨닳음에 세상이 달라질리 없다.
단지 나 하나는 조금더 가벼운워진 마음으로
공부하고 또 일상을 살 수 있을 것이다.
p.s 그런 의미에서 요즘 내가 짠 프로그램을 보면 삶이 부끄러워진다.
Posted by 발당