
함께 자라기 - 3부 애자일
2022. 9. 1. 14:10
개발 서적/함께 자라기 - 애자일로 가는길
1. 애자일 애자일은 불확실성이 높은 프로젝트에 적합한 방법이다 애자일이 불확실성을 다루는 방식은 좀 더 짧은 주기로 더 일찍 피드백을 받고 더 다양한 사람으로부터 더 자주 그리고 더 일찍 피드백을 받는 것으로 정리할 수 있다 시대가 변하면서 불확실성이 낮은 프로젝트는 비즈니스적 가치가 없어지고 불확실성이 높은 프로젝트를 하는 것이 일반적이 됨에 따라 빠른 속도로 인기를 얻게 되었다 결과적으로 애자일은 서로의 업무를 공유하고 상호 검토하는 협력을 통해 불행항 일을 '또는' 조건에서 '그리고' 조건으로 바꾸게 한다 모든 사람이 통찰을 얻어야 업무를 개선할 수 있는게 아니라 한 사람이라도 통찰을 얻으면 그걸 공유해서 전체가 개선되는 것 이다 학습과 협력은 불확실성이 큰 상황에서 좋은 대응전략이 된다 애자일의..

함께 자라기 - 2부 함께
2022. 8. 29. 23:06
개발 서적/함께 자라기 - 애자일로 가는길
1. 소프트웨어 관리자의 개선 우선순위 조엘 테스트라는 개발팀 평가 테스트가 있다 소스 컨트롤을 사용하는가? 한 번에 빌드를 만들어낼 수 있는가? 일일 빌드를 만드는가? 버그 데이터베이스를 가지고 있는가? 새로운 코드를 작성하기 전에 버그를 고치는가? 최신 업데이트된 스케줄이 있는가? 스펙(제품 명세)이 있는가? 프로그래머가 조용한 작업환경에서 일하는가? 돈이 되는 한 최고의 툴을 사용하는가? 테스터가 있는가? 채용 면접 때 후보가 코드를 짜게 해보는가? 복도 사용성 테스트를 하는가? 조엘이 2000년에 작성한 블로그 글에서 소개된 이 테스트는 많은 인기를 얻었고, 그만큼 비판도 많이 받았다고 한다 이 12가지 항목에 "예"라고 대답하면 "완벽하다"라고 말한다 각 항목은 객관적으로 예/아니오 답이 나올 ..

