JaeYeopHan / tip-archive

📦 Archiving various development tips. If you watch this repository, you can get issues related to the newly registered development tip from the GitHub feed.
https://www.facebook.com/Jbee.dev/
245 stars 8 forks source link

실용주의적 프로그래머 Summary #43

Open JaeYeopHan opened 5 years ago

JaeYeopHan commented 5 years ago

[책] 실용주의적 프로그래머

  1. 자신의 기술에 관심과 애정을 가져라

  2. 자신의 일에 대해 생각하면서 일하라

모든 개발 과정에서 매일 자신이 내리는 모든 결정을 지속적이고 비판적으로 평가해 보는 것

  1. 어설픈 변명을 만들지 말고 대안을 제시하라

  2. 깨진 창문을 내버려 두지 말라

‘깨진 창문’이란 나쁜 설계, 잘못된 결정, 혹은 형편없는 코드를 말한다. 이 깨진 창문을 고치지 않은 채로 내버려 두지 마라. 발견하자마자 바로 고쳐야 한다. 깨끗하고 잘 기능하는 다른 시스템들이 하나의 창문이 깨지기 시작하면서 급속도로 악화된다.

  1. 변화의 촉매가 되라. 큰 무리없이 요구할 수 있을 만한 것을 찾아내고 그것을 잘 개발하자. 그리고 그걸 사람들에게 보여주고 그들이 좋아하게 한다. 그리고 만약…를 추가하면 더 좋아지지 않을까여? 한다.

  2. 큰 그림을 기억하라 무엇을 하고 있느낙에만 정신을 쏟지 말고 주변에서 무슨 일이 벌어지는지 지속적으로 살펴보자.

  3. 품질을 요구사항으로 만든다. 시스템의 범위와 품질은 해당 시스템 요구사항의 일부로 명기되어야 한다

  4. 지식 포트폴리오에 주기적으로 투자하라 주기적으로, 다각화하여 투자한다. 보수적인 투자, 위험성이 큰 투자, 보상이 높은 투자에서 균형을 맞춘다. 포트폴리오는 주기적으로 재검토하고 재조정해야 한다.

자신이 배훈 교훈들을 현재 프로젝트에 적용하도록 노력하라

  1. 읽고 듣는 것을 비판적으로 분석하라

  2. 무엇을 말하는가와 어떻게 말하는가 모두 중요하다

  3. 반복하지 말 것 (Don’t Repeat Yourself) 프로그래머는 늘 유지보수 모드에 있다.

  4. 재사용하기 쉽게 만들라.

  5. 관련 없는 것들 간에 서로 영향이 없도록 하라

  6. 최종 결정이란 없다.

  7. 목표물을 찾기 위해 예광탄을 쏴라

  8. 프로토타입을 통해 학습하라

  9. 문제 도메인에 가깝게 생각하라

  10. 추정을 통해 놀람을 피하라

추정의 단위

  1. 코드와 함께 일정도 반복하며 조정하라

  2. 지식을 일반 텍스트로 저장하라

  3. 명령어 셸의 힘을 사용하라

  4. 하나의 에디터를 잘 사용하라

  5. 언제나 소스코드 관리 시스템을 사용하라

  6. 비난 대신 문제를 해결하라

디버깅 사고 방식 - 가장 속이기 쉬운 사람은 자기 자신이다.

  1. 디버깅할 때 당황하지 마라.

  2. select는 망가지지 않았다.

React는 잘 동작한다.

  1. 가정하지 말고 증명하라.

  2. 텍스트 처리 언어를 하나 익혀라

  3. 코드를 작성하는 코드를 작성하라

  4. 완벽한 소프트웨어는 만들 수 없다.

  5. 계약에 의한 설계를 하라.

자신이 하는 일이라고 주장하는 것보다 많거나 적지도 않게 딱 그만큼만 하는 프로그램  선행조건 - 제대로 된 데이터를 전달하는 것은 호출하는 쪽의 책임이다. 후행조건 - 종국에는 종료될 것을 암시한다.

  1. 일찍 작동을 멈추게 하라

  2. 단정문을 사용해서 불가능한 상황을 예방하라 디버깅행위가 디버깅되는 시스템의 행동을 바꿔버리는 하이젠버그적인 문제(하이젠베르크에서 유래)

  3. 예외는 예외적인 문제에 사용하라

  4. 시작한 것은 끝내라

  5. 모듈간의 결합도를 최소화하라

