Categories
Development

디버거랑 결별하세요

 assertTrue()의 Turn off your step-thru debugger를 보다가 어딘가 옮겨놓고 싶어서, 옮겨봅니다. 

 

상황 

나는 디버거 없이는 살 수 없는 초보 프로그래머. 내가 짠 코드에서 버그가 생겼다. 사수한테 도움을 요청했다. 상황을 설명하고, 해볼 수 있는 거는 다 해봤다고 말했다. 그러자..

 

대화

사수: 나는 디버거로부터 떨어져있으려고 노력하지. 

디버거는 목발이야. 그거 없이도 너는 잘 걸을 수 있지. 

만약 니가 디버거 쓰는 습관을 들인다면, 너는 게을러질꺼야. 네 머리속 어떤 부분은 활동을 멈출테지. 디버거가 네가 만든 버그를 찾아줄꺼라고 생각할테니까. 하지만 현실에선 말이야, 니가 버그를 만들었다면, 니가 찾아야만 한단다. 

 

초보 프로그래머: 정말 그지같은 버그가 생겼을 땐 어떻게 하시는데요? 

 

사수버그가 어디있는지. 장비가 내게 말하도록 하지. 

 

그렇게… 

그 프로그래머는 디버거 쓰기를 그만두고, 프로그래밍 스킬이 빠르게 발전했다는 아름다운 이야기. 

여기서 나온 디버거는 step-thru 디버거를 말함. 

이 글은 스프링노트에서 작성되었습니다.

Categories
Uncategorized

블로그에 기술적인 내용을 쓰는 것

블로그에 기술적인 내용을 쓰는 것은 어떤 의미가 있을까. 

 

내가 요즘 적용하고 있는 규칙은 기술적인 내용을 최대한 피하는 것이다. 인기 있는 패스트푸드를 만드는 일이 아니라면, 앞뒤 내용이 거의 생략될테고 그 결과 독자로 하여금 문맥을 거의 따라갈 수 없게 만들 뿐이다. 그렇다고 독자를 고려하여 앞뒤 내용을 다 채워 문맥을 완성하여 인기있는 패스트푸드를 만들자니 리소스가 너무 많이 투입된다. 

 

어디서 social knowledge base 서비스를 만들어준다면 모를까. 더이상 내 블로그가 멋져보이는 코드로 뒤덮히는 것을 바라지 않는다. 

작자 입장에서(writer)는 뭔가 어려운 것을 성취했을 때, 이것을 기념하기 위해 블로그 포스팅을 하고 싶은 욕구가 많이 생기는 것이 사실이다. 자랑하고픈 마음도 있지만 스스로에게 상을 주는 어떤 행위가 필요한 것이 가장 크다. 포스팅의 형태로 발현되면 피드백을 얻을 수 있는 장점도 있긴 하지만, 이런 수준이 되려면 글의 품질이 어느정도까지 올라와줘야만 한다. 그래서 잘 구성된 글을 쓰자니.. 스스로에게 상을 주는 것이 아니라 일만 하나 더 얹어주는  기분이 들기까지.   

 

블로그에 따끈따끈한 기술 관련 내용을 올렸을 때 생기는 또 하나의 문제가 있다면, 그것이 일시적인 행위임에도 불구하고 반영구적으로 보일 소지가 많다는 것이다. 누군가가 내가 3주전에 포스팅한 JavaFX 개발 후기를 읽는다면 내가 요새 JavaFX를 가지고 노는 줄 알지도 모른다. 하지만 해당 포스팅과 함께 JavaFX는 내 마음속에서 사라진지 오래. 아무런 기약도 없이 “시간나면 해봐야지” 하고 $25,000에 눈이 멀어 JavaFX Challenge에 지원서도 냈지만 아마 시작도 안하게 되지 않을까 싶다. 

 

기술적인 내용을 쓰는 것 보다는 기술과 관련된 이야기를 쓰는 것이 더 좋다. 

Categories
Uncategorized

소프트웨어 엔지니어로 돈을 번다는 것

