오랜 시간 코딩을 해왔다면, 특히 컴퓨터 과학이나 공학 전공이 아니라면 알고리즘과 자료구조를 배워야 하는 이유가 궁금할 수 있다.
결국 앱을 만들 때 연결 리스트를 사용하거나 직접 정렬 루틴을 작성해야 하는 경우가 얼마나 될까? 답은 거의 없다.
알고리즘이 까다로운 문제를 해결하기 위해 사용하는 전략을 조금이라도 알면 여러분의 코드를 개선할 수 있는 아이디어를 얻을 수 있다.
표준 배열과 딕셔너리 외에 더 많은 데이터 구조를 알면 앱을 만들 때 사용할 수 있는 도구의 종류가 늘어난다.
이러한 지식은 여러분을 더 나은 개발자로 만들어 줄 것이다! (그리고 더 나은 개발자는 더 많은 수익을 창출한다.)
과거에는 근본적인 문제에 막혀서 만들지 못했던 애플리케이션이 있었다.
종종 속도 문제였다. 프로그램이 충분히 빠르게 동작하도록 만들 수 없었다. 지금 돌이켜보면, 이 문제들에 대해 잘못된 알고리즘을 선택했던 것이다. **O(n)**과 **O(n^2)**의 차이를 더 잘 이해했더라면 더 나은 결과를 얻었을지도 모른다.
단순한 무차별 대입 방식은 작은 양의 데이터에는 잘 동작하지만, 때로는 많은 양의 데이터를 처리해야 한다. 그러면 더 똑똑한 알고리즘이 필요하다.
프로그래밍 문제를 전혀 해결하지 못한 적도 있었다. 느리게라도 해결하지 못했다. 어디서부터 시작해야 할지 몰랐다. 알고리즘 이론을 조금 이해하면 다양한 전략을 시도해볼 수 있다.
그것이 핵심이 아니다. 대신, 다양한 알고리즘이 어떻게 서로 다른 문제를 해결하는지 이해하려고 노력해라.
분할 정복, 동적 프로그래밍, 탐욕 알고리즘 같은 기법을 배워라. 어떤 접근 방식이 느리고 어떤 방식이 빠른지 알아보고, 각각의 장단점이 무엇인지 이해해라.
여기서 중요한 것은 컴퓨터가 어떻게 일을 하게 만드는지 통찰력을 얻는 것이다.
많은 알고리즘 교재가 수학적인 내용으로 시작한다. 사실 수학은 유용하지만 대부분의 경우 꼭 필요하지는 않다. 그러니 겁먹지 말자. 코드를 작성할 수 있다면, 이 모든 멋진 알고리즘과 자료 구조를 이해하는 것도 가능하다.
알고리즘은 재미있다. :-)