Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 165 additions & 0 deletions 2025/Becoming a Better Programmer/ymkim97/chapter24~33.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# 더 나은 프로그래머 되는 법
## 24장 ~ 33장
---
## 24장 - 배움을 사랑하며 살기
프로그래머로서 발전하기 위해서는 배움 그 자체에 숙련되고 노련해져야 한다.
또한 배움을 즐기는 법도 배워야 한다.

> *지속적으로 배우는 상태를 유지하라. 배울 만한 새로운 무언가를 항상 찾아보라.*

배울 것을 선택하고 시도할 수 있는 것은 매우 많다.
우리는 알고 있는 ‘알려지지 않은 것’들이나 알지 못한는 알려지지 않은 것을 목표로 하고 배울 때 재미있을 만한 것을 조사하는 데 우선 시간을 들여야 한다.
그 후 흥미를 끄는 것을 선택하면 된다.

새로운 도구, 기술들을 배우는 것도 있지만, 이러한 새로운 것들을 효과적으로 습득하는 데 도움이 되는 기술이나 사람들과 함께 일하는 법과 같은 것들도 중요하다.

> *우리는 배울 때 종종 너무 좁게 초점을 맞춘다. 더 넓은 분야에 대해 참고하라. 많은 분야에서 영감을 얻으라.*

사람은 자신의 성향을 제대로 이해하면, 배우는 방법을 최대한 효과적으로 이끌 수 있는 구체적인 방법을 찾을 수 있다.
교차 감각적 피드백(Cross-sensory feedback)은 배우는 동안 잘 사용하지 않는 뇌의 부분을 자극하여 뇌의 효율을 증가시키는 방법이다. 일하는 동안 음악을 듣거나, 무엇이든 만지작 거리거나, 생각하는 동안 낙서를 하는 등이다.

* 배움의 가장 효과적인 방법 중 하나는 직접 가르쳐보는 것이다. 가르칠 때는 그 소재를 되짚어보게 되고 기억을 더 보강하게 된다.
* 배움에 있어 핵심적인 기술은 행동하는 것이다. 실제로 사용하기 전까지는 머릿속에만 존재하는 추상적인 개념일 뿐이다. 추상적으로만 알고 있던 것들을 구체적이고 실천적으로 알 수 있도록 하라.

## 25장 - 테스트 주도 개발자
책에서는 운전과 프로그래밍은 흥미로운 유사성을 가지며 이 둘을 비교함으로써 몇 가지 교훈을 얻을 수 있다고 한다.

**운전하기**
운전은 행동과 기술의 조화를 필요로 한다. 그 복잡한 과정에서 충분한 역량을 얻기 위해서는 많은 노력과 연습을 해야 한다.
운전 시험을 막 통과한 초보 운전자는 배움의 ‘의식적 능력’ 단계에 있다. 그들은 자신이 운전할 수 있다는 것을 알고 있고, 마주치는 모든 상황들을 주의 깊게 조율하는 데 집중해야 한다.
하지만 많은 경험을 거치고 나면, 이런 행위 중 상당 부분이 자동적으로 반응한다.
자동차 내의 기기 제어와 스티어링휠 조작은 제2의 천성이 된다.
이 단계에 도달한 운전자는 아직 알지 못하는 것에 집중하고 관심을 쏟게 된다. 길 자체나 끊임없이 나타나는 결정 사항 등이 있다.
마찬가지로, 소프트웨어 개발자가 도구나 언어에 통달하고 나면 주제에 대한 더 큰 그림을 보게 된다. 문제를 처리하는 세세한 방법까지 신경 쓰는 대신 문제를 해결하는 대략적인 경로를 계획할 수 있다.

**성공은 안일함을 낳는다**
주의를 기울이지 않으면 ‘의식적 능력’ 상태로 인해 안일해지기 쉽다.
좋은 운전자가 되기 위해서는 안일함을 극복하는 것이 중요하다. 그렇지 않으면 실질적인 위험 요소 자체가 될 수 있다. 무언가에 충돌하거나 누군가를 칠 수 있다는 뜻이다.
프로그래밍에도 그와 유사한 함정이 도사리고 있다.
신경을 쓰지 않으면 코드 재앙을 불러일으킬 것이다. 부주의한 코드는 생명에 지장을 준다는 것을 기억하라.

> *‘의식적 능력’ 단계에 도달했을 때 안일해지지 않도록 주의해야 한다. 자신의 머리로 코드에 항상 집중하고, 어이없고 위험성 높은 오류를 피하도록 하라.*

**시험 시간**
운전면허 시험은 운전에 필요한 기술을 가지고 있고 책임을 질 수 있다는 것을 증명하는 수단이다.
자동차를 다룰 수 있을 뿐만 아니라, 도로상의 어려운 상황에서도 올바른 결정을 할 수 있다는 것을 나타낸다.

