개발&Development/프로그래밍 일반

Data Structure-자료구조, 프로그래밍의 교양

겐도 2006. 3. 24. 12:45
자료구조(Data Structure)라 하면 전산전공의 대학생이 처음으로 접하는 머리아픈 과목중 하나가 아닐까 한다. 대학마다 전공과정이 약간 다르기는 하겠지만 DS와 더불어 알고리즘, OS, 이산구조정도?

살려주세요 -  어느 대학생의 비명.

어쩌다 마주친 그대 모습은 아니고 글. 이전의 글에서는 좀 공격적이었다면 여기서는 달래는 느낌의 글???

프로그래머라 하면 C나 C++ 혹은 최근에는 Java나 PHP만 잘 짜면.. 정확히는 대충 굴러가는 코드를 생산만 할 수 있으면 되겠지라는 생각이 있을지도 모른다. 하지만 세상은 그리 만만치만은 않은 것이다.

위의 비명글에서 간만에 "빅오"(time order)라는 용어를 보는데 DS뿐만이 아니라 알고리즘을 배울때도 아마 다시 나올것이다. 많은 사람들이 해당 과목이 끝나면 이 용어를 다시는 꺼내지 않는데 그러다가 겪게 되는 문제는 바로 퍼포먼스가 될 것이다. NP-Problem이 왜 중요한가. time order는 언제 쓰는가. 대표적인 예가 바로 성능이슈이다.

디자인이 결정되고 특정한 데이터 처리가 결정되는 과정에서 중요한 것이 복잡도이다. 우선적으로 해당 처리를 하기위한 가장 적절한 알고리즘을 찾는 것도 중요하다. 고작 100개의 데이터를 소팅해야 되는데 Database를 붙일 수도 없는 노릇이다. 가장 빠르다고 배운 Quick Sort를 쓰면 되냐고? 제대로 된 DS책으로 공부한 사람이라면 Bubble Sort나 비슷한 방법도 고려하게 될 것이다. Time Complex를 비교할 줄 알고 그것이 의미하는 바를 이해해야 효율적인 처리방법을 찾을 수 있다. php 문법만 알아도 100개의 데이터를 정렬해서 웹페이지에 뿌려주는 프로그램을 작성 할 수 있겠지만 천명의 사람이 동시에 사용할때 0.5초 이내로 보여주는 프로그램을 작성하기 위해선 위의 것들이 필요한 것이다.

DS에서 다루는 또다른 중요한 개념이 ADT-Abstract Data Type. 이 개념이 있어야만이 데이터 처리 공정이 깔끔해 지고 대규모 프로젝트에서 스파게티를 만들지 않고 교통정리가 된 프로그램을 작성할 수 있다. OS에서 왜 일반적인 운영체제의 특성을 배워야 하는가. 쓰레드를 제대로 이해하지 못하면(더불어 동기화, 락, 세마포어 등등등) 화면에 Hello, World를 찍을 수는 있어도 인터넷 뱅킹 프로그램은 작성할 수 없는 것이다. 혹 만들었다면 누군가는 때돈을 벌고 누군가는 알거지가 되겠지.

프로그래머가 되고 싶다면.. 고기만 먹고 살면 단명하듯 먹기 싫어도 다양한 것을 섭취해야 하고 녹황색 채소라 할 수 있는 이런 수학에 가까운 과목에 대해서도 힘들지만 최대한 이해하려고 노력하기 바란다. 단순히 기말고사용으로만 암기하지 않기를 빈다.

PS. 한가지 보너스. DS의 ADT가 이해되면.. php 5에서 추가되기 시작한.. 대부분의 언어에 있는 class따위는 누워서 떡먹기 식으로 이해된다. 몇개의 키워드만 외우면 되는 것이다. 또한 수업에서 배울 수 있는 수준의 OO(Object Oriented)만 습득해도 class를 사용함에 있어 자유로움을 만끽할 수 있을 것이다.

PS2. 대학에서 배우는 전공은 원래 어려운 거다. 배우지 않은 자와 차이가 있어야 사회의 인력시장에서 메리트가 생기는 거니깐. 아무나 Bubble Sort의 Time order가 O(n^2)라고 말할 수 있으면 전산쟁이들 다 굶어 죽는거다.