[독서] 성공하는 프로그래밍 공부법(by 자바지기 박재성님)

하랑·2020년 12월 5일
3

정리

목록 보기
2/2

"그런데 지금 시점에 우리가 성적과 스펙을 쌓는 것에 집중하는 것이 미래지향적인가? 정말 취업에 더 유리한 것은 맞나?" / 점점 더 많은 회사가 많은 것을 아는 사람보다 깊이 있는 경험을 통해 문제의 본질에 대한 해결책을 찾을 수 있는 사람을 원하고 있다.
-p28, 29

제대로 프로그래밍 공부를 시작하는 입장에서 너무 와닿는 문장이다. 단순히 취업을 위한 공부, 프로젝트를 하고 싶지 않다. 물론 어느정도 밸런스가 필요하다. 하지만 나는 개발자로서의 진정한 성장을 추구한다. 이러한 입장에서 위의 문장은 진심에 와닿고 힘이 되는 문장이었다. 깊이 있는 공부, 경험을 추구하자. 이를 통해 성장하고, 그 과정을 타인에게 설득력있게 표현할 수 있도록 현명하게 정리하자.

내가 진정 프로그래머가 되고 싶다면 누군가의 스터디에 들어가는 것이 아니라 내가 학습하고 싶은 주제로 스터디를 만들어 운영해 보는 경험을 했으면 한다. 다른 사람이 만든 스터디에 들어가는 것보다 내가 만든 스터디를 운영하는 것이 프로그래밍 공부를 포기하지 않고 지속할 수 있는 몇 배의 에너지를 준다.
- p45

그렇지 않아도 학습할 지식의 양이 많은데 너무 많은 것에 관심을 두기보다 한 가지라도 제대로 학습하는 것을 목표로 설정하고 집중해야 한다.
현재 시점에 자신이 관심이 있는 분야와 지식이 무엇인지를 찾아 결정한 후 주변을 의식하지 말고 묵묵히 걸어가라는 것이다.
- p52, 53

무엇을 아느냐에서 무엇을 할 수 있느냐로 공부의 방향을 바꾸는 순간 혼자 학습하는 것보다 누군가와의 공동 학습을 통해 피드백을 주고 받고 토론하는 것이 훨씬 더 의미있는 학습이 된다.
- p58

진짜 맞는 말이다. 나는 피드백이 필요하다. 코드 리뷰가 너무 필요하다. 어떻게든 유의미한 피드백을 얻을 수 있는 방법을 찾자.

자전거로 출퇴근할 때였는데 자전거 페달을 밟으면서도 테스트를 어떻게 구현하고, 객체를 어떻게 설계할 것인가에 대해 끊임없이 고민했다. 이 순간은 아직까지도 고통스러운 순간이 아니라 즐겁고 행복했던 순간으로 기억한다.
- p63

위 내용은 의식적인 연습에 관한 글의 일부이다. 절실히 공감되는 내용이다. 한 가지에 몰입하고 집중할 때, 그에서 벗어난 순간(걷거나 지하철을 타고 이동할 때, 샤워할 때, 자기 전 등등)에도 계속 몰입이 이어지는 경우가 있다. 누군가 나에게 너는 왜 프로그래밍을 하고 싶은 지 묻는다면, 그에 대한 이유로 답하고 싶은 내용이다. 저 순간이 너무 행복하고 즐거워서, 저 순간을 못 잊어서 프로그래밍을 하고 있고, 계속 하고 싶다(이왕 계속할 거면 최고로 잘하고 싶다 ㅎㅅㅎ).

이 같은 기준으로 봤을 때 TDD, 리팩토링, OOP 연습을 시작하기 좋은 몇 가지 예를 들어 보자.

  • 로또(단, UI는 콘솔)
  • 사다리 타기(단, UI는 콘솔)
  • 볼링 게임 점수판(단, UI는 콘솔)
  • 체스 게임(단, UI는 콘솔)
  • 지뢰 찾기 게임(단, UI는 콘솔)
    - p69

모두 적당한 난이도의 로직을 포함하면서 요구사항이 명확한 프로그램이다. 일단 콘솔에서 핵심 로직에 집중하여 연습한 뒤, 다른 UI에서도 구현해보자. 개념적으로 체득했다고 판단되면, 웹 서버 혹은 프로그래밍에 사용할 프레임워크등을 구현해보자.

좋은 글을 쓰려면 좋은 글을 많이 읽고, 많이 쓰고, 많이 퇴고하는 방법뿐이다. 특히 이 단계에서 중요한 연습은 퇴고하는 과정이다. 좋은 코드를 구현하기 위한 방법 또한 같다. 만족스러운 코드를 구현하는 순간까지 지속적인 리팩토링 과정을 거쳐야 한다.
- p74