**테스트 주도 개발자**
프로그래밍 세계와 운전면허 시험 사이에 직접적인 연관 관계는 없다. 하지만 돈벌이가 되는 일을 하려면 일정 수준 이상의 기술을 보유해야 할 것이다.
정평이 난 훈련 코스를 수료하거나 실재적인 경험이 선행되었음을 보여주어야 한다.

지금까지 봐왔듯이 대다수의 프로그래밍 기술은 업무로부터 다져진 경험을 통해 얻어진다.
따라서 견습생-기술자-장인 모델을 통해 인식하는 것이 더 적합하다.
오랜 경력을 가진 코더라고 해서 반드시 계속해서 배우고 기술을 연마했던 것은 아니다.
관련 업계에서 보낸 시간만으로 판단할 수 없다.

## 26장 - 도전 즐기기
우리는 무언가를 만들고 문제를 해결하며, 새로운 기술을 연구하고 흥미로운 퍼즐을 완성하는 조각을 모으길 즐긴다.
적극적이고 활동적인 프로그래머는 새롭고 흥미로운 도전을 지속적으로 찾아다닌다.

자극적이거나 도전적이거나 혹은 즐거움을 느께게 하는 무언가에 열중하는 행위 자체가 동기 부여가 될 수 있다. 만약 동일하고 지루한 코드를 요구에 따라 줄줄이 뽑아내는 ‘코딩 공장’에 갇혀 있다면, 흥미가 떨어지게 될 것이다.
반대로 도전적인 문제에 적극적으로 임하는 자세는 더 배우고 발전할 수 있도록 장려하고 흥분시킬 것이다.

## 27장 - 부진 피하기
안전지대는 유해한 영역이며 그것은 함정이다. 편안한 삶이란 곧 학습하지 않고, 진행하지 않으며, 더 이상의 발전이 없는 것을 의미한다.
안전지대에 있다는 것은 정체되었다는 뜻이고 퇴보로 가는 지름길이다.

> *정체에 주의하라. 더 나은 프로그래머를 추구하는 과정은 가장 안락한 삶을 의미하지 않는다.*

물론 의도적으로 정체되려는 사람은 없지만 안전지대에 빠져들어 자신도 깨닫지 못하는 사이에 개발자로서의 경력이 타성에 젖어버리기란 쉬운 일이다.

**자신의 기술이야말로 투자 대상이다**
자신의 기술들을 유지하기란 어려운 일이라는 점에 주의하라. 이를 위해서는 스스로 불편한 상황에 두어야 하고 많은 노력을 쏟아 부어야 한다.
일을 하고 나면 집에 가서 휴식을 취하고 싶고 친숙하고 편안한 방향으로 가고자 하는 것은 자연스러우나 그래서는 안 된다.
도전 안에서 즐거움을 느끼고 자신이 더 나은 프로그래머, 더 나은 사람이 되기 위해 투자를 하고 있음에 감사하라.

## 28장 - 윤리적인 프로그래머
윤리적인 가치관은 프로그래머로서 어떤 행동을 해야 하는지, 그리고 직업적으로 어떻게 사람들과 관계를 맺어야 하는지에 영향을 준다.

의사, 변호사 등과는 다르게 소프트웨어 엔지니어링에는 세계적으로 통용되는 규범이 없다. 즉 유용한 수준에서 인정할 만한 업계 기준이 거의 없다.
ACM, BSI와 같은 조직에서 자신들이 직접 세운 윤리 강령을 제시하지만 법적인 효력이 별로 없으며 세계적으로 통용되는 것도 아니다.

프로그래머의 업무에 대한 윤리는 각자의 도덕적 규범에 크게 좌우된다.

## 29장 - 언어에 대한 사랑
이번 장에서는 개발자와 언어간의 관계를 사람과 사람간의 관계(결혼)를 통해 풀어나간다.

좋은 프로그래머가 되기 위해서는 지속적으로 새로운 도전을 접하고, 배우며, 새로운 문제를 해결하고 새로운 기술을 사용해야 한다.

> *한 가지 재주만 있는 사람이 되지 말라. 프로그래머로서 새로운 도전을 하고, 배우고, 성장하라.*

하나의 언어 관습에만 갇혀 있는 것은 문제를 일차원적으로만 해결하도록 만들기 때문에 다양한 관습과 패러다임을 따르고 있는 언어들을 익혀야 한다.
하지만 모든 언어에서 최고로 숙련될 수는 없기 때문에 가능성이 보이는 두 개 정도 언어에 재능을 쏟자.

