Skip to content

Instantly share code, notes, and snippets.

@M1zz
Last active May 17, 2020 17:32
Show Gist options
  • Save M1zz/75ee113e12af934d9926ed507f42a50f to your computer and use it in GitHub Desktop.
Save M1zz/75ee113e12af934d9926ed507f42a50f to your computer and use it in GitHub Desktop.

원본 : https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a6f

읽기전에 : 저는 여기에 제시된 내용(에드몬드 라우의 책의 개요)을 제작하지 않았습니다. 인터넷 어딘가에서 복사하여 붙여 넣었지만 원본 소스가 정확히 무엇인지 기억나지 않습니다. 또한 저자의 이름을 찾을 수 없었기 때문에 적절한 크레딧을 줄 수 없습니다.

이펙티브 엔지니어

이펙티브 엔지니어란?

이펙티브 엔지니어란 일을 제대로 끝내는 사람들입니다. 그들은 결과를 산출합니다.

올바른 사고 방식 채택

큰 영향을 미치는 일에 집중하라

  • 레버리지 = 생성된 임팩트 / 투자한 시간
  • 레버리지을 효율성의 척도로 사용하세요.
  • 임팩트의 80%는 작업의 20%에서 발생합니다.
  • 쉬운 승리 만이 아니라 높은 레버리지에 집중하십시오.

