Today I../Today I Read 14

[오늘, 또 일을 미루고 말았다] 당신은 신뢰할 수 있는 사람, 행복한 인생을 사는 사람

작년 전사적으로 일정 이슈가 많았을 때여서, 코로나에 걸렸는데도 tile processor 구현 일정에 스트레스를 받고 있을 때 소프트웨어 원칙 만들기 에서 "프로그래머에게 요구되는 것은 100점이 아닌 80~90점짜리 프로그램을 기한 내에 완성하는 일이다.” 글을 읽고 많은 부분을 공감하였다. 이 말이 나온 책이 윈도우 95의 프로그래머이신 "나카지마 사토시" 님이 저자인 이고, 이 책을 읽고 중요하다고 생각한 부분을 남기고 중간중간 떠오른 생각을 정리했다. 책의 내용은 인용 박스 로 구분하였다. 0. Intro. 시간 관리의 필요성. 독일의 문호 괴테는 말했다. “아는 것만으로는 충분하지 않다. 활용해야 한다. 의욕만으로는 충분하지 않다. 실행해야 한다.” 그는 갑자기 치고 들어오는 일이 생길 가능성..

[리팩터링 2판] 스터디 모집 및 시작. Chapter 1. 리팩터링: 첫 번째 예시

Background 6개월 차 개발자 정도 되었을 땐가 연구팀에서 작성이 된 Machine learning 코드들을 production level로 만들고 serving 하기 위해 refactoring 하는 업무를 맡게 되었다. 그때 동료분께서 읽어보는 것을 추천해 주신 책이 'Clean code'였다. 그 당시 clean code 책을 읽을 때는 '좋은 말인 거 같다..' 정도이지 솔직히 크게 와닿거나 '아 앞으로 내 업무에 이런 것들 적용해봐야겠다. 이런 것을 명심해야겠다' 정도의 깨달음은 없었다. 그렇게 1년이 흐르고 올해 2022년 1월, 새해 버프를 받아 그 유명하다는 Clean code (일단 다시 읽어보자)를 했다. 그래도 처음 읽고 나서 6개월 사이 나도 모르게 보고 배운 건 있었는지 첫 ..

[오브젝트] Chapter 1. 객체, 설계

오브젝트 (코드로 이해하는 객체지향 설계) - 조영호 저를 읽고, 제가 이해한 바를 정리한 글입니다. 이 책의 목적 좋은 설계란 무엇인가를 설명하는 것 훌륭한 객체지향 프로그램을 설계하고 유지보수하는 데 필요한 원칙과 기법을 설명하는 것 읽기 전 질문과 읽은 후 답변 Chapter 1 둘째 장 까지 읽고 이라고 정리한 후 든 질문을 적어보았다. 그리고 Chapter 1 끝까지 읽은 후 각 질문의 답변이라고 생각하는 부분을 나름대로 채워 넣어 보았다. 객체지향이란 무엇인가 ⇒ Chapter 2. 객체지향 프로그래밍 에서 조금 알 수 있을 것 같으며 이 책 전반을 통해 점차 알게 되어가지 않을까? 설계란 무엇인가 ⇒ 책에서 제시하는 설계란, ‘코드를 배치하는 것이다.’ 좋은 설계란 무엇인가 ⇒ 책에서 제시하..

[Clean code] Chapter 12. Emergence (창발적 설계로 깔끔한 코드 구현하기)

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 창발성이란 이 책에서 창발성이란 단어를 처음 접했다. 위키를 찾아보면 창발(創發)또는 떠오름 현상은 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다. 이라고 적혀있다. 즉, 작은 요소들의 상호작용의 반복이 전체 구조에 영향을 미치는 점을 창발성이라고 한다. 이번 챕터에서는 개발에서도 단순한 4가지 규칙을 반복하다 보면 Clean code, 우수한 설계가 나오게 된다고 하며 4가지 규칙을 소개한다. 1. 모든 테스트를 실행하라. 테스트의 중요성은 몇 번 반복해서 나왔다. [Clean code] Chapter..

[Clean code] Chapter 11. System

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 이번 장을 읽으면서 머리가 많이 복잡했다. 아직까지도 시스템이라는건 너무 광범위하게만 느껴져서 온보딩 프로젝트에서 배운 3 Layer Architecture와 Dependency Injection, 머신러닝 코드를 리펙토링 할 때 머리싸매며 고민한 class의 적절한 사용, 디자인 패턴 아직도 누가 객체 지향 프로그래밍이 뭐냐고 물어보면 어버버 할 것 같은 그 객체 지향 확장성, 설계, ... 더 나아가선 MSA, 애자일까지.. 실무에서 경험하긴 했지만 아직 내 안에서는 정리되지 않은 채 파편화되어 있는 개념과 경험들이 떠올랐기 때문이다. 그러면서 동시에 앞으로 추구..

