큐브 맞추기와 개발

아음 그놈의 미국 비자 때문에 신경을 하두써서 눈 및에 다크써클까지 생겼습니다. 에효.. 오늘은 힘들어서 잡담이나 간략하게…

얼마전 반디앤루이스에 갔다가 조그만 큐브를 발견하고 바로 질렀습니다. 3천원.

사용자 삽입 이미지
그림출처 : http://www.onhobby.com/shop/shopdetail.html?brandcode=009000000001&search=&sort=order

굉장히 귀엽습니다. 그리고 완전 조그맣기 때문에, 주머니에 넣고 다니면서 전철 이동중이거나 화장실 갈 때 가지고 가서 놀기 좋더군요. 맞추는 방법도 쉬워서 30분만 인터넷에 떠도는 매뉴얼대로 따라하면 맞출 수 있습니다. 공식이 한 개입니다. 그 공식만 외우고 돌리다 보면 맞게 되어있습니다. 문제는 도대체 내가 맞추긴 맞췄는데 어떻게 맞춰진 건지 모르겠다는 거죠.

개발도 마찬가지가 아닐까 생각해봤습니다. 예전 마소에 토비형(호칭 적응 중)이 기고하신 글 중에, 큐브 맞추기와 개발자의 학습 방법에 대해 언급하신 글이 있었는데 재밌게 읽었던 기억이 납니다. 자세히는 기억이 나지 않습니다만, 로우 레벨을 무시하고 상위 레벨만 학습해서는 위험하는 글이었던 것 같습니다. 조엘 온 소프트웨어(1탄)에도 이와 비슷한 내용이 있었습니다. 추상화 레벨이 높은 것을 가지고 학습한다고 해도 학습 비용이 떨어지진 않는 다는 것이었습니다. 제대로 알려면 로우 레벨에 대한 학습이 필수이기 때문이라는 내용이었죠.

간단하게 말하자면, 자바 기초나 OO 기초없이 스프링만 공부한다고 나아지진 않는다는 거죠.(이런 글을 적는 제 자신은 오늘 String에 있는 trim() 메소드가 상상한대로 동작하지 않아서 좀 기분이 안 좋습니다.) Anyway, 전 그냥 큐브 맞추다 보니 이런 생각이 들었습니다.

따라하기는 쉬운데

잘 하기는 어렵고

창의적으로 하는 건 정말 어렵군.

요즘 가장 즐겨하는 일을 꼽자면, 큐브 맞추기와 TDD입니다. 하루의 절반은 TDD 연습 하는데 소비합니다.(얼마 되지도 않았습니다.ㅋㅋ)

– 큐브는 위에서도 말씀드렸지만, 30분만 인터넷에 검색해서 따라하면 맞출 수 있습니다.
– TDD도 ‘테스트 주도 개발’책에 나와있는 예제 보면서 똑같이 코딩하는 건 쉽습니다.(책에 나온 코드가 잘못 나와있으면 그 일도 별로 쉽지는 않지만 말이죠.)

– 큐브를 매뉴얼 없이 맞추려면 공식을 달달 외워야 하고, 패턴도 알아 두어야 합니다.
– TDD도 책 없이 하려면, TDD 개발 주기(Task 메모 -> 테스트 작성 -> 테스트 -> 구현 -> 테스트 -> 리팩터링 -> 테스트 -> Task 완료), 테스트 케이스 작성법, private 멤버 테스트 방법(Junit Recipe에 있는데 아직 못 봤습니다.), 예외 발생 확인 방법등을 알아 두어야 합니다.

– 큐브를 한 번에 한 칸만 맞추는게 아니라, 한 번에 여러 칸을 동시에 맞추는 공식을 개발하려면 굉장히 창의 적이어야 하고, 큐브를 통달하고 있어야 합니다. 보통 실력으론 어림없겠죠.
– TDD를 잘 하려면, 지례짐작을 하면 안 됩니다. 오직 테스트와 리팩터링을 통해서 매~우 자연스럽게 패턴이 도출되고 설계가 정제되는 경지에 이르게 될텐데. 역시 보통 수련과 실력으론 어렵습니다. 리팩터링도 잘 알고 있어야 하고 패턴도 잘 알고 있어야 하지만, 거기에 얽매이지 않은 이상한 경지에 다다라야 가능할 것 같습니다.

참으로 비슷하지 않나요. 모든 일이 다 그런가;;

6 thoughts on “큐브 맞추기와 개발”

  1. 기선님 저도 나름대로 TDD흉내내고 있는데 사실은 JUnit으로 내맘대로
    테스트 클래스 만들고 있습니다. 그래도 효과를 체감하고 있으니 무지 좋습니다.
    하루 하루 고수가 되가는 기선님을 보면서 항상 감탄하고 있습니다. ^ ^

    1. 컥; 고수.. 왜 그러세요. 산골소년님 ㅠ.ㅠ 민망하라고 일부러 그러시는 거죠;;

      요새는 그냥 TDD 연습 중일 뿐입니다. 실제 개발에 적용하기 앞서서 학습중 이지요.

Leave a Reply

Your email address will not be published. Required fields are marked *