치킨모임
515
2019-07-01 09:38:59
11
6285

알고리즘이 필요한 '진짜' 이유에 대하여


이번 글의 주제는


아주 핫한 이슈

알고리즘의 필요성

이 문제를 다루려고 합니다.


너무나 뜨거운 논쟁의 소재인지라,

다루기가 너무 어렵지만


아직도 여전히


알고리즘 쓸데없다 VS 알고리즘은 필수다


이 지속되는 두 가지 논쟁에 대해서

분석해 보려고 합니다.



우선 이 두 가지 시각이 온도차가 생긴 이유가

있습니다.


그건 알고리즘의 실효성의 문제입니다.


알고리즘이 어느정도 필요하고 기업에서는 얼마나 자주 알고리즘 능력을 필요로 한가?! 이 과목, 알고리즘 능력의 향상이 업무능력을 얼마나 향상 시킬 것인가?


사용하는 DB, 프레임워크, 프런트 개발 실제 업무에서 알고리즘이 사용되는 부분이 거의 없는 경우 알고리즘이 필요하지 않다고 여겨질 때 도 있습니다.



알고리즘 테스트를 통과하고 코딩 능력이 좋은 것

실제로 문제를 검색하고 문제를 찾아내고 해결하는 과정에 대한 능력 금은 다른 능력이긴 합니다.


따라서 일을 해본 사람의 입장에서

알고리즘을 잘하는 능력만으로

코딩을 잘한다. 혹은 일을 잘한다. 또는 그렇지 않다고 평가하기는 매우 모호하다는 사실을 체감하고는 합니다.


그럼,

그럼에도 불구하고 왜 기업은 계속 알고리즘 테스트를

도입하려고 하는 것일까요?!


그리고 그것이 가져다주는 유익은 무엇일까요?


만약 알고리즘을 공부한다 하더라도,

왜 알고리즘이 필요한지 이해가 없이 그냥 알고리즘만


공부하다가는 실제 알고리즘을 써먹기 어려울 뿐 더러, 회사에 입사한 이후에도 알고리즘을 사용하지 않는다는 이유로 업무 자체에 실망감을 느낄 수도 있습니다.


알고리즘의 사용에 대한 판이한 다른 생각들을 글로 담아 보았습니다.


https://brunch.co.kr/@chickenmoim/4


회사에서 알고리즘의 능력은 어느정도까지 필요할까요?!

