클린 코드, 이제는 파이썬이다 (한 권으로 읽는 파이썬 개발자 성장 프로젝트)

클린 코드, 이제는 파이썬이다 (한 권으로 읽는 파이썬 개발자 성장 프로젝트)

$32.08
Description
가독성 높으며 유지 보수와 기능 확장이 쉬운 파이썬 코드를 원하는가? 기초적인 파이썬 프로그래밍 문법이나 튜토리얼을 끝냈다면, 유능하고 자신감 넘치는 소프트웨어 개발자가 되기 위한 다음 단계는 무엇일까?
노련한 프로그래머의 유쾌한 경험과 진솔한 노하우를 한 권에 담아낸, 현업에서 즉시 적용할 수 있는 파이썬 클린 코드의 모든 것!
파이썬 개발자의 성장과 업그레이드를 위한 실무 프로그래밍 지식 총정리!

| 이 책에서 다루는 내용 |
● 코딩 스타일을 비롯해, 파이썬의 블랙 자동 포매팅 도구를 활용한 클린 코드 작성법
● 일반적인 버그의 원인 파악과 정적 분석기를 활용한 버그 감지
● 쿠키커터 템플릿 도구로 코드 프로젝트의 파일 구조를 짜는 법
● 람다 등 고차 함수의 함수형 프로그래밍 기법
● 파이썬의 내장 timeit과 cProfile 모듈로 코드 속도 프로파일링
● 주석과 독스트링을 유용한 정보로 만드는 방법 그리고 작성 주기
저자

알스웨이가트

