프로그래밍 오리엔테이션

나에게 맞는 방법

저의 페이스북 담벼락에 올린 글을 그대로 옮겨왔습니다. 

문득 이런 생각이 들었다.

소프트웨어를 만들다보면 코드가 점점 복잡해져서 사람이 감당할 수 없는 상태에 곧 도달한다. 이 때 더 높은 복잡성에 도전하기 위해서는 복잡성을 낮추어야 하는데 소프트웨어 공학이라는 분야에서는 이런 것을 연구한다.

그런데 이것이 소프트웨어에서만의 문제는 아닐 것이다. 일상 속에서도 복잡도를 낮추는 행위 다시 말해서 '청소'는 영원히 풀리지 않은 골치거리다.

소프트웨어의 복잡도를 낮추는 활동과 일상의 청소를 '등가'로 놓고 청소의 관점으로 소프트웨어 복잡도를 바라보니 이런 생각이 들었다.

나는 청소의 3요소로
정리,
숨김,
버림을
꼽는데 그 중에 제일은 버림이라고 생각한다.

이를테면, 나는 대형 종량봉투에 물건을 보관한다. 그리고 봉투에 더 이상 손이 가지 않을 때 층동적으로 버린다. 결과적으로 살림이 별로 없기 때문에 체계적인 분류가 별로 필요없다. 오히려 분류를 잘 못하기 때문에 버리는 정책을 강력하게 시행하고 있을지도 모르겠다.

반면에 어떤 이는 버리지를 못하기 때문에 체계적인 분류를 만들어서 정리를 한다. 예술적 경지가 느껴지기도 한다.

물론, 어떤 사람은 더 이상 살림이 많아질 수 없을 정도까지 내버려두는 경우도 있다. 그렇다고 그게 꼭 나쁘다고 할 수는 없다. 일단 포화상태까지만 가면 더 이상 복잡해지는 않으니까. 소프트웨어에서는 포화상태가 존재하지 않는다는 것이 문제는 문제다.

이렇게 생각해보니 사람마다 청소에 대한 태도가 참 다르다. 그리고 그런 태도는 잘하고, 못하고의 문제라기 보다는 그 사람의 성향의 문제라고 할 수 있다.

지금까지 프로그래밍을 잘 하는 방법에 대한 많은 방법론들이 객체나 패키지와 같은 수단들을 활용에서 어떻게 이미 있는 코드를 잘 정리하고, 감출 것인가를 알려주고 있지만, 참으로 실행하기가 쉽지 않았다. 나는 잘 실천되지 않는 이 방법론들 때문에 적지 않게 좌절하곤 했다. 수련이 부족하다고 반성하기도 했고, 능력의 한계라며 의기소침하기도 했다.

청소에 대한 다양한 태도가 있다는 것을 인식한 이후부터는 어쩌면 그 방법이 나에게 맞지 않는 것이었기 때문이 아니었을까하는 생각을 하게 되었다. 또 청소에 대해서 자연스럽게 형성된 태도에서 나에게 맞는 개발방법의 단서를 찾을 수 있지 않을까하는 생각도 하게 되었다.

최근엔 오픈튜터리얼스의 이사회를 설득해서 기존의 기능을 대거 버리는 합의를 이끌어냈고, 사용자들에게 의견과 양해를 구하는 과정을 거쳤다. https://opentutorials.org/module/1588/13036 추가만 해봤지 버리는 것을 해본적이 없던 나에게 기존의 기능을 버린다는 것은 혁명적인 변화였다.

일상에서 가장 선호하는 청소 기법이 버림인데 개발에선 이걸 처음해본다는 것이 이상하다. 소프트웨어의 복잡도를 낮추기 위한 다양한 방법론들이 존재 하지만, 그 누구도 나에게 적합한 모델이 있을 수 있다고 말해주지는 않았다. 나에게 맞는 방식을 찾아봐야겠다.

댓글

댓글 본문
  1. 코딩두
    23.07.27
  2. 허공
    감사합니다!
  3. 돼지천재
    감사합니다.
  4. 제로스
    버림과 정리 사이
  5. ㅏㅏ
    버리는게 제일 힘든일 이라는 말이 있는데, 그 어려운 걸 잘 하는 성향이라고 하시니,,, 굉장히 소중한 것 아닌가 생각이 드네요 ^^
  6. JiYoung Choi
    버림의 미학.. 감사합니다.
  7. dufuqsls
    좋은 말 감사합니다.
  8. 푸른하늘
    버림의 미학
  9. nomad2gleam
    아무것도 못버리는 사람이라는 자기계발서 비스므리 한 교양서적을 읽을 기회가 있었는데요, 그 책을 읽으면서 동양고전 못지않은 통찰력을 느꼈던 기억이 있습니다. 또 우연히 역을 공부하다가 개개인의 성향에 따른 삶의 태도, 삶의 방식, (효율적이고 자기에게 더욱 즐거운 쪽의 측면에서)등을 고민하게 되기도 했고요..
    그런 생각이 나네요.
  10. 폭스킴
    저도 될 수 있으면 버리자는 주의인데, 가끔가다 이걸 왜 버렸지 하는 때가 있어요;;; 그러나 정작 필요한 때는 알 수 없을 뿐더러 막상 필요해서 찾으려고 하면 어딨는지 모르는 경우가 허다하다는게 함정~
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기