ForMortar
787
2019-09-13 21:20:53 작성 2019-09-13 21:21:08 수정됨
15
1178

기업에서 알고리즘을 왜 시험 보는건가요?


대부분 코딩테스트 보면 알고리즘 시험이던데,알고리즘을 잘하면 코딩을 잘하나요?알고리즘이 생각하는 능력을 길러주는거라곤 들었는데,알고리즘을 잘한다->특정 부서의 개발을 잘한다 이건 아닌거 같아서요.알고리즘을 잘하면 웹 모바일 여러가지 프로그래밍을 두루두루 잘할 수밖에 없나요?구글 같은 회사도 알고리즘 알고리즘 하면서 세계에서 난다긴다 하는 프로그래머들 데려다가 대회까지 열고 그러던데
2
0
  • 댓글 15

  • 방가방가2
    1k
    2019-09-13 21:33:17

    근거 없는 믿음입니다. 일종의 징크스라 보시면 됩니다. 점수가 높을수록, 알고리즘 능력이 높을 수록, 일을 잘할거라는... 그런 근거 없는 믿음... 이 믿음에 대해서는 과학적으로, 통계상으로도 검증된 적이 없습니다. 다른 의미로는 그 만큼, 기업에서 사람의 능력을 객관하고 평가할 방법이 마땅치 않다는 것을 의미하기도 합니다.

    가장 좋은게 이력입니다. 그러나... 전 직장에서의 활동기록을 넘겨달라는 요구에 응할 기업이 몇개나 될까요? 그리고 그 기록은 얼마나 엉성할까요? 내부 직원을 평가하는 것도 업무 능력이라기 보다는 회사 요구에 얼마나 잘 순응하고 부응하는지, 회사에서 얼마나 마찰을 안일으키는지... 그런 수준입니다. 영업, 비즈니스.. 이런 쪽은 돈하고 연결지을수 있겠으나, 그것도 사실 얼마나 일을 잘했느냐에 대한 지표로 따지기 힘듭니다. 오늘 조금 양보하고 장기적으로 더 이득인지, 아니면, 오늘을 희생하여 미래의 이익을 끌어온것인지... 그냥 호황기여서 그런지... 우연인지... 그게 개인의 능력인지, 아니면 팀이 얼마나 관여하는지...

    그리고.. 알고리즘 시험.. 경력직도 못푸는게 대다수입니다. 대기업에서 공채로 내는 것들은 특히 그렇습니다. 익명으로 "나도 못푸는걸 애들 보고 풀라고 내고 있다."고 하는 소리가 심심치 않게 들립니다. 그래도, 어쩌겠습니까? 역량을 평가할 마땅한 다른 대안도 없는것을요.

    그래서 오늘도 기업은 알고리즘 문제를 내고, 이직생과 취준생들은 알고리즘 연습을 합니다.

    0
  • pooq
    3k
    2019-09-13 22:14:33

    위에 방가방가2님 말씀처럼 알고리즘으로 그 사람의 실력을 파악할 수 없습니다.

    근데, 알고리즘 외에는 그 사람의 실력을 파악할 수 있는 마땅한 방법도 없다는게 문제입니다.

    그나마 신입이 알고리즘을 풀 줄 안다는건 체계적인 방법으로 개발을 공부해왔고,

    프로그래밍적으로 생각하는 능력이 있고, 비즈니스 로직을 가장 빠르게 습득할 수 있는 가능성이

    있다는거니 그나마 그걸 기준으로 삼는게 가장 최선인거겠죠.

    1
  • 원숭이부대
    689
    2019-09-13 22:54:57 작성 2019-09-13 22:58:01 수정됨

    저도 소스코드를 작성함에 있어서 알고리즘만으로 개발자를 판단한다는 것이 좀 불만인 편입니다.

    그냥 시간주고 과제내주는 정도면 좀 구조 잘 잡아서 할거같은데 말이죠.


    제가 다니는 회사도 알고리즘 시험을 봤는데, 딱히 작정하고 알고리즘을 적용한 적은 없는 것 같습니다.

    그냥 웹 서비스에서 적용할 만한 것들은 뭐..

    단, 알고리즘을 실무에 자주 사용해서 중요시 여기는 기업들은 당연히 보겠습니다만은..


    중요한건 싫든 좋든 원하는 기업에서 보는 능력이라고 한다면 해야겠지만요.


    저도 알고리즘보단 객체지향적인 사고능력에 기반한 디자인패턴이나 소프트웨어 설계 부분을 더 중요하게 봤으면 좋겠다는 생각이지만..

    요즘에는 좋은데 가려면 알고리즘은 안할 수 없겠구나 생각이 들더라구요.

    물론 아무리 객체지향적인 사고를 한다고 하더라도 기본적인 알고리즘은 알아야 겠죠..


    아쉬운게 구직자니 해야겠죠 뭐


    코딩을 잘한다는게 정확히 어떤 의미인지 모르겠으나,

    포괄적인 의미라면 알고리즘을 잘 생각해서 코드를 짜내는 것도 코딩을 잘한다고 봐야하긴 하겠죠.

    1
  • withdrawal
    2019-09-13 23:30:44

    새로운 알고리즘을 만든다는건 노벨상을 받을 일 입니다.

    즉, 이미 이 세상 99% 알고리즘은 다 정리가 되어있습니다.

    알고리즘 테스트에서 고득점을 받았다면 그 사람은 알고리즘에 시간을 많이 투자해서

    많이 외웠다고 보시면 되는데

    무수히 많은 알고리즘 중 본인이 실무에서 사용하는 알고리즘은 별로 없습니다.

    다른것을 공부하기도 바쁘다면 굳지 알고리즘은 공부하지 않아도 된다고 생각합니다.

    1
  • Fleet
    82
    2019-09-13 23:46:59

    웹에서는 좀처럼 쓸일이 없고(쿼리만잘짜면됨) MES나 YMS처럼 대용량데이터 조회해서 처리하는 부분에는 좀 사용됩니다

    2
  • StringBuilder덕후
    392
    2019-09-14 00:34:02

    알고리즘 잘 이해하는 사람은 개발을 잘하는것이 아니라 논리적인 분석 설계를 잘하겠죠

    기술적으로 논리적으로 아키잡고, 공통잡고, 전반적인 설계하고 등등

    1
  • Kkoji
    110
    2019-09-14 00:58:41

    해당 회사 솔루션에 알고리즘적인 내용이 들어가냐에따라 다르지 않을까요? 

    지도 경로찾기만 해도 여러가지 자료구조와 알고리즘으로 해결하는데 이미 짜여있다 하더라도 이해하려면 어느정도 알고리즘 실력은 필요하다 생각합니다.

    특히 구글 카카오 네이버 등에서 신박한 솔루션들 많이 나오잖아요,  그런쪽에선 알고리즘 실력을 바라는건 이해가 됩니다

    기능구현, 엔지니어에 가까운 개발자라면 알고리즘보단 아는게 많아야 할것 같고요

    0
  • dohyeong
    610
    2019-09-14 02:55:40

    그나마 비교적 간단하게 할 수 있는 방법 중에서 업무성과를 조금이나마 예측 할 수 있는 방법이라서 그렇습니다.

    그리고 구글 같은 회사의 경우, 단순히 알고리즘 문제를 풀 수 있냐 없냐가 아닙니다.
    구글의 코딩 인터뷰는 1대1 면접 같은 거라서 알고리즘 문제를 통해서 다른 것들을 평가하려고 하는 겁니다.

    정답을 맞추느냐 아니냐가 아닌, 문제 이해, 테스팅, 설명, 도움을 잘 받아들이는지, 등등 종합적으로 같이 일할 만한 사람인가 아닌가를 봅니다. 면접관마다 보는 관점이 다르긴 하지만 일단 전체적인 의도는 정답을 맞추면 1점 아니면 0점인것은 아닙니다.

    1
  • 이직퇴사흐흐
    35
    2019-09-14 12:20:06

    개발같은 경우는 사실 새로운 회사에 입사하면 새롭게 배워야하는 부분( 회사의 프레임윀이라던지? 회사에서 사용하는 개발언어라던지 ) 이 있겠지만 사실 개인적인 생각이지만 알고리즘을 잘하면 깊이있는 생각을 잘한다는 생각이 듭니다. 깊이 있는 생각을 잘 하고 개발에 응용한다면 정말 훌륭한 성과를 기대할 수 있겠죠. 즉, 프로그래밍의 테크닉이 아닌 프로그래밍을 하는데에 있어 프로세스를 파악하고 센스가 어느정도이냐를 보는 듯 합니다. 개인적인 생각입니다 ~^^

    0
  • 앤트울프
    207
    2019-09-14 14:40:23

    알고리즘을 잘하는 사람들이 대부분 코딩을 잘하는건 맞습니다. (반례를 거의 보지 못했네요)

    단지 알고리즘은 잘 못하지만 코딩을 잘하는 사람들이 제대로 평가 받지 못한다는게 문제지요.

    4
  • 꾸롱
    481
    2019-09-14 14:48:59 작성 2019-09-14 14:54:54 수정됨

    게시판 CRUD로 찍어낼 때도, 사실 DB에서 정렬하면되지 왜 기본적인 정렬 알고리즘 같은 것 들을 테스트를 볼까요?

    한번 잘 생각해보시기 바랍니다.

    기업에서 원하는건 알고리즘 경시대회 수준이 아니라 기본역량 판단을해서 면접의 기회를주는것이고

    그 회사에서 기본역량에 충족(최악을 거르기위한 용도)이 안되면 안뽑으려는거죠.

    저같은 경우도 제가 면접관이라면 입 개발자가 아닌 코드로 보여줄 수 있는 신입을 채용할것같네요.

    0
  • mer
    95
    2019-09-14 15:05:37 작성 2019-09-14 15:58:45 수정됨

    대회를 열거나 수상을 보는것 말고

    일반적인 채용과정에서 코딩테스트는 정말 특별한 경우가 아닌 이상 허수거르기 용도입니다

    그래서 코딩테스트는 채용 프로세스에서 서류전형과 함께 맨 앞에 있는 경우가 대부분이구요


    지원자가 최소한의 문제 해결 능력을 갖고 있는지 알아보기 위한 것이기 때문에

    기본적인 소양만 있다면 누구나 해결할 수 있는 수준의 문제가 나옵니다


    위에 다른분은 시간을 투자해서 알고리즘을 외운다거나, 경력직도 못 푸는 수준의 문제가 나온다 하셨는데 솔직히 공감하기 어렵습니다

    N, K 기업 상시채용 코딩테스트랑 초등학생 경시대회 문제를 비교해보면 초등부가 더 어렵습니다

    코딩테스트로 최소한의 역량이 갖춰졌다 판단하면 그때부터 면접을 보고 채용을 하는거구요

    1
  • vollfeed
    961
    2019-09-14 16:36:56

    알고리즘을 잘하면 코딩잘합니다. 

    @앤트울프 님 표현이 딱 맞습니다.


    왜그런지 알려드리죠.

    우선 알고리즘은 실제로 새로 만들어서 쓰는 수준을 요구하는게 아닙니다. 100%이미 개발되어 있다고 봐도 되죠. 가장 빠른 정렬 알고리즘은 퀵소트며, 학부에서 다 배웁니다. 더 빠르거나 효율적인건 존재하지 않는다는 것이 수학적으로 증명되어 있으며, 정렬 문제에 한정해서는 더 배울게 없어요.

    그러나, 초중고에서 산수-수학을 배우는게 단순히 "계산이 되는 인간"이 필요해서 아니라, "논리적 사고가 되는 인간"이 필요해서라는건 흔한 지식입니다. 

    마찬가지로 알고리즘 테스트의 결과는 "논리적 사고 능력의 증명"입니다.


    보통 문제가 주어지죠.

    그러면 이 문제와 입력, 결과의 형태를 파악하고, 적절한 처리 수단을 판단해야합니다. 감으로 이것저것 시도하는게 아니라 지식과 경험에 근거해서 적절한 해법을 선택해야하는거죠. 

    그리고 그 안에서 최적화를 하기위해서 연산의 순서를 바꾸던지 캐쉬 구조를 짜던지, 효율적 자료구조를 구성하던지 여러가지를 하죠. 이런것도 전부다 감으로 이것저것 시도하는게 아닙니다. 당연히 동일한 결과를 얻을수있게, 논리적으로 동치하거나 상동하는 것을 논리적으로 판단하고 만드는 것입니다. 

    문제는 푸는 행위 안에 수많은 논리적 의사 결정이 들어갑니다. 때문에 논리적 문제 해결력의 증명이 되는 것입니다. 

    게다가, "알고리즘 과목"으로 정형화된 것도 논리적으로 해결할수없다면, 회사가 개발하는 프로그램에서 격는 다양한 문제를 논리적으로 해결할수있을까요? 


    또, 10개의 문제중 8개를 푼다는 의미는 단순히 8개의 알고리즘을 외운게 아닙니다. 100개의 문제 유형 중 70~90개를 해결할수있다는 의미를 내포 합니다. 

    웹 사이트를 만든다고 할때, 단순히  crud쿼리만으로 끝까지 다 할수이나요? 인덱스나 동적 생성, 엑세스를 고려한 복한 인덱스의 순서, 웹 서버의 파일업로드 처리에 대한 사이클, 요청간 데이터 공유나, 장단기(분단위~주단위) 데이터 유지, 외부 결제나 API와연 동동, get/post와 폼의 구성 또는 아약스, 근래에는 여러 오픈소스의 사용법 문서에 대한 독해 능력 등등 필요한게 많지 않나요? 

    고등학생에게 환경셋팅 다 된 상태에서 단순히 crud를 가르치면 한달이면 뒤집어쓸겁니다. 그러나 웹사이트를 만드는 건 다른문제죠.

    때문에 혼자 만든 포폴 1개가 엄청나게 많은 것을 암묵적으로 설명해줍니다. 특히 진짜로 상품을 완결 할수있는지 없는지에 대해서 아주 연관성이 큰 척도가됩니다.


    알고리즘도 마찬가지. 

    알고리즘의 풀이도 실제 개발능력에 대해서 엄청나게 많은것을 암묵적으로 설명해줍니다. 특히 상품화 능력처럼 기업이 쉽게 가르칠수 있는게 아닌, 논리적 문제 해결력이라는 부분에 대해서 엄첨나게 많은 것을 설명해줍니다.

    이걸 허수 지원자를 거르는데 쓰던지, 1000명중 30명의 면접대상자를 걸러내는데 쓰는지에 따라 어떤 문제를 내고 어떻게 채점할지는 다르겠습니다.

    그러나, 포폴을 대체할수있는게 마땅히 없는것 처럼, 알고리즘 시험 결과가 설명해주는걸 대체 할 수 있는건 마땅히 없는것 같습니다. 


    그리고 궁금한점에 답하자면, 알고리즘을 잘한다고 당장 두루두루 잘하는것은 아니라고 봅니다.

    그러나, 동일하게 출발점에서 시작해서 연구 개발 시간 3달/6달을 준다면, 알고리즘을 잘하는 사람이 두루두루 잘하는 결과로 귀결됩니다. 같은 분량의 텍스트를 보고, 같은 프레임워크나 os의 개념도를 보고, 같은 시간을 삽질해도, 더 많은 성과를 얻는게 보통입니다. 

    통찰력과 배경지식, 사고관의 차이에서 오는 성과의 차이가 너무나도 큽니다.


    때문에 1,2년 프리랜서를 쓸꺼면 알고리즘 능력 같은건 아무래도 상관없지만, 

    회사에서 5년 10년을 일해주길 바라거나, 그에 상응하는 능력을 발휘해주길 바라면 확인 안할수가 없는거죠.

    결과적으로 돈 많이 주는 회사가 더 적극적으로 알고리즘 능력을 확인하게 됩니다.


    0
  • Fleet
    82
    2019-09-14 22:57:07 작성 2019-09-14 22:58:24 수정됨

    개발을 잘한다는 의미가 광범위해서 정리가 필요할듯 하네요.


    단순히 남들보다 API메서드 하나 더안다

    코드를 성능을 기반으로 효율적으로 짠다

    간단하고 쉽게짠다

    개발속도가 빠르다

    코딩양이 많다


    개발잘한다는 의미가 위 중 하나만 부합되도 잘한다고 생각하기 나름이지요

    0
  • 민트초코좋아요
    8
    2019-09-15 12:40:22

    1. 기업 입장에서 쳐내기 쉽습니다.

    2. 예전처럼 포트폴리오나, 서류 스펙 위주로 채용할 때보다 훨씬 잘 걸러낼 수 있습니다.

    3. 알고리듬 잘하면 최소한 평타는 칩니다.


    많은 사람들이 알고리듬에 대해 오해하는 게 있습니다.

    기업도 그렇고, 경시대회도 그렇고, 온라인 컨테스트도 그렇지만, 어느 곳에서도 "새로운 알고리듬 개발"을 원하지 않습니다. 이건 학계의 범위입니다.(Mo's algorithm의 Mo 같은 예외도 있다고 듣긴 했지만)

    삼성 SW공채에 필요한 건 기껏해야 완전 탐색, 단순 그래프 순회, 구현이 끝입니다. 솔직히 이정도 내용은 1주일 바싹 공부하면 모두 공부할 수 있는 내용입니다.

    중요한 건, "기업에서 풀려고 하는 문제에 현재 우리가 가진 지식으로 어떻게 적용할 수 있는가"의 능력을 평가하는 거라고 봅니다.


    많은 CS전공자들이 대학에서 알고리듬 수업을 듣고, 다들 이해했다고 착각합니다.

    그런데 아주 간단한 문제만 던져 줘도 못 푸는 경우가 정말 많습니다.

    왜냐하면, 수업 때 들은 문제만 달달 외웠을 뿐, 새로운 문제가 주어졌을 때 자신의 지식을 활용하는 방법을 체득하지 못했기 때문입니다.


    추가로, 제가 생각하는 알고리듬 잘하는 사람이 더 낫다고 보는 이유는 많은 코드를 작성해 본 경험이 있기 때문입니다.

    특히 Competitive Programming을 많이 하신 분들은, 자연스럽게 구현 능력이 매우 높아지고, 프로그램의 효율성을 빠르게 파악할 수 있습니다.

    자신이 쓰는 언어의 다양한 라이브러리를 활용하는 데 익숙해지고, 입출력을 비롯한 로우레벨의 지식도 비록 조금이지만 늘어납니다.

    하지만 무엇보다도 중요한 능력은 디버깅이라고 봅니다. 주위에 알고리듬 잘하는 분 계시면 코드 짜는 걸 지켜보세요. 디버깅 속도와 정확성이 평범한 분들보다 훨씬 뛰어날 겁니다.


    끝으로, 저도 알고리듬 능력만이 SW개발의 전부가 아니라는 데에 동의합니다. 사실 작은 부분입니다.

    하지만 SW 신입 입장에서, 실력을 키우기에 가장 좋은 방법이 아닐까요?

    경력 없는 취준생이 대규모 프로젝트를 해봤을 리도 없고, 소규모 프로젝트도 졸작 정도가 끝일 텐데요.

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