초보 프로그래머가 의식적인 연습을 하기 가장 좋은 방법은 멘토를 찾는 것이다. / 내가 의식적인 연습을 위해 커뮤니티를 추천하는 이유는 혼자 힘으로 자신이 가지고 있는 사고의 틀을 깨는 것이 정말 힘들기 때문이다.
- p76, 78

불교적 관점은 일의 기능을 최소한 셋으로 본다. 그것은 사람의 재능을 활용하고 발전시킬 기회를 주는 것, 다른 사람들과 공동 작업을 함으로써 자기 중심성을 극복하는 것, 생산 과정에 필요한 재화와 용역을 만들어 내는 것이다.
우리가 진정 고민해야할 것은 "어떻게 하면 일을 하지 않을 것인가가 아니라 일을 어떻게 할 것인가?" 여야한다. "어떻게 일을 하는 것이 나의 자아를 실현하고 성장함으로써 행복한 삶을 만들 수 있을 것인가?"여야한다.
- p89, E. F. 슈마허 『내가 믿는 세상』 인용 / p92

정답이 없고, 끝이 없다는 것이 힘든 일일 수도 있지만 우리가 끝없는 도전을 통해 지속적으로 도전할 수 있는 영역이기도 하다. 이런 도전을 통해 한 단계 성장하는 순간이 삶에 있어 큰 즐거움과 행복감을 안겨준다.
프로그래머는 충분히 가능하고, 다른 일에 비해 훨씬 더 유리하다.
- p94

몰입의 순간을 업무 시간에서 찾을 수 있다는 것. 이는 프로그래머의 엄청난 장점이다. 다른 일에 비해 훨씬 더 유리하다는 말이 가슴에 와닿는다(솔직히 꿀잼이다 인정,,).


감동적인 프로그램을 만들기 위해서는 작은 것까지 하나하나 신경 써야 합니다. 코드에 대한 배려뿐만 아니라, 인터페이스에 대한 배려도 중요한 것이지요. 사람은 작은 것 하나에 감동을 느끼기 때문에 디테일에 신경을 쓰면 좋은 피드백을 얻을 수 있을 것입니다.
- p107

여기서 감동적인 프로그램이라고 표현된 것이 Masterpiece와 같다고 생각한다. 결국 디테일. 보이지 않는 부분까지 신경쓰는 섬세함이 프로와 아마추어를 나누는 기준이라고 생각한다. 쉽지 않은 길이지만, Masterpiece를 추구하자(장인 정신!). 이를 위해 끊임없이 발전하자.

깊이 들어가다 보면 기초가 발목을 잡을 때가 있습니다. 최신 기술이라고 포장된 코드들을 들여다보면, 결국 모든 것은 기초적인 것부터 시작합니다.
- p108

Fundamental의 중요성은 아무리 강조해도 지나치지 않다. Fundamental 빡세게 하자. 기본기가 탄탄한 프로그래머가 되자. 롱런하는 프로그래머가 되자.

닮고 싶은 프로그래머를 생각해 본 적은 없지만 프로그램을 예술로 만드는 사람들을 보면 누구나 존경스럽습니다.
- p122


"불확실성이 높을 때 빠르게 시도하고, 빠르게 실패하고, 실패에서 배우고 개선하여 다시 시도한다."
- p133

특히 같은 목적을 가지고 학습하는 이들이 상호 간에 정보가 담겨있는 피드백을 주고 받는 것은 학습을 더욱 촉진시켜준다.
- p140

그러기 위해서는 우리에게 적합한 훈련법이나 공부법을 가지고 있어야 하는데 그 첫번째 단계는 구체적인 목표를 세우는 것이다.
- p142

구체적이고 목표를 수립하여 세부적으로 나누고, 이를 SMART, OKRs, BSQ를 활용해 유동적으로 관리하자.

측정하지 않는 것은 개선할 수 없다.
- p148

완전 맞는 말. 빡공할 때 학습에 대한 주기적인 성찰은 필수다. 또, 주기적으로 학습한 내용을 정리하고 발표하여 스스로의 지식 수준을 측정하자.

불확실성이 높을 때는 나와 같은 고민을 했던 사람들의 서적을 보는 것이 쉬운 액션 아이템이 될 것이다.
- p151

