2017/02/15 - [CS/ML] - ML 101 : weka practical exercise / 의사결정트리 (1)



 Weka 를 이용해 소스 코드를 생성하고 난 후 해당 코드를 살펴보면, Visualize 를 통해 살펴본 의사 결정 트리의 모양을 그대로 코드로 옮겨 왔음을 확인 하실 수 있습니다. 메소드 명이 임의의 문자로 만들어져 있어 읽기 어려우나, 메소드 내용으로 보았을 때, 최상위 root 부터 leaf 로의 if-else 의 집합임을 확인할 수 있습니다. 그럼 이 코드를 어떻게 활용해 볼 수 있을까요?


우선, 지난 글에서 다운 받으신 .arff 파일의 내용을 아래와 같이 바꾸어 줍니다. 

@data

end_rack,85,85,FALSE,?

end_rack,80,90,TRUE,?

cd_spec,83,86,FALSE,?

std_rack,70,96,FALSE,?

std_rack,68,80,FALSE,?

std_rack,65,70,TRUE,?

cd_spec,64,65,TRUE,?

end_rack,72,95,FALSE,?

end_rack,69,70,FALSE,?

std_rack,75,80,FALSE,?

end_rack,75,70,TRUE,?

cd_spec,72,90,TRUE,?

cd_spec,81,75,FALSE,?

std_rack,71,91,TRUE,?


이 테스트 데이터를 읽어와 분류기가 값에 맞게 분류하는지 알아 보도록 하겠습니다. 테스트 코드는 다음과 같습니다.

테스트 파일을 읽어들이고 인스턴스를 로딩하여 for 루프를 순환하며 classifyInstance() 메서드를 사용하여 값을 얻어 옵니다.



이번 경우에는 classifyInstance() 를 이용하여 실제 매출이 발생했는지 안 했는지를 확인할 수 있는 것 입니다. double 형을 반환된 결과 값은 attribute 의 인덱스를 상징 합니다. 즉, 첫번째 인덱스인 0 은 'yes' 이고 두번째 인덱스인 1 은 'no' 를 가르키게 됩니다.


실행한 결과 값을 확인해 보면,


0.0->yes

0.0->yes

1.0->no

1.0->no

1.0->no

0.0->yes

0.0->yes

0.0->yes

0.0->yes

1.0->no

0.0->yes

1.0->no

0.0->yes

0.0->yes 


와 같이 테스트 데이터를 보고 우리가 학습시킨 모델을 통해 매출 발생 여부를 확인할 수 있게 되었습니다. 이제 테스트 데이터만 형식에 맞게 확보 된다면 매장의 배치 모습만 보고도 매출이 발생할지 안할지를 예측할 수 있게 된 것입니다. :) 



  • 누가 코드를 이따위로 짠 거야? 나 일 못 해!!!

    다른 사람의 코드를 작업하다가 좌절한 경험이 있는가? 서비스가 성장하면 혼자 작업하던 코드도 여러 명이 작업해야 하고, 코드 규모가 커질수록 쉽게 고칠 수 없는 코드로 변하고 만다. 새로운 기능을 개발하는 시간보다 기존 코드를 읽고 수정하는 시간이 더 오래 걸리고, 코드 수정 비용이 급격하게 증가하게 된다. 프로젝트 마감? 마감은 늘어나라고 있는 거 아닌가?

    이 책에서는 소프트웨어 개선 그룹(SIG)의 컨설턴트들이 자바로 작성된 JPacman 오픈 소스를 예로 들어 유지보수 가능한 소프트웨어를 만드는 10가지 원칙을 설명한다. 특정 기술에만 해당하는 지표나 변별력이 없는 지표는 제외했다. 팀에서 지키면 최소한 읽을 수 있고, 유지보수가 가능한 코드를 작성할 수 있는, 현실적인 지침을 제시한다. 개발팀의 서가에 이 책은 반드시 꽂혀 있어야 한다.


<출처 : 다음 책 소개>


