검색엔진

수요일, 7월 22, 2020

[독서광] 파이썬 알고리즘 인터뷰

오늘은 요즘 가장 뜨거운 키워드인 '파이썬'과 '인터뷰'로 인해 인터넷 서점에서 화제가 되고 있는 '파이썬 알고리즘 인터뷰'를 소개하겠다. 출간에 앞서 미리 내용 검토 과정에 참여했기 때문에(마치면서의 감사 부분에 이름이 나온다. ;)) 단순히 독자 입장이 아니라 약간은 저자 입장에서 생각해볼 기회가 있었고 이 책의 특징에 대해 언급할 시간이 온 것 같다.

가장 먼저, 여느 알고리즘 책과는 달리 이 책에서는 알고리즘의 실행시간에 대해 상당히 공을 들여 설명하고 있다. 이 책은 이론적인 빅 오 표기법을 설명하고 그 다음부터는 잊어먹는 대신 어떤 작업을 하는 과정에 걸리는 시간에 대해 집요하게 파고든다. 경험상 정말 수십 시간 걸리던 작업을 수 시간 아니 수 분 내로 단축하는 마법은 컴퓨터 성능 강화보다는 알고리즘 개선에 있는 경우가 대부분이므로 개발자라면 누구나 알고리즘에 대해 관심을 가져야 마땅하다는 생각이다. 물론 데이터베이스를 중심으로 돌아가는 비즈니스 논리를 많이 다루는 소프트웨어인 경우라면 알고리즘의 중요성이 많이 퇴색될지도 모르겠지만 내게 필요없다고 해서 남도 필요없을 것이라고 지레 짐작해서 알고리즘 무용론을 펼치면 함정에 빠질 가능성이 아주 높다. 컴퓨팅 자원이 제한적인 임베디드 장비에서 성능을 쥐어짜기 위해 땀을 흘려보면 알고리즘의 중요성을 알게 된다.

다음으로 이 책은 파이썬 자체에 대한 하부 동작원리에 대해 파고든다. 알고리즘 책은 언어에 중립적이고 하부 구현에 중립적이어야 한다는 틀을 깨고 이 책은 알고리즘을 구현하는 과정에서 파이썬의 성능을 어떻게 하면 극대화할 수 있을지를 설명한다. 이런 접근 방법은 인터프리터 방식으로 동작하기 때문에 막연히 성능이 나쁠 것이라는 편견을 깰 수 있으므로 상당히 긍정적으로 작용한다. 파이썬이 느리다고? 왜 느릴까? 그리고 어떻게 하면 이런 단점을 회피하거나 극복할 수 있을까? 알고리즘은 종이와 연필을 사용해 머리로 만들지만 어느 순간에는 컴퓨터 위에서 동작해야 하므로 추상화를 구상화하는 과정이 필연적으로 따라오며 이 과정에서 무엇이 중요한지를 알고 있어야 한다.

그 다음으로 이 책은 시각화에 엄청난 공을 들인다. 저자가 직접 손으로 그린 그림을 200개가 넘는 전문적인 일러스터로 변환해서 완성도를 매우 높였기 때문에 복잡한 알고리즘을 그림으로 이해하는 과정이 즐거워진다. 종이와 연필을 사용해 직접 알고리즘을 푸는 과정에서도 이 책에 나온 여러 가지 그림을 응용하면 문제 풀이도 쉬워질 것이다.

마지막으로 이 책은 실제 동작에 집중한다. 많은 알고리즘 책이 실행이 다소 까다로운 코드 조각 중심으로 되어 있다면 이 책은 단독으로 풀 수 있는 문제와 실제 실행 가능한 코드가 명확하게 제시된다. 깃허브 알고리즘 인터뷰 코드에 들어가면 전체 풀이도 얻을 수 있으므로 이 저장소를 포크해서 작업을 시작해도 좋고, 정말 제대로 도전하고 싶다면 해답을 보지 않고 풀어본 다음에 모범 답안과 맞춰보는 방식을 택해도 좋다. 이 책에 나온 문제를 풀다보면 내가 정말 성능이 나오는 코드를 제대로 작성했는지 궁금한 경우가 생길 것이다. 분명히 코드는 문제 없이 동작하고 결과도 제대로 나오지만 성능이 떨어진다면 이는 올바른 알고리즘 구현이 아니다. 다행히 이 책은 리트코드에서 직접 실행하는 방법으로 코드와 알고리즘의 완결성에 대해 스스로 평가하는 방법을 제시하고 있기에 공부를 위한 공부, 단순 취업을 위한 공부가 아니라 실무에 적용하기 위한 훈련이 가능하게 해준다.

이 책에 나온 알고리즘을 이론적으로 이해하고 성능적인 측면까지 고려해서 프로그래밍을 직접 해봤다면 어떤 인터뷰 자리에서도 당황하지 않고 면접관의 질문에 대응할 수 있을 것이다. 손쉽게 보이는 알고리즘을 문제로 낸 다음에 성능이나 구현체 관점에서 이런 저런 질문을 추가해서 문제를 점점 어렵게 만드는 경우가 많기 때문에 단순히 알고리즘 코드를 달달 외우는 식으로는 한계가 있다는 사실을 명심하면서 공부하면 소기의 성과를 거둘 수 있다는 생각이다.

결론: 알고리즘을 공부하는 학생, 코딩 테스트를 준비하는 취업 준비생, 이직을 고려하는 경력 개발자 모두에게 이 책을 추천한다.

EOB

댓글 없음:

댓글 쓰기