그 어떠한 언어라도 숙달되려면 몰입해야 한다.
물론 언어를 단순히 개발자의 선호도에 따라 배울 수도 있지만 다니고 있는 회사 등의 현실에 따라 맞춰지는 겨우가 대부분일 것이라고 생각한다.
그때는 할 수 있는 최선은 현재 자신이 사용하고 있는 언어에 대한 장단점을 잘 파악하여 인지하고, 실행 원리를 아는 것이라고 생각한다.

또한 책에서는 자신의 언어를 사랑하고 즐기라고 한다.
시간이 흐름에 따라 점차 사랑과 존중이 자라날 수 있음을 이해하라고 한다.
대신 시간을 보내면서 자신의 스타일을 고집하기보다는 언어 고유의 방식과 관습에 몰입해야 한다.

> 하루아침에 언어를 마스터하려 하지 말고, 작업하는 동안 좌절하지 말라.


## 30장 - 프로그래머의 자세
말 그대로 컴퓨터 앞에 앉는 기본 자세를 알려주는 장이다.
나쁜 앉은 자세로 인해 집중력과 생산성에도 심각한 영향을 주기 때문에 인체 공학 전문가들이 추천하는 자세를 설명 한다.

> *자신을 돌봐라. 일하면서 좋은 자세를 유지하라.*

이번 장을 보면서 앉는 자세부터 잘 신경써야겠다고 반성하게 되었다.

이번 장에서는 내용이 앞 장들과는 다르게 가볍지만 무시할 수는 없는 문제다.
프로그래머들은 생각보다 자신의 건강에 충분히 신경을 쓰지 않기 때문에 몸을 보살펴야 한다.

## 31장 - ‘더 열심히’보다는 ‘더 현명하게’
문제를 해결할 때 하나의 도구나 한 가지 방법에 지나치게 몰입하는 건 언제나 위험하다.
목표를 달성하기에 더 쉽고 직접적인 방법이 있는데도, 많은 시간을 낭비하기 정말 쉽기 때문에 조심해야 한다.
그래서 생산적인 프로그래머가 돼야 하고, 더 열심히 보다는 더 현명하게 일하는 방법을 배워야 한다.

* 현명하게 재사용하기
* 다른 사람의 일로 만들라 - 어떤 작업을 진행하는 방법에 대해 이미 다른 사람이 알고 있다면, 그 일을 직접 해결하려 들지 말라
* 해야 하는 것만 하라
* 거칠더라도 빠르게 해결하라
* 우선순위를 설정하라
* 새로운 업무가 할당될 때는 지금 당장 필요한 일인지부터 확인하라
* 한 번에 하나씩
* 작고 간결하게 유지하라
* 문제를 미루고 쌓아두지 말라
* 자동화하라

열심히 일하지 말라는 것이 아닌, 열심히 하는 것이 반드시 현명한 것은 아니라는 것을 명심하자.

## 32장 - 끝나야 끝나는 것
많은 프로그래머가 작업이 거의 끝나가는지에 대한 적당한 감각이 없다.
“수정해야 할 버그나 예측하지 못한 문제가 좀 있을 수 있다. 따라서 거의 끝나가는지 말할 수 없다.”라고 말할 뿐이고 이것은 적절하지 못한 대응이다.

책의 저자는 다음과 같은 사람들을 종종 보았다.
* 멈출 때를 모르는 탓에 그들은 필요 이상으로 더 많은 일을 한다.
* 일이 완료된 상태가 언제인지를 모르는 탓에 끝냈다고 생각되는 일조차 완결짓지 못한다.
* 코드에서 다음어야 할 부분을 잘못 선택하고 명확한 목표를 전혀 알지 못한다.
* 지나치게 열심히 일하는 개발자는 결국 더 많은 일을 하게 될 뿐이다.

‘완료’ 상태를 정의하기 위한 첫 번째 단계는 작업 내용을 정확히 파악하는 것이다.
문제의 크기에 따라 완료 시점을 예측하는 난이도가 비례하기 때문에 엄청난 업무를 할당받았다면 일을 시작하기 전에 더 작고 이해할 만한 부분으로 일을 나누어야 한다.
대신 너무 지나치게 자잘한 단위로 일을 나누지 않도록 주의해야 한다.

> *‘완료(done) 상태를 정의해야 한다.’*

그만둘 때를 결정하지 않으면 필요 이상으로 작업하게 될 것이다.
모든 것을 끝낼 수 없다고 생각하기 때문이다.
무엇이 성공인지 파악하기 전까지는 코딩 작업을 일절 시작하지 말자.

## 33장 - 교훈 얻기
> *그 어떤 개발자도 혼자가 아니다. 너무 좁은 시야로 혹은 너무 가깝게 문제의 일부를 바라보면, 문제 전체를 보지 못하거나 효율적으로 문제에 대처하지 못하게 되므로 주의해야 한다.*

