꾸준한 실행

가장쉬운 알고리즘책 - 쉽다고 이해까지 쉬운 건 아니지... 본문

가장쉬운 알고리즘책 - 쉽다고 이해까지 쉬운 건 아니지...

ikoob 2014. 12. 24. 02:02

가장쉬운책시리즈005 가장쉬운 알고리즘책(2014/12/24)

미와요시코 지음/나가시마 타카시 집필협력/김대희,장재호 옮김| 초판1쇄 2014.9.29


부끄럽고 부끄럽다. 알고리즘을 2학기에 걸쳐 수강했는데, 거의 20년이 흐른 지금, 기억에 남는게 없다. 정확히는 그때 시험(외워 알고리즘을 쓰는 것)후로 반납했다. 빅오에 대한 설명 관점이 좋았던 것 말고, 딱히 이 책만이 주는 장점은 발견하지 못했다. 다만 비전공자가 들이 매번 주눅들어 하지 않았음 하는 마음으로 이런 책으로 시작해도 될 것 같다. 전공자들도 별 깊이가 없어요~~. (혹시 나만 그런지 모르지만!)


거기엔 정말이지... 그렇게 복잡한 것을 현실 세계에선 요구하지 않는다는 것(번명이겠지!)이 한 이유다.


자신의 웹 프로그램을 빅오로 계산할 수 있으면 된다. 하지만 그 부분이 소프트웨어에만 한정된게 아니라 하드웨어와도 큰 의존성을 갖는 부분이니... 하드디스크를 SSD로 했을 경우에 throughput 은 어떻게 계산해야 할까? 거기에 코어 수가 증가할 경우엔 상용 웹서비스의 성능은 어떻게 계산해야 할까! 속도만 필요한게 아니라 데이터의 안전성이 중요할 경우의 트레이드 오프할 것과 비교해보면, 그렇다. 구현자들에겐 한없이 멀고 연구자에겐 한없이 가까이 두고 살아야 할 그 무엇이 알고리즘이라 생각한다.



또한 사용자가 얼마 이상이어야, 계속 유지보수를 통한 개선과 함께 밥벌이 유지가 될 것인데 말이지... 그런 관점에선 정말 vmware가 부럽긴 하다. 분명 ms도 자신들 window가 판매가 될터이니, 정보공유도 잘될테고, linux야 오픈소스이니... 이번에 보니 급여 높고 좋은 회사 10권 안에 있더라. 주식도 엄청나구만, Hyper-V 기술은 cpu와도 관련 있으니, 인텔과 AMD 관련 인물들도 인력 순환에도 많은 도움이 되었을 것 같다. 워워 제자리로 돌아와, 참고: http://finance.yahoo.com/q?s=VMW  정말 미국에 있었다면 주식 꼭 했을 것 같다.



빅오 계산 말고는 정말 크리티컬한 곳(생명담보, 원자력발전소, 증권가 같은 영향력이 큰 쪽 프로그램) 말고 딱히 빅오까지 계산하면서 신경 쓸 이유가 있을까? 하드웨어는 저렴해지고, 사용자가 몇 천이 아니라 인기가 있으면 최소 몇십만 단위로 접속하는 현실에선... 아흐... 


생명을 담보로 하는 분야 예를들면 엘리베이트 임베이드나 의료부분, 그리고 예전에 일했던 전기 발전소 같은 곳(사장님이 C코딩할 때 보니 50-100ms에서 놀고 있었다(?). 거기에 따른 스트레스는 얼마나 클지 상상해보고 그쪽으론 근처도 안갔다만... rs-232c 구현한 계량기가 납품되었다면 엄청 고생했을 것 같았다. 아흐 지금은 생각하면 그때가 좋았는데.... ) 말고는 대부분 기본적인 생각으로 알고리즘을 써도 무방하다. 거기에 위에 언급된 분야도 제법 축적되어 있어, 맨땅에 헤딩하지 않으니까 뭐 겁먹지 않고 꾸준히 쌓아간다면 뭐, 알고리즘 구현이 모자라 일을 못할 일은 없겠지!


