문제를 작게 나누고, 함수는 한 가지 일만 하게 만든다.
요구사항과 입출력 계약(Contract)을 먼저 글로 정리한다.
“읽기 쉬운 코드 > 일단 돌아가는 코드 > 빠른 코드” 순서를 기억한다.
의미 있는 이름(명사/동사 일관, 축약 지양)을 쓴다.
일관된 스타일을 자동 포매터로 강제한다(예: Black/Prettier).
주석은 “무엇(what)”보다 “왜(why)”를 기록한다; 공개 API는 docstring으로 문서화.
에러 메시지를 끝까지 읽고, 최소 재현 코드를 만든다.
디버깅 기본기: print/log, breakpoint, watch, 이분 탐색식 주석 처리.
언어 기초와 표준 라이브러리를 먼저 숙련한다.
로컬에서 빠르게 실험할 REPL/Notebook 환경을 갖춘다.
버전관리(Git) 기본: add/commit/push/pull을 정확히 이해한다.
작고 자주 커밋하고, 커밋 하나가 하나의 의도만 담게 한다.
좋은 커밋 메시지(제목은 명령형, 본문은 이유/맥락) 작성 습관.
브랜치 전략(feature/bugfix/release)과 PR 규칙을 팀과 합의한다.
코드 리뷰는 “사실·기준·근거”로; 개인 취향은 자동화 도구로 해결한다.
자동 포매터+린터(ESLint/flake8/ruff 등)를 CI에 걸어둔다.
정적 타이핑(TypeScript/mypy/pyright)으로 인터페이스를 명확히 한다.
단위 테스트의 최소 세트를 만든다(핵심 로직·실패 경로·가드).
테스트 피라미드(단위>통합>엔드투엔드) 균형을 안다.
테스트 가능한 설계(의존성 주입, I/O 경계 분리)를 지향한다.
시간·공간 복잡도 감각과 프로파일링의 차이를 안다(추정≠측정).
핵심 자료구조(List/Map/Set/Queue/Heap)와 활용 패턴 숙지.
불변성 선호, 부작용 최소화로 예측 가능성을 높인다.
에러 처리 원칙: 예외 vs 반환값, 실패를 첫급 시민으로 다룬다.
로깅 레벨(DEBUG/INFO/WARN/ERROR)와 구조화 로깅(JSON)을 사용한다.
설정은 코드와 분리(.env/환경변수/컨피그 계층).
의존성 관리 도구(pip-tools/poetry/npm/pnpm)로 버전 고정.
가상환경·컨테이너로 실행 환경을 격리한다.
작은 CLI(예: Makefile/justfile/uv run)로 반복 작업을 자동화한다.
입력 검증(스키마 검증, 길이/범위 체크)과 방어적 프로그래밍.
파일 경로·개행·퍼미션의 OS 차이를 이해한다(Win/Linux/macOS).
시간/타임존/서머타임 처리(UTC 기준, 변환은 가장자리에서).
유니코드/UTF-8·정규화(NFC/NFD)·이모지 처리 인지.
네트워크 기초(HTTP 메서드·상태코드·헤더·리다이렉트).
보안 기본: 비밀은 코드에 넣지 말고, 최소 권한 원칙.
SQL 기초(SELECT/JOIN/WHERE)와 인덱스 동작 원리.
트랜잭션(ACID), 격리 수준, 락과 데드락 감각.
캐시 기본(로컬/공유, 일관성, 만료/무효화 전략).
동시성 기초(스레드/프로세스/async) 선택 기준.
레이스 컨디션·데드락·라이브락을 탐지/회피하는 패턴.
성능 개선은 “측정→가설→미세 변경→재측정” 루프가 전부다.
빅O만 보지 말고 상수·I/O·메모리·GC 비용을 함께 본다.
스트리밍/제너레이터/이터레이터로 메모리 압력을 낮춘다.
API 설계 원칙: 명확한 계약, 일관된 리소스/동사, 버저닝.
안정적 에러 계약(오류 스키마/코드/리트라이 가능성 표시).
멱등성(Idempotency), 재시도, 백오프, 중복 방지 키 설계.
CI/CD 파이프라인으로 테스트·빌드·배포를 자동화한다.
관측성: 로그·메트릭·트레이싱으로 원인분석 가능하게.
재현성: 시드·환경·데이터·의존성 버전을 고정한다.
수치 연산의 함정: 부동소수 오차·누적 오차·정규화/스케일링.
근데 신입은 이거 다 알아도 취업 못할 수 있습니다.
도망쳐....
앗… 아아
이거 그대로 먹이면 됨?