길지는 않지만, 부트캠프 과정을 마치고 2주 동안 웹 개발자가 되기 위해 회사에 서류를 제출하고 면접 또는 코딩테스트를 보고, 그 외의 시간에는 부족한 부분을 학습하며 긴장된 시간을 보냈습니다. 개발자를 평가할 수 있는 부분은 매우 다양한 것 같습니다. 태도, 문제해결능력, 커뮤니케이션, 학습 능력, 협업, 논리적 사고, 기술적 숙련도, 컴퓨터 공학적 지식, 수학 능력, 신념, 심미적 감각, 공감 능력 등 매우 다양하다고 느꼈습니다. 이 중 문제해결능력을 평가하기 위해 많은 회사에서 코딩 테스트를 실행하는데, 제한된 시간 안에 완료해야 하는 코딩 테스트는 항상 긴장되기 마련입니다.
저는 코딩 테스트가 어렵습니다. 익숙한 문제나 또는 일부 문제는 잘 풀 수 있는가하면, 많은 문제는 정말 어려워 풀 수가 없습니다. 또한, 풀었다 하더라도 성능적인 부분을 고려하면 제대로 풀지 못 한 경우도 많았습니다. 제가 잘하던 못하던 좋은 개발자가 되기 위해서는 이 부분을 필연적으로 향상시켜야 하지만, 단기간에 크게 향상 시킬수는 없다고 생각합니다. 그래서, 어떠한 방법으로 학습 및 연습해야 그나마 효율적으로 문제해결능력을 향상시킬 수 있을지 이 포스팅에 주기적으로 정리를 하고, 이를 이용해 나름대로 체계를 갖추고 학습을 해 보고자 합니다. 부디 효과가 있었으면 좋겠습니다.
Contents
- Fundamentals
- Data Structure
- Math & Logic
- Computer Architecture
- After Fundamentals
- Big-O Notarion
- Implementing Some Algorithms
- Algorithm Books
- Practice coding
- Algorithms Explanations & Interview Questions
- Dynamic Programming
Fundamendtals
어떠한 분야든 잘 하기 위해서는 단단한 기초가 필요합니다. 전반적인 기초 지식은 학교, 부트캠프, 온라인 강의, 책 등을 통해 학습할 수 있습니다. 저는 비전공자이며 자바스크립트 부트캠프 과정을 이수했습니다. 컴퓨터 공학 지식을 더 쌓고 싶어 웹 개발자로 일을 병행하며 이수할 수 있는 컴퓨터 공학 온라인 학사 과정이 있는지 찾아보고자 합니다.
TODO |
PROGRESS |
자바스크립트 부트캠프 |
완료 (2018.11 - 2019.03) |
컴퓨터 공학 온라인 과정 검색 |
In progress |
#### Data Structure
Array, Linked List, Binary tree, Binary Search Tree, Hash Table, Graph, Stack, Queue 등 기본적인 자료구조 학습이 필요합니다.
TODO |
PROGRESS |
자료구조 기본 개념 학습 및 만들어보기 |
19.04. 3주차 복습 |
#### Math & Logic
알고리즘, 논리적 사고를 향상시키고 장기적으로 좋은 개발자가 되기 위해서 수학적 개념도 익혀야 합니다. 이산수학, 행렬, 비트연산, 선형대수학, 순열 등 학습하면 도움이 될 것 같습니다.
#### Computer Architecture
컴퓨터가 데이터를 어떻게 처리하는지, 컴퓨터 연산, 부동 소수점 표시 등 Computer Architecture에 대해 공부가 필요합니다. C와 같은 언어, 또는 assebly program에 대해 학습을 하면 도움이 된다고 합니다.
After Fundamentals
어느정도 기본적인 개념을 익혔다면, 알고리즘을 좀 더 세세하게 접해볼 시간입니다.
Big-O & Runtime
- Big-O notaion을 학습하고 자신이 짠 알고리즘이 어떠한 시간 복잡도를 가지는지 학습합니다.
- 알고리즘 관련 알고리즘 강의 참고 자료
Impletemting some algorithms
아래와 같은 기본적인 알고리즘을 구현해 보고, 시간복잡도 및 공간복잡도에 대해서 생각해 봅니다. 아래 완료한 알고리즘 또한 복습이 필요합니다.
TODO |
PROGRESS |
Stack |
19.04. 3주차 복습 |
Queue |
19.04. 3주차 복습 |
Tree |
19.04. 3주차 복습 |
Binary Search Tree |
19.04. 3주차 복습 |
Binary Search Tree Traversal |
19.04. 3주차 복습 |
Breadth and Depth First |
19.04. 3주차 복습 |
Hash Table |
복습 예정 |
Graph |
-- |
Euclid’s algorithm |
-- |
Dijkstra’s shortest path |
-- |
Bubble, Insertion, Selection, Quick, Merge Sort |
19.04. 3주차 복습 |
etc |
-- |
#### Algorithm Books
알고리즘 책 선정해서 학습할 것입니다.
#### Practicing coding
알고리즘을 풀 수 있는 사이트에서 실제로 여러 알고리즘 풀어봐야 합니다. 현재는 codewars에서 주로 풀고 있지만, 아래의 다른 사이트도 이용할 예정입니다.
\- [Codewars](https://www.codewars.com/dashboard)
\- [HackerRank](https://www.hackerrank.com/onboarding/challenge)
\- [Coderbyte](https://www.coderbyte.com/)
#### Algorithms Explanations & Interview Questions
알고리즘 해설 및 코드 읽어보기
\- [GeeksforGeeks](https://www.geeksforgeeks.org/)
\- [일반적인 알고리즘 문제 리스트](https://techiedelight.quora.com/500-Data-Structures-and-Algorithms-interview-questions-and-their-solutions?srid=dV6r)
#### Dynamic Programming
Dynamic Programming은 알고리즘을 잘 하기 위해 중요한 개념 중 하나이며, 실제 면접에서도 Dynamic Programming에 대해 질문을 받았습니다. 저는 Dynamic Programming에 대해서 별도의 포스팅을 작성하며 학습하고자 합니다.
\- [Dynamic Programming 문제 리스트](https://www.geeksforgeeks.org/dynamic-programming/)