★★★★☆




 소프트웨어의 품질은 유지보수성, 기능 안정성, 성능 효율성, 호환성, 사용성, 믿음성, 보안성, 휴대성이라는 여덟가지 특성으로 분류한다고 합니다. (ISO 25010) 이 책은 그 중 유지보수성에 대한 책 입니다. 업무를 하다보면 처음 부터 신규 구현을 하는 경우도 있겠지만 대개 유지보수에 많은 시간을 드리곤 합니다. 비단 업무의 비율로 치지 않더라도 유지 보수성이란 것이 비지니스나 품질에 지대한 영향을 끼친다는 사실은 자명 합니다.


 이 책에서는 유지보수성 10대 가이드 라인을 각 장별로 제시하고 있습니다. 각 장별 예시로 제시된 코드나 내용의 난이도가 높지 않고 군더더기가 없어 약간의 실무 경험이 있으시다면 공감하며 책을 읽어 나가실 것이라 생각 됩니다. 10대 가이드 라인은 아래와 같습니다.


  1. 코드 단위를 짧게 하라 : 메소드 단위는 15라인을 넘어가지 않게 작성해야 해당 메소드를 이해하고, 테스트하고, 재사용하기 쉬워 유지 보수성이 좋아질 수 있습니다. 


  2. 코드 단위는 간단하게 짜라 : 복잡한 if-else 구문과 같이 코드 복잡성을 높이는 방식을 제한해야 합니다. 단위 당 분기점은 4개 이하로 제한하고 복잡한 단위는 더 잘게 나누어 서로 뭉쳐 있지 않게 해야 합니다. 그래야 단위 별 수정 및 테스트가 쉬워지고 유지보수 성이 개선 됩니다.


  3. 코드는 한번만 작성하라 : 코드를 복사하지 않습니다. 이 책에서 중복 코드는 정말 정말 기피해야 할 대상으로 보고 있습니다. 코드를 복사하면 여러 곳에서 버그를 고쳐야 하기 때문에 비효율적이고 에러가 나기 쉽습니다. 중복 코드의 경우 생성하지 않는 것이 무엇보다 중요 합니다. 참고로 이미 어느 정도 개발이 완료된 패키지에서의 중복 코드는 PMD 에 포함된 CPD 를 통해 검출 할 수 있습니다.


  4. 단위 인터페이스를 작게 하라 : 단위당 파라미터 개수는 4개 이하로 제한하는 것이 좋습니다. 만약 파라미터가 너무 길어진다면 이들을 객체로 추출 하는 것도 좋습니다. (예, x1, y1, x2, y2 ---> Rectangle) 


  5. 관심사를 모듈로 분리하라 : 모듈 간 결합을 느슨하게 하기 위해 큰 모듈을 삼가해야 합니다. 개별 모듈로 나누어 일을 시키고 구현 상세는 인터페이스 안으로 감추는 것이 좋습니다. 그리하여 보다 느슨하게 결합된 코드베이스 상에서 수월하게 내용을 미리 실피고 실행할 수 있습니다.


  6. 아키텍처 컴포넌트를 느슨하게 결합하라 : 메소드, 클래스 단의 리팩토링 못지 않게 최상위 수준의 컴포넌트 간의 리팩토링 역시 중요 합니다. 최상위 수준의 컴포넌트 간 결합도를 낮추어야 합니다. 다른 컴포넌트 모듈에 호출을 받는 형태로 공개된 모듈 내부의 상대적인 코드량을 최소화하는 방향으로 결합도 낮춤이 진행되야 합니다. 그리하여 각 컴포넌트의 독립성을 유지하고 유지보수성을 개선할 수 있습니다.


  7. 아키텍쳐 컴포넌트의 균형을 잡아라 : 최상위 수준의 컴포넌트 개수와 상대적 크기의 균형을 잡아야 합니다. 컴포넌트의 개수는 9개 정도(6 ~ 12개 사이) 되도록 소스 코드를 조직화 하고 컴포넌트의 크기를 대략 균등하게 맞추는 것이 좋습니다. 


  8. 코드 베이스를 작게 하라 : 코드베이스를 가능한 작게 하는 것이 좋습니다. 코드베이스가 커지는 걸 막고 시스템 크기를 적극적으로 줄여야 합니다. 이를 위한 다양한 가이드 라인이 있겠지만 이 책에서는 적극적으로 오픈소스 라이브러리 / 프레임워크 사용을 권장하고 있습니다. 단, 이때 해당 라이브러리의 코드는 고치지 않는 것이 중요합니다. 코드를 고치는 순간, 해당 라이브러리가 결국 코드 베이스에 포함되는 것이나 마찮가지기 때문에 라이브러리 업데이트를 매번 따라가고 분석해야하는 어려움이 있을 수 있습니다.


  9. 테스트를 자동화 하라 : 당연합니다. 개발자가 일일히 손으로 한땀 한땀 테스트 하고 있을 수 없습니다. 자동화 할 수 있는 것들은 모두 자동화로 돌리는 것이 좋습니다.


 10. 클린 코드를 작성하라 : "스스로 프로라고 자부한다면 클린 코드는 필수다. - 로버트 C. 마틴" 클린 코드를 작성하는 7대 규칙이 있습니다. 

    • 단위 수준의 코드 악취를 남기지 말라.

    • 나쁜 주석을 남기지 말라.

    • 주석 안에 코드를 남기지 말라.

    • 죽은 코드를 남기지 말라.

    • 긴 식별자 이름을 남기지 말라.

    • 매직 상수를 남기지 말라.

    • 제대로 처리 안 한 예외를 남기지 말라.


 책의 뒷 표지에는 좋은 코드에 대한 구루(GURU) 들의 한마디들이 적혀 있습니다. 그 중 첫 번째를 소개하자면,
