개발자 학습과 성장관련 영상 및 자료를 보고 정리한 내용입니다.
개발은 논리적, 추상적 사고 능력과 프로그래밍 언어, 방법론, 프레임워크에 해당하는 기술 그리고 네트워크, 메모리, 운영체제, 시스템에 대한 CS 지식을 필요로 합니다. 사고한 것을 코드로 작성하는 일은 기술을 통해 사고를 압축(추상화)하는 과정으로 [사고-기술]에 해당하고 컴퓨터 과학 지식을 통해 예외를 판단하는 사고 기능은 [사고-과학]에 해당합니다. 메모리, 성능 등을 판단해 효율적인 코드를 작성하는 일은 [기술-과학]에 해당합니다.
문제를 보고 로직을 설계하는 것이 어렵다면 프로그램의 흐름을 파악하고 설계하는 '사고' 능력이 부족한 것입니다. 논리와 설계를 실제로 구현하는 것이 어렵다면 코드로 구현하는 '기술' 능력이 부족한 것입니다. (구현이 되더라도 좋지 않은 설계라면) 구현 후 성능, 메모리, 설정 등에 문제가 생긴다면 CS 에 대한 이해 부족으로 생긴 문제로 '과학' 능력이 부족한 것입니다.
프로그램을 작성한다는 것은 결과를 도출하기 위해 논리적인 계획을 세우는 일입니다. 사고를 학습려면 단계적 추상화에 익숙해지는 것이 좋습니다. 논리를 Top-Down 으로 설계하며 가장 큰 문제를 작은 문제로 나누어 보는 연습이 필요합니다.
ex)
사용자는 로그인 한다.
ㄴ 사용자는 브라우저를 통해 서버로 로그인 요청을 보낸다.
ㄴ 사용자는 로그인 페이지에서 Login 버튼을 클릭하면 Ajax 요청을 보내고 Spinner 를 보여준다.
ㄴ Login 버튼에 바인딩된 onClick 이 실행되면 axios 를 통해 POST / signin 요청을 body에 email, password를 담어 보낸다...
위와 같이 세분화 해볼 수도 있고, 이런 논리를 도식화하는 것도 좋은 방법입니다. 하나의 문제를 해결하더라도 다양한 관점에서 논리를 준비하면 좋습니다. 시스템, 도메인, 데이터, UI 관점에서 각각의 논리를 도출하고 하나로 정리해서 설계할 수 있습니다. 이런 논리 사고를 정리해두면 이후 비슷한 문제를 해결할 때 큰 도움이 됩니다.
예외도 있지만 대부분의 경우 만든 사람이나 집단이 가장 올바르게 설명합니다. 도구의 기본적인 개념과 철학, 사용법은 공식 문서를 통해 익히는 것이 좋습니다. 이후 심화 내용은 책이나 아티클을 통해 잘하는 사람의 도움을 받는 것이 좋습니다. (오픈소스 분석도 좋음). 타인의 지식을 빠르게 나의 것으로 만드는 것이 효율적입니다. 기술은 항상 상황에 적합한 케이스가 존재하므로 이를 기억해두면 좋습니다.
기반 지식이 없다면 우선 열심히 외우는 것이 좋습니다. (어느정도 이해하면서) 기술과 마찬가지로 적절한 상황에 알아야할 지식이 존재합니다.
패턴을 발견하면 그 즉시 정리하고 기록합니다. 다양한 usecase, 설계 패턴, 디자인 패턴, 컴포넌트 등 상황과 패턴을 기록해두면 이후에 비슷한 문제를 쉽게 해결할 수 있습니다. 어렵더라도 안해봤던 경험을 가리지 않고 해보는 것이 중요합니다. 공개된 소스를 많이 참고합니다. 처음이라 소스 분석이 어렵다면 따라치는 것부터 시작해도 좋습니다. 익숙해지면 내 방식으로 리팩토링하면서 만들어 봅니다. 알게 된 지식을 사용해 작고 유용한 것을 만들어봅니다. 너무 잘 만들려고 하면 안 만들게 되니, 작은 것부터 생각나면 바로 만들어봅니다. 이미 한 번 구현해 본 패턴이 쌓이게 되면 해당 패턴에 어느 정도 시간이 소요되는지 가늠하기 쉬워집니다. 처음에는 일정 계산이 안되는 것이 정상입니다. 복잡하거나 새로운 일이라도 경험을 조합하면 예상 시간을 대략 알 수 있습니다.