다크 모드
소프트웨어 엔지니어가 사고력을 공부해야 하는 이유
같은 5년차 두 명이 있어요. 같은 결정 앞에서 한 명은 30분에 끝내고, 한 명은 일주일을 끌다 결국 잘못된 답을 골라요. 코드 실력 차이일까요? 그것만은 아니에요. 사고력 차이가 큰 부분을 차지해요. (이 글은 인과를 단정하지 않아요 — 운, 도메인 친숙도, 의사결정 권한, 정보 접근 같은 다른 요인도 작동해요. 그래도 사고력은 다른 요인들 위에서 작동하는 변수라 비중이 커요.) 이 글은 사고력 시리즈를 SWE에게 권하는 안내문이에요. 왜 필요한지, 언제 무엇을 배울지, 어떻게 같이 공부할지.
1. 왜 SWE에게 사고력이 특히 중요한가
코드 잘 짜는 능력만으론 안 통하는 시대
10년 전엔 "코드 잘 짜는 사람" 만 돼도 충분했어요. 지금 SWE의 하루를 보세요. 코드 짜는 시간보다 다음에 더 많은 시간이 들어가요.
- 결정: 어떤 라이브러리, 어떤 아키텍처, 어떤 추상화 레벨을 고를지
- 평가: PR, 디자인 문서, 동료 의견, 새 트렌드를 거를지 받아들일지
- 소통: PR 설명, RFC, 슬랙, 회의에서 자기 사고를 정확히 전달
- 학습: 매년 바뀌는 도구/언어/패러다임을 빠르게 흡수
- 회고: 장애, 실패한 프로젝트, 잘못된 결정에서 진짜 교훈 뽑기
이 모든 게 사고력이에요. 코드는 이 사고의 결과물에 불과해요. 사고가 흐릿하면 코드도 흐릿해요.
AI 시대에 더 벌어지는 격차
코드 자체는 AI가 점점 잘 써요. AI가 짠 코드 100줄이 있어요. 무엇을 commit할지, 무엇을 거부할지, 어디를 다시 짜라고 할지 — 이게 SWE의 일이에요. 그러려면:
- 무엇을 만들지 결정하는 능력
- AI가 만든 코드/제안을 평가하는 능력
- 시스템 전체를 보고 설계하는 능력
- 모호한 문제를 정의하는 능력
전부 사고력이에요. AI가 코드를 잘 쓸수록, 사고력 있는 SWE와 없는 SWE의 격차는 더 벌어져요. 사고력 없으면 AI 답변이 맞는지 평가도 못 하고, 그냥 받아 쓰는 손이 됨.
시니어 = 사고력 차이
오프닝의 두 5년차로 돌아가요. 시니어로 가는 사람과 정체된 사람의 진짜 차이는 코드 양이 아니라 사고력 누적의 차이 예요.
- 같은 버그를 봐도 시니어는 5가지 가능성을 본다 (멘탈 모델)
- 같은 결정 앞에서 시니어는 양방향/일방향 문을 구분한다 (의사결정)
- 같은 장애가 나도 시니어는 시스템 구조를 본다 (시스템 사고)
- 같은 PR 코멘트를 써도 시니어는 자기 자존심을 분리한다 (메타인지)
- 같은 새 기술을 봐도 시니어는 본질을 빠르게 잡는다 (학습법)
연차가 시니어를 만드는 게 아니에요. 사고력 누적이 시니어를 만들어요. 같은 5년이라도 사고를 단련한 사람과 안 한 사람의 차이는 천지 차이. 코드만 5년 짠 사람은 5년차 자리에 머물러요.
2. 각 주제가 SWE 업무에 닿는 자리
위 이야기가 추상적으로만 들리지 않게, 시리즈의 7개 주제가 일상 업무에 어디에 닿는지 구체로 풀어봐요. 단계별 추천은 다음 섹션이에요. 이 섹션은 "왜 이 주제가 SWE한테 직접적인지" 만 보여줘요.
비판적 사고 — 정보 거르기
SWE 일상에 닿는 자리:
- HackerNews/Twitter에서 본 "이 프레임워크가 답이다" 글을 그대로 믿어 도입 → 6개월 후 후회.
- 시니어가 "원래 이렇게 해" 라고 한 말을 검증 없이 따라함 → 몇 년 후 그게 잘못된 관습이었다는 걸 발견.
- 인터뷰에서 후보의 자신감 있는 답변에 휘둘림 → 입사 후 실력 차이.
- 버그 리포트를 다 진짜 버그로 받아들임 → 사용자 오해/환경 문제까지 코드 수정.
- 매니저나 기획의 결정을 무비판적으로 받음 → 잘못된 제품 만들기.
한 줄: 거름망 없는 SWE는 매번 새 트렌드의 부품으로 살게 돼요.
멘탈 모델 — 다양한 렌즈로 문제 보기
SWE 일상에 닿는 자리:
- 시스템 디자인: 한 가지 패턴만 알면 그걸로 모든 걸 풂. (망치-못 함정)
- 디버깅: "거꾸로 생각" 안경으로 "이게 어떻게 깨질까" 자문 → 평소 안 보이던 케이스 발견.
- 동료 행동 이해: "왜 저럴까" 가 아니라 "어떤 인센티브가 저렇게 만드나" → 평가 시스템이 문제일 때 사람 탓 안 함.
- 추상화 레벨 선택: 한계효용 체감 안경 — 어느 지점부터 추상화가 마이너스.
- 코드 리뷰: 1차 효과 (지금 잘 작동) 만 보지 말고 2차, 3차 (6개월 후 유지보수) 봄.
- 80/20: 성능 최적화에서 진짜 병목 20%만 잡기.
한 줄: 안경 1개로 보는 SWE는 같은 문제도 답이 빈약해요.
의사결정 — 회색 안에서 선택
SWE 일상에 닿는 자리:
- 양방향 vs 일방향 문: Feature flag 뒤 배포는 양방향 (빨리 결정), DB 마이그레이션은 일방향 (천천히 결정). 둘에 같은 속도로 결정하면 둘 다 망함.
- 기댓값: 리팩터링에 일주일 쓸까? 이득 기댓값 vs 비용. 직관 말고 계산.
- 비대칭 베팅: 작은 정찰 PR (잃을 게 작음) vs 큰 변경 (잃을 게 큼).
- 프리모템: 큰 출시 전 "1년 후 망했다면 왜?" 적기 → 실패 시나리오 5개 미리 막기.
- 결정 일지 = ADR (Architecture Decision Record): SWE 업계에서는 "큰 아키텍처 결정을 남기는 짧은 문서" 를 ADR 이라고 불러요. 결정 순간의 사고 (왜 이걸 골랐고, 뭘 모르고 갔는지) 를 남겨야 6개월 후 회고 가능. 안 남기면 매번 같은 실수.
- 베이지안 업데이트: 지표/피드백 들어오면 점진적으로 신념 조정. 한 번에 점프 안 함.
한 줄: 시니어 → 스태프로 가는 길의 핵심이 의사결정 품질.
메타인지 — 자기 자신 보기
SWE 일상에 닿는 자리:
- 디버깅 4시간째 막혔을 때 "한 번 떨어져 있기" 신호 알기. 안 알면 8시간 더 헛돌음.
- 코드 리뷰에서 자존심으로 우기는 자기 발견 → 멈출 수 있음.
- 더닝-크루거 곡선: 새 기술 배우자마자 자신감 → 좀 더 알면 자신감 떨어짐 (정상). 첫 봉우리에서 결정 안 하기.
- 임포스터 신드롬 (Impostor Syndrome): 모르는 게 많아 보이는 게 사실은 깊이의 신호.
- "내가 지금 모르는 걸 모름" 인식 → 새 분야 만지기 전 충분히 묻기.
- 화난 상태에서 PR 코멘트 / 슬랙 메시지 안 쓰기. 다음 날 다시 읽기.
한 줄: 자기 인식 없는 SWE는 같은 실수 평생 반복.
학습법 — 평생 가속기
SWE 일상에 닿는 자리:
- 새 언어/프레임워크 익히는 속도 차이가 5배까지 남.
- 코드베이스 처음 보는 첫 일주일의 학습 효율이 다음 6개월을 결정.
- Active recall: 새 시스템 디자인 본 후 책 덮고 다시 그려보기. 안 하면 다 잊음.
- Spaced repetition: 가끔 쓰는 git/sql/regex 명령어를 평생 안 잊는 법.
- 파인만: 새 개념을 동료한테 설명할 수 있어야 진짜 안 거.
- 의도적 연습: 자기 약점 영역만 골라서 (예: 비동기, 동시성, SQL 최적화) 일주일에 한 번씩.
- 회고: 장애/사고에서 진짜 교훈 뽑기. 안 하면 같은 사고 반복.
한 줄: SWE는 평생 학습 직업이에요. 학습법 없으면 5년차에 멈춤.
시스템 사고 — 얽힌 세상 보기
SWE 일상에 닿는 자리:
- "이 작은 변경" 의 다운스트림 효과 미리 그리기 → 장애 예방.
- 마이크로서비스 = 시스템. 한 서비스 변경이 다른 서비스에 미치는 영향.
- 팀 = 시스템. 누가 빠지면 어디가 막히나? 한 사람이 영웅인 시스템은 위험.
- 운영 메트릭의 피드백 루프: 좋은 루프 (배포 빠름 → 자신감 → 더 빠름) vs 나쁜 루프 (장애 많음 → 두려움 → 배포 늦어짐 → 변경 누적 → 더 큰 장애).
- 코브라 효과: KPI만 보고 최적화 → 다른 모든 게 망가짐. (예: PR 머지 속도만 평가하면 리뷰 대충, 티켓 닫기만 평가하면 진짜 문제 안 풀고 닫기.)
- 레버리지 포인트: 코드 수정 (낮은 레버리지) vs 프로세스 수정 (중간) vs 인센티브 시스템 수정 (높은).
- "사람 갈아도 시스템 같으면 같은 일" — 한 사람 떠나도 같은 문제 반복하는 팀.
한 줄: 스태프/프린시플 레벨의 핵심 능력. 코드를 짜는 게 아니라 시스템을 설계.
글쓰기로 사고하기 — 매일 단련
SWE 일상에 닿는 자리:
- 어차피 매일 씀: PR 설명, 슬랙, 코멘트, 디자인 문서, 회고록.
- PR 설명을 잘 쓰면 그 PR을 제일 잘 검증한 사람이 자기 자신이 됨.
- RFC/디자인 문서를 쓰는 동안 자기가 모르는 부분 발견. 안 쓰면 코드 짤 때 막힘.
- 포스트모템 (Post-mortem): 글로 정리하는 동안 진짜 원인이 보임. 머리로만 회고하면 표면만.
- 개인 노트: 일주일/한 달/일 년 후의 자기에게 보내는 자료. 같은 문제 두 번째 만났을 때 빨라짐.
- 사고를 글로 강제하면 평소 자동 반응으로 그냥 넘어가던 결정에 한 번 더 검증이 들어감.
한 줄: SWE는 어차피 글로 일해요. 글쓰기를 사고 도구로 쓰면 다른 모든 능력이 매일 단련돼요.
3. 어떤 단계에서 무엇을 배울까
7개 주제를 한 번에 다 던지면 누구도 시작 못 해요. 연차에 따라 우선순위가 달라요. 연차는 참고용 — 사람마다 차이 있음.
1단계: 입문 (0~2년차) — 기본기 셋
이 시기엔 코드 짜는 데 시간이 다 가요. 사고력 공부할 시간 없어 보여요. 정반대예요. 이 시기에 기본기 안 잡으면 평생 손만 빠른 사람이 됨.
이 시기 우선순위:
- 학습법 (04-meta-learning.md) — SWE는 평생 학습 직업. 1년차의 학습법 차이가 10년 후 천지 차이. Active recall, 파인만, 회고를 매일 쓸 도구로.
- 비판적 사고 입문 (critical-thinking-easy.md) — 시니어 말/트렌드/트윗을 검증 없이 받으면 자기 의견이 영영 안 생김. "잠깐 멈추기" 습관 만들기.
- 글쓰기 입문 (06-writing-as-thinking.md) — PR 설명, 슬랙, 회고는 어차피 매일 씀. 사고 도구로 쓰는 법을 일찍 익히기. PR 설명을 한 줄이 아니라 한 단락으로.
2단계: 확장 (2~5년차) — 시야와 자기 인식
기본 기술이 손에 익은 시기. 이제 자기 한계가 보이기 시작해요. 더 못 짜서가 아니라, 더 큰 결정과 문제 앞에서 막히는 시기.
이 시기 우선순위:
- 멘탈 모델 (01-mental-models.md) — 한 가지 패턴만 알던 시야를 풀어야 할 시기. 한 달에 한 안경씩 의식적으로 적용.
- 메타인지 (03-metacognition.md) — 자기 자존심/감정/패턴이 결정에 영향 주기 시작. 알면 다룰 수 있음. 매주 회고에 "이번 주 내 패턴" 한 줄.
- 비판적 사고 심화 (critical-thinking-deep.md, critical-thinking-speaking.md) — 받기뿐 아니라 말하기도 비판적으로. 코드 리뷰/디자인 문서 코멘트에 "보정된 자신감" 적용.
3단계: 시니어 (5년차+) — 결정과 시스템
자기 코드만이 아니라 타인의 결정에 영향, 시스템 전체에 영향 미치는 시기. 사고력이 곧 영향력이 되는 시기.
이 시기 우선순위:
- 의사결정 (02-decision-making.md) — 시니어 = 결정 책임. 결정 품질이 곧 가치. 큰 결정마다 ADR 쓰기, 양방향/일방향 문 구분 습관.
- 시스템 사고 (05-systems-thinking.md) — 코드를 짜는 게 아니라 시스템을 설계. 팀/조직도 시스템. "어떤 시스템이 이런 행동을 만드나?" 가 자동으로 떠오를 때까지.
- 글쓰기 심화 (06-writing-as-thinking.md 다시) — 영향력이 커질수록 글이 무기. RFC, 디자인 문서, 포스트모템을 사고 도구로 쓰기 (쓰기 전엔 결정 안 함).
4단계: 스태프/프린시플 — 통합과 전수
새로 배울 게 아니라 위 모든 걸 일상에 녹이고, 다른 사람에게 가르치는 단계. 가르치는 게 가장 강한 학습이라 본인 사고력도 같이 올라감. 다음 영역으로 확장 가능: 의사소통/협상, 조직 설계, 멘토링/리더십, 전략. 이 시리즈가 그 위에 안경을 얹는 기반이 됨.
4. 어떻게 권할 것인가 (이 글을 공유하는 사람을 위한 안내)
사고력 공부는 강요할 수 없어요. 자기가 필요성을 느껴야 시작하고, 시작해야 익힘. 권하는 방식이 받아들여지는 정도를 거의 다 결정해요. 핵심 원칙 세 가지.
원칙 ① 추상이 아니라 그 사람의 최근 막힘에서 출발
"이거 좋으니까 공부해" 라고 하면 거의 안 봄. 그 사람의 최근 막힘 사례를 먼저 듣고, 거기에 닿는 한 글만 권하기.
"최근에 결정이 가장 어려웠던 일이 뭐였어?" → "어, 그게 일방향 문이었네. 의사결정 글 4번 섹션 한 번 봐봐."
처방으로 권하면 받음. 처음 한 글이 자기 일에 닿으면, 나머지는 본인이 가져감.
원칙 ② 한 번에 한 글, 적용 과제 묶어서
전체 시리즈를 한 번에 던지면 부담돼서 안 봄. 한 번에 한 글, 그리고 그 글을 읽었으면 일상에 적용할 작은 과제 하나 같이 주기.
읽기만 하면 안 박힘. 적용 예:
- 비판적 사고 → "이번 주 한 PR을 의도적으로 비판적 시각으로 리뷰. 짚 인형 만들지 않기."
- 의사결정 → "이번 주 가장 큰 결정 하나에 ADR 쓰기."
- 메타인지 → "이번 주 화났던 순간 1개 회고: 어떤 패턴이었는지."
- 시스템 사고 → "최근 장애 하나에 '어떤 시스템이 이걸 만들었나?' 분석."
- 학습법 → "이번 주 새로 본 시스템 디자인 하나, 책 덮고 다시 그려보기."
원칙 ③ 혼자 말고 같이 — 모임의 힘
혼자 읽기보다 같이 읽기가 학습 깊이가 훨씬 늘어나요 (학습법 글의 능동 학습 그대로 — "5배" 같은 구체 수치는 학습 피라미드의 흔적이라 정확하진 않지만, 토론·가르치기의 효과는 잘 검증된 발견). 회사/팀 안에 작은 모임 만들기:
- 격주 점심 한 시간. 한 글씩 같이 읽고 토론.
- 한 명이 발제, 나머지가 자기 사례 가져오기.
- 적용 과제 결과를 다음 모임에 공유.
이런 모임 한 개가 팀 전체 사고력의 기준선을 올려요. 개인 학습이 모임으로 바뀌면 학습이 문화가 돼요.
함정: 협박/강요는 역효과
"안 보면 시니어 못 돼" 같은 톤은 거의 안 통해요. 자기가 필요해서 읽는 사람과, 시켜서 읽는 사람의 학습 깊이는 10배 차이. 선택권을 주되, 자기 사례에 닿게 권하기.
5. 팀 단위로 했을 때의 차이
한 사람 사고력은 그 사람 일에 영향을 줘요. 팀 전체 사고력은 회사의 미래에 영향을 줘요.
같은 장애를 만나도:
- 안 단련된 팀: 사람 탓, 한 가지 답으로 점프, 같은 사고 반복.
- 단련된 팀: 시스템 보기, 여러 안경, ADR 남기기, 회고로 학습 누적.
5년 후 두 팀의 차이는 코드 양이 아니에요. 결정의 질, 시스템의 안정성, 학습 속도, 사람이 안 갈리는 환경 에서 벌어져요. 그게 회사의 진짜 자산.
6. 마치며
SWE에게 사고력은 사치가 아니에요. 코드를 코드로 만드는 근본 능력이에요.
- 학습법 없으면 5년차에 멈춤.
- 비판적 사고 없으면 매번 트렌드의 부품.
- 글쓰기 없으면 사고가 흐릿한 채로 코드가 나감.
- 메타인지 없으면 같은 실수 평생.
- 멘탈 모델 없으면 답이 빈약.
- 의사결정 없으면 시니어로 못 감.
- 시스템 사고 없으면 스태프로 못 감.
코드는 매년 도구가 바뀌어요. 사고력은 평생 가요. 시간을 어디에 투자할지는 명확해요.
좋은 SWE는 코드를 잘 짜요. 위대한 SWE는 잘 생각해요. 그리고 사고력은 배울 수 있어요. 이 시리즈가 그 출발점이에요.
본격적인 학습은 critical-thinking-easy.md 부터. 또는 위 단계별 추천에서 자기 자리에 맞는 글로 바로.
🎯 다시 떠올려보기
시리즈 이름들 (ADR, 양방향 문, T자형) 외우는 건 의미 없어요. 본인 다음 PR / 다음 결정 / 다음 회고를 한 번이라도 다르게 만드는 게 목적이에요.
Q1. (자기 검증) 지난 한 주 본인이 한 일 중에서 (a) 키보드를 두드린 시간 (b) 사고에 든 시간 (결정/평가/소통/회고) 을 어림짐작으로 나눠보세요. 비율이 어떻게 나오나요? 본인 사고에 가장 많이 든 자리는 어디예요?
Q2. (자기 검증 — AI) 본인이 최근 AI로 받은 코드/답변 한 개를 떠올려보세요. 그 답을 그대로 받아들였나요, 평가했나요? 평가했다면 어떤 기준으로? 못 했다면 — 다음에 비슷한 답이 왔을 때 어떤 질문을 던질지 미리 정해두기.
Q3. (적용 — 시니어 시점) 본인이 최근 풀고 있는 버그 / 결정 / 장애 한 가지를 적어보세요. 본인보다 시니어인 사람이 같은 자리를 봤다면 무엇을 다르게 봤을까요? 본인이 아직 못 보고 있는 가능성이 있을까요?
Q4. (자기 검증 — 단계) 본인 연차와 본인이 느끼는 막힘이 일치하나요? (예: 5년차인데 1단계의 학습법이 부족하다면 — 그게 진짜 막힘.) 단계 표를 그대로 따르지 말고, 본인이 가장 막혀 있는 한 자리를 정직하게 찾아 그 글부터 보세요.
Q5. (적용 — 양방향/일방향) 본인이 다음 1~2주 안에 내릴 SWE 결정 두 가지를 적어보세요. 각각 양방향 문인가요, 일방향 문인가요? 양방향인데 너무 길게 끌고 있는 건 아닌가요? 일방향인데 너무 빨리 결정하려는 건 아닌가요?
Q6. (적용 — 권하기) 본인 팀에서 사고력 공부를 같이 시작하고 싶은 사람 한 명을 떠올려보세요. 그 사람의 최근 막힘 한 가지가 뭐예요? 그 막힘에 닿는 시리즈 한 글을 골라보세요. (이름이 아니라 그 사람의 문제에 맞는 처방.)
Q7. (메타) 이 시리즈가 SWE에게 오히려 해로울 수 있는 자리 가 있을까요? (예: 너무 자주 ADR 쓰다 결정 마비, 매번 멘탈 모델로 분석하다 코드 속도 손해, 너무 시스템 사고로 빠져 본인 책임 회피.) 본인 환경에서 그런 자리를 한 개 짚어보고, 어떻게 균형 잡을지 생각해보세요.
다음 일주일에 본인 PR 한 개를 다르게 쓰거나 (의사결정 글 적용), 다음 회고 한 번을 다르게 (메타인지 글 적용) 하면 충분히 시작이에요.