코딩테스트 공포증
난 코딩테스트가 두려웠다. 그래도 해야 된다니까 조금씩 공부를 하긴 했었다. 그러다 처음 접하는 문제를 풀어보고 좌절했다. 아마 그래프 문제였던 것 같다. 마치 미적분을 처음 접한 학생처럼, 당황스러웠다. 그때까지만 해도 특정 알고리즘이 존재하는지도 몰랐다. 기본적인 배열과 List, Map 같은 기본 자료구조만 사용해서 무작정 문제를 풀다가 DFS, BFS를 처음 만났고, 문제 풀이 방법이 상상도 안 돼서 구글링 해서 답안을 찾아봤다. 그런데 답안을 찾아보니 더 답이 없었다. 이런 걸 어떻게 생각해 내지?라고 생각했다. 그리고는 막연히 다른 거 먼저 공부해야지 하고 포기하고 있었다.
지금 생각해 보면 조금 아쉽다. 그때는 어느 정도 많이 쓰이는 알고리즘들이 존재하는지 조차 몰라서 포기했던 것 같다. 지금 BFS를 제대로 이해한 상태에서 기본적인 그래프 완전탐색은 쉽다. 그런데 BFS라는 알고리즘을 외우고, 제대로 이해하면 한 칸씩 인접한 칸으로 이동하며 BFS를 수행하여 그래프를 완전탐색은 쉽다는 사실을 몰랐었다. 그리고 이걸 외워야 한다는 생각도 못했었고, BFS라는 알고리즘을 배우지 않은 상태에서 머릿속으로 떠올릴 수 있어야 한다고 생각했다.
그런데 지금 생각해보면 이런 좋은 알고리즘들은 과거의 똑똑한 수학자이자 공학자이자 프로그래머였던 사람들이 개발했었고, 그걸 일반적인 학생, 개발자들이 배워서 사용하는 건데 그때그때 이러한 알고리즘들을 생각해 낸다는 건 말이 안 된다.
그냥 고등학교 때 적분을 처음 배울 때, 어떻게 어떻게 미소단위로 잘라서 다 더하면 곡선으로 된 그래프의 넓이를 구할 수 있다는 과거의 천재 수학자가 발명한 방법을 배우듯이 알고리즘도 배우면 되는 것이었다.
그래서 지금 코딩테스트 공부를 어느 정도 한 상태에서 드는 생각은 "알아야 하는 알고리즘 종류가 생각보다 많지 않다."이다. 몇 가지 신기한 방법들을 배우고 익히고 내 것으로 만들면 어느 정도 난이도의 문제들은 풀린다. 물론 좀만 꼬아서 내면 너무 어렵다 ㅋㅋ.. 그래도 지금은 천천히 공부하다 보면 어느 정도 수준까지는 잘 풀게 되지 않을까라는 생각이 생겼다.
자료구조 / 알고리즘
백엔드 개발자에게 자료구조, 알고리즘 공부가 중요할까?
중요한 것 같다.
지금 나는 제로베이스 부트캠프 커리큘럼에 따라 한 달 정도 집중적으로 자료구조, 알고리즘을 학습했다. 솔직히 정형화된 알고리즘을 잘 아는 것 자체가 중요한 것은 아닌 것 같다. 그런데, 그런 알고리즘을 필요할 때 이용할 수 있고, 그 원리를 이해하고 있다면 어떤 코드를 짜더라도 모르는 것보다는 좋은 코드를 짤 것 같다. 알고리즘 문제를 풀 때는 시간복잡도를 고려하여 조금 더 시간복잡도가 빠르게 코드를 짜려고 노력한다. 이러한 노력이 없으면 통과되지 않는 문제들도 많다. 이렇게 시간복잡도를 고려하여 성능이 좋고 효율적인 코드를 짜는 것은 특히 백엔드 개발자에게는 중요한 역량인 것 같다.
그리고 알고리즘을 배우기 전에 여러 가지 자료구조들을 공부했다. 일부는 Java 라이브러리가 존재하기도 하고, 일부는 그렇지 않기도 하지만, 그 자료구조의 원리를 공부하는 것이 꽤 유용한 것 같다. 한 달 전과 비교해 보면 지금은 LinkedList와 ArrayList의 차이를 정확히 알고 있다. 어떨 때 LinkedList를 써야 하고, 어떨 때 ArrayList를 써야 하는 것을 아는 것과 모르는 것의 차이는 꽤 큰 것 같다. 알고리즘보다는 자료구조를 더 잘 아는 것이 실제 백엔드 업무를 하는데 더 큰 도움이 될 것 같다.
무엇보다도 키보드를 많이 사용하며 수많은 코드들을 짜면서 Java로 코드를 짜는 전반적인 실력 자체가 향상된 것 같다. 두 달 전의 코드와 지금의 코드를 비교해 보면 확실히 코드가 깨끗해진 것을 느낀다. 코드의 가독성도 이전에 비해 훨씬 좋아진 것 같다.
백엔드 개발자는 코딩테스트 준비를 어떻게 하면 좋을까?
우선 여러 가지 자료구조를 익히는 것은 코딩테스트에서 뿐만 아니라 이후의 개발자 생활에 큰 도움이 될 것 같다. 알고리즘을 공부하고 코딩테스트 문제를 풀어보는 것도 결국은 머릿속에 떠오르는 문제해결 방법을 코드로 옮기는 훈련을 하고, 자료구조를 효율적으로 이용하는 방법을 익히는 것이다. 또한, Java에서 지원하는 여러가지 자료구조 라이브러리들을 코딩테스트 공부를 하며 이용하다 보면 라이브러리가 제공하는 여러 메서드들을 사용하는 것에도 익숙해질 것이다. 전에는 몰랐던 정말 편리한 메서드들을 Java에서 많이 지원하는 것 같다.
다른 공부(Spring, JPA, DB, CS 등)를 하면서 동시에 꾸준히 조금씩 코딩테스트 문제를 공부한다면 개발 실력도 늘고, 코딩테스트를 통과하기 위한 실력이 갖춰질 것 같다. 그리고 List, Map, Queue와 같은 기본적인 자료구조들을 잘 사용하게 되면 이후에 여러 가지 프로젝트를 할 때도 큰 도움이 될 것 같다.
'기타 > 끄적끄적...' 카테고리의 다른 글
[끄적끄적] 코딩주짓수와 구글 코딩 가이드 (0) | 2024.12.30 |
---|---|
[부트캠프] 제로베이스 백엔드 취업 스쿨 수강 후기 / 회고 (4) | 2024.02.03 |
앞으로의 백엔드 공부 계획 (백엔드 공부 로드맵) (2) | 2023.06.26 |
어떤 백엔드 개발자가 되고싶은가? (0) | 2023.06.20 |
FrontEnd와 BackEnd의 차이 / 내가 백엔드를 선택한 이유 (0) | 2023.06.12 |