기술력과 보수는 아무런 상관이 없다. 기술력은 결과물(software)을 동일한 시간에 얼마나 더 빠르게 만들고 얼마나 더 품질을 좋게 하고 얼마나 더 성능좋게 만드느냐 정도이다. 나는 도무지 트렌드에 관심이 없어서 잘 알지 못하지만, 요새는 함께 일하는 사람과의 인터랙션이 중요하게 여겨지는 것처럼 보인다. 기술 인프라가 충분히 발전했기 때문인가? 더이상 기술력에 리소스를 투입하지 않아도 되는 세상이 온 것만 같다. 나는 실제로 그렇게 생각한다. 좋은 기술들이 도처에 널려있다. 이제는 현재 자신의 상황에서 필요한 기술이 무엇인지 판별하는 능력과, 그것을 빠르게 자기것으로 만들 수 있는 흡수능력(공부 잘하는 애라고 쳐두자)만이 중요하다. 아무튼 이것들은 어디까지나 기술력에 대한 이야기이다. 

 

중고등학교 시절을 회상해본다. 학교에서 잘 나가는 친구들이 있다. 이들은 멋져 보인다. 그리고 이들으로부터 소외되면 큰일날 것만 같은 기분도 든다. 그래서 그 그룹에 속하기 위해 노력하는 학생도 있고, 그들이 맘에 안들어서 새로운 파(group)를 조직하는 자, 그 파에 가담하는 자들도 있다. 이쯤되면 전교생의 과반수가 이 트렌드에 가담하게 되고 새로운 문화가 자리잡게 된다. 하지만, 공부에 도움 되는 것은 단 하나도 없다. 물론 학생들은 이 사실을 잘 알고 있다. 그들은 공부에 *정말로* 관심이 없기 때문이다. 

 

그런데 학교에서의 이런 노력이 정말로 쓸모가 없을까? 내 경험으로 보면, 이들은 공부하는 학생들만큼 (혹은 그 이상) 잘 나가기 위해서 엄청나게 고군분투한다. 양아치들은 오래가지 못한다. 그 바닥에서도 엄청난 노력없이는 무엇도 성취할 수 없다. 이들이 높게 평가받을 수 있는 분야는 과도한 경쟁에서 살아남을 수 있는 기본 바탕이 되어있다는 것이다. 지는 것을 싫어하고 자존심이 강한 것도 결코 나쁜 것만은 아니다. 얼마든지 긍정적으로 활용될 수 있는 황금같은 속성들이다. 분야가 다를 뿐이지, 자기애가 충분하고 열정이 있다는 것 아닌가. 

 

다시 소프트웨어 개발로 돌아와서. 언젠가는 이런 생각을 한 적이 있다. 높은 기술은 보수가 적고, 낮은 기술은 보수가 높은 것은 아닐까하는. 시간이 충분히 지나서야 알았지만 얼토당토 안되는 생각이였다. 기술과 보수는 아무런 상관이 없었다. 기술력이 높다고 보수를 많이 받아야 한다고 생각한다면, 아직도 부모님 품 속에서 징징대는 아기 마인드이다. 책 많이 읽으면 칭찬해주고 맛있는 반찬주는거랑 뭐가 다른가? 그보다는 영화 ‘비열한 거리’의 천호진의 대사가 더 훌륭하다.  

 

병두야, 세상에서 성공하려면 딱 두가지만 알면 돼. 나한테 필요한 사람이 누군지, 그 사람이 뭘 필요로 하는지 ..

 

돈을 벌고자 하는 소프트웨어 개발자한테 필요한 사람은, 

(1) 내게 줄 돈을 마련할 수 있는 자. 

(2) 내가 잘 만들 수 있는 새로운 소프트웨어를 필요로 하는 자

이고, 

 

그 사람이 필요로 하는 것

(1) 직접 물어보거나 눈치껏.

(2) 자기 취향 잘 맞춰주는 녀석. (반항하는 것을 좋아하는 사람도 있다는 것을 잊지 말 것) 

이다.

 

