2017.08.11

블로그 | 좋은 소프트웨어 개발자 선언문

Andrew C. Oliver | InfoWorld
소프트웨어 개발이란 어떤 APIs를 호출하고 기본 구문을 알고 있는지를 넘어서는 작업이다. 애플리케이션 개발의 실제 모습은 아래와 같다.



제임스 다모어와 그의 '구글 선언문'(The Google Manifesto)에 대한 글을 이미 많이 쓰였고 앞으로도 많이 쓰일 것이다. 다모어의 장광한 논설은 이미 과거에 연구되고 반박된 재활용 쓰레기에 가깝다. 역사속에서 그의 주장은 데이터에 의해 반박된다.

다모어가 보여주는 도덕적 혼란과 별개로 그는 또 공학을 이해하는 것처럼 보이지도 않는다. 과거 구글 직원이었던 요나탄 준거는 다모어의 선언문에 대해 훌륭히 반박하기도 했다. 준거가 맞다. 다모어는 훌륭한 엔지니어도, 탁월한 소프트웨어 개발자도 아니다. 소프트웨어 개발은 호출할 APIs를 알거나 기본 구문을 아는 것 이상의 작업이다.

그렇다면 훌륭한 소프트웨어 개발자를 만드는 것은 무엇일까? 여기 우리가 참고해야 할 선언문이 있다. 나는 이를 '좋은 소프트웨어 개발 선언문'(Good Software Development Manifesto)라고 부른다.

1. 데이터를 믿어라
스스로를 다른 어떤 사람보다 '더 나은 사람'이라고 여기거나 시스템이 제대로 동작한다고 믿고 싶을 수 있다. 그러나 이러한 생각을 뒷받침하는 데이터를 가질 필요가 있다. 무엇보다도 사실(또는 연구와 역사)가 스스로의 오류를 증명하면 이러한 생각을 기꺼이 포기할 수 있어야 한다.

즉, 코드 작동을 증명하는 테스트가 필요하며 코드의 정합성을 증명하는 데이터를 만들어내는 프로세서가 필요하다. 당신이 하는 모든 일은 당신이 더 옳은 결정을 내릴 수 있는 데이터를 만들어내고 있어야 한다. 그렇지 않다면 당신이 옳은 일을 하고 있는지 어떻게 알 수 있겠는가?

2. 소프트웨어 개발은 코딩 이상이다
편지 쓰기가 키보드에서 타이핑하는 분당 단어수나 어휘 또는 문법을 이해하는 작업 이상인 것처럼, 소프트웨어 개발 또한 코딩 이상이다. 소프트웨어 개발은 단순 작업의 조합이 아니다. 조율과 소통, 분석, 디자인, 테스트, 프로젝트 관리 등을 모두 아우르는 작업이다.

코딩도 중요하다. 엔진이 자동차에서 중요하지만 자동차에는 엔진만 필요하지 않다. 최고의 소프트웨어 개발자는 다른 역할과 관심사, 스트레스를 가진 타인에 대한 공감을 가지고 있어야 한다.

3. 코드는 타인과의 소통이다(사회적이어야 한다)
내가 처음 배운 언어는 8086 어셈블러였다. 마치 '금속'과 같은 느낌의 언어다. 만약 우리가 진정으로 '컴퓨터만을 프로그래밍'하는 것이라면 우리는 바이트코드를 작성해야 할 것이다. 그러나 우리는 '타협된' 언어로 소프트웨어를 개발하고 있다. 컴퓨터가 이해할수 있는 동시에 다른 이들이 이를 이해할 수 있도록 하기 위해서다.

즉 훌륭한 소프트웨어 개발이란 소통 프로세스다. 자신이 하는 작업을 타인이 이해하도록 하는 것이다. 당신의 작업은 다음 작업자가 이를 읽고 이해하도록 하는 것이다. 이를 위한 최고의 방안은 다시 말하지만 '공감'이다.

