Index |
1. 프로그래밍 언어 학습법 |
2. 자료구조/알고리즘 학습법 |
3. 프레임워크 학습법 |
4. 프로젝트 진행법 |
5. 프로그래밍 공부법 |
1. 프로그래밍 언어 학습법
프로그래밍 언어 학습법
기본언어
- C 언어: 컴퓨터 언어의 근본적인 원리에 대해서 이해하고 싶은 경우, 필수적으로 학습하는 것을 추천
- C++: 컴퓨터 언어의 근본적인 원리에 대해서 이해하고 싶은 경우, 필수적으로 학습하는 것을 추천
- Python: 데이터 분석 및 인공지능 개발에 관심이 있는 경우, 빠르게 결과물을 제작하여 보고 싶은 경우
- Java: 웹 개발에 있어 Backend부분을 담당하고 싶은 경우, 컴퓨터 공학에 관심이 있고 보이지 않는 서버 개발에 관심이 있는 경우
- Javascript: 웹 개발에 있어 Frontend부분을 담당하고 싶은 경우, UI/UX에 관심이 있고 결과물을 시각적으로 보는 것을 선호하는 경우
- Kotlin: 안드로이드 앱 개발에 관심이 있는 경우
- Swift: IOS 앱 개발에 관심이 있는 경우
- C#: 게임 서버 개발에 관심이 있는 경우, VR/AR 개발에 관심이 있는 경우
1. 기본 언어 선택
- 시간이 없다면 Python을 선택하여 빠르게 학습하는 것을 추천
- 시간적인 여유가 있다면 분야별로 많이 사용되는 언어 선택
- 게임 개발: C/C++(Unreal Engine), C#(Unity)
- 모바일 개발: Kotlin(Android), Swift(IOS)
- 웹 프론트 개발: Javascript(React.js)
- 웹 백엔드 개발: Java(Spring), Python(Django), C#(ASP.NET), Javascript(Node.js/Express.js)
- 임베디드 개발: C/C++
- 인공지능 개발: Python(Tensorflow/PyTorch)
- 데이터 분석: Python(Scikit-Learn)
2. 언어 선택후 기본 개념 학습
- 언어의 특징 및 환경 설정
- 변수: 변수 선언, 자료형(크기), 형변환, 자료형 확인, primitive 자료구조
- 연산자: 산술, 조건, 논리, 비트
- 제어문: 조건문, 반복문
- 함수: 함수 정의, 함수 사용, 인자, 가변인자, 매개변수, 반환값, 데코레이터, 제너레이터, 이터레이터
- 포인터: 포인터, 주소 참조, 값 참조, 레퍼런스 참조, 함수 포인터
- 구조체
- 동적 할당
- 클래스: 클래스 정의, 속성, 메서드, 상속, 추상클래스, 인터페이스, 메타 클래스, 내부 클래스
- 예외처리: 에러 클래스, 에러 발생
- 입출력: 버퍼와 입출력
- 파일 입출력: 바이너리파일, 텍스트 파일
- 자료구조: 리스트, 튜플, 맵(해시), 집합(셋)
- 표준 라이브러리
3. 기본 개념 학습 후 간단한 예제 작성해보기
- 메모장 개발
- 전화번호부 개발
- 간단한 게임 개발
- 라이브러리 재현 해보기
2. 자료구조/알고리즘 학습법
자료구조/알고리즘 학습법
1. 자료구조 학습
선형 자료구조
- 배열: 동일한 자료형의 묶음. 연속된 메모리 사용
- 링크드 리스트: 다양한 자료형 사용 가능. 분산된 메모리 사용
- 스택: FILO(LIFO) 구조, top과 botton으로 구성
- 큐: FIFO(LILO) 구조, front와 rear로 구성
- 덱: 스택+큐 구조, 양방향 모두 입출력 가능
비선형 자료구조
- 트리
- 그래프
- 힙
2. 자료구조 구현
- 프로그래밍 언어를 이용하여 자료구조를 구현해보기
3. 알고리즘 학습
- 탐욕법
- Brute Force
- 동적 계획법
- 재귀
- 정렬: 선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬, 힙 정렬, 계수 정렬, 기수 정렬
- 백트래킹
- 비트 마스크
- 순열과 조합, 유클리드 호제법(최대공약수, 최소공배수)
- 탐색: 순차 탐색, 이진 탐색, DFS, BFS
- 최단 경로 탐색: Dijkstra, Flood-Warshall, Bellman-Ford
- 위상 정렬
- 최소 신장 트리: Kruskal, Prim
- 투포인터
- 최소 공통 조상(LCA)
- 최장 증가 수열(LIS)
4. 알고리즘 유형별 문제 풀어보기
- 백준 온라인 저지 / 프로그래머스를 사용하여 유형별 문제 풀이
- 문제풀이후 시간복잡도, 공간 복잡도 확인하기
- 자주 사용되는 라이브러리는 암기
3. 프레임워크 학습법
프레임워크 학습법
1. 프레임워크 선택
- 프로젝트 진행에 있어 프레임워크 선택시 각각의 특징을 파악하고 장단점을 분석하기
- 프레임워크 선택 기준: 생산성(러닝커브), 호환성, 프로그래밍 언어에 따른 선택
- 버전 및 환경 설정은 프레임워크 선정후 고정하기(버전에 따른 변화가 존재)
2. 프레임워크 전반적인 구조 파악하기
- 전반적인 프레임워크 구조 및 자주 사용되는 기능 파악하기
- 튜토리얼 페이지를 보고 빠르게 따라하기
- 필요시 교재를 구매하는 것을 추천
- 초보자라면 어떠한 교재라도 구매하여 보는 것을 추천
- 어느정도 개발에 익숙하다면 코드 위주보다 개념과 기능 위주로 설명한 교재 추천
3. 프로젝트를 진행하면서 세부적인 부분 숙달하기
- 처음이라면 검색을 통해 확인하면서 학습
- 숙달이 되었다면 공식 문서와 코드만을 가지고 개발하는 연습
- 디버깅 하는 연습
4. 전반적인 구조를 설명할 수 있도록 기록으로 남겨보기
4. 프로젝트 진행법
프로젝트 진행법
개인
1. 만들고 싶은 서비스 선정
2. 유사한 서비스 탐색
3. 해당 서비스 분석
4. 서비스에 맞는 언어 및 프레임워크 선정
5. 프레임워크 튜토리얼을 따라하면서 학습
6. 빠르게 프로젝트 뼈대 구성하기
7. 세부적인 부분을 구현하기
8. 기능별로 구현을 했다면 리팩토링 및 테스트코드로 검사하기
9. 기능별 구현이 모두 완료 됬다면 통합하여 배포하기
단체
1. 만들고 싶은 프로젝트 주제 선정
2. 선정된 주제를 기준으로 구현해햐하는 기능 및 전체 조감도 작성
3. 타임라인을 세우고 소통 방식 정하기
- 노션으로 보고서 작성 및 진행상황 공유
- 깃허브로 코드 공유하기
- 디스코드로 매주 소통하기
4. 프로젝트 진행을 위한 역할 나누기
5. 프로젝트 진행
6. 매주 진행사항 공유 및 서로 의견 교환
7. 프로젝트 완성후 배포를 통한 피드백 받기
5. 프로그래밍 공부법
프로그래밍 공부법
1. 공식문서를 읽어보기
- 공식문서에 어떤 단어로 어떻게 정의를 내리고 있는지 확인
- 공식문서를 모두 읽는 것이 아닌 필요한 부분만 읽을 것
- 공식문서의 튜토리얼을 보면서 기능을 구현해보기
2. 질문하는 습관 가지기
- 초보자인 경우 무엇을 모르는지 모르는 경우가 있기 때문에 일단 강의나 교재를 구매하여 따라해볼 것
- 그 이후 스스로 문제를 정의하고 어떻게 해야 해결을 할 수 있는지 고민해보기
- "질문이 정확하면, 답을 구하는 능력도 정확해진다"
- 누구나 모르는 부분은 있기 때문에 질문을 겁내지 말기 -> 질문한다고 핀잔을 준다면 애당초 알려줄 생각이 없거나 설명할 정도로 아는 것이 아닐 가능성이 큼
3. 본인만의 서비스 제작하기
- 서비스 제작을 위한 이론적인 학습과 개발을 위한 코딩 능력을 모두 향상 시키는 방법
- 필요한 부분을 찾아 학습하고 구현해보기
4. 스터디를 통한 학습
- 어느정도 기본기가 갖추어졌다는 가정하에 스터디를 추천
- 아무것도 모르거나 수준이 비슷하지 않은 사람들이 모여 스터디를 하는 경우 도움이 되지 않음
- 스터디 진행시 목표를 명확하게 정하고 세부적으로 계획을 잘 세워서 진행. 세미나 형식을 추천
5. 오픈소스를 보면서 학습
- 오픈소스를 통해 코드를 파악하는 연습
- 폴더명와 파일명을 통해 오픈소스 구조 파악하기
- 변수와 클래스, 함수명을 통해 기능 파악하기
- 코드를 한줄씩 보지 말고 전체적인 기능을 파악할 것
- 분석하면서 문서화해보기
참고자료
온라인 강의
- boostcourse : 네이버커넥트 재단에서 만든 무료 온라인 강의 사이트
- 홍정모 연구소 : C++, DirectX 및 그래픽스 관련 강의
- 드림코딩 아카데미 : Javascript 및 Typescript를 통한 프론트엔드, 백엔드 개발 강의
- 인프런 : 여러가지 온라인 강의 모음 사이트. 강의평가는 호불호가 갈림
- 패스트캠퍼스 : 여러가지 온라인 강의 모음 사이트. 강의평에 대해서는 호불호가 갈림
'방법론' 카테고리의 다른 글
[방법론] 인공지능 논문 읽기 (0) | 2024.05.31 |
---|---|
[방법론] SW 취업 (0) | 2024.05.19 |
[방법론] 수학 및 공학 학습법 (0) | 2024.05.12 |
[방법론] 코드 분석 방법 (0) | 2024.05.12 |
[방법론] 면접 - 개발자 면접 (1) | 2024.05.11 |