가능한 느슨하고 유연한 코드를 작성하기 위해 노력해야 한다. 가능한 적은 양의 코드를 작성하는 것이다. Shy code: 자신을 남에게 속속들이 드러내지 말고 너무 많은 사람과 상호작용하지 말라 디미터 법칙) 한 객체가 제공하는 메소드에 접근하기 위해 또 다른 객체들을 통하는 것을 허용하지 않는다.

  1. 통합하지 말고 설정하라
  1. 코드에는 추상화를 메타데이터에는 세부 내용을

가능한 많은 메타 데이터를 사용하여 애플리케이션을 설정하고 실행시켜라 설정 메타데이터는 일반 텍스트로 표현하길 권장한다.

똑은 딱보다 먼저 일어나야 한다.

  1. 작업흐름 분석을 통해 동시성을 개선하라

  2. 서비스를 사용해서 설계하라

  3. 언제나 동시성을 고려해 설계하라

  4. 모델에서 뷰를 분리하라

  5. 칠판을 사용해 작업흐름을 조율하라

  6. 우연에 맡기는 프로그래밍을 하지 말라

정말로 제대로 돌아가는 것이 아닐지도 모른다

  1. 알고리즘의 차수를 추정하라

  2. 추정을 테스트하라.

성급한 최적화를 조심하라(premature optimization)

어떤 것이든 ‘잘못’되었다고 생각될 때, 그것을 변경하는 일을 주저하면 안 된다. 언제나 바로 지금이 최적기다. 고통관리(pain management) 리팩터링이 필요한 코드는 종양이다.

  1. 일찍, 자주 리팩터링하라.
  1. 테스트를 염두에 두고 설계하라

  2. 자신이 이해하지 못하는, 마법사가 만들어준 코드는 사용하지 말라.

마법사가 생성한 코드는 평범한 개발자가 작성하는 기능과 줄 단위 로 섞인다. 마법사의 코드이기를 관두고 평범한 개발자 자신의 코드가 되기 시작한다. 그 누구도 자신이 완전히 이해하지 못하는 코드를 내놓아서는 안 된다.

  1. 요구사항을 수집하지 말고 채굴하라.

  2. 사용자처럼 생각하기 위해 사용자와 함께 일하라.

  3. 구체적인 것보다 추상적인 것이 오래 간다.

  4. 프로젝트 용어사전을 사용하라.

  5. 생각의 틀을 벗어나지 말고 틀을 찾아라.

  1. 준비가 되었을 때 시작하라.

  2. 어떤 일들은 설명하기보다 실제로 하는 것이 더 쉽다.

  3. 형식적인 방법의 노예가 되지 말라.

  4. 비싼 도구가 더 좋은 설계를 낳지는 않는다.

  5. 팀을 기능 중심으로 조직하라

  6. 수작업 절차를 사용하지 말라

  7. 일찍 테스트하고 자주 테스트하고 자동으로 테스트하라

  8. 모든 테스트가 통과하기 전엔 코딩이 다 된게 아니다.

  9. 파괴자를 써서 테스트를 테스트하라

버그가 의도적으로 생기도록 한 다음 테스트가 불평을 해대는지 확인하라

  1. 코드 커버리지보다 상태 커버리지를 테스트하라

  2. 버그는 한 번만 잡아라

아무리 흐린 먹물이라도 가장 훌륭한 기억력보다 낫다. 문서화를 전체 개발 프로세스의 필요불가결한 부분으로 포용한다.

  1. 한국어도 하나의 프로그래밍 언어인 것처럼 다루라.

  2. 문서가 애초부터 전체의 일부가 되게 하고 나중에 집어넣으려 하지 말라

  1. 사용자의 기대에 부드럽게 넘어서라

  2. 자신의 작품에 서명하라

개발자는 넓은 범위에 걸친 여러 전문 분야의 기술들을 사용해서 소프트웨어를 개발하는 사람. 단순한 프로그래머 이상이면서, 기술을 갖추되 컴퓨터 과학자보다 초점은 더 넓고 팀 기반 환경에서 개발하기 위해 필요한 팀 및 사회적 기술을 갖춘 사람.