The Woes of Programming
-"The Tar Pit", "Mythical Man-Month (Fred Brooks)" 중에서
첫번째로 우리는 완벽하게 수행해야 한다는 점이다. 컴퓨터는 이런 점에서 전설의 마법들과 유사하다. 만약 마법사가 주문을 제대로 외지 못하면 마법은 실패하게 된다. 인간이란 존재는 완벽함에는 익숙하지 않고, 인간의 활동 중에서 완벽함을 요하는 것은 극히 드물다. 완벽해야 한다는 요구 사항에 맞추는 것이 내 생각으로는 프로그래밍의 가장 힘든 부분이 아닐까 한다.
다음으로 다른 사람들이 프로그래머에게 목표를 주고, 리소스를 제공하며 정보를 제공한다는 점이다. 프로그래머는 그의 작업환경이나 심지어 목표마저도 자신이 컨트롤할 수 없다. 관리의 측면에서 보면 프로그래머의 권리는 그의 책임에 비해서 충분치 못하다. 그러나, 다른 분야에서도 일을 끝내는 사람들의 형식적인 권리는 그 책임에 비해서는 사실 적당치 않다. 실제로 실질적인 권리는 목표를 달성한 바로 그 힘에서 얻어진다.
다른 사람에 대한 의존은 특히 시스템 프로그래머에게 고통이 된다. 그는 다른 사람의 프로그램에 의존해야 한다. 그것들은 간혹 제대로 디자인되어 있지 않으며, 아주 형편없이 구현되어 있고, 불완전하게 배포되어 있고 거의 문서화되어 있지 않다. 그래서 그는 이상적인 세계에서라면 완전하고 사용할 수 있었어야 하는 것들을 시간을 들여서 연구하고 고치게 된다.
다음으로, 커다란 컨셉을 디자인하는 것은 재미있는데, 작은 버그를 찾는 것은 단지 일일뿐이라는 사실이다. 언제나 창조적인 활동의 뒤에는 따분하고 고통스러운 노동이 따라오는데, 프로그래밍도 예외가 아니다.
또 다음으로는 프로그래머는 디버깅은 계속해서 수렴되는 성질을 갖고 있어서, 하나씩 처리할 때마다 노력이 두배씩 계속 늘어나는 방식의 접근을 계속 해야만 하는 그런 작업이라는 것을 알게 된다는 것이다. 그래서 테스트는 계속 되고, 마지막의 가장 어려운 버그는 처음 것을 찾을 때보다 더 많은 시간이 들게 된다.
마지막으로 프로그래머가 오랫동안 열심히 만든 소프트웨어가 완성 직전에 보니 너무 낡아보인다라는 점이다. 이미 동료나 경쟁자들은 새롭고 더 나은 아이디어를 쫓아가고 있다. 이미 프로그래머가 가진 생각에서 뻗어나온 대체물들은 생각의 차원을 넘어서 만들어지고 있는 중인 것이다.
실제로는 그렇지 않다. 새롭고 더 나은 프로덕트들은 대체로 프로그래머가 자신의 것을 완성했을 때에는 절대로 나오지 못한다. 그냥 아직은 단지 얘기되고 있을 뿐이다. 그리고 만들려면 몇개월의 시간이 필요하다. 진짜 호랑이는 종이 호랑이와는 상대가 되지 않는다. 실제로 존재하고 있다는 것이 중요하다.
물론 우리가 뭔가를 만드는 기술적인 기반은 항상 진보하고 있다. 우리가 디자인을 마쳤을 때, 그것은 개념적으로만 본다면 이미 낡은 것이다. 그러나 실제 프로덕트의 구현은 실질적인 작업을 필요로 한다. 구현된 제품이 낡았는지의 여부는 실재화되지 않은 개념보다는 다른 존재하는 프로덕트들과 비교해야 한다. 현실의 문제에 대한 실질적인 솔루션을 가능한 스케줄과 사용 가능한 리소스로 찾아내는 것이 진정한 도전이며 임무이다.
-"The Tar Pit", "Mythical Man-Month (Fred Brooks)" 중에서
첫번째로 우리는 완벽하게 수행해야 한다는 점이다. 컴퓨터는 이런 점에서 전설의 마법들과 유사하다. 만약 마법사가 주문을 제대로 외지 못하면 마법은 실패하게 된다. 인간이란 존재는 완벽함에는 익숙하지 않고, 인간의 활동 중에서 완벽함을 요하는 것은 극히 드물다. 완벽해야 한다는 요구 사항에 맞추는 것이 내 생각으로는 프로그래밍의 가장 힘든 부분이 아닐까 한다.
다음으로 다른 사람들이 프로그래머에게 목표를 주고, 리소스를 제공하며 정보를 제공한다는 점이다. 프로그래머는 그의 작업환경이나 심지어 목표마저도 자신이 컨트롤할 수 없다. 관리의 측면에서 보면 프로그래머의 권리는 그의 책임에 비해서 충분치 못하다. 그러나, 다른 분야에서도 일을 끝내는 사람들의 형식적인 권리는 그 책임에 비해서는 사실 적당치 않다. 실제로 실질적인 권리는 목표를 달성한 바로 그 힘에서 얻어진다.
다른 사람에 대한 의존은 특히 시스템 프로그래머에게 고통이 된다. 그는 다른 사람의 프로그램에 의존해야 한다. 그것들은 간혹 제대로 디자인되어 있지 않으며, 아주 형편없이 구현되어 있고, 불완전하게 배포되어 있고 거의 문서화되어 있지 않다. 그래서 그는 이상적인 세계에서라면 완전하고 사용할 수 있었어야 하는 것들을 시간을 들여서 연구하고 고치게 된다.
다음으로, 커다란 컨셉을 디자인하는 것은 재미있는데, 작은 버그를 찾는 것은 단지 일일뿐이라는 사실이다. 언제나 창조적인 활동의 뒤에는 따분하고 고통스러운 노동이 따라오는데, 프로그래밍도 예외가 아니다.
또 다음으로는 프로그래머는 디버깅은 계속해서 수렴되는 성질을 갖고 있어서, 하나씩 처리할 때마다 노력이 두배씩 계속 늘어나는 방식의 접근을 계속 해야만 하는 그런 작업이라는 것을 알게 된다는 것이다. 그래서 테스트는 계속 되고, 마지막의 가장 어려운 버그는 처음 것을 찾을 때보다 더 많은 시간이 들게 된다.
마지막으로 프로그래머가 오랫동안 열심히 만든 소프트웨어가 완성 직전에 보니 너무 낡아보인다라는 점이다. 이미 동료나 경쟁자들은 새롭고 더 나은 아이디어를 쫓아가고 있다. 이미 프로그래머가 가진 생각에서 뻗어나온 대체물들은 생각의 차원을 넘어서 만들어지고 있는 중인 것이다.
실제로는 그렇지 않다. 새롭고 더 나은 프로덕트들은 대체로 프로그래머가 자신의 것을 완성했을 때에는 절대로 나오지 못한다. 그냥 아직은 단지 얘기되고 있을 뿐이다. 그리고 만들려면 몇개월의 시간이 필요하다. 진짜 호랑이는 종이 호랑이와는 상대가 되지 않는다. 실제로 존재하고 있다는 것이 중요하다.
물론 우리가 뭔가를 만드는 기술적인 기반은 항상 진보하고 있다. 우리가 디자인을 마쳤을 때, 그것은 개념적으로만 본다면 이미 낡은 것이다. 그러나 실제 프로덕트의 구현은 실질적인 작업을 필요로 한다. 구현된 제품이 낡았는지의 여부는 실재화되지 않은 개념보다는 다른 존재하는 프로덕트들과 비교해야 한다. 현실의 문제에 대한 실질적인 솔루션을 가능한 스케줄과 사용 가능한 리소스로 찾아내는 것이 진정한 도전이며 임무이다.
'Software Engineering' 카테고리의 다른 글
[Article]MSF(Microsoft Solutions Framework) Foundational Principles (0) | 2006.04.08 |
---|---|
[번역]프로그래밍의 즐거움 (0) | 2006.03.06 |
[Article]타당하지 않은 입력으로부터 프로그램을 보호하기 (0) | 2006.03.06 |
[번역]The Mythical Man-Month (0) | 2006.03.06 |
[Article]소프트웨어 개발 프로젝트 생존 테스트 (0) | 2006.03.05 |