옵티마이즈 관련 책을 보아도 간단히 짜는게 최고라 되어 있더만, 그러고 보니 멀티코어를 지원하는 컴파일러 분야가 가장 똑똑한 사람들이 가야 될 곳인가 싶기도 하고...


그 말고는 알고리즘이란 단어란 환상에 빠져 살 필요가 없다. 물론 자신이 구현하고자 하는 미지의 구현에 필요할 그 때는 정말 필요하긴 하겠다만... 그것도 구글과 접신하고 나면 ... ... ... 거기엔 도제방식의 기술과는 달리, 비슷한 방식이 아직 존재하고 있지만, 구글神에게 물어보면 답이 되니까! 또한 아이패드가 만들어진 후에 나온 잡지나 페이퍼를 전자문서로 다 검색하고 참고할 수 있는 시대에 살고 있으니...



갑자기대학 때 데이터베이스를 전공한 교수님 曰 이 분야도 이제 정체기에 들었다고 했다. 검색 알고리즘에서 데이터의 양에 따라 정말 효과적인, 빅오로 증명할 수 있는 것만 발견하면 박사학위를 딸 수 있다고 했었는데, 이제는 시스템 단위가 웬만하면 엄청나 버리는 현실에선... ... ... 거기에 AWS란 대안까지도 존재하니 ... 여기까지!


물론 무시하란 말을 하면서도 빌려 열심히 읽은 '나'자신을 볼 때도 ... 어쩌면 3층 짜리 빌라 건물 짓는 일하는 건축업자가 100층 짜리 건물 올리는 설계도나 3D 구현도를 보면서 학습하는 것과 같은 그 무엇(?)이 존재할 뿐일 수도 있지만. ... 그건 엔지니어의 관점이니...



하여튼 빅오를 기울기로 쉽게 이해할 수 있게 언급한 건 좋았고, 얇아서 좋았고, 나름 지혜를 줄려고 노력한 부분도 좋았다. 다만 4년이나 준비했다고 그 자체를 폄훼해서도 안되지만 아웃풋이 투자한 시간에 비해 얻을 건 없었다는 솔직함을 적는 것도 필요했다.



물론 영어를 어떻게 공부하면 효과적인가 방법서만 읽다, 이제 영어 훈련 좀 하는 나로선, 알고리즘 어렵다 어렵다 생각할 시간이 있다면 사용하는 언어로 알고리즘을 구현해보고 블로그 같은 곳에 정리해보는 것이 훨씬 큰 도움이 될 것으로 본다. 면접할 때, 스택, 큐, 데큐, 링크드리스트, 더블링크드리스트, B 트리, B* 트리 등등의 기본적인 알고리즘 구현에 관한 실제 면접을 볼 지 모르니 말이다. 이것 역시 대학원 이상의 경력자는 외워 기계적으로 쓰는 수준인 사람들이 있는 것 같던데... 이런 방법이 틀리다고 보진 않는게, 외운다는 건 이해를 바탕으로 하고 그것이 ...


** 나는 바로 구현할 수 있지만 버그가 좀 많을 것 같단 생각과 binary tree를 사용해본지가 아흐... 호가호위 그만하고 여기까지만. 아 다시 생각해보니 링크드 리스트 vc++ 사수와 함께 구현해 적용해 본 것 말고(정확히 이용자는 십만명은 넘었으니... 거기에 이건 자랑입니다)는 딱히 실제 코드에 적용해본게 없음을 -.- code is king 이니 이 세상 왕도니까.아흐. 그래도 java development kit 에 있는 함수를 사용하는게 이런 알고리즘을 사용하는 것이니...



** 글이 논리적인게 아니라 뒤죽박죽 적은 것은 알고리즘에 대한 많은 생각들을 그냥 나열해두고, 한번씩 이글을 읽는 것으로 '제 저신'을 일개워 주고 싶어서 그렇습니다.

0 Comments
댓글쓰기 폼