Developer philosophy @ Things Of Interest
Amazing as it may seem after all these years, there are still junior developers in the world. A few weeks ago at work we had a talk where senior developers (including me) were invited to spend around five minutes each talking about our personal software de
qntm.org
๋ฏฟ๊ธฐ ์ด๋ ค์ธ ์๋ ์์ง๋ง, ์ค๋ ์๊ฐ์ด ์ง๋ ์ง๊ธ๋ ์ฌ์ ํ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ ์กด์ฌํ๋ค.
๋ช ์ฃผ ์ ํ์ฌ์์ ๋๋ฅผ ํฌํจํ ์๋์ด ๊ฐ๋ฐ์๋ค์ด ๋ชจ์ฌ ๊ฐ์์ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ฒ ํ์ ๋ํด ์ฝ 5๋ถ๋์ ์ด์ผ๊ธฐํ๋ ์๊ฐ์ ๊ฐ์ก๋ค. ์ฐ๋ฆฌ์ ๋ค๋ ๊ฐ์ ๊ฒฝํ์ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ค๊ณผ ๊ณต์ ํ๊ธฐ ์ํจ์ด์๋ค.
์ธ์ ํ์, ๋์ ์๊ฐ์ ์ ๋ฆฌํ๊ณ , ์ฝ๊ฐ์ ๋ํ ์ผ์ ๋ง๋ถ์ด๋ฉด ์ข ๋ ๊ฐ์น์์ ๊ฒ์ด๋ ์๊ฐ์ ์ด ๊ธ์ ์์ฑํ๋ค.
๋ด์ฉ์ ๋ค์ ์ก๋คํ ์ ์์ผ๋ฉฐ, ๋ง์ฝ ์ด๋ฏธ ์๋์ด ๊ฐ๋ฐ์๋ผ๋ฉด ๋ด์ฉ์ด ์ต์ํ ์๋ ์๊ณ ๋์ํ์ง ์์ ์๋ ์๋ค! ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ทน๋๋ก ์ฃผ๊ด์ ์ธ ๋ถ์ผ๋๊น.
Avoid, at all costs, arriving at a scenario where the ground-up rewrite starts to look attractive
(* ground-up rewrite: ์ฒ์๋ถํฐ ์ฌ๊ฐ๋ฐํ๋ ๊ฒ )
'์ฌ๊ฐ๋ฐ'์ด ๋งค๋ ฅ์ ์ด๋ฉด์๋ ๊ทน๋๋ก ์ํํ ์ ํ์ด๋ผ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋ ค์ ธ ์๋ค. ์ฌ๊ฐ๋ฐ์ ๋ํ ๋ณดํต์ ์กฐ์ธ์ด๋ผํ๋ฉด "์ ๋ ์๋ผ". ๊ทธ๋ฌ๋ ํ๊ฑธ์ ๋ฌผ๋ฌ๋์ ๋ณด์.
์ฌ๊ฐ๋ฐ์ด ์ข์ ์๊ฐ์ธ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ธฐ ์์ํ๋ค๋ฉด, 'ํผํ ์ ์์๋ ์ค์'๊ฐ ์ด๋ฏธ ๋ง๋ค์ด์ง๊ณ ๋ ํ์ด๋ค. ์ด๋ฐ ์ํฉ์ ๊ฐ์๊ธฐ ๋ฐ์ํ ๊ฒ์ ์๋๊ฒ์ด๋ฉฐ, ์ถฉ๋ถํ ํผํ ์ ์๊ณ ํผํด์ผ๋ง ํ๋ค.
์๋์ ๊ฐ์ ๊ฒฝ๊ณ ์ ํธ๊ฐ ๋ณด์ด๋ฉด ์กฐ์ฌํด๋ผ.
- ๊ธฐ์ ๋ถ์ฑ์ ์ฆ๊ฐ
- ๋จ์ํ ์ฝ๋ ๋ณ๊ฒฝ์ด ์ ์ ์ด๋ ค์์ง
- ๋ฌธ์ํ, ์ฃผ์ ์์ฑ์ ์ด๋ ค์
- ์ ์ ๊ฐ๋ฐ์ ์จ๋ณด๋ฉ์ ์ด๋ ค์
- ๋์ํ๋ ์ฝ๋์ ํน์ ๋ถ๋ถ์ ์๋ ์ฌ๋์ด ์ค์ด๋ฆ
- ์๋ฌด๋ ์ดํดํ ์ ์๋ ๋ฒ๊ทธ ๋ฐ์
๋ณต์ก์ฑ์ด ์ ์ ์ปค์ง๋ ๊ฒ๊ณผ ํญ์ ๋ง์๋ผ. ์ ๊ท ๊ธฐ๋ฅ ์ถ๊ฐ์ ๊ธฐ์กด ์์คํ ์ ๋ฆฌ๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ํํด๋ผ.
๋ฌผ๋ก , ์ฌ๊ฐ๋ฐ์ด ์ค์ ๋ก ์๋์ ํ ์ ์๋ค. ๋, ๊ธฐ์กด ๊ธฐ์ ๋ถ์ฑ๋ก ๊ฐ๋ํ ๋ช์ ์ ์งํ๋ ๊ฒ๋ณด๋ค ๋ ์ข์ ์ ํ์ผ ์๋ ์๋ค. ๋ฐ๋ฉด, ์ด๋ค ์ ํ๋ ๋์ํ์ง ์์ ์ ์๋ค - ๊ทธ ํ๋ก์ ํธ๋ ๋งํ ์ด๋ช ์ด์๊ณ , ์ด๋ป๊ฒ ๋ง์ง๋ง์ ๋ง์ดํ ์ง๋ง ๊ฒฐ์ ํ๋ ๊ฒ์ผ ์ ์๋ค. ์ค์ํ ๊ฒ์ ์ด ์ํฉ์ ๋ณธ์ง์ ์ผ๋ก ์ํ์ด ๋ฐ๋ฅธ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด ์ํฉ์ ํผํ ์ ์๊ณ , ๊ทธ๋ ๋ค๋ ๊ฒ์ ์ด ์ํ๋ ํผํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
Aim to be 90% done in 50% of the available time
์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ๋ช ํ ๋ช ์ธ์ด ํ๋ ์๋ค. - ์ฌ์ค ์ด๊ฑด ์ํํธ์จ์ด ๊ฐ๋ฐ ์ธ์ ๋ถ์ผ์์ ์ ๋ํ์ ์ ์๋ค-
"์ ๋ฌด์ ์ฒซ 90%๋ 90%์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋ง์ง๋ง 10%๋ ๋๋จธ์ง ์๊ฐ์ 90%์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค"
์ด ๋ง์ ์ฝ๊ฐ ์๊ธฐ์ง๋ง, ๋ช ๋ฐฑํ ์ฌ์ค์ด๋ค. ์ด๊ฒ์ ์ดํดํ๊ณ ์๋ค๋ฉด, ์ถฉ๋ถํ ๊ณ ์น ์ ์๋ค.
์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ด๊ฒ์ ๋์ํ๊ฒ ๋ง๋๋๋ฐ๋ ์๊ฐ์ด ํ์ํ๋ค. ์ด๊ฒ์ ํ๋ค๋ ๊ฒ์ ์ฝ ๋ฐ์ ๋๋ฅผ ํ๋ค๋ ๊ฒ์ ์ดํดํด์ผํ๋ค.
์ฝ๋๋ฅผ ์ ์ ํ ์์ค์ผ๋ก ๋ค๋ฌ๊ณ , ์ ์ง๋ณด์์ฑ์ ๋์ด๋ฉฐ, ์ฃ์ง ์ผ์ด์ค์ ์คํจ ์ผ์ด์ค๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํ๊ณ , ๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ, ์ฌ์ฉ์ฑ ํ ์คํธ, '๋งํ' ๊ธฐ๋ฅ ๋ณ๊ฒฝ, ์ฑ๋ฅ, ์๋น์ค ๊ฐ๋ฅ์ฑ, ๋ฌธ์ํ ๋ฑ๋ฑ... ์ด ๋ชจ๋ ๊ฒ๋ค ๋ํ ์์ฒญ๋ ์์ ์ถ๊ฐ ์๊ฐ์ด ํ์ํ ์ ๋ฌด์ ์ผ๋ถ์ด๋ค.
์ด ๋ง์ ๊ฒ๋ค์ ์ด๋ก ์ ์ผ๋ก๋ ์คํต ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ์ค๋ฌด์์ ์ด๊ฒ๋ค์ ์งํํ์ง ์๋๋ค๋ฉด, ๊ฒฐ๊ตญ ํ์ ํ๊ณ ์๋ฒฝํ์ง ์์ ๊ธฐ๋ฅ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฌด๋ ๋์ค์ ์ด ์ผ์ "์ ๋๋ก" ๋๋ด์ง ์์ ๊ฒ์ด๋ค. ์ธ์ ๋ ํ ์ผ์ ์๋ค. ์ธ, ๋ค๋ฒ ๋ฐ๋ณตํ๋ฉด, ๊ฒฐ๊ตญ ์กฐ์กํ ์ ํ์ด ๋๋ค.
๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ์์์น ๋ชปํ ์ฅ์ ๋ฌผ์ด ๋ฐ์ํ ๊ฒ์ด๋ค. ์ด ์ฅ์ ๋ฌผ์ ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ๊ณํํ ์ถ๊ฐ ์๊ฐ์ด ํ์ํ์ง ์๋ค๋ ๊ฒ์ด ๋ง๋ฒ์ฒ๋ผ ๋ฐํ์ง๋ค๋ฉด? ์ข๋ค, ํ๋ก์ธ์ค ๊ฐ์ ํ ์๊ฐ์ด๋ค! ๋๋ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ํด๊ฒฐํด๋ผ!
Automate good practice
๋ณดํต ํ๋ก์ ํธ์๋ ๊ฐ๋ฐ์๋ค์ด ํด์ผํ ๊ฒ๊ณผ ํ์ง ๋ง์์ผ ํ ํน์ ํ ๊ฒ๋ค์ด ์๋ค. ์๋ก์ด ์ต๊ณ ์ practice๊ฐ ์๊ธด๋ค. ์ผ๊ด๋๊ฒ, ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉํด์ผ ํ๋ ์๋ก์ด ํด, ํ์ ํค๋, ์คํ ์ ์ฒดํฌํด์ผํ ๊ฒ, ์ฌ์ฉํ์ง ์๊ธฐ๋ก ํ๋ ๋ฉ์๋ ๋ฑ์ด ์๋ค. ์ด๋ฐ ๊ฒ๋ค์ด ์๊ธธ ๋, ๊ฐ๋ฐ์๋ค์ด ์ ๋ถ ํ๋์ ๋ฐ๊พธ๋๋ก ํ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
1. ์ฌํํ ํ๋ผ. ๋ชจ๋์๊ฒ ์ง์ , ํ ๋ช ์ฉ ๋๋ ์คํฌ๋ผ์ด๋ ํ ํ์์์ ์๋ ค๋ผ. ์ด๋ฉ์ผ์ ๋ณด๋ด๋ผ. ์๋ก์ด ์ง์นจ์ ์ํค๋ ๋ ํฌ์งํ ๋ฆฌ์ README, ๋๋ ํ ๋ฆฌํ์คํธ ํ ํ๋ฆฟ์ ์ถ๊ฐํ๋ผ. ์ฌ๋๋ค์ด ๋ฌธ์๋ฅผ ์ฝ๋๋ก ๊ณ์ํด์ ์๊ธฐ์์ผ๋ผ. ๋๊ตฐ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ์์ํ ์๋์ผ๋ก ๊ฒํ ํ๋ฉฐ ์ค์๋ฅผ ์ฐพ์๋ผ. ์ ๋ ์์ง ์๋๋ก ํ๋ผ! ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๊ณ , ๋ชจ๋ ์ฌ๋์ด ๊ทธ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์งํฌ ์ ์๋๋ก ํ๋ จ์์ผ๋ผ. ์๋ฌด์ ์ธ ๋๋ฃ ๋ฆฌ๋ทฐ ์์ค์ ๋์ฌ๋ผ. ๋ชจ๋์๊ฒ ๋ค์, ๋ ๋ค์ ์๊ธฐ์์ผ๋ผ...
2. ์๋ํ ํ๋ผ
๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ์ง ์์ผ๋ฉด ์คํจํ๋ ์๋ํ๋ ํ ์คํธ๋ฅผ ์ถ๊ฐํด๋ผ. ํน์, ๋ง์ฝ ์ฌ๊ธฐ์ ๊ธฐ ์๋ ๋ชจ๋ ๊ฒ์ ํ๋ฒ์ ๊ณ ์น ์ ์๋ค๋ฉด 'ratchet'์ ์ถ๊ฐํด๋ผ. ์ฌ๋ฐ๋ฅธ ์๋์ ํ์ง ์๋๋ค๋ฉด, ์์์๋ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ์ ํจ๊ป ๋น ๋ฅด๊ฒ ์คํจํ๊ฑฐ๋, ๋ ๋์๊ฐ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์์ ํ๋ผ. ๋ณดํต์ ๊ฒฝ์ฐ์๋ best practice๋ฅผ ๊ธฐ๊ณ์ ์ผ๋ก ๊ฐ์ ํ๋ผ.
์๋ํ๋ ์๋ฒฝํ ํด๊ฒฐ์ฑ ์ด ์๋๋ฉฐ, ๋ณดํธ์ ์ธ ํด๊ฒฐ์ฑ ๋ํ ์๋๊ณ , ์ด๋ฐ ์ํฉ์์ ํญ์ ์ ์ ํ ํด๊ฒฐ์ฑ ์ด ์๋ ์ ์๋ค. ์๋ํ ํ ์ ์๋ ์๋ง์ ์๊ตฌ์ฌํญ์ด๋ ์ถ์์ ์ธ ๊ธฐ์ ์๊ตฌ์ฌํญ์ด ๊ต์ฅํ ๋ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฌด ๋ง์ ๊ท์น์ ๋์ ํ๋ฉด ๋งค์ฐ ๊ท์ฐฎ์์ง ์ ์์ผ๋ฉฐ, ๋๊ธฐ ๋ถ์ฌ๋ ๊ฐ๋ฐ์๋ค์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ด๋ฐ ์๋ํ๋ ์ํฉ์ ์ฐํํ ์ ์๋ค.
๋ง์ฝ "x๋ฅผ ์์ง ์์๋? x๋ฅผ ํญ์ ๊ธฐ์ตํด!"๋ผ๊ณ ์ง์์ ์ผ๋ก ๋งํ๊ณ ์๋ ์์ ์ ๋ฐ๊ฒฌํ๋ค๋ฉด, ์ง๊ธ์ด ์๋ํํ ์๊ฐ์ด๋ค.
Think about pathological data
๋๊ตฌ๋ ํฉ๊ธ๊ธธ์ ์ ๊ฒฝ์ฐ์ง ์๋๋ค. ์ฃ์ง ์ผ์ด์ค๋ ์ฐ๋ฆฌ์ ํ์์ ์ ๋ฌด์ด๋ค. ๊ธฐ๋ฅ์ด ์คํจํ ์ ์๋ ์ํฉ์ ํญ์ ์๊ฐํด๋ผ. ๊ธฐ๋ฅ์ ๋ง๊ฐ๋จ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ผ. ์ฝ๋๋ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ๋ค๋ฃจ์ด์ผ ํ๋ค.
์์ฒญ์ด ์คํจํ๊ฑฐ๋, ์์ํ ๋ฉ์ถ๊ฑฐ๋, ํ์๊ฐ๋์ ์ผ์ด๋ง๋ค ํ๋์ ๋ฐ์ดํธ๋ง ๋ณด๋ด๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ฐฑ๋ง ๊ฐ์ ํ์ ๋ณด์ฌ์ค์ผํ๋ค๋ฉด? ์ด๋ฆ์ ์ฌ๋์ฌ(/)๊ฐ ์๊ฑฐ๋, ๊ณต๋ฐฑ์ด ์๊ฑฐ๋, ๋ฉ๊ฐ๋ฐ์ดํธ ๋จ์๋ก ๊ธธ๋ค๋ฉด? ๊ทธ ๋ฌธ์์ด์ด ๋น์ด์์ ์ ์๋ค๊ณ ์ฆ๋ช ํ ์๋ ๊ฒ์ ๋ฏฟ์ ์ ์๋ค!
There is usually a simpler way to write it
๋ง์ฝ ๋๊ฐ ์๊ฐ์ ์ ๋๋ก ๊ณํํ๋ค๋ฉด, ๋ค์ ๋์๊ฐ ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ฐพ์ ์๊ฐ์ด ์์์ ๊ฒ์ด๋ค. ์๋ ์ฒด์ค ๋ช ์ธ์ "์ข์ ์๋ฅผ ๋ณด์๋ค๋ฉด, ๋ ์ข์ ์๋ฅผ ์ฐพ์๋ผ"๋ผ๋ ๋ง์ด ์๋ค. ๋ค๋ฅธ ์ธ์ฉ๊ตฌ๋ ์๋ค. "ํธ์ง๋ฅผ ๋๋ฌด ๊ธธ๊ฒ ์จ์ ๋ฏธ์, ์๊ฐ์ด ์์๋ค๋ฉด ๋ ์งง๊ฒ ์ธ ์ ์์์ ํ ๋ฐ.."
Write code to be testable
์ด๊ฒ์ ์ ์ ์๋ ์ธํฐํ์ด์ค์ ์ ์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์๋ฏธํ๋ค. ํ ์คํธํ๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ด ์ฆ๋ช ๋ ์ฝ๋๋ ์๋ง ์บก์ํ๊ฐ ์ ์ ํ๊ฒ ๋์ด์์ง ์์ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
It is insufficient for code to be provably correct; it should be obviously, visibly, trivially correct
์ด๋ค ์ฝ๋๋ ์ฐ์ฐํ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ผ ์ ์๋ค. ์๋ํ๋ฉด ์๋ชป๋ ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ ์ํฉ์ด ์ด ์ฝ๋๋ฅผ ๋๋ฌ์ผ ๋ค๋ฅธ ์ฝ๋๋ค์ ๊ตฌ์กฐ์ ์ํด ๊ท์ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ ์ด๊ฒ์ ์ข์ํ์ง ์๋๋ค. ๊ธฐ์ ์ ์ผ๋ก๋ ๋ฒ๊ทธ๊ฐ ์์ ์ ์์ง๋ง, ์ด์ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ ์ด๋ ต๊ณ ์ํํด์ง๋ค.
ํนํ ๋ณด์๋ฌธ์ , ๋๋ ์ด๋ก ์ ์ธ ๋ณด์ ๋ฌธ์ ๋ถ์ฌ์ ํด๋น๋๋ค. ํ์ฌ ์ด ํน์ ๋ด๋ถ ํจ์์ ํธ์ถ์๋ค์ด ๋ชจ๋ ์ ๋ขฐํ ์ ์๋ค๊ณ ํด์, ๊ทธ๊ฒ์ด ์ค์ํ ๋ฌธ์ ๊ฐ ์๋๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค.
'๐ Study > TLDR' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WebDev] Things You Should Never Do As A Software Engineer (0) | 2024.05.25 |
---|---|
[WebDev] Clever code is probably the worst code you could write (0) | 2024.05.23 |
[WebDev] How not to do code reviews (0) | 2024.05.19 |
[WebDev] You probably donโt need microservices (0) | 2024.05.19 |