개요 및 감상

인용

소프트웨어 공학 대 컴퓨터 과학

  • 4장. 컴퓨터과학이 아닌 소프트웨어 공학. 65쪽.

과학자는 무엇이 진실인지, 만들어 놓은 가설을 어떻게 테스트할 수 있는지, 또 어떻게 하면 지식을 더 확장할 수 있는지 배운다. 엔지니어는 무엇이 진실인지, 어떤 것이 쓸모가 있는지, 받아들인 지식을 사용하여 실무상의 문제를 어떻게 해결하는지에 대해 배운다.

과학자는 항상 최근의 논문이나 연구에 촉각을 곤두세워야 한다. 그러나 엔지니어는 효율적이고 믿을 수 있다고 증명된 지식에 익숙해져야 한다.

만일 과학을 전공한다면 특정 전문 지식만을 연구해도 되지만, 공학을 전공한다면 현재 만드는 제품과 관계되는 모든 분야의 지식을 두루 익혀야 한다.

과학자는 주로 다른 과학자와 관련이 있기 때문에 그리 큰 통제를 받을 필요가 없지만, 엔지니어는 자신의 제품이 최종 소비자와 관련이 있기 때무네 반드시 많은 제약사항을 숙지해야 한다.

대학교에서 과학을 전공하는 학생은 연구를 계속할 준비를 하지만, 공학을 전공하는 학생은 학업을 마친 후 즉시 작업 현장에 투입될 준비를 한다.

그러나 대학교에서 컴퓨터 과학 학위를 수여 받은 학생들 대부분이 실세계의 문제를 풀어야만 하는 소프트웨어 개발에 관련된 직업을 얻고, 소수 학생만이 소프트웨어나 컴퓨터에 관련된 자신의 전공을 살릴 수 있는 대학원이나 연구소로 향한다. 이것은 컴퓨터과학을 전공한 학생들을 혼란스러운 환경으로 밀어넣는다. 그들은 공학이 아닌 컴퓨터 과학을 전공하였고, 통상 엔지니어가 하는 일을 공학적 마인드를 갖추지 않은 상태에서 바로 수행하여야 한다.

1968년에는 여러 지식들이 미숙한 상황이었다

  • 5장. 지식체계. 77쪽 요약.

  • 1962년 - 제대로 된 이진 탐색 알고리즘(binary search algorithm) 개발.
  • 1966년 - 코라도 봄(C. Böhm)과 자코피니(G. Jacopini)가 goto문 제거와 구조적 프로그래밍의 이론적 배경을 제시한 논문을 발표.
  • 1968년 - 에드가 다익스트라(Edgar Dijkstra)가 논문지 편집자에게 "GoTo statement Considered Harmful" 논문을 보냄.
    • 이 때에는 서브루틴 조차 새로운 아이디어였고, 프로그래머들은 이 방식이 과연 좋은가에 대해 논쟁을 벌이고 있었음.
  • 1974년 - 래리 콘스탄틴(Larry Constantine), 글렌포드 마이어스(Glenford Myers), 웨인 스티븐스(Wayne Stevens) 등이 구조적 설계에 대해 첫 논문 발표.
  • 1977년 - 톰 길(Tom Glib)이 소프트웨어 매트릭(metric)에 대한 책을 세계 최초로 출판.
  • 1979년 - 톰 드마르코(Tom DeMarco)가 소프트웨어 요구사항 분석에 관한 책을 세계 최초로 출판.

개발자의 프로젝트에 대한 충성심

  • 7장 고아 출신 특별 우대. 112쪽.

지난 기억을 되돌아 보면, 개발자가 아무리 자기 회사를 싫어하더라도, 프로젝트 중간에 회사를 나오는 경우는 드물었다. 다른 업계의 사람들이 보통 "나는 이 회사가 싫어. 나는 프로젝트가 한창 진행 중일 때까지 기다렸다 회사를 그만 둘 거야. 내가 얼마나 회사를 싫어하는지 보여줄 거라고!"라고 말하는 데 비해, 소프트웨어 개발자들은 "나는 이 회사가 싫어. 나는 이 프로젝트를 마친 다음 회사를 그만 둘 거야. 회사가 지금 어떤 사람을 떠나보내는 건지 확실히 보여줄 거라고!"라고 말한다.

NASA의 소프트웨어 개발 그룹

  • 14장. 프톨레마이오스식 논리. 189쪽.

NASA의 존슨 우주센터 내 우주왕복선 탑재 소프트웨어 개발 그룹도 역시 레벨 5를 달성했다. 이 조직에서는 소프트웨어 조직에서 흔히 볼 수 있는 피자박스나, 코카콜라 캔으로 만든 피라미드, 암벽등반 벽 같은 것들을 찾을 수 없다. 이 조직은 게임하는 것을 중요하게 여기는 게 아니라, 완벽한 소프트웨어를 만드는 것에 관심을 둔다. 이 조직의 업무는 흥미롭지만, 심신을 피로하게까지 만들지 않는다. 이 조직은 보통 8시에서 5시까지 일하고, 남성 주도인 업계 상황과는 달리 약 절반이 여성이다.

위와 같은 고효율적인 조직에서 퇴사한 사람들은 종종 다른 회사들이 얼마나 비효율적으로 일하는지 깨닫고는 쇼크를 받기도 한다. 더 나은 기회를 찾아 존슨 우주센터를 떠난 한 사람이 몇 달 만에 복귀한 일이 있었다. 그 사람이 새로 옮겼던 회사는 말로만 소프트웨어를 효율적으로 개발한다고 하고, 실제로는 일단 작성하고 고쳐보는 개발을 했다. 그 회사는 더 성숙한 작업 환경을 만들려고 하지 않으면서, 그와 같이 열악한 환경에서는 불가능한 생산성과 품질 수준을 이루려 하고 있었다.

  • 내가 생각하는 이상적인 개발 조직에 가까운 것 같다.
  • "게임하는 것을 중요하게 여기는 게 아니라, 완벽한 소프트웨어를 만드는 것에 관심을 둔다"는 부분이 마음에 와닿는다.
  • 성숙한 작업 환경을 조성하고 그로 인해 완벽한 소프트웨어의 개발을 꾀하는 것은 [[Conway-s-law]]{콘웨이의 법칙}과도 관련이 있는 것 같다.