' 컴퓨터가 이해할 수 있는 코드는 바보라도 짤 수 있다. 유능한 프로그래머는 인간이 이해할 수 있는 코드를 짠다.' 라는 문구다. 결국 개발이든 일이든 혼자하는 것이 아니라 같이 하는 것임을 깨닫고 이를 코드 품질 향상에도 적응 할 수 있어야 할 것 같습니다. 

 요즘 회사에서 코드 리뷰 강화! 코드 품질 강화!를 외치고 있다면, 일독하실 것을 권해 드립니다.   


  

2017/01/16 - [CS/ML] - ML 101 : 머신러닝의 종류

2017/01/19 - [CS/ML] - ML 101 : weka install & arff

2017/01/29 - [CS/ML] - ML 101 : try weka

2017/02/07 - [CS/ML] - ML 101 : 머신러닝 무료 강의 모음



이번 글에서는 음반 매장 내에 위치에 따라 아이돌 그룹 레드벨벳의 CD 판매량을 의사결정트리로 예측할 수 있는 모델을 만들어보도록 하겠습니다. 아래의 훈련용 데이터는 음반 위치, 매대가 눈높이에 있는지 여부, 그리고 실제 구매 여부로 이뤄져 있습니다. 


데이터 분석 작업은 다음의 단계로 이뤄집니다.


1. 훈련용 데이터를 불러와 의사결정 트리를 만들고 해당 내용을 그래프로 확인 한 후,

2. 의사 결정 트리 분류기로 자바 코드를 생성하고,

3. 테스트용 데이터로 자바 코드를 시험함.


우선 아래의 훈련용 데이터를 다운 받으시고, 내용을 확인해 보도록 하겠습니다.

훈련용 데이터

redvelvet.arff


훈련 데이터의 속성은 5가지 입니다. Placement - 음반이 진열된 위치, Prominence - 진열된 음반 중 레드벨벳 CD 비중, Pricing - 판매가격이 정가 대비 할인된 비율, Eye Level - 고객의 눈높이 진열 여부, Customer Purchase - 구매 여부. 이 속성들 중 판매량에 가장 영향을 미치는 속성이 무엇인지 알아 보고 속성 값을 바탕으로 판매량을 예측해 보도록 하겠습니다.

웨카에서 훈련용 데이터를 불러오고, 의사결정 트리를 사용하기 위해 J48 알고리즘을 선택하고 분석을 하게 되면 아래의 결과를 얻을 수 있습니다.


결과를 보면 판매에 가장 큰 영향을 미치는 속성은 placement 입니다. end_rack 에 두었을 때 판매 매출을 높이는데 가장 좋은 값이라고 할 수 있고, cd_rack 에 두었을 때는 가격 요인에 의해 판매 여부가 결정된다고 할 수 있습니다. 마지막으로 std_rack 에 두었을 때는 눈높이에 제품이 있느냐의 여부에 따라 판매 여부가 결정된다고 해석 할 수 있습니다. 


