* 더 나은 소프트웨어 프로젝트 수행방법을 모색 (2001년 2월 17명 유타주의 스키 리조트)


- 익스트림 프로그래밍, 스크럼, 동적 시스템 개발 모델 (Dynamic System Development Model) 적응형 소프트웨어 개발 크리스탈, 피처 드리븐 개발, 실용주의 프로그래밍과 같은 방법론과 테크닉들이 발표되었다

  > Kent Beck (켄트 벡)

  > Mike Beedle (마이크 비들)

  > Arie van Bennekum (아리 반 베네컴)

  > Alistair Cockburn (알리스 테어 콕번)

  > Ward Cunningham (워드 커닝햄)

  > Martin Fowler (마틴 파울러)

  > James Grenning (제임스 그레닝)

  > Jim Highsmith (짐 하이스미스)

  > Andrew Hunt (앤드류 헌트)

  > Ron Jeffries (론 제프리스)

  > Jon Kern (존 컨)

  > Brian Marick (브라이언 매릭)

  > Robert C. Martin (로버트 C. 마틴)

  > Steve Mellor (스티브 멜러)

  > Ken Schwaber (켄 슈화버)

  > Jeff Sutherland (제프 서덜랜드)

  > Dave Thomas (데이브 토마스)



* 절차적인 관점에서 애자일 원칙


- 애자일 원칙은 아래 내용을 중점적으로 다룬다

   > 회의 방식

   > 구성원 각각의 역할

   > 요구사항 파악 방법

   > 작업 진척 속도 파악 방법

   > 점진적/반복적으로일할 때 취하는 방식

   > 진행 상황을 개발팀 밖의 관계자(고객, 영업 등)에게 전달하는 방식

   > 비즈니스 피드백 방식


- 이를 통해, 올바른 목표를 향해 진행 중인지 확인할 수 있다



* 기술적인 관점에서의 애자일 원칙


- 개발, 확장, 유지보수, 제품을 출시하면서 겪는 어려움들에 대해 특정한 기술적 관례나 기술 자체를 매우 구체적으로 가이드 한다

   > 테스트 주도 개발

   > 페어 프로그래밍

   > 지속적인 통합

   > 단순한 디자인 원칙 등


- 목표한 것을 올바르게실행하고 있는지에 대해 안심할 수 있게 한다



* 애자일 매니페스토

- 우리는 스스로 소프트웨어를 개발하고, 다른 사람들이 개발하는것을 도와주면서 더 나은 소프트웨어 개발 방법들을 찾고 있다. 이 과정에서 우리는 다음과 같은 가치를 중요하게 생각한다

   > 절차와 도구보다는 개성과 화합을

   > 방대한 문서 작업보다는 동작하는 소프트웨어를

   > 계약 조건에 대한 협상보다는 고객과의 협력을

   > 계획을 따르는 것을 넘어서서 변화에 대처하는 것을

더 가치있게 여긴다


- 좌측의 사항도 가치가 있음을 인정하지만 우리는 우측의 사항에 더 높은 가치를 둔다는 것이다



* 애자일 매니페스토의원칙들


1. 가치있는 소프트웨어를 일찍, 지속적으로전달하여 고객을 만족시키는 것을 최우선으로한다

2. 개발의 막바지 단계이더라도 고객의 요구사항 변경을 환영한다. 애자일 프로세스들은 변화를 활용하여 고객의 경쟁력을 높이는데 기여한다

3. 동작하는 소프트웨어를 몇 주에서 몇 개월 단위로 자주 전달한다. 가능한 한 전달주기를 짧게 한다

4. 비즈니스 담당자들은 프로젝트 기간 내내 매일 개발자와 함께 일한다

5. 프로젝트는 동기가 부여된 개인들로구성한다. 그들이 필요로 하는 환경과 자원을제공하고 프로젝트가 완료될 때까지 믿고 맡긴다

6. 개발팀 내에서 정보를 전달하는 가장 효율적이고 효과적인 방법은 얼굴을 마주보고 대화하는 것이다

7. 프로젝트의 진척도를 가늠하는 가장 기본 요소는 동작하는 소프트웨어이다

8. 애자일 프로세스들은 지속 가능한 개발을 이끈다. 투자자, 개발자, 사용자들은 일정한 개발 속도를 계속 수요할 수 있어야 한다

