요약
실용주의는 기존의 관념적이고, 형이상학적 사고를 부정하고,그 관념들이 실세계에 초래하는 결과가 유용하고 실용적인 실제들로 증명되었을 때만 의미가 있다라는 단초를 갖고 시작한다. 실제 프로젝트에서 이상적인 시스템을 구축할 수 있어야 그 유용성을 증명할 수 있는 것이다.

실용주의란 요구사항에 맞는, 시스템의 목적에 충실한 방법을 말한다. 실용주의에 맞는 개발을 하려면 다음의 방법론을 가져야 한다.

1. 자신의 능력에 충실한 방법
설계자는 아키텍처에 대한 거시적인 관점을 항상 유지해야 한다.

2. 개발 단계를 고려한 미시적 설계
두 쓰레드가 컨텍스트 스위칭을 하며 각자의 작업을 실행하듯이 양 관점을 주깆거으로 바꾸어 디자인하려는 습관을 기른다.

3. 모듈화 극대하기
소프트웨어 시스템에서 서브 시스템과 컴포넌트의 그룹핑을 통해 의미있는 분류 상태를 말한다.

4. 모듈화 인터페이스, 팀 나누기
변할 수 있는 인터페이스에 대해 변경을 위한 여지를 남겨두는 기법이 필요하다. 방법은 이런 부분의 인터페이스를 유연하고 다의적이며 느슨한 인터페이스로 구성함으로 가능하다.
변경을 염두로 한 유연하고 느슨한 다의적인 인터페이스를 정의한다.
자신이 할 수 있는 것과 할 수 없는 것을 냉정히 분석하여 자신이 할 수 있는 것을 확실히 잘 하는 지혜가 필요하다.

5. 거시와 미시 두가지 관점 갖기

6. 아키텍터를 반영한 거시적 설계
아키텍처 스타일을 따르기 위해 아키텍처 스타일을 숙지하고 적용할 부분을 잘 포착할 수 있어야 한다.
아키텍처 레벨에서 정의한 방법을 디자인레벨에서 재정의 한는 일이 없어야 한다. 잘못된 인터페이스의 설계로 모듈간의 불협한 소통은 곧 팀사이의 불협한 소통으로 이어진다. 그래서 모듈화를 잘해야 하며 모듈간의 인터페이스를 잘 정의해야 한다.

7. 모듈화와 공학적인 일정 추정, 관리
예상되는 기간 + a의 일정추정법을 사용한다. 노련한 개발자의 소양 중 하나는 일정 예측을 잘 하는 것이다.
조엘 온 소프트웨어에서는 모듈명, 작업내용, 우선순위, 최초 추정시간, 현재 진행시간, 경과시간, 남은 시간으로 구분한다.
안정된 프로젝트 관리와 자신의 생산성과 신뢰성을 확보하기 위해서이다.

8. 자신의 무지 인정하기
경험이 갖춰지기 전에 자존심이 강해지기 때문에, 데드라인을 지키지 못하는 일정을 잡아 억지로 납기일을 맞추다보니 기능이 제한되든가 품질이 떨어지는 소프트웨어가 만드는 경우가 빈번하다.
제작한 설계의 허점과 단점을 깨닫게 될 때, 적절한 자기 관용을 통해 어느 선으꼬 마무리를 짓고, 다음 기회에 더 괜찮은 소프트웨어를 설계하기 위해 노력하는 것이 유익하다.

9. 진화를 위한 방법
항상 자기 계발을 늦춰서는 안된다.

10. 진지전과 기동전
장기적인 계획이나 방향이 필요하다. 시대적인 트랜드나 개인적 호기심을 따라 두서없이 학습하다 보면 중심을 잃게 되고 균형 잡힌 지식형성을 효율적으로 못한다. 기술력을 만들기 위해서는 로드맵을 만드는 것이 좋고, 거시적인 비전을 갖고 비전에 으르는 과정의 사이마다 이정표를 세워 자신의 캐리어 패스를 구상해야 한다.

의지와 성실함의 성격이 중요하다.

11. 포교활동
새로운 기술을 배우면, 반드시 그 기술을 적용한 프로토타입 모델을 리뷰한다거거나 요점을 정리해서 메일을 돌리는 것만으로 새로운 반응을 얻을 수 있다.

12. 응집성과 결합성
역할과 의도에 따라 분류를 잘하고 방향성을 잡아야 한다. 자신의 주관적인 설계 의도가 시스템의 객관적인 설계 문제를 잘 해결하고 있는지 자주 평가 / 확인하는 습관이 필요하다.

13. 몸에 맞는 옷
무조건적인 패턴을 쓰는 것보다 원리 원칙은 알되, 현재 설계문제가 필요로 하는 용도를 분석할 수 있어야 한다. 용도가 정확히 맞아 떨어지는 모델을 말한다.

14. 다시 관념 속으로
자기 확인이 필요하다. 비판적으로 스스로를 확인하는 습관이 필요하다. 실용주의는 수동적인 수용을 거부한다. 계속해서 검증해야 하고, 비판해야 하며 확인해야 한다. 또한 새로운 것을 계속해서 찾아야 한다. 또한 새로운 것을 계속해서 찾아야 한다. 그래서, 실용주의 엔지니어는 부지런해야 한다.

Posted by '김용환'
,