[Clean code] Chapter 09. Unit test

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 테스트 코드를 추가하는 것을 넘어서 제대로 된 테스트 케이스를 작성해야 한다. 1. 테스트 코드의 중요성 테스트 코드는 실수를 바로 잡아준다. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트이다. 테스트 케이스가 없다면 모든 변경이 잠정적인 버그인 반면 테스트 케이스가 있으면 코드 변경이 두렵지 않다. 그래서 테스트 커버리지가 높을 수록 버그에 대한 공포가 줄어든다. 강의에서 추천 해 준 책 'Effective Unit Testing - 라쎄 코스켈라' 에서 말하는 테스트의 중요성에는 테스트는 실사용에 적합한 설계를 끌어내준다. 테스트를 작성해서..

[Clean code] Chapter 08. 경계

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 여기서 말하는 경계라는 것은 우리 코드와 외부 코드의 구분이다. 오픈소스, 라이브러리를 사용하지 않는 프로젝트는 없다. 또한 개발을 하다 보면 시스템에 들어가는 SW를 직접 개발 하기보다 외부 코드를 우리 코드에 깔끔하게 통합해야 하는 일이 생긴다. 또한 외부 코드 사용시 해당 코드의 인터페이스 제공자와 사용자는 이런 경계에 있는 사람들이다. 인터페이스 제공자는 자신의 코드의 적용성을 최대한 넓히고자 하는 반면 사용자는 자신의 요구에 집중하는 인터페이스를 원한다. 이런 입장 차이가 시스템 경계에서 문제를 야기시킬 수 있다. 그래서 이 때 우리 코드와 외부 코드의 경계..

[Clean Code] Chapter 04. 주석, Chapter 05. 포맷팅

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. Chapter 04. 주석 잘 달린 주석은 그 어떤 정보보다 유용하다. 반면 경솔하고 근거없는 주석, 오래되고 조잡한 주석은 코드를 이해하기 어렵고, 거짓과 잘못된 정보를 전달한다. 그래서 '(그럴 거면) 주석을 최대한 쓰지 말자' 라는 말이 왜 나왔는지 알 것 같다. 작년 말, 새로운 서비스를 구현하면서 한 번에 30개가 넘는 코드 리뷰를 받곤 했다. 그 중에 1/3은 다름아닌 '주석'에 관련된 것이었다. 이전까지는 주석에 대해 크게 생각하지 않고 TODO 정도만 남겼었었는데 이에 대한 코드리뷰를 받은 후 그에 대해서 토론하고, 수정해보니 크게 배운 것이 있다. 주..

[Clean Code] Chapter 03. 함수

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 보충 이해한 내용을 정리한 글입니다. 현업에서 어떤 code를 refactoring 해야하는 경우가 있었다. 그 때 1. 함수 인자가 8개가 넘어가고, 2. 한 파일에 모든 함수가 모여있고 3. 한 함수에 기능과 추상화 수준이 섞여있어서 한 함수당 코드가 백 몇 줄이 넘어가는 경우도 많았다. 그 때 동료분께서 Clean Code 책을 읽어보는 것을 추천해주셨는데, 그 당시에는 이 많은 내용 중에 어떤 부분에 중점을 두어서 읽고 적용해보는 것이 좋을지 막막한 느낌이 들었다면, 그 일을 다 마치고 시간이 조금 흐른 지금 이 책을 다시 읽어보니 가장 많은 도움이 된 부분이 이 chapter인 것 같다. 1...

[Clean Code] Chapter 02. 의미 있는 이름

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, 해설 강의를 통해 보충 이해한 내용을 정리한 글입니다. 1. 의미가 분명한 이름 약 3개월 전, 나는 이런 코드가 포함된 '나쁜 코드'를 PR했고 INTERVAL1 = int(os.environ.get("INTERVAL1")) INTERVAL2 = int(os.environ.get("INTERVAL2")) ... ... ... if interval_flag == 1: logger.info("There is no messages to be processed yet or no instance to turn on") time.sleep(INTERVAL1) else: logger.info("wait for creating and setting t..