팀원 중 한 분이 '프로그래머의 뇌'라는 책을 빌려주셨다. 계속 '프로그래머스의 뇌'라고 말하게 되는 머쓱한 책.
짧은 책이라 가볍게 생각했지만, 은근 인상 깊은 부분이 많아서 정리해보았다.
이 책은 프로그래머들이 개발을 하면서 마주치는 여러 어려움들을 인지과학 측면으로 접근하고, 이에 대한 해결책을 제시하고 있다. 이 책을 읽으며 전반적으로 든 생각은 "다행이다, 나만 어렵고 힘든 게 아니구나"와, "연습하면 나도 잘 할 수 있겠구나!"였다. 개발을 시작한 지 얼마 안 된 새싹들에게는 정신적 위로가 되는 책일 수 있겠고, 경험자들에겐 코드 작성에 대한 길잡이가 될 책이겠다.
코드가 초래하는 세 가지 종류의 혼란
1. 지식의 부족: 'arr'가 뭔데?
2. 정보의 부족: filter()가 뭔데?
3. 처리능력의 부족: y값이 뭔데?
pp.4-6
다른 사람의 코드 리뷰를 하면서 이해하기 힘들어서 지칠 때마다 "왜 난 못하지"라고 생각하곤 했는데, 못하는 이유를 명시적으로 아는 것만으로도 기분이 나아지는 게 있다.
이유를 알면 해결하면 되니까!
의도적 연습
방대한 양의 코드를 읽기 위해선 의도적인 연습을 해야한다. 코드를 끊어 읽는 청킹, 다른 코드들 많이 접하기, 의식적으로 기억하며 써보기 등.
코드를 기억해 내는 훈련을 해야 코드를 잘 이해할 수 있다.
p.33
이 책에서도 언급했듯이, 단기간에 코딩을 배우는 데에는 코드 읽기보다 코드 쓰기가 비중을 많이 차지한다. 실제로 나도 다른 사람의 코드를 읽어 본 경험이 데브코스 시작 전에는 전무했다(3개월밖에 안 됐지만). 일찍이라도 다른 사람의 코드를 접할 수 있는 환경에 놓이게 되어서 다행이라고 생각한다.
또한, 그냥 읽는 것에서 그치는 것이 아니라 의도적으로 습득하려는 노력을 기울여야 됨을 강조하고 있다. 제일 어려운 부분...
업무 중단이 미치는 나쁜 영향
코어 타임에 공부하다가도 슬랙 알람이 한번 오면 금방 집중이 흐트러지곤 한다. 게다가 개발공부 특성상 단기기억을 많이 쓰기 때문에(변수 역할 기억, 코드 흐름 파악 등) 한 번 집중을 뺏기면 어디까지 했는지 까먹어서 재시작 할 때 품이 많이 든다. 코어 타임 중에라도 중요한 알람 빼고는 다 끄고 온전히 집중할 수 있는 환경을 구성하는 것이 좋겠다고 생각했다.
간격을 두고 반복하기
오랫동안 학습한 만큼 더 오래 기억한다. 더 오랜 간격을 두고 학습해야 한다.
p.43
어떤 공부든 간격을 두고 반복하는 것이 중요하다.
는 걸 알고 있지만 일평생을 단기로 12시간 공부하고 질려서 안 보기를 반복하며 살아왔기 때문에 일정을 쪼개고 반복하는 것에 익숙하지 않았다. 그래서 개발 공부를 시작하면서 어떤 프로그램을 만드는 데에 여러 시일에 걸쳐 기능을 구현하는 것이 힘들었다. 그치만 팀원분이 항상 나에게 "작은 것부터 차근차근 하라"고 말씀하신 걸 듣고 조급함을 조금 내려 놓았더니 하루가 끝이 나는 것에 덜 집착하게 된 것 같다.
능동적으로 기억하려고 하는 것이 기억을 강화하는 것
단지 보기만 해서는 안 된다. 인출하기 위한 능동적이고 의식적인 노력 필요하다. 정보에 대해 능동적으로 생각하고 그것을 반추하는 것, 즉 정교화 작업이 필요하다.
pp.44-47
암기가 약한 사람으로써 가장 힘든 부분: 의식적으로 기억을 강화하기 :)
해야지...어쩌겠어...
복잡한 코드 읽는 방법
복잡한 코드를 읽는 것이 힘든 이유는 처리능력의 부족이다. 이를 해결하는 방법에는 "리팩토링 하기"와 "의존 그래프 사용하기"가 있다.
pp.53-68
리팩토링을 하는 것보다 코드를 새로 작성하는 게 쉬운 나이...
저자는 이 부분에 대해서도 간단하게 언급하고 지나갔다. 그치만 복잡한 코드를 쉽게 읽는 경지에 오르기 위해선 하기 싫은 리팩토링도 해봐야 한다! 개인적으로는 바닐라 JS로 투두리스트를 만들 때 구조화를 잘 못해서 리팩토링과 기능추가를 동시에 하고 싶은데, 아직 엄두를 못 내고 있다.
책에서 말하는 의존 그래프는 변수에 동그라미를 치고 변수끼리의 연결이나 흐름을 선으로 표시한 것을 말하는데, 초기에 C언어를 배울 때 했던 작업이랑 비슷해서 뿌듯했다. 나도 모르게 코드를 이해하기 위해 의존 그래프를 작성하고 있었구나 ^^
프랑스어를 배울 수 있다면 파이썬도 배울 수 있다
p.86
자신감 100 상승
코드스멜
작동은 하지만 개선의 여지가 있는 코드
p.160
아마 이 책을 빌리게 된 시초였던 주제. <코드스멜>
읽으면서 통상적으로 쓰이는 smell과 다른 것 같다는 느낌이 들었다. 생각보다 와닿진 않았지만 "신의 메서드", "신의 클래스" 스멜과 같은 네이밍이 웃겼던 기억... 이 명칭은 기능과 코드를 너무 많이 포함하고 있는 메서드와 클래스를 지칭한다.
암시적 기억 개선
1. 의도적 연습: 반복적 실행
2. 유사하지만 다른 프로그램을 많이 작성해 보는 것.
3. 이미 작성된 프로그램을 수정하는 것
4. 간격을 둔 반복은 학습의 핵심
5. 다른 사람들이 문제를 어떻게 해결했는지 의도적으로 연구하는 것
p.185
끝까지 다 읽고 나니, 나에게 필요한 건 매일 조금씩이라도 다른 사람의 코드를 보고 따라해보는 과정이라는 생각이 들었다.
똑같이 배운 내용에 대해 과제를 수행한 사람의 코드를 데브코스에서 다양하게 볼 수 있으므로 매일 파일 한 개씩이라도 따라 쳐보고, 몰랐던 것들을 외운 뒤 정리하는 습관을 추가하면 좋을 것 같다.
일주일에 한 번씩은 배운 내용을 바탕으로 나만의 무언가를 만들어보는 것도 의미 있겠다!
작성한 내용 외에도 변수 이름의 중요성이나 협업과 관련된 많은 이야기들이 있었다. 이건 내가 경험이 좀 더 쌓이고 다시 읽어보면 좋을 것 같아서 따로 기록하진 않았지만 말이다.
하면 되긴 되겠구나, 하는 자신감이 생겼다.
흔쾌히 책을 빌려주신 책 주인에게 감사를 !