알고리즘을 잘 풀고 자료 구조를 잘 안다고 코드의 효율을 개선할 일은 많지 않습니다. (당신이 일반적인 개발자, 그것도 프론트엔드 개발자라면요)
그럼에도 불구하고 여전히 알고리즘을 중요하게 쳐다보는 회사는 많습니다. 알고리즘은 개발의 기초이기 때문이라고 말합니다. 왜 그렇게 표현할까요? 제 생각을 적어보겠습니다.
- 경계, 예외 처리:
많은 사람들이 경계, 예외 처리를 놓칠 때가 많습니다. 경계와 예외는 테스트, 프로덕션 코드에서 중요합니다. - 문제 접근 방식:
알고리즘엔 세심한 관찰과 접근이 요구됩니다. 큰 문제를 여러 문제로 작게 쪼개거나, 다양한 방법으로 해결하죠. 개발에서도 흔한 접근법입니다. - 디버깅:
설명할 필요가 없네요. - 코드 품질:
하나의 함수에 거대하고 방대한 책임을 넘기라는 개발자는 없습니다.
멋지고 쿨하게 한 줄의 코드(50자 이상, 알아보기 어려운 약자, 여러 메소드가 뒤섞임)로 작성하길 권하는 사람도 없습니다.
우리는 알고리즘을 풀면서 깔끔한 함수 작성법도 고민합니다.
누구나 한 번쯤 이런 불평을 해봤을 겁니다.
"내가 커서 써먹을 일도 없는 수학을 왜 배워야 하지?"
학교가 수학을 가르치는 목적은 학생의 논리 향상입니다. 어려운 수학 문제는 학생의 논리적 사고를 총동원합니다. 이런 두뇌 활동에 익숙해지면 사회에서도 문제를 논리적으로 접근하게 됩니다.
마찬가지로 프로그래밍은 논리적인 사고가 매우 중요합니다. 그리고 알고리즘은 논리와 관점을 넓히는 학습입니다.
혹자는 알고리즘이 패턴 반복으로 연습해서 일정 수준의 테스트까진 비교적 쉽게 통과할 수 있기 때문에 "결국 암기 아니냐"며 자조합니다.
암기면 어떤가요? 수학도 그렇지 않았나요? 영어는 어떻고요? 심지어 개발도 그렇지 않던가요?
우리가 뭔가 학습할 땐 언제나 "외운다"는 행동이 따라붙었습니다. 돌이켜보죠.
"암기 없는 완벽한 이해로만 진행된 학습이 있었나요?"
암기는 편법이 아닙니다. 실력은 0에서 갑자기 100으로 오르지 않습니다. 머리로 input하고 말과 타이핑으로 output하길 반복해야 깨달음이 점차 옵니다. 그렇기 때문에 유명한 말이 있죠.
"Just do it!"
외워야 꺼낼 수 있고, 해봐야 이해가 됩니다! 코드를 '세상 누구보다도 완벽하게 이해'한 뒤에 작성하는 사람은 없습니다. 일단 알고리즘을 해봅시다!- 경계에 대해 처리했는가?
- 예외에 대해서도 처리할 필요가 있는 문제인가?
- 문자열이 '특정 문자열'을 포함하는지 검사 -> 정규식
- 문자열이 '임의의 문자열'을 포함하는지 검사 -> 객체로 key 조회 (not includes)