이 내용을 시각화하여 볼 수 있습니다. [Result list (right-click for options) 패널에 있는 알고리즘을 우 클릭하여 Visualize Tree 옵션을 선택하면 아래의 그림을 확인 하실 수 있습니다. 


시각화 뿐만 아니라 분석된 내용을 소스 코드로 확인할 수 있습니다. 웨카를 이용해 생성한 알고리즘 기반의 코드 재사용 및 수정이 가능 한 것 입니다. 아래의 그림과 같이 More Options 버튼을 선택하고 Output source code 를 체크한 후 [start] 버튼을 눌러 다시 한번 웨카 분석을 수행 합니다.



분석이 완료 되면 코드가 별도의 파일로 나오지는 않고 classifier output 화면에 기존 결과 분석 내용과 함께 출력 되게 됩니다. 생성된 코드를 빌드 하기 위해서는 [weka.jar] 가 필요 합니다. 해당 파일은 Weka 를 설치한 폴더에 가시면 있습니다. Eclipse 에 프로젝트를 하나 생성하고 WekaClassifier.java 를 만들어 출력된 내용을 복사 해줍니다. 그리고 Referenced Libraries 에 weka.jar 를 첨부하여 빌드를 수행하시면 됩니다.


소스 코드를 자세히 보시면 WekaClassifier 안에 WekaWrapper 클래스와 실행부인 main 이 같이 존재 하는 것을 보실 수 있습니다. 저는 코드 보기 편하기 위해 WekaClassifier 와 WekaWrapper 를 분리하였습니다. 꼭 그럴 필요는 없지만 Claasifier 에 생성된 함수명을 살펴보시면 랜덤한 이름으로 생성되어 있어 가독성이 많이 떨어집니다. 이에 추후 작업 및 코드 정리를 위해 분리해서 작업하시는 것을 추천 드립니다.


(계속..)

머신러닝을 공부하기 좋은 [무료] 강의들





1) https://www.youtube.com/user/hunkims 
홍콩 과학 기술 대학교 교수님으로 계신 김성훈 교수님의 Youtube 채널 입니다. 머신 러닝 강좌 중 세계에서 가장 유명한 강의를 뽑으라면 Andrew Ng 교수님의 코세라 강의를 들 수 있겠는데요, 해당 강의 같은 경우 실습시 상대적으로 생소한 Octa 나 매트랩을 사용해야 한다는 단점이 있습니다. 요즘 핫한 tensorflow 를 이용해 실습을 하실 수 있고 무엇보다 아름다운 우리 한글을 사용한 강의기에 입문 강의로 강추 드립니다.



2) https://www.coursera.org/learn/machine-learning 
역사와 전통을 자랑하는 머신러닝 입문 강의의 세계 최고봉!! Andrew Ng 교수의 머신러닝 강좌 입니다. 매달 수강 신청을 하실 수 있고 진도에 뒤쳐지지 않도록 관리 해주고 있기 때문에 저와 같은 의지박약 인들도 꾸역꾸역 진도를 따라갈 수 있습니다. 한글 자막도 있으니 영어에 대한 걱정은 접어 두셔도 괜찮을 것 같습니다.



3) https://www.youtube.com/playlist?list=PLWO_EXTnt3sPmlgCeHAiHwaAFwmmusGp6 
머신러닝에 대한 주제라고 하기에는 애매하지만 파이썬에 익숙하신 분 중 데이터 분석에 관심이 있으신 분은 한번쯤 보시면 좋을 강의 리스트 입니다. 파이썬을 이용해 데이터 분석 하는 법에 대해 차근차근 가르쳐 주고 있고, 역시 한글 강의라는 강점이 있습니다. 강좌 하나하나 모두 길지 않아 하루 하나씩 부담 없이 보실 수 있으실 것 같습니다.



4) https://www.youtube.com/playlist?list=PLNfg4W25Tapy5hIBmFZgT5coii1HUX6BD 
동국대학교 홍정모 교수님의 유투브 채널의 플레이 리스트, C++ 로 배우는 딥러닝 입니다. 파이썬과 R 로 꽉 채워져 있는 머신러닝 강의 세계에 한줄기 단비 같은 C++ 강좌 입니다. 사실 랭귀지가 중요한 것이 아니라 이론에 대한 이해가 더 중요하다고들 하나, 내가 가장 잘 아는 언어로 배우는 이론이 더 쉽게 이해 가는 것도 사실이라고 생각합니다. 