함께 자라기 - 1부 자라기
2022. 8. 29. 20:25
개발 서적/함께 자라기 - 애자일로 가는길
1. 1만 시간의 법칙 - 안데쉬 에릭손 1만 시간 법칙에서 1만 시간은 '자신의 기량을 향상시킬 목적으로 반복적으로 하는 수련'을 한 시간을 일컫는다 안데쉬 에릭손은 그런 수련을 '의도적 수련' 이라고 정의했다 의도적 수련이 필요한 이유는 평생을 걷는다고 해서 또는 평생을 양치질을 한다고해서 점점 더 나아지는게 아니기 때문이다 목표를 가지고 피드백을 반영하는 것이 의도적 수련의 포인트이다 2. 자기계발과 복리의 비밀 더글라스 엥겔바트는 작업을 A, B, C 세가지 수준의 작업으로 구분했다 A작업. 원래 그 조직이 하기로 되어 있는 일 B작업. A 작업을 개선하는 일 (즉, A작업에서 시간과 품질을 개선하는 작업. 시스템과 프로세스 설계 등) C작업. B 작업을 개선하는 일 (즉, 개선 사이클 자체의 시..

[Study] 2022/08/16
2022. 8. 22. 00:17
개발 서적/클린코드
참여인원 (2명) 본인 wony - https://youn12.tistory.com/ 스터디 진행 방식 - 10~17 챕터 각자 정리한 내용 발표 - 챕터 별로 기억에 남았던 내용 및 느낀 점 논의 - 해당 내용들과 관련된 경험 논의 기억에 남는 내용 - 시스템 시스템에 대한 내용을 논의하다보니 디자인 패턴에 대한 학습이 많이 부족하다고 느낌 다음 스터디 주제 선정 시 반영하기로 함 - 응집도 공통적으로 가장 기억에 남았던 내용응집도 관련 내용을 기억하고 실무에 사용할 수 있도록 노력 - 객체지향 생활 체조 원칙 객체지향 생활 체조 원칙은 소트웍스 앤솔러지 책에서 다루고 있는 내용으로 객체지향 프로그래밍을 잘 하기 위한 9가지 원칙 규칙 1:한 메서드에 오직 한 단계의 들여 쓰기(indent)만 한다. ..

클린코드 - 17.냄새와 휴리스틱
2022. 8. 15. 20:28
개발 서적/클린코드
1. 주석 - 부적절한 정보 변경 이력 등의 주석은 적절하지 못하다 소스 코드 관리 시스템, 버그 추적 시스템, 이슈 추적 시스템 등 다른 시스템에서 저장하도록 맡기자 - 쓸모 없는 주석 주석은 빨리 낡는다 쓸모 없어질 주석은 달지 않는 편이 가장 좋으며 쓸모 없어진 주석은 재빨리 삭제하는 편이 좋다 - 중복된 주석 코드만으로 충분한 경우 중복된 주석을 달지 않는다 i++; // i 증가 - 성의 없는 주석 문법과 구두점을 올바로 사용하고 간결하고 명료하게 작성한다 - 주석 처리된 코드 얼마나 오래된 코드인지 중요한 코드인지 아닌지 알 길이 없어진다 정말 필요하다면 소스 코드 관리 시스템(형상 관리 시스템)에서 이전 버전을 가져와 사용하면된다 2. 환경 - 여러 단계로 빌드하는 경우 빌드는 간단히 한 단..

클린코드 - 15.JUnit 들여다보기 & 16.SerialDate 리팩터링
2022. 8. 13. 21:14
개발 서적/클린코드
1. JUnit 프레임워크 Junit은 자바 프레임워크 중에서 가장 유명하다 테스트 코드 역시 좋은 구조가 필요하다 오히려 테스트 코드는 더욱 읽기 편해야 한다 2. 보이스카우트 규칙 캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라 잘 짠 코드가 전부는 아니다 시간이 지나도 언제나 깨끗하게 유지해야 한다 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if 문 하나를 정리하면 충분하다 3. 결론 세상에 개선이 불필요한 모듈은 없다 코드를 처음보다 조금 더 깨끗하게 만드는 책임은 우리 모두에게 있다 마무리 느낀 점 15장과 16장은 대부분 코드를 통해 설명되어있어서 정리할 내용이 많지 않았다 이..

클린코드 - 14.점진적인 개선
2022. 8. 13. 20:54
개발 서적/클린코드
1. 깨끗한 코드 프로그래밍은 과학보다 공예에 가깝다 깨끗한 코드를 짜려면 먼저 지저분한 코드를 짠 뒤에 정리해야 한다는 의미다 2. 점진적으로 개선하라 프로그램을 망치는 가장 좋은 방법 중 하나는 개선이라는 이름 아래 구조를 크게 뒤집는 행위다 어떤 프로그램은 그저 그런 개선에서 결코 회복하지 못한다 개선 전과 똑같이 프로그램을 돌리기가 아주 어렵기 때문이다 변경 전후에 시스템이 똑같이 돌아간다는 사실을 확인하려면 언제든 실행 가능한 자동화된 테스트 슈트가 필요하다 단위 테스트와 인수 테스트를 활용하자 리팩터링을 하다보면 코드를 넣었다 뺐다 하는 사례가 아주 흔하다 단계적으로 조금씩 변경하며 매번 테스트를 돌려야 하므로 코드를 여기저기 옮길 일이 많아진다 리팩터링은 루빅 큐브 맞추기와 비슷하다 큰 목표..

클린코드 - 13.동시성
2022. 8. 13. 20:25
개발 서적/클린코드
객체는 처리의 추상화다. 스레드는 일정의 추상화다. - 제임스 O. 코플리엔 동시성과 깔끔한 코드는 양립하기 아주 어렵다 1. 동시성이 필요한 이유 정보를 대량으로 분석하는 시스템의 경우 정보를 나눠 병렬로 처리할 수 있다면 효율이 증가한다 - 동시성이 항상 성능을 높여주는 것은 아니다 동시성은 때로 성능을 높여준다 대기 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만 성능이 높아진다. 어느 쪽도 일상적으로 발생하는 상황은 아니다 - 단일 스레드 시스템과 다중 스레드 시스템은 설계가 판이하게 다르다 일반적으로 무엇과 언제를 분리하면 시스템 구조가 크게 달라진다 - 컨테이너 동작방식을 알아야 동시성을 사용할 수 있다 컨테이너..

클린코드 - 12.창발성
2022. 8. 12. 16:36
개발 서적/클린코드
창발성(創發性) 이란? 남이 모르거나 하지 아니한 것을 처음으로 또는 새롭게 밝혀내거나 이루어 내는 성질. 1. 창발적 설계로 깔끔한 코드를 구현하자 모든 테스트를 실행하라 중복을 없애라 프로그래머 의도를 표현하라 클래스와 메서드 수를 최소로 줄여라 2. 모든 테스트를 실행하라 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질도 함께 높아진다 단일 책임 원칙을 준수하는 클래스는 테스트가 훨씬 더 쉽다 결합도가 높으면 테스트 케이스를 작성하기 어렵다 그러므로, 테스트 케이스를 많이 작성할수록 개발자는 DIP와 같은 원칙을 적용하고 의존성 주입, 인터페이스, 추상화 등과 같은 도구를 사용해 결합도를 낮춘다 테스트 케이스를 작성하면 코드를 정리하면서 시스템이 깨질까봐 걱정할 필요가 없어진다 응집도를 높이고,..

클린코드 - 11.시스템
2022. 8. 11. 18:51
개발 서적/클린코드
1. 시스템 제작과 시스템 사용을 분리하라 제작과 사용은 다르다 따라서 애플리케이션에서도 관심사를 분리해야 한다 관심사 분리는 가장 오래되고 가장 중요한 설계 기법 중 하나이다 Main 분리 시스템 생성과 시스템 사용을 분리하는 한 가지 방법이다 생성과 관련된 코드는 모두 main이나 main이 호출하는 모듈로 옮겨서 애플리케이션이 main이나 객체가 생성되는 과정을 전혀 모르게 한다 팩토리 객체가 생성되는 시점을 애플리케이션이 결정해야 할 경우 사용 main 분리와 마찬가지로 모든 의존성이 main에서 OrderProcessing 애플리케이션으로 향한다 OrderProcessing 애플리케이션은 LineItem 인스턴스가 생성되는 시점을 완벽하게 통제 가능하고, 필요하다면 OrderProcessing에..