학습을위한 최적화

  • 필요한 경우 작업을 변경하십시오.
  • 학습 최적화는 높은 레버리지를 가져옵니다.
  • 성장을 위한 사고 방식을 채택하십시오.
    • 사람들과 대화하세요. 스토리 텔링에 능숙해지세요. 시간을 들일수록 나아집니다.
    • 성장을 위한 사고 방식을 가진 사람들은 노력을 통해 지식과 기술을 습득하고 발전시킬 수 있다고 생각합니다.
    • 당신의 이야기를 만드세요.
  • 학습 속도에 투자
    • 다양한 분야를 학습하세요. 다양한 분야에 대한 학습은 기하 급수적인 성장으로 이어집니다. 학습은 빨리 시작 될수록 좋습니다.
    • 쉬운 작업을 수행하는 것은 엄청난 기회 비용입니다. 복합 학습의 기회를 놓칠 수 있습니다.
    • 수익성보다는 학습을 우선시하십시오.
    • 학습속도가 가장 높은 활동에 시간을 투자하십시오.
  • 학습에 도움이되는 작업 환경을 찾으십시오.
    • 빠른 성장을 할 수 있는 회사 (# 문제 수 >> # 자원). 해결했을 떄 영향력이 큰 문제를 선택할 수 있는 기회를 잡으세요.
    • 우선 순위가 높은 프로젝트를 수행하고 있는지 확인하십시오.
    • 개방성 : 호기심을 가지�고 문제를 해결하려는 문화를 찾으십시오.
    • 빠른 페이스의 속도.
    • 사람들은 당신보다 똑똑합니다.
    • 자율성 : 작업 대상을 선택할 자유. 소규모 회사 => 더 많은 자율성.
  • 업무 중 가져야 할 마음가짐.
    • 새로운 기술을 매일 습득하는 습관을 만드십시오.
    • 뛰어난 엔지니어가 작성한 코드를 읽습니다.
    • 모르는 코드는 두려움없이 뛰어 들어보십시오.
    • 항상 배우십시오. 수요가 많은 기술에 투자하십시오.
    • 책을 읽으십시오. 회의에 참석하십시오.
    • 강력한 인간 관계를 구축하고 유지하십시오.

정기적인 우선 순위 지정

  • 잘못된 아이디어를 다루는 데 드는 기회 비용으로 인해 성장이 지연 될 수 있습니다.
  • ROI(Return On Investment) = 투자수익을 기준으로 작업의 우선 순위를 정하십시오.
  • 정기적인 우선 순위 지정은 높은 레버리지를 취하는 방법입니다.
  • TODO 목록에서 :
    • 투두 리스트를 나열 할 때 '단일작업'의 목록을 유지하십시오.
    • 무언가를 기억하려고하지 마십시오. 뇌는 기억력이 좋지 않습니다. 오히려 처리에 능숙합니다.
  • 정기적으로 자문 해보십시오. 이것이 내가 작업해야 할 가장 중요한 것인가요?
  • 직접 가치를 창출하는 것에 집중하십시오.
  • 아니오라고 말하는 것을 배우십시오.
  • 중요하고 긴급하지 않은 것에 집중하십시오.
  • 깊이 집중하는 방법을 찾으십시오. "플로우 단계의 집중은 너무 깊어서 시간 감각과 자신의 문제마저 잃게합니다."
  • 가능하면 일정에 더 긴 집중의 시간 블록을 계획하십시오.
  • 진행중인 작업량을 제한하십시오.
    • 컨텍스트 전환 비용은 높습니다.
  • 우선 순위를 정하는 것은 어렵습니다.
  • 우선 순위는 높은 이익을 가져다 줍니다. 올바른 작업 순서는 수행하는 능력에 큰 영향을 미칩니다.

반복 학습에 대한 투자

  • 지속적인 배포(CD/CI)는 큰 레버리지를 가져다 줍니다.
    • 지속적인 배포는 코드를 수동으로 배포 할 때에 비해 많은 시간을 절약 해줍니다. 엔지니어는 일을 끝내는 사람들입니다. 이펙티브 엔지니어는 결과를 산출합니다.
  • 빨리 배우기 위해 빨리 움직이십시오.
    • 빨리 움직이면 빠르게 문제를 해결할 수 있습니다.
    • 빠르게 움직이면 더 많은 것을 쌓고, 더 빠른 속도로 배울 수 있습니다.
  • 시간 절약 도구에 투자하십시오.
    • 두 번 이상 무언가를 해야하는 경우 세 번째에는 도구를 만드십시오.
    • 도구는 '하루'라는 경계를 넘는 영향을 줄 조력자입니다.
    • 빠른 도구가 더 자주 사용됩니다.
    • 빠른 툴은 이전에는 불가능했던 새로운 워크 플로우를 가능하게합니다.
    • 도구로 생산성이 급증합니다.
    • 도구의 시간 절약 속성도 팀 채택에 따라 확장됩니다.
  • 디버깅 및 유효성 검사 루프를 줄입니다.
    • 디버깅 워크 플로를 최적화하는데 소요되는 추가 시간은 적은 노력으로 성가신 버그를 해결하는 데 도움이 됩니다.
    • 디버깅은 어렵습니다. 시간이 많이 걸립니다. 디버깅 루프를 단축하기위한 사전 투자는 그만한 가치가 있습니다.
  • 넓은 범위의 테스트는 빌드 및 사이트 깨짐을 줄여줍니다.
  • 사람들이 프로그램을 실행하도록 장려하기 위한 빠른 단위 테스트.
  • 개발 시간을 단축하기 위한 빠른 incremental 컴파일 및 리로드.
  • 당신의 프로그래밍 환경을 마스터하십시오.
    • 하나의 에디�. 하나의 프로그래밍 언어를 다루는 고급 스킬. Shell과 키보드로 수동 워크 플로우를 자동화합니다. Interactive shell을 사용하십시오. 특정 테스트를 쉽게 실행할 수 있습니다.
  • 더 빠르게 반복하면, 빠르게 배울 수 있습니다.

개선하고 싶은 것을 측정하십시오

  • 메트릭을 사용하여 진행 상황을 주도하십시오.
    • 측정 할 수 없으면 개선 할 수 없습니다.
    • 좋은 통계.
      • 올바른 일에 집중할 수 있도록 도와줍니다.
      • 앞으로 전진합니다.
      • 향후 회귀에 대비할 수 있습니다.
      • 성능 튜닝 : 모든 변경은 메트릭을 엄격하게 개선해야합니다.
      • 메트릭이 잘못되면 원치 않는 동작이 발생할 수 있습니다.
      • 예 :
        • 일한 시간 < 생산성.
        • 클릭률 < 긴 클릭률.
    • 선택한 측정 항목은 결정 및 행동에 영향을줍니다.
    • 최적화되면 팀에 대한 영향을 극대화하는 측정 항목을 찾으십시오.
    • 실행 가능한 메트릭 : 팀의 노력을 통해 팀원의 행동을 편하게 설명 할 수 있습니다.
    • 반응 형 메트릭 : 특정 변경 사항이 = ve 또는 -ive 인지에 대한 피드백을 제공하기 위해 빠르게 업데이트됩니다.
    • 메트릭을 선택하는 것은 높은 레버리지를 취합니다.
    • 올바른 측정 항목을 선택할 시간을 정하십시오.
  • 무슨 일이 일어나고 있는지 이해하기 위해 모든 것을 측정 하십시오.
    • 무엇이든 측정하고 모든 것을 측정하십시오.
    • Graphite, StatsD. 한 줄의 코드로 새로운 카운터 또는 타이머를 즉석에서 정의 할 수 있습니다.
    • 달성하고자하는 목표를 측정하는 것은 높은 레버리지를 취하는 것 입니다.
  • 유용한 숫자를 내면화하십시오.
    • 유용한 숫자에 대한 지식은 이익을 극대화하기위한 노력을 어디에 투자해야하는지 알 수 있는 귀중한 지름길을 제공합니다.
    • 선행 작업이 필요합니다. 정확할 필요는 없으며 대강의 아이디어만으로 충분합니다.
    • 유용한 숫자를 알면 엔벨로프 계산을하여 실제로 디자인을 만들지 않고도 디자인의 성능 속성을 신속하게 평가할 수 있습니다.
    • 유용한 숫자를 내면화하면 이상을 발견하는 데 도움이됩니다. 데이터 무결성에 대해 회의적이 되십시오.
  • 데이터를 자유롭게 기록하십시오.
  • 데이터 정확도를 더 빨리 반복 할 수있는 도구를 구축하십시오.
  • 더 빨리 데이터를 검사하십시오.
  • 숫자가 떨어지면 더 빨리 파 내십시오.

✔️ 진행 상황을 측정하십시오. 최상위 측정 항목을 신중하게 선택하십시오. 시스템을 계측하십시오. 당신의 숫자를 파악하세요. 데이터 무결성을 우선시하십시오.

아이디어를 조기에 자주 확인하라.

  • 조기에 검증하지 않으면 노력이 낭비됩니다.
  • 피드백을 지연시키지 마십시오.
  • 작업을 검증하는 노력이 적은 방법을 찾으십시오.
  • 소규모 배치작업의 힘. 흐름을 중지하여 큰 실수를하지 않도록 도와줍니다.
  • 반복적으로 문제에 접근하십시오.
  • 큰 구현을 하지마시오.
  • 혼자 일하나요? 조심하세요. 추가로 목소리를 내고 피드백을받으세요.

프로젝트 추정 기술을 향상시킵니다.

  • 맨 먼스(인력)의 환상을 조심하세�요. 커뮤니케이의 오버 헤드는 매우 큽니다.
  • 위험을 조기에 줄이십시오.
  • 프로젝트 재 작성하세요 - 초기의 작성본은 거의 항상 실패합니다.
  • 추가 시간은 생산성을 저하시킵니다. 번아웃을 일으킵니다.
  • 가장 위험한 작업을 먼저 수행하십시오.
  • 미지의 위험에 대비한 시간 계산을 허용하십시오.

실용주의와 품질의 균형

  • 높은 코드 품질. 코드 가독성.
  • 지속 가능한 코드 검토 프로세스를 설정하십시오.
  • 코드 리뷰 도움말 :
    • 버그 및 디자인 문제를 조기에 파악하십시오.
    • 코드베이스에 대한 실무 지식 공유
    • 장기 민첩성이 향상됩니다. 이해하기 쉽고 수정이 쉽습니다.

추상화를 통한 복잡성 관리

  • 예 : MapReduce.
  • 올바른 추상화는 큰 차이를 만듭니다.
  • “올바른 것을 고르면, 프로그래밍은 자연스럽게 디자인에서 흘러 나옵니다. 모듈은 작고 간단한 인터페이스를 갖습니다. 광범위한 재구성없이 새로운 기능이 더 적합 할 것입니다. "
  • "잘못된 것을 고르면, 프로그래밍은 놀라 울 정도로 놀라운 일이 될 것이다. 인터페이스는 예상치 못한 상호 작용을 수용해야하므로 인터페이스가 바로크하고 어색해지며 심지어 가장 간단한 변경조차하기가 어렵다."
  • 올바른 추상화는 엔지니어링 생산성을 몇 배나 높일 수 있습니다.
  • 간단한 추상화는 여러 개념을 서로 섞지 않아도되므로 함께 고려하지 않고 독립적으로 추론 할 수 있습니다.
  • 좋은 추상화를 설계하려면 작업이 필요합니다.
  • 추상화의 사용법과 인기는 그 품질에 대한 합리적인 대리를 제공합니다.

테스트 자동화

  • 단위 테스트 사례 및 일부 통합 테스트는 점점 커지는 코드베이스를 관리하는 확장 가능한 방법을 제공합니다.
  • 광범위하고 자동화 된 테스트 모음은 품질을 검증하고 회귀를 방지함으로써 전반적인 오류율을 줄일 수 있습니다.
  • 또한 테스트를 통해 엔지니어는 특히 큰 리팩토링을 크게 변경할 수 있습니다.
  • 이러한 이점에도 불구하고 자동화 된 테스트 문화를 정착시키기가 어려울 수 있습니다.
  • 높은 레버리지 테스트에 중점을 둡니다.
  • 더 많은 테스트를 작성하고 선의의 피드백주기를 만들고 더 많은 개발 시간을 절약하십시오.

기술 부채 상환

  • 기술 부채는 코드베이스의 건강과 품질을 개선하는 데 필요한 모든 연기 된 작업을 말하며 다루지 않은 채 방치하면 속도가 느려집니다.
  • 기술 부채는 시간 내에 상환되는 한 괜찮습니다.
  • 자주 리팩토링하십시오.

운영 복잡성 감소

  • 낮은 기술을 지속적으로 거부하세요. 빛나는 신기술에 흔들리지 마십시오.
  • 추가적인 기술은 결국 잘못을 일으킬 수 있습니다. 당신의 시간이 필요합니다.
  • 간단한 일을 먼저하십시오.
  • 운영의 단순성을 받아들입니다.
  • 가장 먼저 떠오르는 솔루션은 일반적으로 복잡합니다. 멈추지 마십시오. 양파 층을 벗겨 내십시오.
  • 아키텍처를 단순화하여 운영 부담을 줄입니다.
  • "우리의 미래 운영 부담을 줄이면서 작업을 수행 할 수있는 가장 간단한 솔루션은 무엇입니까?"
  • 단순성에 중점을 둔 분야는 높은 활용입니다.

이른 실패

  • 즉시 그리고 눈에 띄게 실패합니다.
  • 반드시 사용자를 위한 프로그램의 충돌을 의미하지는 않습니다.
  • 문제를 신속하게 해결할 수 있습니다.
  • 빠른 실패는 디버깅 시간을 절약하므로 활용도가 높습니다.

끊임없이 자동화

  • 기계적인 부분의 자동화는 좋습니다.
  • 의사 결정 자동화는 안됩니다.
  • 신속하게 대응하고 회복 할 수 있는 능력을 연마하십시오.
    • 장애 방지 보다는 신속하게 복구 활용을 활용합니다.
  • “성공을위한 스크립트”, 실패 시나리오를 연습하고 신속하게 복구 할 수있는 능력에 노력하십시오.
  • 배치 프로세스를 견고하게 만들기
  • 프로세스를 재시도 가능하게하십시오 (즉, 전역 상태를 떠나지 않음).

팀의 성장에 투자

  • 조직의 합류에 투자하십시오.
  • 엔지니어링 단계를 올라 갈수록 개인의 기여가 아니라 주변 사람들에게 미치는 영향으로 효과가 더 많이 측정됩니다.
  • "당신은 팀 전체를 다른 팀보다 향상시킬 경우 직원 엔지니어입니다. 회사 전체를 다른 팀보다 개선 할 경우 주요 엔지니어입니다. '업계를 개선하고 있습니다.' - 주변의 모든 사람이 성공하도록하는 데 중점을 둡니다.
  • 당신의 커리어는 팀의 성공에 달려 있습니다.
  • 모두의 책임을 다하십시오.
  • 코드의 공유 소유권.
    • 버스지수를 두 명 이상 유지하십시오.
    • 공유 소유권은 격리 된 정보를 제거합니다.
  • 사후 모템을 통해 집단적 지혜를 쌓으십시오.
  • 자동화 된 테스트에 투자하십시오.
    • 자동화 된 테스트 케이스는 리팩토링시 신뢰도가 높아집니다.
    • 코드가 최신 인 경우 테스트 사례를 작성하십시오.
    • 100 % 코드 범위에 대해 독단적으로 행동하지 마십시오.
    • 테스트 가치는 시간이 지남에 따라 증가하고 작성 비용은 줄어 듭니다.
  • 최고를 고용하십시오.
  • 훌륭한 조언자와 함께하십시오

☀️“레버리지는 효과적인 엔지니어가 활동을 보는 데 사용되는 렌즈입니다. ☀️

읽어볼 만한 책 10권 :

  • Peopleware Productive projects and Teams. Amazon. My Summary.
  • Team Geek: A Software Developer’s Guide to Working Well with Others. (Debugging Teams) Amazon. My Summary.
  • High Output Management
  • Getting Things Done: The Art of Stress-Free Productivity
  • The 4-Hour Workweek: Escape 9-5, Live Anywhere, and Join the New Rich
  • The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change
  • Conscious Business: How to Build Value Through Values
  • Your Brain at Work
  • Flow: The Psychology of Optimal Experience
  • Succeed: How We Can Reach Our Goals

팔로우 추천 블로그 :

  • http://www.theeffectiveengineer.com/ - Effective Engineer는 개인의 블로그로 엔지니어링 습관, 생산성 팁, 리더십 및 문화에 대해 글을 씁니다.
  • http://www.kalzumeus.com/ - Patrick McKenzie는 자체 소프트웨어 비즈니스를 운영하고 있으며 경력 조언, 컨설팅, SEO 및 소프트웨어 판매에 관한 많은 훌륭한 기사를 작성했습니다.
  • http://katemats.com/ - Microsoft 및 Amazon과 같은 대기업 및 신생 기업에서 근무한 Kate Matsudaira는 블로그에서 기술, 리더십 및 생활에 대한 조언을 공유합니다.
  • http://randsinrepose.com/ - Michael Lopp은 Netscape, Apple, Palantir 및 Pinterest에서 수년간 리더십 직책을 수행했으며 기술 수명 및 엔지니어링 관리에 관해 글을 썼습니다.
  • http://softwareleadweekly.com/ - Oren Ellenbogen은 엔지니어링 리더십과 문화에 관한 주간 주간 뉴스 레터를 큐 레이션합니다.
  • http://calnewport.com/ - Georgetown의 컴퓨터 과학 조교 인 Cal Newport는 성공적이고 만족스러운 삶을위한 증거 기반 조언에 중점을 둡니다.
  • http://www.joelonsoftware.com/ - Stack Exchange의 공동 창립자 인 Joel Spolsky는 블로그에 모든 종류의 지혜로운 프로그래밍 진주를 제공합니다.
  • http://martinfowler.com/ - 리팩토링 (Refactoring) 책의 저자 인 Martin Fowler는 소프트웨어 팀의 생산성을 극대화하는 방법에 대해 쓰고 일반적인 프로그래밍 패턴에 대한 자세한 내용을 제공합니다.
  • http://pgbovine.net/ - 컴퓨터 과학 교수 필립 구오는 대학원과 직장 경험에 대해 광범위하고 공개적으로 글을 썼습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment