학생들이 꽤나 오랜시간을 배우는데 제대로 하지 못하는 과목이 있다.
바로!
자.료.구.조
대학 수업 중 일부는 자료구조에서 간단한 알고리즘을 학습하는 것에만 초점을 두고 학습하고,
일부는 이진트리가 자료구조의 최종 구조인 것 처럼 배운다.
사실 자료구조는 깊게 들어가면 끝이 없을 정도로 넓고 깊은 학문인데,
학부생 수준에서 C로 쓴 자료구조론 을 모두 이해하고 연습문제를 푼 다는 것은 어려운 일임이 분명하다.
헌데, 너무나도 웃긴것은 굉장히 많은 책들이 "자료구조"라는 이름으로 나온다..
내가 볼 땐 "자료구조 입문", "자료구조 개론"에 불과한 내용을 다룬체로 말이다.
많은 학생들이 자료구조 알아요! 라는 말을 할 때 나는 "내가 몇년간 공부해도 다 못한걸?" 이라는 생각으로 물어보면
역시나 이진트리가 그 학생이 아는 최고의 트리였다.
사실 자료구조는 그러한 것이 아니다. 자료구조는 마치 역사 공부처럼 해야하는 것이다.
현재는 남의 이야기 같지만, 다가올 미래를 대비하기 위해서?!
자료구조에 대한 몇가지 질문에 답을 적어본다.
1. 꼭 자신이 구현을 해봐야 하나요?
- 네, 수준에 따라서는 많이 다르지만, 구현을 하는 것이 좋습니다.
2. 고급언어에선 간단히 불러와 쓸 수 있는데 왜 구현을 하는 법을 알아야 하죠?
- 자료구조를 구현을 할 수 있는 능력 자체가 중요한 것이 아니라, 자료구조를 구현함으로
'자신의 사고를 코드로 옮기는 기술'을 익히는 것이 중요합니다. 그것은 프로그래머의 기본 자질입니다.
3. 구현은 일반적으로 프로젝트를 해도 많이 할 수 있는데, 자료구조를 구현해야 하는 이유는 무엇인가요?
- 질문을 하는 당신을 비난하거나 무시하는 것은 아니지만, 당신이 짠 프로그램은 어떠한 로직이나
알고리즘이 구현이 되어 있기 보다는, 있는 기능들을 퍼와서 쓴게 전부 일 수도 있습니다.
현재 대학생 수준에서 코딩은 '자신의 사고를 코드로 옮기는 기술'과는 거리가 먼,
라이브러리, 프레임웨크 사용법에 지나지 않는 경우가 많습니다.
4. 그럼 자료구조는 사람들이 꽃이라고 하는 RED BLACK Tree정도를 구현 하면 되는 것인가요?
- 아니요, 선형 자료구조에서 비선형자료구조로 바뀌는 과정과
이진트리가 RED BLACK Tree로 변화되는 과정을 아는게 더 중요해요. 자료구조는 역사공부 같은 거니깐요..
5. 그럼 어떻게 공부해야 하나요?
- 링크드 리스트로 이뤄진 스택정도를 코드를 보며 학습 한 뒤,
이후에 나오는 자료구조는 알고리즘만 보고, 코드를 참고하지 않고 공부해야합니다.
자료구조를 구현하기 위해 소스를 암기하는 순간, 허공에 삽질을 하는 것과 같다고 생각합니다.
6. 다시 한 번 더 묻겠습니다. 자료구조 중요한 가요?
- 당신에게 묻겠습니다. SW프로그래머가 되고 싶은가요?