반추는 학습한 것을 되돌아 보고 스스로에게 질문을 던지는 행위를 말한다. 어떤 부분이 잘 되었는지, 잘 될 수 있었던 것은 무엇인지, 능숙해지려면 무엇을 배워야 하는지 질문을 해보는 것이다. 반추는 배운 것에 대하여 다양한 관점을 더함으로써 지식을 넓히기도 하고 강화하기도 하는 등 정교하게 인출하는 연습을 말한다.
리팩토링은 코드의 동작이나 의도는 유지하면서 코드의 구조, 재사용성, 가독성을 개선해 코드의 악취를 제거하고 전체 디자인을 개선하는 방법이다.
- p161

"전문가가 되기 위하여 전문가가 필요하다."
다양한 도구의 힘이 필요할지도 모르겠지만 익히 길을 알고 있는 길잡이의 도움이나 함께 모험을 해줄 동료가 필요하다. 이런 도움을 줄 수 있는 사람들을 모두 전문가라고 부르고 싶다.
- p 166, 172

회고에서는 중요한 3가지 대표적인 질문이 있는데, 다음과 같다.

  • 우리가 잘 하고 있는 것은 무엇인가?
  • 우리가 잘 하지 못하는 것은 무엇인가?
  • 아직도 우리를 괴롭히는 것은 무엇인가?
    - p174

회고라는 과정에는 몇가지 더 좋은 효과가 있다. 단순하게 보면 복습을 하고 학습 방법을 개선하는 것을 수행하겠지만, 그 과정에서 학습한 내뇽에 대하여 심성 모델을 강화하는 작업을 수행하게 된다.
회고를 통해 개선 사항을 찾아내는데 이것이 목표에 추가되어야 하고 회고를 하면서 목표를 다시 살펴보는 행위를 하면서 목표를 수정할 수 있는 기회를 가질 수 있다. + Futurespective
- p178, 179

"학습하려면 회복 탄력성이 필요하다"
집중하는 것뿐 아니라 집중으로 인하여 소모되는 체력이나 정신력을 빠르게 회복하는 것이 중요하다고 말한다. + 사티어의 변화 모델
- p182, 183

동감한다. 내가 빡공할 계획을 세우면서도 꾸준히 운동과 기타를 놓지 않는 이유다. 난 멀리가는 프로그래머가 되고 싶다. 질리지 않고 10년, 20년, 그 이상 프로그래밍을 즐기고 싶다. 재밌다고 프로그래밍만하면 금방 지칠 것이다. 취미 활동은 필수다. 나의 경우, 첫 번째가 운동(너무 좋다,,), 두 번째가 기타 연습, 세 번째가 글쓰기이다. 모두 다 재밌고 꾸준히 실력을 발전시키고 싶은 활동이다.

프로그래밍 학습은 끝이 없는 도전이다. 하루가 멀다하게 새로운 개념이나 지식들이 나오고 수많은 사람들이 빠르게 지식을 습득하여 오픈 소스와 같은 다양한 지식의 산출물들을 쏟아낸다. 이런 흐름 속에서 자신의 전문성을 유지하기 위해서 노력한다는 것은 엄청난 도전이다.
- p190

"소프트웨어 장인이 되도록 하자"
우리의 근본적인 목표이자 장기 목표는 소프트웨어 장인이 되는 것이다. 한땀 한땀 수를 놓듯이 완성도가 높은 소프트웨어를 만드는 장인이 되고자 하는 것이다.
- p192

트렌디한 지식뿐만 아니라 특정 부분에 대하여 깊이있게 다루기도 하고 기술뿐만 아니라 방법론이나 조직 문화 등도 다루는 곳
InfoQ
단순하게 제공되는 글을 보는 것이 아니라 관련된 링크를 쫓아가서 깊이있게 학습하는 원칙을 가졌다.
소프트웨어 장인이 되기 위해서는 다양한 오픈소스에 대하여 살펴보는 것을 추천한다.
https://martinfowler.com/
- p196

InfoQ, Open Source. 이용하자. DO: Pet Project, XP.

단순하게 코딩을 배우는 것이 프로그래밍을 학습하는 것이 아니고 제대로 된 소프트웨어를 만드는 것을 배워야 하는 것이다.
- p205

+이 책은 원래 다른 책을 대출하러 도서관에 갔다가, 옆에 있어서 잠깐 읽어보니 흥미로워서 같이 대출한 책이다. 정말 우연히 빌린 책인데 책의 저자가 박재성님이라 놀랐다. 개발 공부, 특히 자바를 공부하는 입장에서 이미 박재성님 덕분에 많은 도움을 받고 있었고, 최근의 행보에도 관심이 많았다. 대출할 때는 저자를 보지 않고 내용만 훑었는데, 왠지 내용이 낯설지 않더라.. 평소에도 박재성님의 글을 읽고 많이 공감했기에 나도 모르게 이 책에 끌린 것 같다.

profile
ISA KOOL!

0개의 댓글