4. 좋은 절차가 중요하다
콘웨이의 법칙(Conway’s law)은 당신의 소프트웨어가 당신의 팀 및 팀 내 소통 구조를 반영한다고 예언했다. 비행기 이륙을 생각해보자. 여기에는 조종사와 부조종사, 승무원, 항공 교통 관제사 사이에 구조화된 대화법이 있다. 이를 통해 모든 사람이 중요한 문제를 검토하고 함께 이해할 수 있다. "날개가 부착돼 있습니다?", "확인", "활주로에 다른 비행기가 있습니까?", "이륙을 위해 개방됐음."

5. '지위'가 아닌 결과로 스스로를 증명하라
최악의 개발 조직은 과하게 위계적이거나 너무 많은 상사가 존재한다.관리자가 됨으로써 지위에 대한 욕망을 반영하곤 한다.

'직위'가 아닌 '역할'을 생각해보자. 최상의 조직은 성과를 실제로 만들어내는 것을 우선시하는 조직이다. (이러한 인식은 일반적으로 간식을 가져온 사람이 정직할 때 시작된다.)

6. 모든 이는 모든 이로부터 배울 수 있다
만약 타인의 인종, 성별 등이 누군가의 역량을 판단하기에 좋은 요인이라고 믿는다면, 이는 소프트웨어 개발자로서 스스로의 발전 가능성을 제한하는 실수다.

7. 모든 가정을 테스트하라 - 테스트 이후 변경할 마음가짐을 가져라
젊은 개발자가 조언을 구해올 때 늘 하는 말이 있다. 자신이 옮음을 증명하지 말고 자신이 틀렸음을 입증하라는 말이다. 자신이 옮음을 입증하려 할 때의 태도는 그 반대의 경우와 같아야 한다.

논리적인 이론이라면 자신이 틀렸음 또한 증명할 수 있어야 한다. 만약 그렇지 못 하다면 좋은 이론이 아니다. 자신이 틀린 것을 증명할 수 없음을 확인한 이후에 옮음을 증명하려 시도하라. '데이터를 믿어라'와 비슷한 생각이지만 데이터 뿐 아니라 이를 사용하는 방법에 대한 이야기다. ciokr@idg.co.kr
2017.08.11

블로그 | 좋은 소프트웨어 개발자 선언문

Andrew C. Oliver | InfoWorld
소프트웨어 개발이란 어떤 APIs를 호출하고 기본 구문을 알고 있는지를 넘어서는 작업이다. 애플리케이션 개발의 실제 모습은 아래와 같다.



제임스 다모어와 그의 '구글 선언문'(The Google Manifesto)에 대한 글을 이미 많이 쓰였고 앞으로도 많이 쓰일 것이다. 다모어의 장광한 논설은 이미 과거에 연구되고 반박된 재활용 쓰레기에 가깝다. 역사속에서 그의 주장은 데이터에 의해 반박된다.

다모어가 보여주는 도덕적 혼란과 별개로 그는 또 공학을 이해하는 것처럼 보이지도 않는다. 과거 구글 직원이었던 요나탄 준거는 다모어의 선언문에 대해 훌륭히 반박하기도 했다. 준거가 맞다. 다모어는 훌륭한 엔지니어도, 탁월한 소프트웨어 개발자도 아니다. 소프트웨어 개발은 호출할 APIs를 알거나 기본 구문을 아는 것 이상의 작업이다.

그렇다면 훌륭한 소프트웨어 개발자를 만드는 것은 무엇일까? 여기 우리가 참고해야 할 선언문이 있다. 나는 이를 '좋은 소프트웨어 개발 선언문'(Good Software Development Manifesto)라고 부른다.

1. 데이터를 믿어라
스스로를 다른 어떤 사람보다 '더 나은 사람'이라고 여기거나 시스템이 제대로 동작한다고 믿고 싶을 수 있다. 그러나 이러한 생각을 뒷받침하는 데이터를 가질 필요가 있다. 무엇보다도 사실(또는 연구와 역사)가 스스로의 오류를 증명하면 이러한 생각을 기꺼이 포기할 수 있어야 한다.