자신감으로 충만한 나머지 도움 요청을 놓치는 일이 없도록 하자.

이번 장에서는 소프트웨어 개발과 관련한 문제가 기술적 부분보다는 인간적 부분에서 더 자주 발생할 수 있음을 보여주는 사례를 말해준다.
이러한 문제를 스스로 가장 효율적으로 해결하는 방법을 배워야 하며, 빠르지만 비효율적으로 문제를 처리하고자 하는 본능을 극복해야 한다.


## [논의 내용]
* 26장의 자극받기에서는 다양한 방법이 소개되어 있습니다. 저 같은 경우에는 다른 개발자를 만나 이야기를 나누거나, 개발 컨퍼런스 또는 모임에 참석하는 것을 좋아합니다. 다른 분들은 어떤 방법으로 자극을 받으시는지, 개발에 대한 흥미를 다시 이끌어내는지 궁금합니다.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 알려주신 방법으로 자극 받는 걸 좋아합니다.

다른 개발자와 얘기하는 건 서로 어느 수준 까지 알고 얘기하는지 가늠해 보는 좋은 방법이고
컨퍼런스 같은 경우는 GDG 인천/송도의 경우는 1년에 2~3회 참석하고, 사내 스터디 발표 모임도 되도록 매주 진행하고 있고, 제가 주관하고 개최하며 현재 진행중인 독서 모임과 연말 home coming day 행사 등이 있습니다.

그리고 하나 더 추가하면
저는 저보다 능력있는 개발자와 함께 일하는 걸 즐기는데 가끔 그런 능력있는 분들하고 같이 일하면 즐겁기 때문입니다.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예전에는 제 일상에서 사용할 애플리케이션을 만들고, 직접 사용함으로써, 개발의 흥미를 느꼈는데,
최근에는 문제를 해결한다는 측면에서, 그 절차를 하나씩 직접 해보고, 그 원리를 파악하게 되는 과정이 즐거운 것 같습니다. 그래서 예전에는 공부, 학습의 대상이여서, 지속하기 힘들었다면, 요즘에는 새로운 개념을 알게되는 즐거움의 측면에서 좀 더 지속하기 쉬운 상황인 것 같습니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저같은 경우는 멘토링을 받았을 때 입니다.
거의 회사업무에 치우쳐진 삶을 살면서 개발을 좋아하기만 했지 어떻게 해야 할지를 몰랐습니다.
멘토링 때에 그에 대한 방향성을 잡아주셔서 좋았고 지금은 멘토링을 쉬고 있는데
다시 시작할 생각입니다.

* 개발자마다 자신이 특히나 좋아하고 애정하는 언어가 하나씩은 있을 것이라고 생각합니다. 각자 어떠한 언어를 그렇게 생각하는지와 이유에 대해서 의논하면 좋을 것 같습니다.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 어렸을 때 부터 IBM과 Microsoft의 운영체제, 프로그래밍 언어를 쓰다 보니 선호하게 되었고
제가 특별히 의도한 건 아니지만 개발자 경력의 대부분을 Microsoft의 환경에서 개발했던 적이 매우 많습니다.

그래서 Basic, C++, C# 언어를 자주 써왔고 좋아하는데
특히 C#은 1.0 때 부터 써왔고 현재 23년째 쓰는 언어라 큰 애정을 가지고 있습니다.
1.0 버전은 정말 그 당시 Java 최신 버전이었던 1.4 보다도 한참 못미칠 정도로 형편없는 언어였는데
23년간 여러 언어의 장점(자바, 델파이, C++, 파이썬)을 흡수하면서 동시에
자바스크립트, 타입스크립트에 큰 영향을 주는 언어이고
현재도 사용하고 있는 언어여서 큰 애정을 가지고 있습니다.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 python 입니다

저는 컴공 출신인데, 학교 다닐 때는 프로그래밍이 저에게 정말 적성이 맞지 않았습니다 그때 당시에는 C, C++ 등을 배우면서 이걸로 내가뭘 할 수 있을까? 라는 현타가 자주왔었던거 같은데요

python을 접하면서, 이걸로 내가 해볼 수 있는게 많겠다 라는 생각이 들면서, 처음으로 프로그래밍에 흥미를 가지게 되었습니다

근데, 그 python 언어로 회사에서 업무도 하다보니, python의 어떤 언어적인 철학이나 좋고 나쁨을 떠나서, 저에게는 현재도 가장 최애 언어로 볼 수 있을 것 같습니다

물론, 제가 python을 좋아하는 이유와 별개로, python 언어 자체도 업계에서도 많이 사용되는 굉장히 성숙한 언어이기 때문에 충분히 학습할 이유가 있는 언어라 생각합니다