5) https://www.youtube.com/channel/UCRyIQSBvSybbaNY_JCyg_vA 
모두의 연구소 이찬우 연구원님의 딥러닝 입문 강의 입니다. 화려한 영상이나 멋진 강의 슬라이드 대신 노트에 필기하면서 강의가 진행되는 영상들로 이루어진 플레이 리스트 입니다. 영상을 보고 있자면 마치 고등학교 때 공부 잘하는 짝꿍이 옆에서 설명해 주는 듯한 느낌이 들기도 합니다. 아날로그적 감성을 좋아하시는 분께 추천 드립니다.



6) https://www.youtube.com/playlist?list=PLzWH6Ydh35ggD2XoOObYqiYByOt8r_wuv 
서울대학교 BI Lab. 겨울방학 Rookie 세미나로 진행된 강좌 목록 플레이 리스트 입니다. 실제 세미나 장면을 녹화한 영상들로 캠퍼스 느낌을 느끼고 싶으신 분들에게 추천 드립니다. 제가 강의를 다 본 것은 아니지만, 난 머신러닝에 대해 1도 모른다! 라는 분들 보다는 대애애충 뭔지 한번 들어봤는데? 라는 느낌을 가지고 계신 분들에게 좋은 강의로 보입니다.



7) https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A 
Sirajology 라는 유투브 채널로 매우 유명한 유부터 중 한분인 Siraj 가 다양한 주제로 짧지만 알찬 비디오들을 공유하고 있는 곳 입니다. 이 채널의 가장 큰 장점은 짧지만 고퀄의 영상미가 느껴지는 영상들 입니다. “40줄의 코드로 애플 주가 예측하기!” 와 같이 toy 예제들을 만드는 법들에 대해서 매우 재미있게 가르쳐 줍니다. 영어 강의지만 영상도 재미나 흥미롭게 보실 수 있을 것 같습니다.

이분 같은 경우 최근 유다시티와 함께 딥러닝 컨텐츠를 제작하고 있습니다.



8) https://www.youtube.com/playlist?list=PLAwxTw4SYaPkQXg8TkVdIvYv4HfLG7SiH 
마지막으로 추천해 드릴 강의는 유다 시티의 머신러닝 입문 강좌 입니다. 강좌 수는 400개가 넘지만 영상 하나당 3분 이내이기에 내가 진도를 잘 나가고 있구나! 하는 착각에 빠지기 쉬운 강좌 입니다. 안타깝게도 한글 자막은 없습니다만 퀄리티로는 최고라고 생각합니다. 매우 매우 강추하는 강좌입니다.



이외에도 입문 강좌는 유투브나 유다시티, 코세라와 혹은 kmooc 과 같은 Mooc 사이트에서 많이 찾아보실 수 있습니다. :-D   

  •  저자 존 손메즈가 이 책을 쓴 이유는 개발자로 사는 데 도움이 되는 정보와 조언을 집약적으로 담은 안내서를 만들고 싶어서다. 자신이 33세에 은퇴하기까지 성공과 실패를 통해 배운 것, 여러 사람을 만나면서 보고 들으며 배운 것을 전달하고 공유하기 위해서다. 개발자의 인생을 리부트할 조언들로 꽉 차있다.

[출처 : Daum 책 소개]



