인생의 방향을 설정할 때 처음부터 충분한 시간을 들여 철저하게 자신의 생각을 점검해보는 사람은 많지 않다.
- 먼저 이 질문에 충분한 시간을 들여 생각해보자
- 현재 나의 위치는?
- 어떤 분야의 개발자가 되고 싶은가?
- 어떤 유형의 소프트웨어 개발자가 되고 싶은지 구체적인 목표 세우기
- 계획 세우기는 성취하고자 하는 목표에서 시작해 거꾸로 되짚어오면 된다
위와 같은 내용으로 시작하는 개발자 비전서 포지션의 책. 처음 시작하는 사람부터 이직을 준비하는 사람까지 전반적인 조언으로 가득 차 있다. 인상 깊었던 빠르게 배우는 10단계 학습법과, 개발자가 되기 위해 알아야 할 것에 대해서 소개한다. 그러고보니 후자는 정보처리기사 자격증을 따면서 상당부분 기본 지식을 습득하게 되어 다행이라고 생각한다.
저자가 워낙 유쾌해서 많은 양임에도 불구하고 단숨에 읽어내려갈 수 있었던 친절한 책이다. 앞으로도 계속 함께하게 될 책.
📝 빠르게 배우는 10단계 학습법
먼저 사전 조사 단계. 무엇을 어떻게 배울지 찾는 것에 집중하며 반복 없이 한 번만 진행.
1단계. 큰 그림을 보라
- 무엇을 배울 것인지
- 그 범위는 어떻게 되는지 안다
시간을 너무 많이 쓰지 않도록 주의하면서, 앞으로 배울 주제에 어떤 내용들이 있는지 범위가 어느 정도 되는지 큰 그림을 보는 일에 주력합니다.
- 무엇을 모르는지 깨닫는 것이 목표
- X로 그걸 할 수 있는 건 알고 있어요. 방법은 잘 모르지만 나중에 배우면 되죠.
2단계. 범위를 정하라
- 실제 익히기 좋을 정도의 분량으로 잘게 나눈 후 시간을 얼마나 들여야 제대로 배울 수 있을지 계산하기
3단계. 성공을 정의하라
- 목표 설정
- 무엇을 왜 배우려고 하는지 확실히 알아야 한다
- 얼마나 잘 배웠는지 측정할 기준 정하기 (목표 달성 여부 확인 방법)
4단계. 자료를 찾아라
- 다양한 자료를 수집하기
- 체계적이고 순차적인 학습 계획을 세우는 데 쓰기
- ex. 목차를 참고하면 어떤 부분이 중요한지 확인하고 어떤 순서로 학습할지 계획 세우는 데 참고할 수 있다
5단계. 학습 계획을 세워라
- 학습 계획을 모듈 단위로 세우고 각 모듈마다 실습에 돌입할 수 있을 정도의 내용 공부하기
6단계. 자료를 선별하라
자료도 모으고 순서도 정했으니 목표 달성에 도움이 될 가치 있는 자료만 추린다.
여기서부턴 본격적으로 배우고 실습하고 배우고 가르치는 단계.
7단계. 대충 사용할 수준까지 배워라
- 경험을 통해 배우는 데 집중하라
- 시작부터 공부에 치중하지 말 것
- 어떤 기술을 배우려하든 이 기술이 나에게 실제 도움이 될지부터 고민하기
- 정말 배울 필요가 있는가!! 목표가 있는가!!
- 직접 써보면 무엇을 가 장 많이 쓰는지 금세 깨닫는다.
- 핵심은 단 20퍼!
8단계. 놀아라
- 호기심이 생긴 상태에서 자료를 보면 어떤 부분이 중요한지 자연스럽게 눈에 들어온다
9단계. 유용한 일을 할 정도까지 배워라
- 직접 이것저것 해보면서 떠오르는 질문에 대한 답을 찾기
10단계. 가르쳐라
- 배운 내용을 남에게 가르쳐라
🔍 개발자가 되기 위해 알아야 할 것
- 딱 하나의 프로그래밍 언어로 시작하기
- 처음엔 하나를 꼼꼼히 배우는 데 집중
- 진짜 자신감을 느끼는 언어가 하나는 있어야 한다
- 일단 하나만 꾸준히 해라!
- 진짜 자신감을 느끼는 언어가 하나는 있어야 한다
- 어떤건지는 상관 없어 (중요X)
- 근본적으로 다들 매우 비슷
- 처음과 두번째가 제일 어렵다
- 언어 고르기
- 첫 언어는 보통 어려우니까 흥미를 기준으로 선택하는 것도 좋다
- 처음엔 하나를 꼼꼼히 배우는 데 집중
- 이후에 코드를 구조화(이해하기 쉽게)하는 법 배우기 (언어 배우는 중간에 함께 배우면 더 좋아)
- 참고도서 <코드 컴플리트>
- 객체지향 설계 개념 이해하기
- 객체 관점에서 생각하면 복잡성을 다루는 데 도움이 된다
- 다형성, 캡슐화 같은 용어를 이해하고 클래스가 뭔지 상속은 어떤 형태로 다양하게 이루어지는지, 이러한 개념이 언제 쓰이는지 알아두자
- 알고리즘과 자료구조 익히기
- 알고리즘을 잘 알면 며칠 걸릴 걸 한시간 내로 해결할 수 있다.
- 잘 다루지 못하면 기존의 해결책도 제대로 활용할 수 없다.
- 알아야 할 자료구조 중 몇가지 소개하자면
- 배열, 벡터, 연결리스트, 스택, 큐, 트리, 해시, 세트
- 개발 플랫폼과 관련 기술 익히기
- 적어도 개발 플랫폼 하나와 그와 함께 사용하는 관련 기술이나 프레임워크를 익숙하게 쓸 수 있어야 한다.
- 어느 플랫폼이냐보다는 뭔가 선택한다는 게 중요
- 그러니 언어만 고르지 말고 플랫폼도 정하자
- 프레임워크와 스택
- 언어, 플랫폼 그 다음은 전체 개발 스택까지다!
- 프레임워크는 해당 플랫폼에서 일반적인 프로그래밍 작업을 더 쉽게 할 수 있도록 도와준다
- 스택을 알면 앱 개발이 더 쉬워진다
- 데이터베이스 관련 기본 지식
- 최소한 이것만은 알자
- 데이터베이스 작동 방식
- 데이터를 얻기 위해 단순한 쿼리를 수행하는 방법
- 데이터 삽입, 업데이트, 삭제하는 방법
- 데이터 세트 조인하는 방법
- 자기가 선택한 플랫폼이나 프레임워크에서 코드를 사용해 데이터를 가져오거나 저장하는 방법도 알자
- 개발자라면 데이터베이스와 연동되는 코드를 작성할 수 있어야함
- 최소한 이것만은 알자
- 소스 제어 (git 같은 것)
- 빌드와 배포
- 이해할 것
- 이들 시스템의 기본적인 작동 방법
- 빌드하고 배포하는 과정
- 이해할 것
- 테스트
- 꼭 알아야 할 기본적인 용어
- 화이트박스 테스트
- 블랙박스 테스트
- 단위 테스트
- 경계 조건
- 테스트 자동화
- 인수 테스트
- 좋은 개발자는 타인에게 코드를 넘기기전에 코드 테스트 한다
- 테스트에 관한 지식이 개발자의 경력 발전에도 도움이 된다
- 저자의 테스터 업무 경험은 개발자로 일하는 데 큰 도움이 되었다
- 핵심목표 : 위험 부담 줄이기
- 고객에게 크고 부정적인 영향을 미칠 만한 위험 요소를 감소시키는 것
- 꼭 알아야 할 기본적인 용어
- 디버깅
- 일하는 시간의 90퍼는 왜 코드가 작동하지 않는지 고민한다
- 자신이나 다른 사람이 작성한 코드 디버깅하는 방법을 배워야
- 태도가 중요하다
- 체계적으로 접근하기
- 서두르지 말기
- 금방 문제를 찾을 수 있을거라 기대하고 쉽게 포기하지 말기
- 차분하고 침착한 태도
- 논리적이고 분석적인 태도 갖기
- 디버깅이란?
- 코드 베이스에서 문제의 근원을 찾아,
- 문제를 일으킬 만한 요인을 가려내고,
- 여러 가설을 시험해보는 과정을 통해 뿌리가 되는 진정한 원인을 찾고,
- 그 원인을 제거한 후
- 다시는 그 문제가 일어나지 않도록 하는 것
- 디버거는 최후의 수단으로 남겨둬라
- 디버거는 잘못된 경로를 계속해서 다시 방문하게 하기 때문
- 버그를 재현하라
- 재현할 수 없는 문제는 디버깅 의미가 없어
- 세상에 간헐적으로 발생하는 문제는 없다
- 앉아서 생각하라
- 어디를 살펴보고 무엇을 찾을지 아는 게 중요
- 몇가지 아이디어를 떠올리고 다음 단계로 가자
- 가설을 테스트하라
- 가설을 테스트할 단위 테스트를 작성하라
- 하나씩 통과할 때마다 가능성 제거
- 가설을 테스트할 단위 테스트를 작성하라
- 가정을 확인하라
- 분할 정복하라
- 고칠 때는 이유를 이해하라
- 내 행위가 어떻게 그 문제를 고쳤는지 이해해야 한다
- 버그는 서로 붙어다닌다
- 방법론
- 가장 많이 쓰이는 소프트웨어 개발 방법론에 대한 기본지식 정도