Pairing rounds โ ๊ฐ์ด ์ผํ๋ ๋ฒ
Opendoor๋ ์ด ๋ผ์ด๋๋ฅผ ๋ ๋ฒ ๋ณธ๋ค. ๊ทธ๋ค์ ๋ง: โ๋ฌธ์ ๋ฅผ ๋๋ด๋์ง ๋ณด๋ ค๋ ๊ฒ ์๋๋ผ, ๊ฐ์ด ์ผํ๋ฉด ์ด๋ค ์ฌ๋์ธ์ง ๋ณด๋ ค๋ ๊ฒ.โ ์ฆ ํ์ ์ด ์ํ์ด๋ค โ think-aloud ยท ์ง๋ฌธ ยท ๋ฐ๋ฐ ยท ํผ๋๋ฐฑ ์์ฉ ยท AI ๊ฒ์ฆ ยท ๋ง๋ฌด๋ฆฌ.
60๋ถ ํ๋ ์ด๋ถ โ ๋จ๊ณ๋ง๋ค ๋ญ ์ฑ์ ํ๋
- 1Join the problem
๋ฌธ์ ๋ฅผ ๋ฐ์ผ๋ฉด ๊ฐ์ด ๋ณด๋ ํ๋ฉด์ด๋ผ ์๊ฐํ๊ณ ์๋ฆฌ ๋ด์ ์ฝ๊ธฐ. ๊ฐ๋ณ๊ฒ ํ๋ง๋ ํด์ ๋ถ์๊ธฐ ํ๊ธฐ. ์ฒ์ 1๋ถ์ ์ฝ๋ ์๊ฐ ๋ง๊ณ '๊ฐ์ ํธ ๋๊ธฐ'.
โ ๏ธ ์ํ ๋ณด๋ฏ ๊ตณ์ด์ ๋ง์์ด ํผ์ ์ฝ๊ธฐ ์์ํจ. ์ฒซ ์นจ๋ฌต 2๋ถ์ด ์ ์ฒด ์ธ์์ ๋ง์นจ.
์ฑ์ : ๊ฐ์ด ์ผํ๋ฉด ํธํ ์ฌ๋์ธ์ง. ์ฒซ 1๋ถ์์ '๋๋ฃ ๋๋'์ด ๋๋์ง.
โOkay, this looks fun. Let me read it out loud real quick.โ
checking microphoneโฆ
- 2Clarify
์ฝ๋ ์น๊ธฐ ์ ์ ์ ๋ ฅยท์ถ๋ ฅ ์์ ํ๋๋ฅผ ๋ด๊ฐ ์ง์ ๋ง๋ค์ด์ ํ์ธ ๋ฐ๊ธฐ. ์ ๋งคํ ๊ฑด ๊ทธ ์๋ฆฌ์์ ๋ฐ๋ก ๋ฌป๊ธฐ. ์ง๋ฌธ 2~3๊ฐ๋ฉด ์ถฉ๋ถ.
โ ๏ธ ๋ค ์ดํดํ ์ฒํ๊ณ ๋ฐ๋ก ์ฝ๋ฉ ์์. 10๋ถ ๋ค์ ๋ฐฉํฅ์ด ํ๋ฆฐ ๊ฑธ ์๊ณ ์๊ฐ ๋ค ๋ ๋ฆผ.
์ฑ์ : ์ ๋งคํ ์๊ตฌ์ฌํญ์ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง. ์ง๋ฌธ์ ๊ฐ์ ์ด ์๋๋ผ ๊ฐ์ ์ด๋ผ๋ ๊ฑธ ์๋์ง.
โQuick check โ if the input's like this, we'd expect that, right?โ
checking microphoneโฆ
- 3Share the plan
30์ด์ง๋ฆฌ ๊ณํ ๋งํ๊ธฐ. ๋จ๊ณ ๋์ธ ๊ฐ๋ง, ์๋ฒฝํ ํ์ ์์. ๋์ ๊ผญ ๋์ ๊ตฌํ๊ณ ์์ํ๊ธฐ.
โ ๏ธ ๋จธ๋ฆฟ์์ผ๋ก๋ง ์ค๊ณํ๊ณ ์นจ๋ฌตํ๊ฑฐ๋, ๋ฐ๋๋ก ์๋ฒฝํ ์ค๊ณ๋ฅผ 5๋ถ ๋๊ฒ ๊ฐ์ํจ.
์ฑ์ : ์ผ์ ์ชผ๊ฐ๋ ๋ฅ๋ ฅ. ๊ทธ๋ฆฌ๊ณ ์๋๋ฅผ ๊ณํ์ ํ์ฐ๋์ง, ํผ์ ๋ฌ๋ฆฌ๋์ง.
โMy plan's pretty simple โ map first, then handle expiry. Sound okay?โ
checking microphoneโฆ
- 4Code in small steps
ํ ๋ฒ์ ํ ๋ฉ์ด๋ฆฌ๋ง ์น๊ณ , ์น๋ฉด์ ์ง๊ธ ๋ญ ํ๋์ง ์งง๊ฒ ๋งํ๊ธฐ. ๋งํ๋ฉด ๋งํ๋ค๊ณ ์์งํ๊ฒ ๋งํ๊ธฐ โ ๊ทธ๊ฒ ํ์ด์.
โ ๏ธ 5๋ถ ๋๊ฒ ๋ง์์ด ํ์ดํ. ์ธํฐ๋ทฐ์ด๊ฐ ๋ด ๋จธ๋ฆฟ์์ ๋ชป ๋ฐ๋ผ์์ ๋์์ค ์๋ ์์.
์ฑ์ : ์๊ฐ์ด ๋ฐ์ผ๋ก ๋ณด์ด๋์ง. ๋งํ์ ๋ ์จ๊ธฐ๋์ง, ๊ฐ์ด ํธ๋์ง.
โI'll do the happy path first, then come back for edge cases.โ
checking microphoneโฆ
- 5Use AI, verify it
AI๋ ๊ณจ๊ฒฉ์ด๋ ํ ์คํธ ์์ด๋์ด์ฉ์ผ๋ก๋ง. ๋ฐ์ ์ฝ๋๋ ํ ์ค์ฉ ์ฝ๊ณ ์์ฌ ๊ฐ๋ ๋ถ๋ถ์ ์๋ฆฌ ๋ด์ ์ง๊ธฐ. ํต์ฌ ๋ก์ง์ ๋ด ์์ผ๋ก.
โ ๏ธ AI ๋ต์ ๊ทธ๋๋ก ๋ถ์ฌ๋ฃ๊ณ ์ค๋ช ๋ชป ํจ. ๋ฐ๋๋ก ์ ๋ณด์ด๋ ค๊ณ AI๋ฅผ ์์ ์ ์ฐ๋ ๊ฒ๋ ํ๋ฝ ์ฌ์ .
์ฑ์ : AI๋ฅผ ๋๊ตฌ๋ก ๋ถ๋ฆฌ๋์ง, AIํํ ๋๋ ค๊ฐ๋์ง. ๊ฒ์ฆํ๋ ์ต๊ด์ด ๋ชธ์ ๋ฐฐ์๋์ง.
โI'll let AI draft this part, then we sanity-check it together.โ
checking microphoneโฆ
- 6React to input
์ธํฐ๋ทฐ์ด๊ฐ ๋ผ์ด๋ค๋ฉด ์ผ๋จ ์ง์ง๋ก ๋ฃ๊ธฐ. ๋ ์ข์ผ๋ฉด ๋ฐ๋ก ๋ฐ์ํ๊ณ ๊ณ ๋ง๋ค๊ณ ํ๊ธฐ. ์๋๋ค ์ถ์ผ๋ฉด ์ด์ ํ๋๋ง ๋ค์ด์ ๋ถ๋๋ฝ๊ฒ ๋ฐ๋.
โ ๏ธ ๋ฌด์กฐ๊ฑด '๋ค๋ค' ํ๊ณ ๋ค ๋ฐ์๋ค์ด๊ธฐ. ์๋๋ฉด ๋ด ๋ฐฉ์ ์งํค๋๋ผ ๊ธธ๊ฒ ๋ฐฉ์ด์ ๋ฒ์ด๊ธฐ. ๋ ๋ค ํ๋ฝ.
์ฑ์ : ํผ๋๋ฐฑ ์ํ๋ ฅ. ์ค๋๋ ์๋๋ฐ ์๋ ๊ธฐ๋ถ ์ ์ํ๊ฒ ํ๋์ง โ ์ด ๋ผ์ด๋์ ์ง์ง ํต์ฌ.
โGood catch โ though I think that breaks expiry. Can I show you?โ
checking microphoneโฆ
- 7Test and verify
๋ค ๋๋ค๊ณ ๋งํ๊ธฐ ์ ์ ์ง์ ๋๋ฆฌ๊ธฐ. ์๊น ๋ง๋ ์์ ๋ฃ๊ณ ๊ฒฐ๊ณผ ํ์ธ. ์ฃ์ง ์ผ์ด์ค ๋์ด ๊ฐ๋ฅผ ์๋ฆฌ ๋ด์ ์ฒดํฌ.
โ ๏ธ '๋ ๊ฒ ๊ฐ์์'๋ก ๋๋. ์ ๋๋ ค๋ณด๊ณ ์์ ๊ฐ๋ง ๋ณด์ฌ์ฃผ๋ค๊ฐ ๋ฒ๊ทธ ํ๋์ ๋ฌด๋์ง.
์ฑ์ : ๋๊น์ง ํ์ธํ๋ ์ต๊ด. '๋ ๊ฒ ๊ฐ๋ค'์ '๋๋ค'๋ฅผ ๊ตฌ๋ถํ๋ ์์ง๋์ด์ธ์ง.
โLet me actually run it โ I don't trust code I haven't run.โ
checking microphoneโฆ
- 8Wrap up with trade-offs
๋ง์ง๋ง 2๋ถ: ๋ญ ํฌ๊ธฐํ๊ณ , ์๊ฐ ๋ ์์ผ๋ฉด ๋ญ ๋ฐ๊ฟ์ง ํ๋ ๊ฐ๋ง ๋งํ๊ธฐ. ๋จ์ ์ ๋ด๊ฐ ๋จผ์ ๋งํ๋ฉด ๊ทธ๊ฒ ๊ณง ์ค๋ ฅ.
โ ๏ธ ์๊ฐ ๋๋๋ฉด ๊ทธ๋ฅ ๋ฉ์ถ๊ธฐ. ๋๋ ๋จ์ ์จ๊ธฐ๊ณ ์๋๋ง ํ๊ธฐ โ ์๋์ด์ฒ๋ผ ์ ๋ณด์.
์ฑ์ : ์๊ธฐ ์ฝ๋์ ํ๊ณ๋ฅผ ์๋์ง. ํ๋ก๋์ ๊ฐ๊ฐ๊ณผ ์๋์ด๋ค์ด ํ๋จ๋ ฅ.
โIt works, but honestly I'd refactor the expiry part with more time.โ
checking microphoneโฆ
ํ์ ์์ด ํ๋ ์ด์ฆ๋ถ โ ์ ์ ๋ถ์ ๋๊น์ง
์ฝ๋ฉ ์์ ์ง์ , ๊ณํ์ ํ ์ค๋ก ๋งํ ๋
โI'll start with the happy path, then come back for edge cases.โ
checking microphoneโฆ
๋จ์ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์์ํ ๋ โ ์กฐ์ฉํ ์ฝ์ง ๋ง๊ณ ์ด๋ ๊ฒ
โLet me read this part first โ I want to see where state changes.โ
checking microphoneโฆ
์๊ฐํ๋๋ผ ๋ง์ด ๋๊ธธ ๋, ์นจ๋ฌต ๋์
โGive me a sec โ I'm thinking about how to handle duplicates.โ
checking microphoneโฆ
๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ฌ์ด์์ ๊ณ ๋ฏผ๋ ๋, ๊ณ ๋ฏผ์ ๊ทธ๋๋ก ๋งํ๊ธฐ
โI'm torn between a map and a list โ map feels simpler.โ
checking microphoneโฆ
์ฝ๋์์ ๋ญ๊ฐ ์ด์ํ ๊ฑธ ๋ฐ๊ฒฌํ์ ๋
โHmm, this looks off โ we never reset this flag.โ
checking microphoneโฆ
ํ์ดํํ๋ฉด์ ์ง๊ธ ๋ญ ํ๋ ์ค์ธ์ง ์งง๊ฒ
โSo here I'm just checking the state before we transition.โ
checking microphoneโฆ
Cursor/์๋ํฐ ์ต์ ๋จ์ถํค โ ํ์ด๋ง ์ค ๋ฒ๋ฒ ์ด์ง ์๊ฒ
- โP โ ํ์ผ ์ด๊ธฐ (Quick Open)
- โโงP โ Command Palette
- โB โ ์ฌ์ด๋๋ฐ ํ ๊ธ
- โJ โ ํ๋จ ํจ๋ ํ ๊ธ
- โ` โ ํฐ๋ฏธ๋ ํฌ์ปค์ค
- โ1 โ ์๋ํฐ ํฌ์ปค์ค
์ฉ์ด: Editor=์ฝ๋ ์์ญ ยท Sidebar=์ข์ธก ํ์ผํธ๋ฆฌ ยท Panel=ํ๋จ(ํฐ๋ฏธ๋/๋ฌธ์ ) ยท ์ด 6๊ฐ๋ง ์์ ๋ถ์ด๋ฉด ๋๋ค.
์ฐ์ต ๋ฃจํ: โ ํ๋ ์ด๋ถ 8๋จ๊ณ ์์ด ํ ์ค์ฉ ๋งํ๊ธฐ โ โก ์ค๋์ ํ๋ ์ด์ฆ ์นดํ
๊ณ ๋ฆฌ 1๊ฐ ์
์ ๋ถ์ด๊ธฐ โ โข /copilot์์ ์ค์ ๋ก ํ์ดํ๋ฉฐ ๊ทธ ๋ฌธ์ฅ๋ค ์จ๋จน๊ธฐ โ ๋๋๋ฉด Grade my session์ผ๋ก ์ฑ์ .
๐ก ๋ด ๋
ผ๋ฆฌ๋ก ์ค๋/๋ฐฉ์ด ์ค์ ์ฐ์ต์ /decide ์๋ฌด ์นด๋๋ ์ด๋ฉด ๋งจ ์๋ Defend it โ AI ์๋์ด๊ฐ ๋ฐ๋ฐํ๊ณ , ๋๋๋ฉด ์ค๋๋ ฅ 5์ถ ์ฑ์ .