★★★★★


 유사 도서 :  [소프트웨어 장인], [프로그래머로 사는 법], [IT 전문가로 사는 법


관련 사이트 : Simple Programmer, 저자의 강좌 및 컬럼이 업로드 되는 곳

책 중간 중간에 깨알 같이 해당 사이트의 학습 과정을 홍보 하고 있음.

 책에 적혀 있는 링크를 치고 들어가면 없어진 페이지도 있고, 강의 홍보 페이지로 연결되기도 함.


john sonmez에 대한 이미지 검색결과 

[저자 : John Somez]



 개발자로 사는데 도움이 되는 정보와 조언을 담은 안내서로, 70여 가지의 주제에 대하여 7가지 카테고리로 나눠 작성 된 책입니다. 1부 경력, 2부 셀프 마케팅, 3부 학습, 4부 생산성, 5부 재무관리, 6부 건강, 7부 영혼의 구성으로 이루어져 있습니다.

 

 개인적으로 앞으로의 커리어와 생산성 그리고 전문성에 대해 다시 한번 생각해 볼 수 있게 해준 고마운 책 입니다. 1부 경력관리 부터 내용을 정리해 보면, 우선 마음가짐과 목표설정에 대한 이야기로 시작합니다. 사실 1, 2부의 내용은 여타 자기 계발 서적과 크게 다르지는 않습니다. 자기 계발 서적의 주요 타깃이 개발자라는 것만 빼면 누구나 마음 한구석으로 알고 있지만 쉽게 실천하지 못하는 그런 내용들로 채워져 있습니다.


 직원의 마음가짐이 아닌, 사업가적 마음가짐을 가지고 회사를 다녀라. 즉, 지금 다니는 회사에 '나'라는 1인 기업이 프로그래밍이라는 서비스를 판매한다는 마음가짐으로 일할때 업무를 바라보는 시선이 달라질 수 있다는 이야기. 그리고 큰 목표를 세우고 이 목표를 연 / 월 / 주 / 일단위로 구체적으로 나누어 작은 것 부터 하나씩 실천해 나가기 등.


 특히 인상적이였던 부분은 전문성에 대한 이야기 였습니다. 작가가 정의하는 전문가는 맡은 일과 경력을 진지하게 생각하는 사람이며, 때로 옳다고 생각하는 바를 실천하기 위해 손해를 감수하고 어려운 결정을 내릴 용기가 있는 사람이라고 정의 하고 있습니다. 


 자신만의 전문 분야에 대한 이야기도 빼놓을 수 없을 것 같습니다. 자바 개발자나 C# 개발자는 전문성을 표현하는데 적합하지 않습니다. 최대한 구체적으로 자신의 전문 기술을 표현하는 것이 좋습니다. 결국 개인에게 필요한 일자리는 오직 하나 입니다. 제가 삼성을 다니면서 LG에서 일할 수는 없습니다. 자바 개발자를 찾는 회사는 수백곳이겠지만 자바 웹 개발자는 수십 곳일수 있습니다. 그리고 특정 자바 웹 기술을 보유한 개발자를 찾는 곳은 몇 곳 안될수도 있습니다. 하지만 실제 제 자신의 전문성을 이런 기술에 맞게 키운다면 그 일자리에 명확히 들어 맞는 사람이 되고 해당 일자리를 얻게 될 확률이 높아 집니다. 


 이런 전문성을 갖춘 사람이라고 해도 이를 제대로 드러내지 않는 다면 다른 사람들이 알 수가 없습니다. 이에 개발자 스스로 하는 셀프 마케팅도 매우 중요합니다. 자신의 기술을 드러내는 방법은 여러가지가 있습니다. 기술 블로그를 운영한다든지 유투브 영상을 올린다든지 혹은 저술 활동이나 오픈소스 활동 또는 GitHub 에 자신의 프로젝트를 올려 자신이 가진 기술을 홍보할 수 있습니다. 저자는 이러한 활동들 중 무엇이라도 좋으니 일단 시작하라고 추천하고 있습니다. 사실 아무리 많은 자기계발 서적을 읽더라도 실천하지 않는 다면 아무런 소용이 없을 것 입니다. 책에서 말하듯 작든 크든, 처음에는 어색하고 바보 같아 보여도 일단 시작하는 것이 중요 하다고 봅니다.


 책의 초반부는 이렇듯 자신의 경력 개발과 셀프 마케팅의 중요성에 대해서 설명하고 있습니다. 중반부는 어떻게 학습하고 생산성을 높일수 있을지에 대한 구체적인 How to 가 담겨져 있습니다. 


 저자가 소개한 10단계 학습법은 꼭 한번 읽어봐야할 부분 입니다. 사실 전 개발을 하다보면 책을 한단원 한단원 읽어가면서 예제를 하나하나 쳐보고 기술을 익히는 것 보다 실제 프로젝트를 진행하면서 이슈를 얻어맞고, 프로토타입을 만들기 위해 낑낑대면서 실제로 작업을 할 때 더 많은 것을 배우곤 했었습니다. 


10단계 학습법에 대한 이미지 검색결과

[이미지 출처 : 소프트 스킬 p219, 블로그]


 10단계 학습법은 실습에 빠르게 이르게 해주는 꽤 괜찮은 방법인 것 같습니다. 일단 1-6 단계 과정을 반복 없이 한 번만 진행 합니다. 제목 그대로 배우고자 하는 것의 범위와 성공의 기준을 정하고 자료들을 모아 학습 계획을 세우면 됩니다. 이때 주의 할 것은 배우고자 하는 주제와 성공의 정의를 매우 구체적으로 해야 한다는 것 입니다. 예를 들어 주제를 정할때 [리눅스 배우기]는 좋은 주제가 아닙니다. [우분투 설치 및 설정 방법과 기본 기능 배우기] 가 좋은 주제 입니다. 성공 기준도 마찮가지 입니다. 다시 한번 예를 들어 [HTML로 웹 페이지 만들기] 는 좋은 성공 기준이 아닙니다. [HTML5 를 이용하여 이력서와 포트폴리오를 담은 내 홈페이지 만들기] 가 좋은 성공 기준 입니다. 그리고 많은 자료를 찾기 보다는 주제에 딱 맞는 유투브 강의나 책 한권을 정해 학습 계획을 세우면 1-6 단계가 끝나게 됩니다.


 7-10단계는 반복이 필요한 단계로 '배우고 실습하고, 배우고 가르치는' 절차를 따르게 됩니다. 7 단계에서 Hello World 를 치고 목차나 개요를 보며 감을 익히고 난 후 8단계에서 이것 저것 해보면서 자기가 무엇을 모르는지 아는 단계를 경험해야 합니다. 그리고 9단계에서 자신이 몰랐던 것을 알게 되고 10단계에서 이를 타인에게 가르쳐 진정 내것으로 만들면 10단계 학습법이 완료가 됩니다. 


 전 개인적으로 10단계 학습법 중 가장 8단계인 [놀기]와 마지막 단계인 [가르치기] 단계가 학습에 있어서 꼭 필요한 단계라고 생각합니다. 무엇을 모르는지 아는 단계와 알게 된 것을 가르치는 단계를 통해 학습을 강화하는 것이 이 학습법의 핵심인 것 같습니다.


 3부에서 학습법을 익히고 난 후 4부에서는 생산성에 대해 이야기 하고 있습니다. 요약하자면 "생산성은 결국 집중력에서 나오는 것이고, 집중력을 얻기 위해서는 좋은 습관의 관리와 집중을 도와주는 도구가 필요하다." 라고 할 수 있을 것 같습니다. 책에서 소개한 도구 중 제가 유용하게 사용하고 있는 도구는 뽀모도로와 kanbanflow 입니다. 뽀모도로 기법과 kanbanflow 의 사용법에 대해서는 책을 참조하시거나 인터넷 검색을 통해 자세히 확인 할 수 있습니다.


 개인적으로 kanbanflow 를 업무와 개인 작업에 사용하고 있는데 만족도가 매우 높습니다. kanbanflow 자체가 뽀모도로 타이머를 가지고 있어서 블로그를 쓰거나 코딩을 할 때 유용하게 사용하고 있습니다. 책에서 저자가 kanbanflow 사용하기 전에 trello 를 사용했었다고 하는데 trello 역시 할 일 관리에 나쁘지 않은 선택으로 보입니다. 개인의 취향에 따라 선택하면 좋을 것 같습니다. 


 책의 후반부는 개발외 적인 부분, 재테크와 건강 관리에 대한 이야기를 다루고 있습니다. 어찌보면 책 제목에 제일 걸맞는 개발자를 위한 소프트 스킬에 대한 부분이 아닐까 합니다. 재테크 부분에 있어서 국내 상황과 안 맞는 부분도 있으나 후반부까지 일독하여 보는 것을 추천 합니다. 전반부 처럼 자세한 스킬이나 실천 방안을 제시하지는 않지만 균형 잡힌 삶을 위해 무엇일 필요할지 조언을 얻을 수 있을 것 같습니다.


 일을 하고 돈을 모으고 성공하고 연애하고 결혼하고... 등등 살아가면서 하는 일에는 무엇이든 목적이 있습니다. 그리고 그 목적의 궁극적인 도달점은 행복이 아닐까 생각 합니다. 개발자로써 더 나은 삶과 행복에 다다르는 방법에 대해서 고민이 많으시다면 일독해 보시길 추천 합니다. 분명 도움이 되는 책 인 것 같습니다.