즉, 코드 작동을 증명하는 테스트가 필요하며 코드의 정합성을 증명하는 데이터를 만들어내는 프로세서가 필요하다. 당신이 하는 모든 일은 당신이 더 옳은 결정을 내릴 수 있는 데이터를 만들어내고 있어야 한다. 그렇지 않다면 당신이 옳은 일을 하고 있는지 어떻게 알 수 있겠는가?

2. 소프트웨어 개발은 코딩 이상이다
편지 쓰기가 키보드에서 타이핑하는 분당 단어수나 어휘 또는 문법을 이해하는 작업 이상인 것처럼, 소프트웨어 개발 또한 코딩 이상이다. 소프트웨어 개발은 단순 작업의 조합이 아니다. 조율과 소통, 분석, 디자인, 테스트, 프로젝트 관리 등을 모두 아우르는 작업이다.

코딩도 중요하다. 엔진이 자동차에서 중요하지만 자동차에는 엔진만 필요하지 않다. 최고의 소프트웨어 개발자는 다른 역할과 관심사, 스트레스를 가진 타인에 대한 공감을 가지고 있어야 한다.

3. 코드는 타인과의 소통이다(사회적이어야 한다)
내가 처음 배운 언어는 8086 어셈블러였다. 마치 '금속'과 같은 느낌의 언어다. 만약 우리가 진정으로 '컴퓨터만을 프로그래밍'하는 것이라면 우리는 바이트코드를 작성해야 할 것이다. 그러나 우리는 '타협된' 언어로 소프트웨어를 개발하고 있다. 컴퓨터가 이해할수 있는 동시에 다른 이들이 이를 이해할 수 있도록 하기 위해서다.

즉 훌륭한 소프트웨어 개발이란 소통 프로세스다. 자신이 하는 작업을 타인이 이해하도록 하는 것이다. 당신의 작업은 다음 작업자가 이를 읽고 이해하도록 하는 것이다. 이를 위한 최고의 방안은 다시 말하지만 '공감'이다.

4. 좋은 절차가 중요하다
콘웨이의 법칙(Conway’s law)은 당신의 소프트웨어가 당신의 팀 및 팀 내 소통 구조를 반영한다고 예언했다. 비행기 이륙을 생각해보자. 여기에는 조종사와 부조종사, 승무원, 항공 교통 관제사 사이에 구조화된 대화법이 있다. 이를 통해 모든 사람이 중요한 문제를 검토하고 함께 이해할 수 있다. "날개가 부착돼 있습니다?", "확인", "활주로에 다른 비행기가 있습니까?", "이륙을 위해 개방됐음."

5. '지위'가 아닌 결과로 스스로를 증명하라
최악의 개발 조직은 과하게 위계적이거나 너무 많은 상사가 존재한다.관리자가 됨으로써 지위에 대한 욕망을 반영하곤 한다.

'직위'가 아닌 '역할'을 생각해보자. 최상의 조직은 성과를 실제로 만들어내는 것을 우선시하는 조직이다. (이러한 인식은 일반적으로 간식을 가져온 사람이 정직할 때 시작된다.)

6. 모든 이는 모든 이로부터 배울 수 있다
만약 타인의 인종, 성별 등이 누군가의 역량을 판단하기에 좋은 요인이라고 믿는다면, 이는 소프트웨어 개발자로서 스스로의 발전 가능성을 제한하는 실수다.

7. 모든 가정을 테스트하라 - 테스트 이후 변경할 마음가짐을 가져라
젊은 개발자가 조언을 구해올 때 늘 하는 말이 있다. 자신이 옮음을 증명하지 말고 자신이 틀렸음을 입증하라는 말이다. 자신이 옮음을 입증하려 할 때의 태도는 그 반대의 경우와 같아야 한다.

논리적인 이론이라면 자신이 틀렸음 또한 증명할 수 있어야 한다. 만약 그렇지 못 하다면 좋은 이론이 아니다. 자신이 틀린 것을 증명할 수 없음을 확인한 이후에 옮음을 증명하려 시도하라. '데이터를 믿어라'와 비슷한 생각이지만 데이터 뿐 아니라 이를 사용하는 방법에 대한 이야기다. ciokr@idg.co.kr
X