개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
// 2022.02.19
오늘 읽은 범위
추천사 ~ 1장 깨끗한 코드
책에서 기억하고 싶은 내용을 써보세요.
다시 말해, 코드에 정직하고, 코드의 상태에 관하여 동료들에게 정직하고, 무엇보다도, 자기 코드에 대해서 자신에게 정직하라는 뜻이다.[추천사 xxviii]
언젠가 코드가 사라지리라 생각하는 사람들은 언젠가 비정형적인 수학이 나오리라 기대하는 수학자와 비슷하다. 그들은 우리가 시키는 대로가 아니라 원하는 대로 돌아가는 기계가 나오리라 기대한다. 우리가 그런 기계를 만드는 방법을 찾으내리라 믿는다.[p.3]
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 물론 그 시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.[p.4]
나쁜 코드를 양산하면 기한을 맞추지 못한다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓친다. 기한을 맞추는 유일한 방법은, 그러니까 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.[p.7]
다시 말해, 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.[8]
나쁜 코드는 나쁜 코드를 '유혹'한다! 흔히 나쁜 코드를 고치면서 오히려 더 나쁜 코드를 만든다는 뜻이다.[9]
깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다. 깨끗한 코드는 한 가지에 '집중'한다. 각 함수와 클래스와 모듈은 주변 상황에 현혹되거나 오염되지 않은 채 한길만 걷는다.[10]
깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 코드는 추측이 아니라 사실에 기반해야 한다. 반드시 필요한 내용만 담아야 한다. 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야 한다.[11]
깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.[11]
깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다. 고치려고 살펴봐도 딱히 손 댈 곳이 없다.[12]
깨끗한 코드를 위해서 중복을 피하라. 한 기능만 수행해라. 제대로 표현해라. 작게 추상화하라.[14]
깨끗한 코드는 읽으면서 놀랄 일이 없어야 한다. 읽으면서 짐작한 대로 돌아가는 코드가 깨끗한 코드다.[14]
새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 비율이 이렇게 높으므로 읽기 쉬운 코드가 매우 중요하다. 비록 읽기 쉬운 코드를 짜기가 쉽지는 않더라도 말이다.[18]
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
추천사를 읽으며 소프트웨어 개발 과정에서 "내가 얼마나 코드에 정직 했었나?" 의문이 들었습니다. 매번 "일단 돌아가니까", "아직 발견된 에러는 없으니까", "시간이 없으니까" 핑계를 대며 정직하게 코드를 바라본적이 없었습니다. 저는 제 코드앞에서 정직하지 못했고 동료들에게도 마찬가지였습니다. 그저 동작하는 코드만을 만들어왔던 저를 돌아보게 되었습니다.
AI, 머신러닝의 발전에 따라 인간보다 더 뛰어난 연산능력과 메모리를 갖고 있는 기계가 발명된다면 코드를 작성하는 일 또한 그들에게 넘어가지 않을까 고민했던적이 있습니다. 하지만 사람이 입력한 값에 의해서 실행되는 프로그램은 있지만 사람의 마음을 읽고 실행되는 프로그램은 존재할 수 없다는 생각을 갖게 되었습니다.
저에 대한 소개글 같은 느낌이였습니다. 시간에 쫓겨 프로그램을 개발하고 우선 배포하고 시간이 분명히 남았지만 다시 돌아보는 일은 없었습니다. 말 그대로 나중은 결코 오지 않았습니다.
항상 기한을 생각하며 일했지만 매번 작업을 할 때마다 쓰레기를 만들며 나중에는 기한을 못지킬 수밖에 없는 상황을 만들고 있었습니다. 기한을 맞추며 빨리가는 방법은 오직 깨긋한 코드를 유지하는 습관뿐입니다.
프로그래밍의 대가들의 클린 코드에 대한 의견들을 보면서 공통적인 부분을 생각해 봤습니다. 깨끗한 코드는 높은 집중력을 갖고 세세한 부분을 신경쓰며 한 가지 기능을 수행하는 것을 목표로 하고 다른 사람이 읽기 쉽고 고치기 쉬워야 하며 작성자의 의도를 읽는 사람이 명확하게 파악할 수 있어야 한다는 것입니다. 매우 어렵지만 앞으로 좋은 코드와 나쁜 코드를 구별할 수 있는 코딩 감각을 키워서 나쁜 코드를 좋은 코드로 바꿀 수 있는 프로그래머가 되겠습니다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
// 르블랑의 법칙? (LeBlanc's Law states) - "Later equals never" is used in the context of software development, but may be applied more broadly to other areas. The law is attributed to Dave LeBlanc.