서론 - 왜 알고리즘, 자료구조를 공부하려 하는가?
프로그래밍을 시작하고 거짓말 조금 보태서 하루도 빠짐없이 코딩을 해왔습니다. 그 기간이 오래 되지는 않았지만 쉬지 않고 달려온듯 합니다. 모르는 개념들을 이해하기 위해 닥치는대로 공부하고 어떻게든 해결해왔습니다. 그렇게 현재는 Python을 주 언어로 사용하는 Backend 개발자가 되었고, 현재는 주로 API 개발을 하고 있습니다. 하지만 어느 순간 부터 큰 고민이 생겼습니다. 무언가 만들기 급급한 프로그래밍을 하고 있다는 의구심이었습니다. 아래는 제가 첫 포스트에 썼던 글입니다.
저에게 파이썬은 아름답습니다. 배우기 쉽고, 간결하며 높은 생산성을 갖고 있습니다. 그렇지만 파이썬 언어도 결국은 프로그래머의 하나의 도구에 불과합니다. 단순히 프로그래밍을 할 수 있는 것과 좋은 프로그래밍을 하는 것은 하늘과 땅 차이입니다. 결국 프로그래밍의 수준은 언어가 아닌 프로그래머의 역량입니다. 결론적으로 프로그래밍 자체를 아름답게 하기 위해서는 언어에 상관없이 프로그래밍 자체를 공부해야 합니다. 알고리즘, 디자인패턴, 아키텍처, 테스트기법, 동시성, 자료구조 등의 필요한 지식을 유기적으로 이해할 수 있다면 어떤 언어를 사용하더라도 아름다운 프로그래밍을 할 수 있는 개발자가 될 것이라 생각합니다.
지금까지 저는 단순히 프로그래밍을 하는 프로그래머였던것 같습니다. 단순히 프로그래밍을 하는 것이 나쁘다는 문제가 아니라 위에서 언급했듯 저는 아름다운 코드를 만드는 프로그래머가 되고 싶습니다. 이를 위한 첫 시작으로 알고리즘과 자료구조를 기초부터 다져나가려 합니다.
프로그밍 대회에서배우는 알고리즘 문제해결 전략 (구종만 지음) 책을 선정해 체계적으로 학습할 계획입니다. 1000페이지가 넘는 다소 버거운 분량임에도 불구하고 이 책을 선정한 이유는 단순히 알고리즘 문제를 소개하고 풀이하는데 그치지 않고, 프로그래밍의 본질인 문제해결이라는 추상적인 개념을 단계를 나누어 체계적으로 학습할 수 있도록 구성되어 있기 때문입니다. 그럼 이제 시작해볼까요!! Let’s go!! Get it!!
01 문제 해결과 프로그래밍 대회
프로그래밍은 문제 해결이다
프로그램밍을 하기 위해서는 많은 것을 알아야 합니다. 아무 생각 없이 키보드를 두드리는 것처럼 보이는 프로그래머의 머릿속에는 자신이 사용하고 있는 프로그래밍 언어의 특성, 프로그래밍이 동작할 하드웨어와 운영체제에 관한 지식, 사용하고 있는 라이브러리들에 대한 유의 사항들이 회오리치고 있습니다. (중략) 이 와중에 가능한 한 재사용성이 높은 간결한 코드를 작성해야합니다.
이렇게 많은 제약조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력은 좋은 프로그래머가 되기 위해 필수적입니다. 이 책에서는 이런 능력을 문제 해결 능력이라고 부릅니다. 프로그래머가 사용하는 언어나 라이브러리, 알고리즘에 대한 지식 들이 퍼즐의 조각이라면 문제 해결 능력은 적재적소에 퍼즐 조각을 배치하고 이들을 연결해서 큰 그림을 만드는 능력이라고 할 수 있습니다.
‘01 문제 해결과 프로그래밍 대회’ 장에서는 문제해결이 무엇인지 정의하고 좋은 프로그래밍을 하기 위해 왜 알고리즘이 필요하고 어떻게 공부해야할지 큰 방향을 제시합니다. 다음 2장 ‘문제 해결 개관’ 은 문제 해결 과정을 여러 단계로 나눠 보고 각 단계를 더 잘하기 위한 여러 기술들을 소개합니다. 책을 구입한지 반년만에 첫 발을 내 딛였습니다. 구종만 작가님이 입문자를 위한 커리큘럼을 제시해주셨고, 저는 그걸 따라 공부할 것입니다. 그렇기에 건너뛰는 장이 있을 수 있음을 미리 말씀드립니다. 첫번째시간은 이렇게 가볍게 마무리하고 다음편에 뵙겠습니다. 행복하세요~
Well begun is half done
Reference
잘못된 부분에 대한 지적은 언제든지 감사히 받겠습니다.
rochan87@gmail.com