From b1bd95dfdcd44fc459862a20ff00506a105aa6b7 Mon Sep 17 00:00:00 2001 From: ymkim97 Date: Thu, 29 May 2025 01:47:31 +0900 Subject: [PATCH 1/2] Chapter 24 ~ 33 --- .../ymkim97/chapter24~33.md | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 2025/Becoming a Better Programmer/ymkim97/chapter24~33.md diff --git a/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md b/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md new file mode 100644 index 00000000..b34b2b3a --- /dev/null +++ b/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md @@ -0,0 +1,165 @@ +# 더 나은 프로그래머 되는 법 +## 24장 ~ 33장 +--- +## 24장 - 배움을 사랑하며 살기 +프로그래머로서 발전하기 위해서는 배움 그 자체에 숙련되고 노련해져야 한다. +또한 배움을 즐기는 법도 배워야 한다. + +> *지속적으로 배우는 상태를 유지하라. 배울 만한 새로운 무언가를 항상 찾아보라.* + +배울 것을 선택하고 시도할 수 있는 것은 매우 많다. +우리는 알고 있는 ‘알려지지 않은 것’들이나 알지 못한는 알려지지 않은 것을 목표로 하고 배울 때 재미있을 만한 것을 조사하는 데 우선 시간을 들여야 한다. +그 후 흥미를 끄는 것을 선택하면 된다. + +새로운 도구, 기술들을 배우는 것도 있지만, 이러한 새로운 것들을 효과적으로 습득하는 데 도움이 되는 기술이나 사람들과 함께 일하는 법과 같은 것들도 중요하다. + +> *우리는 배울 때 종종 너무 좁게 초점을 맞춘다. 더 넓은 분야에 대해 참고하라. 많은 분야에서 영감을 얻으라.* + +사람은 자신의 성향을 제대로 이해하면, 배우는 방법을 최대한 효과적으로 이끌 수 있는 구체적인 방법을 찾을 수 있다. +교차 감각적 피드백(Cross-sensory feedback)은 배우는 동안 잘 사용하지 않는 뇌의 부분을 자극하여 뇌의 효율을 증가시키는 방법이다. 일하는 동안 음악을 듣거나, 무엇이든 만지작 거리거나, 생각하는 동안 낙서를 하는 등이다. + +* 배움의 가장 효과적인 방법 중 하나는 직접 가르쳐보는 것이다. 가르칠 때는 그 소재를 되짚어보게 되고 기억을 더 보강하게 된다. +* 배움에 있어 핵심적인 기술은 행동하는 것이다. 실제로 사용하기 전까지는 머릿속에만 존재하는 추상적인 개념일 뿐이다. 추상적으로만 알고 있던 것들을 구체적이고 실천적으로 알 수 있도록 하라. + +## 25장 - 테스트 주도 개발자 +책에서는 운전과 프로그래밍은 흥미로운 유사성을 가지며 이 둘을 비교함으로써 몇 가지 교훈을 얻을 수 있다고 한다. + +**운전하기** +운전은 행동과 기술의 조화를 필요로 한다. 그 복잡한 과정에서 충분한 역량을 얻기 위해서는 많은 노력과 연습을 해야 한다. +운전 시험을 막 통과한 초보 운전자는 배움의 ‘의식적 능력’ 단계에 있다. 그들은 자신이 운전할 수 있다는 것을 알고 있고, 마주치는 모든 상황들을 주의 깊게 조율하는 데 집중해야 한다. +하지만 많은 경험을 거치고 나면, 이런 행위 중 상당 부분이 자동적으로 반응한다. +자동차 내의 기기 제어와 스티어링휠 조작은 제2의 천성이 된다. +이 단계에 도달한 운전자는 아직 알지 못하는 것에 집중하고 관심을 쏟게 된다. 길 자체나 끊임없이 나타나는 결정 사항 등이 있다. +마찬가지로, 소프트웨어 개발자가 도구나 언어에 통달하고 나면 주제에 대한 더 큰 그림을 보게 된다. 문제를 처리하는 세세한 방법까지 신경 쓰는 대신 문제를 해결하는 대략적인 경로를 계획할 수 있다. + +**성공은 안일함을 낳는다** +주의를 기울이지 않으면 ‘의식적 능력’ 상태로 인해 안일해지기 쉽다. +좋은 운전자가 되기 위해서는 안일함을 극복하는 것이 중요하다. 그렇지 않으면 실질적인 위험 요소 자체가 될 수 있다. 무언가에 충돌하거나 누군가를 칠 수 있다는 뜻이다. +프로그래밍에도 그와 유사한 함정이 도사리고 있다. +신경을 쓰지 않으면 코드 재앙을 불러일으킬 것이다. 부주의한 코드는 생명에 지장을 준다는 것을 기억하라. + +> *‘의식적 능력’ 단계에 도달했을 때 안일해지지 않도록 주의해야 한다. 자신의 머리로 코드에 항상 집중하고, 어이없고 위험성 높은 오류를 피하도록 하라.* + +**시험 시간** +운전면허 시험은 운전에 필요한 기술을 가지고 있고 책임을 질 수 있다는 것을 증명하는 수단이다. +자동차를 다룰 수 있을 뿐만 아니라, 도로상의 어려운 상황에서도 올바른 결정을 할 수 있다는 것을 나타낸다. + +**테스트 주도 개발자** +프로그래밍 세계와 운전면허 시험 사이에 직접적인 연관 관계는 없다. 하지만 돈벌이가 되는 일을 하려면 일정 수준 이상의 기술을 보유해야 할 것이다. +정평이 난 훈련 코스를 수료하거나 실재적인 경험이 선행되었음을 보여주어야 한다. + +지금까지 봐왔듯이 대다수의 프로그래밍 기술은 업무로부터 다져진 경험을 통해 얻어진다. +따라서 견습생-기술자-장인 모델을 통해 인식하는 것이 더 적합하다. +오랜 경력을 가진 코더라고 해서 반드시 계속해서 배우고 기술을 연마했던 것은 아니다. +관련 업계에서 보낸 시간만으로 판단할 수 없다. + +## 26장 - 도전 즐기기 +우리는 무언가를 만들고 문제를 해결하며, 새로운 기술을 연구하고 흥미로운 퍼즐을 완성하는 조각을 모으길 즐긴다. +적극적이고 활동적인 프로그래머는 새롭고 흥미로운 도전을 지속적으로 찾아다닌다. + +자극적이거나 도전적이거나 혹은 즐거움을 느께게 하는 무언가에 열중하는 행위 자체가 동기 부여가 될 수 있다. 만약 동일하고 지루한 코드를 요구에 따라 줄줄이 뽑아내는 ‘코딩 공장’에 갇혀 있다면, 흥미가 떨어지게 될 것이다. +반대로 도전적인 문제에 적극적으로 임하는 자세는 더 배우고 발전할 수 있도록 장려하고 흥분시킬 것이다. + +## 27장 - 부진 피하기 +안전지대는 유해한 영역이며 그것은 함정이다. 편안한 삶이란 곧 학습하지 않고, 진행하지 않으며, 더 이상의 발전이 없는 것을 의미한다. +안전지대에 있다는 것은 정체되었다는 뜻이고 퇴보로 가는 지름길이다. + +> *정체에 주의하라. 더 나은 프로그래머를 추구하는 과정은 가장 안락한 삶을 의미하지 않는다.* + +물론 의도적으로 정체되려는 사람은 없지만 안전지대에 빠져들어 자신도 깨닫지 못하는 사이에 개발자로서의 경력이 타성에 젖어버리기란 쉬운 일이다. + +**자신의 기술이야말로 투자 대상이다** +자신의 기술들을 유지하기란 어려운 일이라는 점에 주의하라. 이를 위해서는 스스로 불편한 상황에 두어야 하고 많은 노력을 쏟아 부어야 한다. +일을 하고 나면 집에 가서 휴식을 취하고 싶고 친숙하고 편안한 방향으로 가고자 하는 것은 자연스러우나 그래서는 안 된다. +도전 안에서 즐거움을 느끼고 자신이 더 나은 프로그래머, 더 나은 사람이 되기 위해 투자를 하고 있음에 감사하라. + +## 28장 - 윤리적인 프로그래머 +윤리적인 가치관은 프로그래머로서 어떤 행동을 해야 하는지, 그리고 직업적으로 어떻게 사람들과 관계를 맺어야 하는지에 영향을 준다. + +의사, 변호사 등과는 다르게 소프트웨어 엔지니어링에는 세계적으로 통용되는 규범이 없다. 즉 유용한 수준에서 인정할 만한 업계 기준이 거의 없다. +ACM, BSI와 같은 조직에서 자신들이 직접 세운 윤리 강령을 제시하지만 법적인 효력이 별로 없으며 세계적으로 통용되는 것도 아니다. + +프로그래머의 업무에 대한 윤리는 각자의 도덕적 규범에 크게 좌우된다. + +## 29장 - 언어에 대한 사랑 +이번 장에서는 개발자와 언어간의 관계를 사람과 사람간의 관계(결혼)를 통해 풀어나간다. + +좋은 프로그래머가 되기 위해서는 지속적으로 새로운 도전을 접하고, 배우며, 새로운 문제를 해결하고 새로운 기술을 사용해야 한다. + +> *한 가지 재주만 있는 사람이 되지 말라. 프로그래머로서 새로운 도전을 하고, 배우고, 성장하라.* + +하나의 언어 관습에만 갇혀 있는 것은 문제를 일차원적으로만 해결하도록 만들기 때문에 다양한 관습과 패러다임을 따르고 있는 언어들을 익혀야 한다. +하지만 모든 언어에서 최고로 숙련될 수는 없기 때문에 가능성이 보이는 두 개 정도 언어에 재능을 쏟자. + +그 어떠한 언어라도 숙달되려면 몰입해야 한다. +물론 언어를 단순히 개발자의 선호도에 따라 배울 수도 있지만 다니고 있는 회사 등의 현실에 따라 맞춰지는 겨우가 대부분일 것이라고 생각한다. +그때는 할 수 있는 최선은 현재 자신이 사용하고 있는 언어에 대한 장단점을 잘 파악하여 인지하고, 실행 원리를 아는 것이라고 생각한다. + +또한 책에서는 자신의 언어를 사랑하고 즐기라고 한다. +시간이 흐름에 따라 점차 사랑과 존중이 자라날 수 있음을 이해하라고 한다. +대신 시간을 보내면서 자신의 스타일을 고집하기보다는 언어 고유의 방식과 관습에 몰입해야 한다. + +> 하루아침에 언어를 마스터하려 하지 말고, 작업하는 동안 좌절하지 말라. + + +## 30장 - 프로그래머의 자세 +말 그대로 컴퓨터 앞에 앉는 기본 자세를 알려주는 장이다. +나쁜 앉은 자세로 인해 집중력과 생산성에도 심각한 영향을 주기 때문에 인체 공학 전문가들이 추천하는 자세를 설명 한다. + +> *자신을 돌봐라. 일하면서 좋은 자세를 유지하라.* + +이번 장을 보면서 앉는 자세부터 잘 신경써야겠다고 반성하게 되었다. + +이번 장에서는 내용이 앞 장들과는 다르게 가볍지만 무시할 수는 없는 문제다. +프로그래머들은 생각보다 자신의 건강에 충분히 신경을 쓰지 않기 때문에 몸을 보살펴야 한다. + +## 31장 - ‘더 열심히’보다는 ‘더 현명하게’ +문제를 해결할 때 하나의 도구나 한 가지 방법에 지나치게 몰입하는 건 언제나 위험하다. +목표를 달성하기에 더 쉽고 직접적인 방법이 있는데도, 많은 시간을 낭비하기 정말 쉽기 때문에 조심해야 한다. +그래서 생산적인 프로그래머가 되야 하고, 더 열심히 보다는 더 현명하게 일하는 방법을 배워야 한다. + +* 현명하게 재사용하기 +* 다른 사람의 일로 만들라 - 어떤 작업을 진행하는 방법에 대해 이미 다른 사람이 알고 있다면, 그 일을 직접 해결하려 들지 말라 +* 해야 하는 것만 하라 +* 거칠더라도 빠르게 해결하라 +* 우선순위를 설정하라 +* 새로운 업무가 할당될 때는 지금 당장 필요한 일인지부터 확인하라 +* 한 번에 하나씩 +* 작고 간결하게 유지하라 +* 문제를 미루고 쌓아두지 말라 +* 자동화하라 + +열심히 일하지 말라는 것이 아닌, 열심히 하는 것이 반드시 현명한 것은 아니라는 것을 명심하자. + +## 32장 - 끝나야 끝나는 것 +많은 프로그래머가 작업이 거의 끝나가는지에 대한 적당한 감각이 없다. +“수정해야 할 버그나 예측하지 못한 문제가 좀 있을 수 있다. 따라서 거의 끝나가는지 말할 수 없다.”라고 말할 뿐이고 이것은 적절하지 못한 대응이다. + +책의 저자는 다음과 같은 사람들을 종종 보았다. +* 멈출 때를 모르는 탓에 그들은 필요 이상으로 더 많은 일을 한다. +* 일이 완료된 상태가 언제인지를 모르는 탓에 끝냈다고 생각되는 일조차 완결짓지 못한다. +* 코드에서 다음어야 할 부분을 잘못 선택하고 명확한 목표를 전혀 알지 못한다. +* 지나치게 열심히 일하는 개발자는 결국 더 많은 일을 하게 될 뿐이다. + +‘완료’ 상태를 정의하기 위한 첫 번째 단계는 작업 내용을 정확히 파악하는 것이다. +문제의 크기에 따라 완료 시점을 예측하는 난이도가 비례하기 때문에 엄청난 업무를 할당받았다면 일을 시작하기 전에 더 작고 이해할 만한 부분으로 일을 나누어야 한다. +대신 너무 지나치게 자잘한 단위로 일을 나누지 않도록 주의해야 한다. + +> *‘완료(done) 상태를 정의해야 한다.’* + +그만둘 때를 결정하지 않으면 필요 이상으로 작업하게 될 것이다. +모든 것을 끝낼 수 없다고 생각하기 때문이다. +무엇이 성공인지 파악하기 전까지는 코딩 작업을 일절 시작하지 말자. + +## 33장 - 교훈 얻기 +> *그 어떤 개발자도 혼자가 아니다. 너무 좁은 시야로 혹은 너무 가깝게 문제의 일부를 바라보면, 문제 전체를 보지 못하거나 효율적으로 문제에 대처하지 못하게 되므로 주의해야 한다.* + +자신감으로 충만한 나머지 도움 요청을 놓치는 일이 없도록 하자. + +이번 장에서는 소프트웨어 개발과 관련한 문제가 기술적 부분보다는 인간적 부분에서 더 자주 발생할 수 있음을 보여주는 사례를 말해준다. +이러한 문제를 스스로 가장 효율적으로 해결하는 방법을 배워야 하며, 빠르지만 비효율적으로 문제를 처리하고자 하는 본능을 극복해야 한다. + + +## [논의 내용] +* 26장의 자극받기에서는 다양한 방법이 소개되어 있습니다. 저 같은 경우에는 다른 개발자를 만나 이야기를 나누거나, 개발 컨퍼런스 또는 모임에 참석하는 것을 좋아합니다. 다른 분들은 어떤 방법으로 자극을 받으시는지, 개발에 대한 흥미를 다시 이끌어내는지 궁금합니다. +* 개발자마다 자신이 특히나 좋아하고 애정하는 언어가 하나씩은 있을 것이라고 생각합니다. 각자 어떠한 언어를 그렇게 생각하는지와 이유에 대해서 의논하면 좋을 것 같습니다. \ No newline at end of file From 9e633bf04933682fbe9a714008eb2d4f31f38f29 Mon Sep 17 00:00:00 2001 From: Youngmyung Kim <83266154+ymkim97@users.noreply.github.com> Date: Fri, 30 May 2025 23:38:13 +0900 Subject: [PATCH 2/2] Update 2025/Becoming a Better Programmer/ymkim97/chapter24~33.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- 2025/Becoming a Better Programmer/ymkim97/chapter24~33.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md b/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md index b34b2b3a..e906d614 100644 --- a/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md +++ b/2025/Becoming a Better Programmer/ymkim97/chapter24~33.md @@ -116,7 +116,7 @@ ACM, BSI와 같은 조직에서 자신들이 직접 세운 윤리 강령을 제 ## 31장 - ‘더 열심히’보다는 ‘더 현명하게’ 문제를 해결할 때 하나의 도구나 한 가지 방법에 지나치게 몰입하는 건 언제나 위험하다. 목표를 달성하기에 더 쉽고 직접적인 방법이 있는데도, 많은 시간을 낭비하기 정말 쉽기 때문에 조심해야 한다. -그래서 생산적인 프로그래머가 되야 하고, 더 열심히 보다는 더 현명하게 일하는 방법을 배워야 한다. +그래서 생산적인 프로그래머가 돼야 하고, 더 열심히 보다는 더 현명하게 일하는 방법을 배워야 한다. * 현명하게 재사용하기 * 다른 사람의 일로 만들라 - 어떤 작업을 진행하는 방법에 대해 이미 다른 사람이 알고 있다면, 그 일을 직접 해결하려 들지 말라