9. 기술적인 탁월함과 좋은 설계에 대한 지속적인 관심은 기민함을 높인다

10. 단순함, 즉 하지 않아도 될 일은 최대한 하지 않아야 한다

11. 최선의 아키텍처, 요구사항, 설계는 스스로 조직화되는 팀에서 나온다

12. 개발팀은 정기적으로 일을 어떻게 하는 것이 더 효과적인지 되돌아보고 그에 맞추어 일하는 방식을 조율하고 바로 잡는다



* 애자일과 장인정신은 상호 보완적이다


- 소프트웨어 장인장인 정신은 소프트웨어 개발에 있어서의 프로페셔널리즘이다. 개발자로서 일을 더 잘하기 위해 가슴에 품는 일종의 이념이다



* '소프트웨어 장인정신'은


- 마스터가 되어가는 긴 여정이다. 소프트웨어 개발자 스스로가 선택한 커리어에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다

   > 즉, 소프트웨어 개발의 프로페셔널리즘에 대한 것이다



* 소프트웨어 장인정신 매니페스토

- 소프트웨어 장인을 열망하는 우리는, 스스로의 기술을 연마하고, 다른 사람들이 기술을 배울 수 있도록 도움으로써 프로페셔널 소프트웨어 개발의 수준을 높인다. 이러한 일을 하는 과정에서 우리는 다음과 같은 가치들을 추구한다.


  > 동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨있게 만들어진 작품을,

  > 변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을

  > 개별적으로 협력하는 것뿐만 아니라, 프로페셔널 커뮤니티 조성하는 것을,

  > 고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를,


- 이 왼쪽의 항목들을 추구하는 과정에서, 오른쪽 항목들이 꼭 필요함을 의미한다.

  >부제 : '프로페셔널 소프트웨어 개발의 수준을 높인다'



* 내 커리어의 주인은 누구인가?


- 소프트웨어 프로페셔널로 대우받기를 원한다면 프로처럼 행동해야 한다. 이는 스스로를 발전시키는 데 자신의 돈과 시간을 들여야 한다는 것이다. 나자신이 커리어의 주체로 언제, 무엇을 배울지를 스스로 결정해야 한다.


- 배움과 훈련이 멈추는 순간 우리의 커리어도 멈춰버린다. 시간이 없다는 말은 더 이상 변명이 될 수 없다. 우리는 항상 같은 시간이 주어지는데, 차이점은 그 시간을 어떻게 쓰느냐일 뿐이다.


- 커리어의 다음 여정을 어디로 해야할 지 모른다면

  > 익숙하고 편한 것에서 벗어나 새로운 것을 공부하고 기술적 지식을 확장한다.

  > 지역 커뮤니티에 정기적으로 출석하건 행사에 참여하기

  > 다른 개발자, 비즈니스맨들과 교류하기

  > 새롭게 배운 것, 지금 하고 있는 것들에 대해 블로깅하기

  > 오픈 소스 프로젝트에 참여하기

  > 프로젝트를 만들고 공개하기

  > 콘퍼런스에 참석하기

  > 콘퍼런스에서 연사로 나서기



* 성공적인 커리어를 위해


- 소프트웨어 장인은 항상 자율성, 통달, 목적의식을 따라 일할 곳을 선택한다. 이러한것들은 커리어를 오랫동안 지속하기 위해 핵심적이다

  > 자율성 : 우리가 무엇을, 어떻게, 언제할지 통제할 수 있는 상태를 뜻한다. 제대로 된 애자일 개발환경이라면 이러한 것들이 보장되어야 한다

  > 통달 : 더 나은 프로페셔널, 더 나은 인간이 되기 위해 계속 배우고 진화하는 것을 뜻한다

  > 목적의식 : 지금 하고 있는 일이 중요하고 무언가를 더 나아지게 하고 있다는 느끼는 것을 뜻한다. 아무런 이해없이 시키는대로 일하는 것의 

                   반대 개념이다



* 변화를 시작하는 방법


- 배움의 문화 만들기

  > 북 클럽에 가입하기

  > 테크 런치 진행하기

  > 그룹 토론회에 참여하기

  > 업무 교환하기

  > 일정 기간만 업무 교환하기

  > 그룹 코드 리뷰하기

  > 내부 학습 모임 만들기

  > 외부 기술 커뮤니티와교류하기


