이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
1장 여정을 시작하며〉 개발자로서의 첫 출발, 앞으로 어떤 길이 펼쳐질까목표를 세우자여정을 위한 지도__초보자__질풍노도의 성장__신뢰할 수 있는 기여자__운영의 바다__능력자의 땅전진, 앞으로!2장 역량을 높이는 의식적 노력〉 경쟁력을 갖춘 개발자가 되기 위해 스스로 해야 할 일실전에 앞서 익혀야 할 자기주도 학습 방안__본격적인 학습을 위한 몸풀기__직접 부딪혀보며 배우자__코드 동작을 이해하기 위해 다양한 실험을 해보자__문서 읽는 습관은 몸에 배야 한다__발표 영상을 찾아서 보자__때로는 밋업과 컨퍼런스도 참여하자__시니어 엔지니어의 업무를 체험하고 협업하자__개인 프로젝트 활동에서도 배움을 얻을 수 있다제대로 질문하자__스스로 문제를 해결해보자__제한 시간을 정하자__자신이 시도한 방법을 공유하자__동료를 방해하지 말자__비동기식 멀티캐스팅 의사소통을 시도하자__동기식 요청은 한 번에 보내자성장의 장애물을 극복하자__가면 증후군__더닝 크루거 효과개발자의 필수 체크리스트레벨업을 위한 읽을거리3장 코드와 함께 춤을〉 레거시 코드에 임하는 우리의 자세소프트웨어 엔트로피는 늘어나게 마련이다결코 피할 수 없는 기술 부채__기술 부채를 상환하는 방법코드 변경으로 인한 고통을 조금이라도 줄이려면__레거시 코드 변경 알고리즘을 활용하자__코드는 처음보다 더 깔끔하게 유지하자__점진적으로 변경하자__리팩터링은 실용적으로 진행하자__IDE를 활용하자__버전 제어 시스템의 권장 기법을 활용하자소프트웨어 개발에서 빠지기 쉬운 함정을 최대한 피하려면__되도록 검증된 기술을 사용하자__제발 악동은 되지 말자__업스트림 커밋 없이 포크만 하는 것은 금물이다__코드 재작성에 대한 욕구를 견디자개발자의 필수 체크리스트레벨업을 위한 읽을거리4장 운영 환경을 고려한 코드 작성〉 개발 환경과 프로덕션 환경은 엄연히 다르다장애에 대비하기 위한 방어적 프로그래밍 방안__null 값 사용은 피하자__불변 변수를 사용하자__타입 힌트와 정적 타입 검사를 사용하자__입력값을 검사하자__예외를 활용하자__예외는 구체적으로 정의하자__예외는 일찍 던지고 최대한 나중에 처리하자__재시도는 현명하게__시스템에 멱등성을 부여하자__리소스를 해제하자문제 원인을 찾기 위한 로깅 방안__로그 레벨을 사용하자__로그는 원자적으로 작성하자__로그는 신속하게 기록하자__민감한 데이터는 로그에 기록하지 말자애플리케이션 동작 측정을 위한 지표 활용 방안__표준 지표 라이브러리를 사용하자__모든 것을 측정하자오늘날 분산 환경에서 더욱 중요해진 추적설정으로 런타임 동작을 손쉽게 조정하려면__지나치게 창의적인 설정은 금물이다__모든 설정을 로그에 기록하고 검증하자__기본값을 제공하자__관련된 설정을 그룹화하자__설정도 코드처럼 테스트하자__설정 파일은 깔끔하게 유지하자__배포된 설정은 변경하지 말자때로는 도구가 운영의 성패를 결정짓기도 한다개발자의 필수 체크리스트레벨업을 위한 읽을거리5장 피할 수 없는 코드 의존성의 관리 〉 복잡한 프로그램을 짜봐야 비로소 깨닫는 의존성의 진실의존성 관리를 이해하기 위한 필수 개념__시맨틱 버저닝__이행적 의존성현업이면 누구나 한 번은 겪는 의존성 지옥__의존성 지옥에서 탈출하자__의존성을 격리하자__의존성은 신중하게 추가하자__버전을 고정하자__의존성의 범위를 좁히자__순환 의존성에 주의하자개발자의 필수 체크리스트레벨업을 위한 읽을거리6장 테스트! 개발자의 든든한 지원군〉 업무 부하를 낮추면서 시스템 동작도 검증하는 테스트 방안테스트를 꼭 해야 할까테스트의 유형과 기법다양한 테스트 도구__모킹 라이브러리__테스트 프레임워크__코드 품질 보증 도구개발자 스스로 직접 테스트를 작성하자__테스트는 깔끔하게 작성하자__과도한 테스트는 삼가자테스트 결정성: 항상 동일한 테스트 결과를 만들려면__난수생성기에 적절한 시드값을 사용하자__단위 테스트에서 원격 시스템을 호출해서는 안 된다__클럭을 주입하자__슬립과 타임아웃의 사용을 삼가자__네트워크 소켓과 파일 핸들을 닫자__0번 포트에 바인딩하자__파일과 데이터베이스에 대해 고유한 경로를 생성하자__이전 테스트의 상태를 격리하고 해제하자__테스트의 실행 순서에 의존하지 말자개발자의 필수 체크리스트레벨업을 위한 읽을거리7장 올바로 주고받는 코드 리뷰〉 원활한 팀 협업과 높은 코드 품질을 목표로코드 리뷰는 왜 필요한가코드 리뷰를 제대로 받는 방법__코드 리뷰를 받을 때 준비해야 할 사항__리뷰 초안이 있으면 위험을 낮출 수 있다__테스트 실행을 위한 리뷰 제출은 금물이다__코드 변경사항이 많을 때는 좀 더 면밀하게__자신의 코드에 너무 집착하지 말자__공감력을 갖되 무례함은 참지 말자__주도적으로 행동하자코드 리뷰를 제대로 해주는 방법__리뷰 요청을 선별하자__리뷰를 위한 시간을 마련하자__코드 변경사항을 이해하자__포괄적인 피드백을 제시하자__좋은 점은 인정하자__이슈, 제안, 사소한 흠결은 잘 구분하자__대충대충 리뷰는 금물__웹 기반 리뷰 도구에만 의존하지는 말자__테스트 리뷰도 잊지 말자__어떻게든 결론을 맺어야 한다개발자의 필수 체크리스트레벨업을 위한 읽을거리8장 고객 앞으로! 소프트웨어 전달〉 마침내 프로덕션 환경에 안착시킬 소프트웨어의 종착지소프트웨어 전달의 4가지 단계효과적인 버전 제어를 위한 브랜칭 전략빌드 단계__패키지에 버전을 명시하자__리소스는 각각 별도로 패키징하자릴리스 단계__릴리스를 남의 일로 여기지 말자__패키지를 릴리스 리포지토리로 발행하자__릴리스는 불변성을 갖게 하자__자주 릴리스하자__릴리스 일정은 투명하게 공유하자__변경 로그와 릴리스 노트를 발행하자배포 단계__배포를 자동화하자__배포는 원자적으로 수행하자__애플리케이션을 독립적으로 배포하자롤아웃 단계__롤아웃을 모니터링하자__기능 플래그를 활용하자__서킷 브레이커를 이용해 코드를 보호하자__서비스 버전은 병렬로 올리자__다크 모드로 론칭하자개발자의 필수 체크리스트레벨업을 위한 읽을거리9장 긴급대응 온콜 업무〉 언제 일어날지 모르는 장애에 대응하는 절차와 방안긴급한 비상상황에 대응하는 온콜 업무반드시 갖춰야 할 온콜 스킬__항시 언제라도 대응할 준비를 갖추자__주의를 늦추지 말고 집중하자__업무 우선순위를 정하자__명확하게 의사소통하자__업무 진척사항을 추적하자장애 처리의 5가지 단계__선별__조율__완화__해결__후속 조치지원 업무도 엄연한 온콜 업무다영웅이 되려 하지는 말자개발자의 필수 체크리스트레벨업을 위한 읽을거리10장 견고한 소프트웨어를 위한 기술 설계 절차〉 대규모 변경에 적합한 소프트웨어 설계와 문서화 기법고깔형의 기술 설계 절차올바른 기술 설계를 하려면__문제를 정의하자__해결 방법을 조사하자__다양한 실험을 해보자__충분한 시간을 투자하자의사소통을 위한 설계 문서 작성 방안__중요한 변경사항은 문서화해두자__설계 문서를 작성하는 이유를 이해하자__글쓰는 법을 배우자__설계 문서는 최신 상태로 유지하자설계 문서 템플릿의 기본 구조__개요__현재 상태와 컨텍스트__변경해야 하는 이유__요구사항__고려할 수 있는 해결책__채택하려는 해결책__설계와 아키텍처__테스트 계획__롤아웃 계획__미결 사항__부록설계 과정에서도 협업은 중요하다__팀의 설계 리뷰 절차를 이해하자__갑작스런 상황은 만들지 말자__설계를 논의하며 브레인스토밍을 하자__설계에 참여하자개발자의 필수 체크리스트레벨업을 위한 읽을거리11장 소프트웨어 수명주기를 고려한 진화하는 아키텍처 구현 〉 성장하고 발전하는 소프트웨어를 만들기 위한 핵심 원칙복잡도를 이해하자진화하는 아키텍처를 위한 설계 원칙__YAGNI 원칙: 당장 필요치 않다면 구현하지 말 것__최소 충격 원칙: 사용자를 놀래키지 말 것__도메인 지식은 캡슐화돼야 한다진화하는 API를 위한 설계 원칙__API 크기는 작게 유지하자__잘 정의한 서비스 API를 노출하자__API 변경에는 호환성을 유지하자__API의 버전을 관리하자진화하는 데이터를 위한 설계 원칙__데이터베이스를 격리하자__스키마를 사용하자__스키마 마이그레이션을 자동화하자__스키마 호환성을 유지하자개발자의 필수 체크리스트레벨업을 위한 읽을거리12장 효율적인 협업을 위한 애자일 문화〉 모두가 알지만 실천하기는 쉽지 않은 애자일애자일 선언문애자일 방법론 프레임워크스크럼으로 하는 애자일 개발 방안__사용자 스토리__태스크__스토리 포인트__백로그 분류__스프린트 계획신속한 업무 공유를 위한 스탠드업 회의진솔한 피드백이 오가야 하는 리뷰재평가와 조정을 위한 회고중장기 계획을 위한 로드맵 수립개발자의 필수 체크리스트레벨업을 위한 읽을거리13장 관리자, 팀장, 상사와 함께 일하기〉 한마음 한뜻으로 공동의 목표를 향해 관리자들이 하는 일성공적인 업무 수행과 평가를 위한 절차를 마련하자__일대일 회의__PPP 회의__OKR__성과 평가팀장이나 상사도 여러분의 관리가 필요하다__팀장의 피드백이 적을 경우 적극 요청하자__팀장도 여러분의 피드백을 원한다__여러분의 목표에 대해 팀장과 허심탄회하게 논의하자__다 시도해봤는데도 안 된다면개발자의 필수 체크리스트레벨업을 위한 읽을거리14장 경력 관리에 대한 조언〉 경력 관리는 빠를수록 좋다시니어 엔지니어, 그리고 더 높은 곳을 향해진로에 대한 조언__T자형 인재가 되자__개발자를 위한 다양한 프로그램에 참여하자__승진을 원하다면 이렇게 하자__이직은 신중하게__다만 번아웃을 경계하라마치며
|
Chris Riccomini
Dmitriy Ryaboy
장현희 의 다른 상품
| 이 책에서 다루는 내용 | - 처음 회사에 입사해 업무를 시작할 때 벌어질 일- 기술 부채를 해소하고 방지하며, 소프트웨어를 작성하고 안전하게 배포하고, 의존성을 관리하는 방법- 레거시 코드 변경 알고리즘을 이용해 처음보다 더 코드를 깔끔하게 유지하는 방법- 로깅, 지표, 설정, 방어적 프로그래밍을 통해 운영 환경을 고려한 코드를 쓰는 방법- 결정적 테스트를 구축하고 코드 리뷰를 수행하며 다른 프로그래머의 코드를 평가하는 방법- 다른 개발자와 코드를 리뷰하고 테스트하며 동료, 팀장, 상사와 효율적으로 협업하는 방법 - 실험과 문제의 정의, 문서화 및 협업을 비롯해 기술 설계 절차에 대한 전반적인 단계- 긴급대응 온콜 업무 중 프로덕션 환경에서 발생하는 장애를 처리하는 방법- 아키텍처적 기법을 적용해 코드를 더 쉽게 변경하는 방법- 스프린트 계획, 스탠드업 미팅, 회고 등 애자일 방법론을 활용하는 방법- 시니어나 그 이상의 직책으로 자연스럽게 승진하는 방법 등 경력 관리와 대인관계 기술 | 이 책의 대상 독자 | 취업준비생, 사회초년생, 신규 입사자, 이직자, 경력 개발자 등 IT 조직에 몸담거나 소프트웨어 엔지니어로 살아가는 모든 개발자. 그리고 개발자를 이해해야 하는 비개발 관리조직 직군| 이 책의 구성 | 누구든 목적지에 도달하려면 지도가 필요하다. 이 책에서는 여러분의 경력을 시작하는 데 필요한 내용을 다룬다. 먼저 모든 신입 개발자가 시작하는 ‘초보자’ 단계부터 시작한다. 그런 다음 코딩을 시작하고 규칙과 절차를 배우는 ‘질풍노도의 성장’ 단계로 이동한다. 그다음은 의미 있는 기능을 출시하는 ‘신뢰할 수 있는 기여자’ 단계로 넘어간다. 기능을 출시한다는 것은 ‘운영의 바다’에서 부는 거친 풍랑을 헤치며 항해를 하게 된다는 뜻이다. 결국 여러분은 ‘능력자의 땅’이라는 안전한 천국에 상륙하게 될 것이다. 팀과 협업하면서 가치 있는 기능을 지속적으로 전달할 수 있는 본격적인 소프트웨어 엔지니어 역량을 갖추게 된다. 이 책은 여러분이 홀로 긴 여정을 떠나는 데 도움을 주고자 한다.| 지은이의 말 | 여러분은 이제 어려운 문제를 해결하고 고품질의 코드를 작성하며 그렇게 만든 작품을 스스로 사용해 볼 수 있는 개발자라는 새로운 직업을 갖게 됐다. 얼마나 멋진 일인가! 축하한다. 모쪼록 흥미로운 과제를 해결하고, 멋지고 똑똑하며 열정적인 동료들과 함께 유용한 것을 앞으로 만들어내길 바란다.하지만 여러분은 프로그램을 작성하는 일(컴퓨터를 이용해 문제를 해결하는 일)이 전부가 아니라는 점을 곧 알아채게 되거나, 어쩌면 이미 파악했을 수도 있다. 프로그램 작성은 효율적인 소프트웨어 엔지니어가 되기 위한 정말 중요한 스킬 중 하나지만, 학교에서는 절대 가르쳐주지 않는 다른 스킬들도 갖춰야 한다. 이 책은 그런 스킬을 배울 수 있는 책이다.이 책에서는 프로덕션 소프트웨어를 구현하고 테스트하며 실행하기 위한 현대적인 사례들을 소개한다. 또한 강력한 팀과 더 나은 팀 동료를 구축하기 위한 행동 양식과 방법도 설명한다. 타인에게서 도움을 얻는 법, 설계 문서를 작성하는 법, 레거시 코드를 다루는 법, 긴급 대응을 수행하는 법, 작업 계획을 세우는 법 그리고 여러분의 관리자나 팀과 소통하는 법 등에 대한 실용적인 조언을 제공할 것이다.물론 이 책이 여러분이 알아야 할 모든 것을 담지는 못한다. 그럴 수도 없을 뿐더러 만일 다 담았다 해도 읽다가 지칠 것이다. 대신 우리는 컴퓨터공학 학부과정에서는 일반적으로 다루지 않는 가장 중요한 정보를 제공하는 것에 초점을 맞춘다. 이런 주제는 깊이가 있으므로 여러분이 더 많은 정보를 원할 경우 권장하는 추가 자료를 제공하는 ‘레벨업을 위한 읽을거리’ 절을 각 장 말미에 추가했다.처음 몇 개 장은 여러분이 회사에서 개발자로서 경력을 시작할 때 어떤 것을 기대할 수 있는지를 설명한다. 중반부터는 기술적인 내용으로 넘어가 프로덕션 환경에 적합한 품질의 코드 작성, 효율적인 테스트, 코드 리뷰, 지속적 통합과 전달, 설계 문서, 아키텍처상의 권장 기법 등을 소개한다. 마지막 3개 장은 애자일 계획, 관리자와의 협업, 경력 관리에 대한 조언 등 조금 더 소프트한 스킬을 다룬다.이 책은 벤처캐피탈의 투자를 받아 빠르게 성장한 실리콘밸리의 여러 비상장 기업을 거치며 팀을 구축해온 우리의 경험을 바탕으로 집필했다. 여러분이 각자 처한 상황은 이 책에서 다루는 내용과 다를 수 있지만 그래도 괜찮다. 회사마다 구체적인 사항은 달라도 기본은 크게 다르지 않기 때문이다.우리가 신입으로 처음 경력을 시작할 때 이 책이 있었다면 좋았을 것 같다. 실제 우리 팀에 합류하는 신입 엔지니어에게 이 책을 선물로 주기로 했다. 이 책을 다 읽고 덮을 때쯤 여러분은 전문 소프트웨어 엔지니어가 되려면 어떻게 해야 하는지를 알게 될 것이다. | 옮긴이의 말 | 한국과 호주, 미국, 캐나다 등 여러 나라의 기업에서 소프트웨어 엔지니어로 일하면서 공통적으로 경험했던 한 가지는 좋은 엔지니어링 문화를 구축하는 것은 언어와 문화를 막론하고 어렵다는 점입니다. 사실 좋은 소프트웨어 엔지니어링 문화라는 것의 정의 또한 그다지 구체적이지는 않지요.그럼에도 불구하고 이 분야는 끊임없는 연구와 노력, 발전을 거듭하며 좋은 소프트웨어 엔지니어링 문화의 정의를 조금씩 구체화해 갔습니다. 그리고 그렇게 구체화된 문화를 소개하고 있는 책이 바로 이 책입니다. 한국에서 태어나 한국에서 소프트웨어 엔지니어로 성장한 저는 이 책에서 소개하는 내용이 지금 국내 기업의 소프트웨어 엔지니어링 문화와 아직은 많은 차이가 있다고 느낍니다. 이는 단지 엔지니어링 팀의 문제라기보다는 전반적인 기업 마인드의 차이에서 오는 문제라고 생각하고요.저는 약 10년간 해외 생활을 하다가 최근 한국의 기업에서 프린시펄 소프트웨어 엔지니어로 1년 남짓한 시간을 보냈습니다. 이 기간에 제가 추구했던 엔지니어링 팀의 문화는 이 책에서 소개하는 내용과 거의 일치합니다. 이 책이 조금 더 일찍 출간되어 저의 동료들의 손에 쥐여줬더라면 제가 원했던 문화를 구축하는 것이 조금은 더 수월하지 않았을까 하는 아쉬움도 있지만 그건 모를 일이지요.좋은 엔지니어링 문화를 개인의 노력만으로 구축하기란 거의 불가능에 가깝기 때문입니다. 좋은 문화를 경험한 리더가 아무리 좋은 문화를 만들려 해도 동료들이 이해하고 따라주지 않으면 소용이 없습니다. 좋은 문화를 경험한 동료가 아무리 좋은 문화를 만들려 해도 리더가 그 뜻을 지지해주지 않으면 그 또한 소용이 없고요. 어쩌면 이 책을 읽는 여러분도 그런 경험을 했을지도요.그렇기에 이 책은 비단 이제 막 소프트웨어 엔지니어링 분야에 발을 디딘 신입 엔지니어뿐만 아니라 시니어 엔지니어, 엔지니어링 리드, 나아가 CTO에 이르기까지, 효율적인 의사소통으로 서로 존중하며 함께 목표를 이루기 위해 노력하는 엔지니어링 문화를 팀에 들여오고자 하는 모두에게 강력히 권장할 만한 책입니다. 게다가 엔지니어링 조직 전체가 이 책에서 소개하는 문화를 도입하기 위해 함께 노력한다면 그 영향력과 효과는 더욱 강력해질 테지요.저는 지금 새로운 곳에서 또 다른 목표에 도전하기 위한 시점에 와 있습니다. 이 책이 앞으로의 저는 물론 여러분께도 훌륭한 지침과 가이드가 되어줄 것이라고 믿어 의심치 않습니다.
|