마지막으로 간과할 수 없는 부분이 있다. 나는 트렌드에 관심이 개뿔 없기 때문에 위와 같은 생각만 할 수 있다고 하지만,  많은 사람(고객)들이 자신이 만들고자 제품과 직접적인 관련이 *전혀* 없는 기술이라도 여튼 기술력 높다고 소문난 사람을 신뢰한다는 것이다. 그렇기 때문에, 딱히 고객이 돈이 많지 않고, 내가 잘 할 수 있는 분야에 대한 니즈가 없다 할지라도 기술력이 높으면 돈을 주는 경우가 있다.  이러한 경향 또한 천호진의 대사를 벗어날 수가 없는데, 고객이 필요로 하는 것이 ‘대체적으로 기술력이 높은 사람’ 이기 때문에 고객의 니즈를 당신 스스로가 맞춰준 것이기 때문.  

 

아니면 창업을 하시던가! 

Categories
Uncategorized

가이드라인에 대한 단상

가이드라인이란 무엇인가.

부딪혀보기를 싫어하는 사람들을 위한 패스트 푸드이다.

 

패스트 푸드란 무엇인가. 그것에 대한 필요를 느끼고 주문이 들어간 뒤 바로 얻을 수 있는 식품이다.   

패스트 푸드가 필요한 사람은 누구인가. 시간을 절약하고자 하는 사람이다. 무엇을 학습하는데 있어 가이드라인을 사용하기로 했다면 이 사람 역시 시간이 부족한 사람일 것이다.

그런데 패스트 푸드를 매일 먹으면 어떻게 되는가. 

 

그것에 길들여진다.  게다가 주문이 들어가고 바로 도착하지 않는 식품(결과물)에 대해 내성이 약해질 것이다. 그 결과 패스트푸드만 취할 수 있는 사람이 될 가능성 또한 높아진다.

물론 패스트 푸드들 사이에서도 레벨이 있다. 어떤 것은 패스트 하지도 않고, 어떤 것은 소기의 목적을 채워주지 못하기도 한다. (배가 부르지 않다거나) 가끔은 사이드 이펙트를 동반하기까지 한다. (좋은 재료를 쓰지 못해 구토나 설사를 한다거나) 그래서 사람들은 상대적으로 좋은 패스트푸드를 찾거나 언젠가부터 패스트푸드를 포기하게 된다. 

 

가이드라인이 나쁘다는 말을 하는 것이 아니다. 역시 패스트푸드 또한 나쁘지 않다. 이 둘은 비슷한 속성을 공유하고 있다는 것을 인지하는 게 중요하다는 것이다.

Categories
Uncategorized

공부 전략 몇가지

학습한 기술을 계속 사용하기만 하는 것은 마치 우리가 꾸준한 운동을 하는 것처럼, 그저 훈련이다. 학습이 아니다.  반면 새로운 기술서를 읽고 이해하고 깨달음을 얻은 것은 그저 지적 유희를 즐겼을 뿐이지 공부한 것이 아니다. 매일 아침 뉴스를 보는 것 처럼.

 

 새로운 것을 공부했으면 실생활에 바로 써먹어야된다. 물론 그것은 위험하다. 하지만 위험을 감수하지 않고 얻을 수 있는 것은 극히 드물다. 언젠가 써먹을 날이 올꺼야- 하고 직접적인 동기 없이 공부만하고 무능하게 완벽주의에 빠져 훈련하지 않는다면 에빙하우스의 망각곡선에 의해 조용히 소멸될 것이다. 만약 불행하게도 그 내용을 공부했다는 사실만 기억한다면, 제대로 기술을 사용할 수 없는 자신을 자각하게 되어 자신감이 떨어지고 도파민 분비는 어디에서도 일어나지 않게 되어 결국 악순환이 시작될 것이다. 

 

그러면 공부를 하기 위해서, 대단히 효율적이지만 조금은 비윤리적이고 많은 스트레스를 동반하는 

 

(1) 문제가 나를 찾아옴. 

(2) 해결책을 생각해봄.

(3) 현재 가진 기술을 사용하여 해결하는 것이 끔찍함.

(4) 기술을 증진시킬 방안을 모색하여 새 기술을 찾아냄.

(5) time pressure를 주기 위해 주위 사람들에게는 ‘나 원래 이 새 기술 쓸 줄 앎’ 이라고 뻥침. 

(6) 신용도를 높이기 위해 밤을 패며 홀로 외롭게 훈련함.

(7) 프로젝트 완료.

(8) 스킬 레벨업 & 골드 득템. 

 

전략을 쓸 것인가. 아니면 

 

(1) 평소에 증진시키고 싶었던 (하지만 꼭 필요하지는 않은) 기술들을 나열해 봄.

(2) 하나를 선택함.

(3) 공부한다.

(4-1) 힘들어지거나 바쁜 일이 하나 생김.

(4-2) 이 기술을 선택한 이유보다 기술 공부/훈련에 대한 고통이 커지는 시점이 도래.

(5) 포기.

(6) 잠시 우울증에 빠진다. 

(7) 다시 (1)번으로.

 

또는 자연스러운 전략인

 

(1) 논다.

(2) 우연히 흥미있는 것 발견.

(3) 공부한다.

(4) 흥미가 떨어졌다.

(5) 다시 (1)번으로.

 

을 쓸 것인가.

 

첫번째 전략은 소심하거나 남에게 피해를 주는 것을 극도로 혐오하는 사람일 경우 소용없다. 왜냐하면 그는 이 전략을 선택할 수 없기도 하지만, 선택했다 할지라도 프로젝트를 끝내는데 급급하여 공부를 뒷전으로 내던져버리기 쉽상이기 때문이다. 하지만 이 전략을 선택해본 사람은 알 것이다. 지금 원래 갖고 있던 기술들을 활용하여 당장 일을 처리하지 않더라도 세상은 무너지지 않고, 2-3일 여유를 갖고 공부한 다음 그 기술을 사용하면 훨씬 더 빨리 끝나고 고객도 좋아하고 나도 좋다는 것을. 나는 이 전략을 종종 사용하는 편인데, 흰머리가 자꾸 늘어나는 단점을 제외한다면 아주 좋아하는 편이다. 대신 문제가 나를 찾아오는 빈도가 높지 않다는 것이 단점. 

 

두번째 전략은 내가 종종 사용해보지만 매번 실패하는 것이다. (4-1) 힘들어지거나 바쁜 일이 꼭 생기기 때문이다. 하지만 어려서부터 공부를 게을리하지 않아 공부가 체질인 사람이라면 성공할 것이다. 이런 사람들은 실전연습을 게을리하는 것만 조심하면 된다. 

 

세번째 전략은 내가 가장 많이 사용하는 것이다. 이 전략의 장점은 다량의 도파민 분비 덕에 지칠줄을 모르게 된다는 것이 가장 좋다. 바쁜 일이 생겨봐야 바쁜 일을 미루게 되는 장점마저 가지고 있다. 하지만 흥미가 떨어지면 모든 프로세스가 invalidate 된다는 무시무시한 단점을 가지고 있다. (2)에서 중요한 것은 우연히 라는 것인데, 의도적으로 흥미를 강제하려고 한다면 흥미가 떨어질 확률이 대단히 높아지기 때문에 대단히 비효율적이다. 결국 ‘우연히 흥미 있는 것이 발견될‘ 확률이 적다는 것이 문제다. 하지만 주기적으로 서점에 가거나 다량의 RSS를 구독하고 있다면 이를 해결할 수 있다. 물론 내적 동기만큼 흥미가 높지는 않겠지만 이는 성격에 따라 (혹은 MBTI에 따라) 얼마든지 달라질 수 있는 것이니 언급하지 않겠다. 이 전략의 또 하나의 단점이 있다면 공부하다가 힘들어졌을 때 ‘더 흥미로운 것으로 보이는 것‘이 나타날 수 있다는 것이다. 대부분의 경우 실제로 더 흥미로워서가 아니라 기존에 하던 것이 좀 힘들어져서 그런것뿐인데 번번히 착각한다.