오늘 TIL 3줄 요약
실용주의 프로그래머는 보다 큰 맥락에서 특정한 환경 조건들마다 적절한 시스템들을 찾고 끊임없는 비판을 통해 점진적으로 나아가는 사람이다.
- 한 가지 일이나 사고에 몰두하기보다는 비판하는 과정을 통해 좀 더 넓게, 맥락을 파악하려는 노력이 필요하다.
- 필요하다면 먼저 나서고, 그에 대한 책임을 지려고 노력하라. 단, 당신이 할 수 없는 것에까지 책임을 질 필요는 없다.
TIL (Today I Learned) 날짜
- 2022. 05. 14
오늘 읽은 범위
- 서문
- 1장. 실용주의 철학
책에서 기억하고 싶은 내용을 써보세요.
- 프로그래밍은 기예(Craft)다. 아주 간단하게 생각해보면 프로그래밍이란 컴퓨터에게 여러분이 원하는 일을 하게 만드는 것이다. 프로그래머로서 여러 분은 어떤 면으로는 듣는 사람이고, 어떤 면으로는 조언하는 사람이며, 통역하는 사람이기도 하고, 명령을 내리는 사람이기도 하다.
- 쉬운 정답은 없다. 도구든, 언어든, 운영 체제는 최고의 해결 방안 같은 것은 없다. 오직 특정한 환경 조건들마다 가장 적절한 시스템들이 있을 뿐이다.
- 실용주의 프로그래머가 되고 싶다면 어떤 일을 하면서 자기가 무엇을 하고 있는지 생각해야만 한다. 현재의 실천 방법을 검토해 보는 일회성 행사를 말하는 것이 아니다. 모든 개발 과정에서, 매일, 여러분이 내리는 모든결정을 끊임없이 비판적으로 평가해야 한다. 절대 기계적으로 일하지 말라. 언제나 일하면서 동시에 생각하고, 자기 일을 비평하라.
- 책임을 회피하지 말라. 그렇다고 모든 것에 책임 질 필요는 없다.
- 깨진 창문이 있다면 그대로 내버려두지 말고 즉시 최소한 판자로 덮는 조치라도 하라. 어떤 위기가 찾아왔다고 해서 부가적인 피해를 일으키지 말라. 깨진 창문은 하나로 충분하다.
- 완벽하게 훌륭한 프로그램을 과도하게 장식하거나 지나칠 정도로 다듬느라 망치지 말라. 그냥 넘어가고 코드를 현재 상태로 한동안 그대로 놓아두라. 완벽하지 않을 수도 있다. 그래도 괜찮다. 완벽해지기란 불가능하다.
- 주식 투자와 같이 지식에 투자하라. 또한 소통하라.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
- 1장의 전반적인 내용은 전반적으로 실용주의에 대한 소개글인 것 같다. 또한 왜 이 책이 20년이 지난 지금에도 우리에게 의미가 있는 책인지 알게 되는 부분이었던 것 같다.
- 프로그래머는 좋은 프로그램을 만들기 위해서 프로그램을 만드는 기술만이 아닌 보다 더 큰 맥락에서 고려해야 한다. 프로그램을 이용할 최종 사용자의 입장에서, 그리고 빠르게 변해가는 기술적인 측면에서. 끊임없이 비판하고 받아들이고 배우려는 자세가 필요하다. 그리고 그 과정에서 프로그래머는 완벽할 수는 없더라도 만능이어야 한다는 생각이 들었다.
- 물론, 이 책이 말하는 대로 그대로 따라한다면 나는 좋은 프로그래머를 넘어서서 매력적인 사람이 될 수 있겠다는 생각이 들었다. 보다 큰 맥락에서, 주도적으로 상황을 이끌고, 점진적으로 일을 진행시키며 그 과정에서 배우고, 배운걸 잘 포장한다는 것. 그것이 얼마나 어려운 일인지를 알기에 자신을 끊임없이 비판적으로 바라보고 좁은 시야에 자신을 가두지 말라는 격언은 굳이 프로그래머에 국한된 이야기가 아닌 나의 보다 나은 삶의 지침이 될 수 있다는 생각이 든다.
노마드코더(NomadCoder, https://nomadcoders.co/community/thread/5130) 에서 진행하는 북클럽 챌린지. 이전에 파이썬 공부를 하고 알고리즘 테스트를 진행하면서 나의 코드와 다른 사람의 코드가 방식이 매우 다르다는 것을 느꼈고, 내가 보아도 아름답다는 코드는 분명히 있었다. 그런데 기초적인 강의를 들으면서 왜 나의 코드와 그 사람들의 코드가 다른가, 기능 구현이라는 측면에서는 동일하나 기능 구현만 되면 어떠한 코드이건 상관이 없는가? 라는 생각을 많이 하게 되었었다. 그래서 클린 코드도 읽고, 다른 사람들이 예제로 작성해놓은 코드들을 분석해보기도 하고, 실제 프로그램들이 어떻게 구현이 되어있는지 vscode로 뜯어 본적도 있고, 오픈 소스 프로젝트 파일들의 코드들도 읽어본 적이 있다.
분명한건 이 과정 속에서 내가 어떤 것이 부족하고, 무엇을 목적으로 공부해야하는가에 대한 정보는 얻을 수 있지만 "더 나은 것은 어떤 것인가"에 대한 정보는 얻기 힘들었다. 따라서 이 책은 "더 나은 코드를 작성하는 것"에 대한 나의 가이드라인이 되면서 동시에 내가 개발자가 되기 위해 가져야할 태도 중 하나가 될 것이라고 믿어 의심치 않는다. 물론 건강한 비판은 들어가야하겠지만, 이 책이 어떻게 비판할 것인가에 대한 지침서가 될 것 같다.
모든 개발자는 유일무이하다. 저마다 강점과 약점, 좋아하는 것과 싫어하는 것이 다르다. 시간이 흐르면 모든 개발자가 자신만읭 작업 환경을 만드는데, 이 작업 환경은 프로그래머의 취미와 옷 입는 취향, 머리 스타일만큼이나 프로그래머의 개성을 강하게 드러낸다. 하지만 그래도 실용주의 프로그래머들은 다음 특징들 가운데 많은 수를 공유한다.
1. 얼리 어댑터 또는 새로운 것에 빨리 적응하는 사람
- 이런 사람은 기술과 기법에 대한 본능적인 감각이 있으며, 새로운 것을 시도하기 좋아한다. 새로운 것이 주어지면 쉽게 파악해서 자기 지식에 통합해 넣는다. 이런 사람의 자신감은 경험에서 우러나오는 것이다.
2. 호기심 많은 사람
- 이런 사람은 질문을 많이 한다. "멋진데, 어떻게 한 거지? 그 라이브러리에 무슨 문제 있어? 양자 컴퓨터라는 게 있다던데 그게 뭐야? 심볼릭 링크는 어떻게 구현되는 거야?" 이런 사람은 자잘한 지식을 머릿속에 쌓아 두며, 그 가운데 어떤 것은 몇 년 후의 결정에 영향을 주기도 한다.
3. 비판적인 사고의 소유자
- 이런 사람은 사실 관계를 확인하지 않고서는 곧이곧대로 믿는 일이 드물다. 직장 동료가 "늘 그런 식으로 해왔으니까." 라고 말하거나, 제품 영업사원이 이것의 모든 문제의 해결책이라고 약속하면 도전 욕구가 솟아오르는 사람이다.
4. 현실주의자
- 이런 사람은 자신이 맞닥트리는 모든 문제의 근본적인 특성을 이해하려고 노력한다. 현실주의는 이 일이 얼마나 어려운 일인지, 이 일에 시간이 얼마나 걸릴지 판단하는 감각을 길러준다. 어떤 과정이 어려울 수밖에 없다는 것을 이해하거나 어떤 과정을 끝내는 데 상당한 시간이 걸릴 것이라는 것을 이해하면 끈기 있게 그 일을 해 나갈 지구력이 생긴다.
5. 다방면에 능숙한 사람
- 이런 사람은 다양한 분야의 기술과 환경에 친숙해지려고 열심히 노력한다. 그리고 새로운 발전의 흐름에 뒤떨어지지 않으려고 노력한다. 지금 하는 일이 특정 분야에 좁게 파고들 것을 요구할지라도 언제든지 새로운 영역과 새로운 도전으로 옮겨갈 수 있다.
마지막을 위해 가장 기본적인 특징 하나를 남겨 두었다. 이 특징은 모든 실용주의 프로그래머에게 공통적이다. 너무나 기본적인 것이라서 팁의 형식으로 소개할 만 하다.
1. 자신의 기예(Craft)에 관심을 가져라.
: 여러분이 소프트웨어 개발을 잘하는 것에 관심이 없다면, 이 일을 하는 의미가 없다고 생각한다.
2. 자기 일에 대해 생각하라.
실용주의 프로그래머가 되고 싶다면 어떤 일을 하면서 자기가 무엇을 하고 있는지 생각해야만 한다. 현재의 실천 방법을 검토해 보는 일회성 행사를 말하는 것이 아니다. 모든 개발 과정에서, 매일, 여러분이 내리는 모든 결정을 끊임없이 비판적으로 평가해야 한다. 절대 기계적으로 일하지 말라. 언제나 일하면서 동시에 생각하고, 자기 일을 비평하라. 오래된 IBM의 표어 '생각하라!'가 실용주의 프로그래머의 계명이다.
인용부분이 상당히 길긴 하지만, 두고두고 다시한번 생각 할 수 있는 글귀로, 내가 어떤 유형의 프로그래머가 될 것인가에 대해서 깊게 고민해보고자 이렇게 남겨둔다.
'Book > 실용주의 프로그래머' 카테고리의 다른 글
TIL 4장. 실용주의 편집증(2022.5.19) (0) | 2022.05.19 |
---|---|
TIL 3장. 기본도구(2022.5.18) (0) | 2022.05.18 |
실용주의 프로그래머 - 최애 TIL을 찾아라! (0) | 2022.05.17 |
TIL 2장에 대한 첨부 (0) | 2022.05.17 |
TIL 2장. 실용주의 접근법(2022.5.15) (0) | 2022.05.15 |