AlSweigart
시애틀에거주하는소프트웨어개발자이자기술서저자다.프로그래밍언어가운데파이썬을가장좋아해서파이썬용오픈소스모듈을여럿개발했다.직접집필한모든책을크리에이티브커먼즈라이선스하에웹사이트(https://www.inventwithpython.com/)에서무료로읽을수있도록공개해뒀다.

목차

[1부]준비
1장에러메시지파악과고수의도움을받기위한질문에티켓
__파이썬에러메시지를읽는법
____추적정보조사
____에러메시지검색
__린터를활용한에러방지
__프로그래밍조언을구하는방법
____미리충분한정보를제공해불필요한커뮤니케이션을줄이자
____물음표가붙은질문형식으로문장을서술하자
____적절한웹사이트를찾아질문하자
____질문을요약한표제를달자
____코드로어떤일을하고싶은지를설명하자
____전체에러메시지를제공하자
____전체코드를공유하자
____적절한포매팅으로코드를읽기쉽게만들자
____사람들에게여러분이무엇을시도했는지를알리자
____여러분의설정사항을공유하자
__좋은질문의예시
__정리

2장환경설정과명령행사용방법
__파일시스템
____파이썬의경로
____홈디렉터리
____현재작업디렉터리
____절대경로vs상대경로
__프로그램과프로세스
__명령행
____터미널창열기
____명령행에서프로그램을실행하는방법
____명령행인수
____명령행에서-c옵션으로파이썬코드를실행하는방법
____명령행프로그램에서파이썬프로그램실행
____py.exe프로그램실행
____파이썬프로그램에서명령어실행
____타이핑을최소화하는탭완성기능
____명령어이력보기
____필수명령어모음
__환경변수와PATH
____환경변수보기
____PATH환경변수를이용한작업
____명령행의PATH환경변수바꾸기
____폴더를영구적으로PATH에추가:윈도우환경
____폴더를영구적으로PATH에추가:맥OS와리눅스환경
__명령행을쓰지않고파이썬프로그램을실행하는방법
____윈도우환경
____맥OS환경
____우분투리눅스환경
__정리

[2부]클린코드를위한모범사례,도구,기법
3장코딩스타일정립과코드포매팅자동화
__동료나협업자의신뢰를잃는이유
__스타일가이드와PEP8
__가로간격
____들여쓰기를위한공백문자사용
____코드행내의공백활용
__세로간격
____세로간격의사용예
____세로간격의모범사례
__엄격한코드포매터,블랙
____블랙도구설치방법
____명령행에서블랙을실행하는방법
____코드특정부분에대한블랙비활성화
__정리

4장이해하기쉬운이름
__대소문자표기법
__PEP8의명명규약
__이름의적정길이
____너무짧은이름
____너무긴이름
__검색가능한이름짓기
__농담,말장난,문화적참조는피하자
__내장이름덮어쓰기금지
__역대최악의변수명
__정리

5장코드악취감지와대응
__중복된코드
__매직넘버
__주석처리된코드와죽은코드
__디버깅출력
__숫자접미사가붙은변수
__그냥함수나모듈이어야하는클래스
__중첩된리스트컴프리헨션
__빈예외처리블록과부실한에러메시지
__코드악취에관한잘못된통념
____함수마지막에는return문이하나만있어야한다?
____함수에는try문이둘이상있으면안된다?
____플래그인수는나쁘다?
____전역변수는나쁘다?
____주석은불필요하다?
__정리

6장파이썬다운코드를작성하는법
__파이썬의선(禪)
__의미있는들여쓰기
__흔히잘못사용되는구문
____range()보다는enumerate()를사용하자
____open()과close()보다는with문을사용하자
____==대신is를써서None과비교하자
__문자열포매팅
____문자열에백슬래시가많은경우에는원시문자열을사용하자
____f-문자열을사용한문자열포매팅
__리스트의얕은사본만들기
__파이썬다운딕셔너리사용법
____딕셔너리에서get()과setdefault()를사용하자
____기본값을위해collections.defaultdict를사용하자
____switch문대신딕셔너리를사용하자
__조건식:파이썬의'보기흉한'3항연산자
__변수값작업
____체이닝할당과비교연산자
____변수가여러값중하나인지여부확인
__정리

7장파이썬세상의프로그래밍용어
__각종용어정의
____프로그래밍언어로서파이썬vs인터프리터로서파이썬
____가비지컬렉션
____리터럴
____키워드
____객체,값,인스턴스,아이디
____아이템
____가변데이터타입,불변데이터타입
____인덱스,키,해시
____컨테이너,시퀀스,매핑,집합타입
____이중밑줄메소드,매직메소드
____모듈,패키지
____호출가능객체,일급객체
__흔히혼동되어사용되는용어
____문vs표현식
____블록vs절vs바디
____변수vs속성
____함수vs메소드
____반복가능객체vs반복자
____구문에러vs런타임에러vs의미에러
____파라미터vs인수
____타입강제변환vs타입캐스팅
____프로퍼티vs속성
____바이트코드vs기계어코드
____스크립트vs프로그램,스크립트언어vs프로그래밍언어
____라이브러리vs프레임워크vsSDKvs엔진vsAPI
__정리
__추가정보

8장파이썬에서빠지기쉬운함정들
__루프문진행중에는리스트에서아이템을추가/삭제하지말자
__copy.copy()나copy.deepcopy()없이가변값을복사하지말자
__기본인수에가변객체는사용하지말자
__문자열을문자열연결로생성하지말자
__sort()가알파벳순으로정렬하리라기대하지는말자
__부동소수가완벽히정확할거라고가정하지말자
__부등연산자!=를연달아쓰지말자
__단일아이템튜플에서는쉼표를잊지말자
__정리

9장파이썬의기이한특징들
__256is256은참이지만257is257은참이아닌이유
__문자열인터닝
__파이썬의가짜증감연산자
__아무것도없으면참인all()
__부울값은정수값이다
__다중연산자연달아쓰기
__파이썬의antigravity기능
__정리

10장파이썬다운함수만들기
__함수명
__함수크기의트레이드오프
__함수파라미터와인수
____기본인수
____*와**를사용해함수에인수전달하기
____*를사용해가변인수함수만들기
____**를사용해가변인수함수만들기
____*와**로래퍼함수만들기
__함수형프로그래밍
____부수효과
____고차원함수
____람다함수
____리스트컴프리헨션을이용한매핑과필터링
__결괏값은항상동일한데이터타입이어야한다
__예외발생시키기vs에러코드반환하기
__정리

11장주석과타입힌트
__주석
____주석스타일
____인라인주석
____설명주석
____요약주석
____경험지식을담은주석
____법무정보를담은주석
____전문적인주석
____코드태그와TODO주석
____매직주석과소스파일인코딩
__독스트링
__타입힌트
____정적분석도구사용
____타입힌트를다중타입으로설정하기
____리스트,딕셔너리등을위한타입힌트설정
____주석을활용한타입힌트백포팅
__정리

12장깃을이용한코드관리기법
__깃커밋과리포
__쿠키커터패키지를이용한새로운파이썬프로젝트생성
__깃설치
____깃사용자이름과이메일설정
____GUI깃도구설치하기
__깃워크플로
____깃이파일상태를관리하는방식
____파일을스테이징상태로바꿔야하는이유
__자신의컴퓨터에깃리포만들기
____깃으로파일을추가해관리하기
____리포의특정파일무시하기
____변경사항커밋
____리포에서파일삭제하기
____리포에서파일이름변경과이동
__커밋로그보기
__기존변경내역으로복구하기
____커밋되지않은로컬변경사항취소하기
____스테이징된파일을스테이징상태에서해제하기
____가장최근커밋롤백하기
____단일파일을특정커밋으로롤백하기
____커밋이력재작성하기
__깃허브와gitpush명령어
____기존저장소를깃허브에푸시하기
____기존깃허브리포에서리포복제하기
__정리

13장빅오를활용한알고리즘성능분석과개선
__timeit모듈
__cProfile프로파일러
__빅오알고리즘분석
__빅오차수
____책장정리사례를이용한빅오차수의이해
____최악의시나리오를측정하는빅오
__코드의빅오차수를파악해보자
____낮은차수와계수를우리가무시하는이유
____빅오분석예제
____일반적인함수호출의빅오차수
____한눈에분석하는빅오
____n이작을경우빅오는의미가없으며,n은일반적으로작다
__정리

14장실전프로젝트:하노이탑과사목게임
__하노이탑게임프로젝트
____화면출력내용
____소스코드
____코드작성
__사목게임프로젝트
____화면출력내용
____소스코드
____코드작성
__정리

[3부]파이썬과객체지향프로그래밍
15장틱택토게임으로배우는객체지향프로그래밍과클래스
__실세계비유:온라인양식기입
__클래스에서객체생성하기
__WizCoin이라는간단한클래스생성하기
____메소드,__init__(),self
____속성
____프라이빗속성과프라이빗메소드
__type()함수와__qualname__속성
__객체지향vs비객체지향방식의프로그램비교:틱택토게임
__실세계를위한클래스설계는어렵다
__정리

16장코드복제는이제그만!상속으로해결하기
__상속의작동방식
____메소드오버라이드
____super()함수
____상속보다는합성을
____상속의단점
__isinstance()와issubclass()함수
__클래스메소드
__클래스속성
__정적메소드
__클래스와정적객체지향기능을사용할때
__객체지향과관련된전문용어들
____캡슐화

출판사 서평

|이책의구성|
이책은단순히파이썬구문을깊이다루는선에서그치지않고,명령행,코드포매터,린터,버전관리등전문개발자가사용하는명령행도구에대해다양하게설명한다.무엇이코드의가독성을높이고어떻게하면제대로클린코드를작성할수있는지설명했으며,프로그래밍프로젝트몇가지를수행하면서이런원리가실제소프트웨어에어떻게적용되는지확인해볼수있다.이책이컴퓨터과학교과서는아니지만,빅오알고리즘분석과객체지향설계에대한주제도다룬다.

[1부]준비

1장에러메시지파악과고수의도움을받기위한질문에티켓
남들에게효과적으로질문하고스스로필요한답을찾는방법을보여준다.또한에러메시지를읽는법과온라인으로도움을요청하는예절도알려준다.

2장환경설정과명령행사용방법
개발환경을준비하고PATH환경변수를설정하는내용과함께명령행탐색방법을살펴본다.

[2부]클린코드를위한모범사례,도구,기법
3장코딩스타일정립과코드포매팅자동화
PEP8스타일가이드와가독성을높이는코드포맷에대해살펴본다.코드포매팅도구인블랙을사용해이과정을자동화하는방법도배운다.

4장이해하기쉬운이름
코드가독성을개선할수있게변수와함수의이름을짓는법을알아본다.

5장코드악취감지와대응
코드에버그가있을지도모른다고알려주는몇가지잠재적인경고신호를다룬다.

6장파이썬다운코드를작성하는법
파이썬코드를작성하는몇가지관례와파이썬다운코드를만드는방법을살펴본다.

7장파이썬세상의프로그래밍용어
프로그래밍분야에서사용되는전문용어와자주혼동되는용어에관해알아본다.

8장파이썬에서빠지기쉬운함정들
파이썬언어에서자주나오는혼동과버그의원인,해결방법,그리고이를회피할코딩전략을다룬다.

9장파이썬의기이한특징들
스트링인터닝과반중력이스터에그등여러분이미처알지못한파이썬언어의기이한기능들을다룬다.어떤데이터타입과연산자가왜이렇게예상치못한행동을초래하는지파악한다면파이썬의작동방식에대한이해도가좀더깊어질것이다.

10장파이썬다운함수만들기
함수를구조화해서유용성과가독성을극대화하는방법을알아본다.*와**인수구문,큰함수와작은함수의장단점,람다함수등함수형프로그래밍기법을배워본다.

11장주석과타입힌트
프로그램에서비코드부의중요성과유지보수에미치는영향을다룬다.주석과독스트링을얼마나자주써야하는지,어떻게하면유용한정보를담을수있는지를설명한다.이장에서는타입힌트와마이파이MyPy같은정적분석기를사용해버그를탐지하는방법도알아본다.

12장깃을이용한코드관리기법
깃버전관리도구를사용해소스코드변경이력을기록하고이전버전의작업을복구하거나버그가처음나타났을때를추적하는법을알아본다.또한쿠키커터도구로코드프로젝트의파일을구성하는방법도다룬다.

13장빅오를활용한알고리즘성능분석과개선
timeit과cProfile모듈을사용해코드의속도를객관적으로측정하는방법을알아본다.또한처리해야하는데이터의양이증가함에따라코드의성능이얼마나느려지지를빅오알고리즘분석을활용해예측하는방법도다룬다.

14장실전프로젝트:하노이탑과사목게임
명령행게임두가지를작성하며지금까지배운기법을적용해본다.한탑에서다른탑으로원판을옮기는퍼즐게임인‘하노이탑’과유서깊은2인용말판게임인‘사목’이다.

[3부]파이썬과객체지향프로그래밍
15장틱택토게임으로배우는객체지향프로그래밍과클래스
종종오인되는객체지향프로그래밍(OOP)의역할을정의한다.남들도다한다고생각하기때문인지많은개발자가자신의코드에OOP기법을남용하는데,이는소스코드를복잡하게만드는주요원인이된다.이장에서는클래스작성법도알려주지만,클래스를사용해야하는이유와사용하지말아야하는이유를알려준다는점이더중요하다.

16장코드복제는이제그만!상속으로해결하기
클래스상속과그것이코드재사용에얼마나유용한지를알아본다.

17장파이썬다운객체지향프로그래밍
프로퍼티,이중밑줄메소드,연산자오버로드같은파이썬특유의객체지향설계특징을다룬다.

[옮긴이의말]
로버트C마틴의『클린코드:애자일소프트웨어장인정신』이출간된이후로깨끗한코드작성과리팩토링에대한개발자들의관심은나날이높아지고있다.가독성높은코드가제공하는유지보수편의성과기능확장가능성은레거시코드를다루는개발자는물론,처음부터프로젝트를시작하는개발자들도추구해야하는소프트웨어의속성으로인정받고있다.이를위해다양한실천방법과우수사례가공유되고있으며,통합개발환경(IDE)의발전으로인해자동화의혜택까지얻을수있다.하지만이렇게무르익은분위기와환경에서도뭔가2%부족함을느낀다면딱히당신만의문제는아니다.
다른여느프로그래밍언어와마찬가지로파이썬역시입문은쉽고마스터하기는어렵다.특히여타프로그래밍언어와비교해파이썬은고수준특성으로인해처음문턱을넘기가상대적으로쉽기때문에초보개발자들은컴퓨터로할수있는다양한가능성에눈을뜨게되지만,막상실전에부딪혀문제를풀려고하면그제서야파이썬이결코만만하지않다는사실을깨닫고충격에휩싸이게된다.파이썬언어의문제일까?아니면복잡한라이브러리와프레임워크의문제인가?아니면컴퓨터하부지식을모르는내기초역량의문제인가?정말고수들은어떻게파이썬을사용하고있으며그과정에서남들은내가모르는파이썬의어떤비밀을알고있을까?
『클린코드,이제는파이썬이다』는제목에서잘드러나듯이클린코드를파이썬에적용해서파이썬다운코드를만드는방법을소개한다.기존의클린코드관련서적과온라인문서에서다루는내용을파이썬에그대로이식하는대신,이책은초보개발자가우수개발자로탈바꿈하는과정에서반드시넘어야하는장애물을파악하고이를정석대로해소하는방법을다양한사례와팁으로제시한다는특징이있다.이책은전문가처럼정보를찾고명령행을활용하고,클린코드에서중요하게생각하는이름을지으며,코딩스타일과포매팅,코드악취해소,효율적인함수작성,주석과타입힌트에대해파이썬다운지침을따르고,파이썬의기이한특징과함정들을잘피하기위한실전팁과현업의요령을소개한다.또한컴퓨터전문지식을강화하기위해각종프로그래밍용어,반드시알아야하는핵심버전관리방법,알고리즘성능측정에대한이론과도구,객체지향에대한설명도빼놓지않는다.앞쪽에서습득한지식을바탕으로마지막에는,간단한게임을파이썬다운객체지향방식으로확장해나가는방안을단계별로제시하므로점진적으로발전하고확장가능한소프트웨어개발에대한감을잡을수있도록배려한다.
이책이획기적인돌파구를마련해주지는않을지몰라도,매일조금씩실력을높이고싶은개발자들에게동기를부여하고출발점을알려주며도전에직면했을때두려워하지않도록기초를튼튼하게다지는내용으로매우알차게구성되어있다.이책을읽고,책에서배운내용을실행해보며,자신만의색깔로바꾸는과정을반복하다보면어느순간소프트웨어전문개발자로거듭난자신을발견하게될것이다.아무쪼록독자여러분의개발여정에서이책이훌륭한스승이자좋은벗이되면좋겠다.
-박재호

자바,Golang,C++같은언어에비해파이썬이라는언어가지니는독특함이있다.다른언어보다접근성이좋고설명하거나이해하기쉽지만알고리즘코딩테스트에서의실행속도가다른언어에비해느린측면도있고디버깅에어려움을표현하는개발자들도있다.으레파이썬전문가라는단어를쓸때그파이썬전문가가어떤스킬이나이해를갖고있는지,어떤스텝을통해후학들이파이썬전문가로될수있는지를설명하는것을일반적으로숙련된개발자들조차어려워할때가많다.
이책은파이썬입문서와는거리가멀다.하지만지나치게현학적인책과도거리를둔다.초보자와전문가의중간단계를어떻게메워나갈것인가에대한저자의고민이곳곳에숨어있는것을볼수있다.이책은어려운데코레이터를쓰지도않으며심한축약형람다를쓰지도않는다.하지만초보자들이한스텝더실행해볼수있는여러방법들을제시해준다.
-김동현