3
0
  • 댓글 11

  • fender
    14k
    2019-07-01 14:18:16 작성 2019-07-01 14:19:14 수정됨

    양 쪽 입장이 어느 정도 잘 소개된 좋은 글인 것 같습니다. 전 이 문제에 있어서는 '알고리즘'의 정의를 어떻게 내리는가에 따라 답이 달라질 수 있다고 생각합니다.

    소개된 문서의 알고리즘의 중요성을 강조하는 주장에도 엿볼 수 있는 내용이지만, 알고리즘을 '무언가 근본적이고 원리에 가까운 것'으로 막연하게 정의하고 대략 '그냥 먹고 살려면 몰라도 되지만 깊이 있는 개발을 하려면 필수'라는 결론을 유도하는 경우를 자주 접하는 것 같습니다.

    하지만 해당 글에서 언급한 추천 알고리즘, 머신러닝 알고리즘, 금융권의 '알고리즘' 등이 예컨대 유명한 백준 알고리즘 같은 문제들과 모두 동일한 성격의 지식인가라고 묻는다면 긍정적으로 답하기 어려울 것 같습니다.

    개발이란 분야가 무언가 근본적인 '알고리즘'이란 것과 프레임워크 활용 같은 '응용분야'로 양분되어 있다는 건 이 문제에 있어서 균형잡힌 의견을 갖는데 방해가 되는 시각이라고 생각합니다.

    이 논쟁은 어떤 면에서는 하드웨어나 메모리 관리 저수준 지식의 중요성과도 일맥상통하는 측면이 있어 전에 적은 글을 다시 소개해보고 싶습니다:

    2
  • exexexe
    176
    2019-07-03 10:54:53

    논쟁 아이템 등장이네..ㅎㅎ

    0
  • 퓨리오사
    2k
    2019-07-03 12:49:35

    알고리즘이 꼭 필요하냐? 꼭 필요하다고 생각합니다.

    물론 알고리즘이나 디자인 패턴에서 추천하지 않는 안티 패턴이나 혹은 그 여부를 모르고

    만들어도 크리티컬한 버그가 없으면 굴러갑니다.

    나중에 중복코드나 비생산성적인 코드가 증가하고 관리가 어려워지고 성능이 떨어질뿐이죠.

    워낙 프레임워크가 광범위하게 쓰이고, 발달한 시기라서 프레임워크에 잘 정제된 기능만쓰면 따로

    알고리즘이나 패턴으로 최적화할 고민을 안해도 될수 있습니다.

    그리고 프레임워크 내부에서 어떻게 동작하는지 정확히 모르고 써도 문제가 없을수도 있습니다.

    다만  튜닝이나 프레임워크에서 미처 지원하지 못한다면 만들수는 없겠죠.

    그래서 항상 알고리즘에 대한 평가는 갈리는거 같습니다.

    몰라도 지금 당장은 문제가 없을수도 있기 때문이죠.




    0
  • fender
    14k
    2019-07-03 13:36:11 작성 2019-07-03 13:40:29 수정됨

    다시 강조하자면, 전 이 주제에 있어서는 무엇보다 '알고리즘'의 정의가 중요하다고 생각합니다. 예를들어 보통 이 주제로 논쟁을 하면 이런 식이 되더군요:

    A: "요즘 시대에 정렬 알고리즘 같은 거 외우는게 그렇게 중요한가?"
    B: "몰라도 프레임워크 사용법만 알면 코딩엔 지장없긴 한데, 모르면 실력을 키우는데 한계가 있다."
    A: "그럼 알고리즘을 알면 뭐가 좋은데?"
    B: "알고리즘은 최적화에도 필요하고, 인공지능에도 적용되고 프레임워크 같은 거 만들 때도 필수적이다"

    이런 논리 전개의 함정은 '알고리즘'의 정의가 논의를 진행하면서 점점 확장이 된다는데 있습니다. 사실 '알고리즘'은 맥락에 따라 매우 다양한 의미로 쓰일 수 있는데, 좁은 의미로는 코딩 테스트나 전공 수업 과정에서 배우는 정렬, 탐색, 동적 프로그래밍 등 잘 알려진 몇몇 패턴, 또는 접근 방식을 뜻합니다.

    하지만 이런 주제에 대한 논의에선 보통 알고리즘의 중요성을 강조하는 측에서 훨씬 넓은 의미, 즉 단순 '응용 기술'에 대한 상대 개념으로 무언가 프로그래밍의 근본 원리에 해당하는 지식의 총체 쯤의 의미로 사용하는 경우가 흔합니다.

    그런 의미라면 정렬 방법도 알고리즘이고, 머신러닝에 사용되는 것도 알고리즘이고, 디자인 패턴도 알고리즘이고 프레임워크 같은 복잡한 소프트웨어의 내부 구현도 모두 알고리즘입니다.

    개인적으로 이런 방식의 논의에서 문제 삼는 것은 그런 이해가 특히 개발 경험이 부족한 초보 개발자들이 공부 방향을 잡는데 혼란을 초래할 수 있다는 점입니다.

    예컨대 그런 개발자들이 '알고리즘 스터디'를 한다면 분명 좁은 의미의 알고리즘, 즉 전통적인 커리큘럼에 따라 코딩 테스트 시험에 나올법한 문제들에 집중하게 될 것입니다.

    왜냐하면 넓은 의미로 "알고리즘을 알아야한다"는 주장은 그냥 한 마디로 "원리를 파악하는 게 중요하다" 이상의 의미를 갖지 못하기 때문에 구체적인 공부의 대상이 되긴 어렵기 때문입니다.

    문제는, 그럼 알고리즘의 중요성을 강조하는 측의 주장대로 그런 좁은 의미의 알고리즘 퀴즈만 열심히 풀다보면 언젠가는 프레임워크도 만들 수 있고, 머신 러닝도 다룰 수 있고 아무튼 필요한 대부분의 '응용기술'을 익힐 수 있느냐는 것인데, 저는 이 부분에 대해서는 매우 부정적으로 생각합니다.

    소프트웨어 관련해서는 좁은 의미의 알고리즘이나 성능에 대한 이해 이외에도 패러다임, 디자인패턴, 아키텍쳐, 배포 및 운영 등등 매우 다양한 계층의 지식 체계가 존재합니다.

    그 중 어느 한가지 분야도 그 것만 집중해서 마스터하면 다른 분야도 자연히 모두 알게 해주는 '근본'이라고 할 수는 없습니다. 특히 프론트엔드나 C#, 자바를 주로 다루는 개발자라면 좁은 의미의 알고리즘보다 더 중요하고 먼저 배워야 할 내용이 많이 있습니다.

    그래서 각자의 분야나 추구하는 지향에 따라 적절한 공부 방향을 정하고 공부하는 주제의 우선 순위나 중요도를 적절히 배분할 필요가 있습니다.

    그런 관점에서 모든 소프트웨어 지식 분야를 '근본'과 '응용'의 두 가지로 이분화하고 전자를 막연하게 '알고리즘'이라고 정의한다던지, 분야와 무관하게 온라인 알고리즘 퀴즈 풀이 같은 것만 집착하면 언젠가는 프레임워크도 혼자 만들 수 있을 거라 기대한다던가 하는 착각은 위험하다고 봅니다.

    그런 이유로 이 주제에 대한 글이 올라올 때마다 굳이 논쟁에 참여하게 되는 것 같습니다.

    0
  • 치킨모임
    515
    2019-07-03 17:28:06

    저도 동의 합니다~! 이 알고리즘을 어디까지로 정의할 것인지의 문제가 문제를 확대한다고 생각합니다. 


    알고리즘이 때론 어떤 전유물 같이 표현되는 경우들도 있어서 조심해야 한다고 생각해요. 

    0
  • 해아일락
    460
    2019-07-04 16:24:04

    리팩터링이나 디자인 패턴은 인정하지만..

    알고리즘.... 글쌔요...

    실무에서 리팩터링이나 디자인 패턴은 중요하게 적용되고 항상, 혹은 자주 사용하지만...

    알고리즘... 핵심 코어가 아니라면 과연...

    일년에 알고리즘 생각하면서 코딩하는게 몇번이 있을까 하는...

    그게 있더라도 이미 인터넷에 나와있는 좋은 예제들이 있어서...

    요즘은 이직을 위한 알고리즘 뿐이라고 생각이 드네요..

    1
  • exexexe
    176
    2019-07-05 23:38:50 작성 2019-07-05 23:39:06 수정됨

    역시나..ㅎㅎ

    의미 없는 논쟁...ㅉㅉ

    낚시 쩌네..ㅎㅎ

    0
  • 원숭이부대
    692
    2019-07-06 05:01:14 작성 2019-07-06 05:02:25 수정됨

    코딩테스트에서 쓰이는 알고리즘이 실제로 쓰이는 곳이 있을 수도 있으니 틀리다고는 못할 것 같습니다.


    실제로 무슨 알고리즘을 써서 구현한 XX기능 이런게 있으니까요.


    근데.. 이건 실제로 쓸 때 얘기고, 막상 코딩테스트 하고 입사해서 보니 그런거 없더군요.


    오히려 소스코드가 개판이라 알고리즘 집어치우고 리팩토링이나 디자인 패턴을 아는 사람을 뽑아야 할 것 같은데..


    기업들이 너도나도 코딩테스트하니까 그냥 따라하다보니..  이런 생각이 드는 것 같습니다.


    너무 다른 기업 의식하고 자신들이 필요로 하는 인재보다는 다른 회사에서 하는거 똑같이 하면 알아서 잘 필터링 돼서 들어오겠지라는 편한 마인드로 그냥 하는 경우가 많지 않나 싶습니다.



    0
  • guyv
    1k
    2019-07-08 14:58:08

    웹 기반의 프로그램을 만드는 회사의 면접관이라고 하면,

    저는 알고리즘이고 뭐고 태그질 잘 하는 사람을 뽑을겁니다.

    (프론트 엔드고 백엔드고 자바스크립트고 나발이고 태그도 못하는데 웹을 한다?)


    게임을 만드는 회사의 면접관이라고 하면

    별 이미지 천개를 최고의 퍼포먼스를 내보라고 하겠습니다.

    (알고리즘을 쓰든, 날코딩을 하든, 슈킹을 해먹든..  넌 도대체 어떤 생각으로 코딩을 하는지만 알려달라)


    뭐.... 다 다르겠죠... 


    확실한건, 절대 알고리즘을 잘 한다고 해서 창의적인 사람은 아니라는겁니다. 절대..


    "아이디어는 자신이 구현할 수 있는 범위내에서 나온다" - 양병규, 빵집개발자.


    0
  • ㅇㅈㅇ
    3k
    2019-07-11 13:56:27

    이건 그냥 소잡는칼 필요하냐는 소리랑 비슷한 거같아요.

    닭잡는 곳에서는 필요없고 소잡는 곳에서는 필요하겠죠.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.