- 아무도 참여하려 하지 않는다면

  > 모범을 보여라

  > 관심을 보이는 사람들에게 집중하라

  > 강제하지 마라

  > 모두를 변화시키려 들지마라

  > 모임에 대한 약속을 제때하라

  > 허락을 구하지 마라

  > 투덜대지마라

  > 리듬을 만들라


- 기술적 변화를 시작하는 방법

  > 신뢰를 쌓으라

  > 전문성을 확보하라

  > 모범들을 보여 사람들을 이글라

  > 신중하게 싸울 곳을 정하라

  > 점진적으로 반복, 관찰, 수용하라



* 소프트웨어 장인은


- 고객에게 가치를 전달하고 자신을 둘러싼 사람들에게 영감을 불어 넣기 위해 모든 노력을 아끼지 않는다

- 방향을 제시하고 변화를 이끄는 데 두려움이 없다

- 항상 최선을 추구하는 것은 내재된 본능과도 같다

- 기술적인 역량뿐만 아니라 주니어 개발자들을 위한 롤 모델 역할도 할 수 있어야 한다

- 정직하고 투명해지기를 두려워하지 않는다

- 사람들이 듣고 싶어하는 말이 아니라 진심을 말하며 자신의 행동에 책임을 지고 프로젝트를 위해 최선이라면 싸우기를 주저하지 않는다.



* 장인의 길 (열정)


- 소프트웨어 장인은 소프트웨어 개발과 자신의 직무에 열정적이다

- 문제를 단순한 방법으로푸는 데 열정적이다

- 배우고 가르치고 공유하는데에도 열정적이다

- 소프트웨어 산업이 진화하도록 돕는 데도 열정적이다

- 그들의 코드를 공유하고, 초보 개발자들을 멘토링하고, 블로그/책/동영상/대화 등을 통해 그들의 경험을 공유하는 데도 열심이다

- 기술 커뮤니티 활동에도 열정적이다

- 뿐만 아니라 겸손하다. 항상 더나은 개발자에게 무언가를 배울 자세가 되어 있고, 경험이 적은 개발자들을 돕기를 주저하지 않는다



* 기타


- 코드를 잘 작성하는 것은 소프트웨어 프로페셔널이 가져야 할 최소한의 요건이다


- 많은기업들이 표면적으로는 애자일을 도입하려고 했지만 그 노력이 애자일스럽지 못했다

  > 기업들은 절차에만 집중하고 사람들에대한 기술적인 훈련에는 관심을 크게 두지 않는다

  > 여기에는 '개발자들은 이미 훌륭하고 절차만 개선하면 된다'는 프로답지 않은 단편적인 가정이 깔려있다

  > 스크럼을 도입하고, 스탠딩업 미팅을 하고, 백로그 관리툴을 사용하는 것 만으로 갑자기 소프트웨어의 품질이 더 좋아지거나 개발자들의 역량이 

     더 높아질 수는 없다. 애자일의 모든 절차들에는 기술적 탁월함이 전제되어 있다

  > 절차에만 집중하고 소프트웨어 개발을 공장 라인처럼 취급하면, 그저 시키는 일만 하고 출퇴근하는 공장 노동자와 다를 바 없는 개발자들만 

     생긴다


- 프로페셔널이 생각하기에 올바르지 않은 결정을 고객이 밀어붙이려 한다면 당연하게도 프로페셔널을 그것을 거부해야 한다


- 새로운 기술과 실행 관례를 배우는 데 열정적이고 마음이 열린 개발자를 채용하는 것을 고려해야 한다


- 기술이 퇴보한 사람들은 현재의 급여 수준과 생활 안정을 유지할 수 있는 다른 직장을 찾을 수 없어 근심하게 된다. 직설적으로 말하면 

  역량이 부족한 사람들만이 일자리 걱정을 한다. 소프트웨어 장인은 직업을 잃는것에 대해 걱정하지 않는다. 그들의 커리어가 긴 여정이며, 

  어떤 종착지에 도달하는 것보다 그 여정 자체가 훨씬 더 중요함을 알고 있다



* 소프트웨어 장인 웹 페이지


   - http://manifesto.softwarecraftsmanship.org/


+ Recent posts