이런 질문도 괜찮나요? 현업과 PS의 관계

  • chobo
    chobo

    안녕하세요?

    과거에 algospot에 가입했었는데, 아이디를 까먹어서..
    새로 가입하여 질문을 하나 남겨봅니다.

    간단히 제 소개를 하자면, 과거 학부시절에 ACM 관련되어서 공부도 하고 기웃기웃살다가 작년 초에 취업을 하여 2년째 현업에 종사하고 있는 개발자입니다. 현재 특정 분야의 알고리즘을 개발하고 있구요. 임베디드부터 데스크탑 앱..웹까지 이것저것 종횡무진 정신없이 살고 있습니다. 여담이지만, JMK님과 함께 OS수업을 들은 적이 있습니다. ㅎ 저는 모르실테지만요 :)

    사실 프로그래밍에 대한 욕심이 좀 과도해서
    개발 방법론 부터 다양한 언어까지 이것저것 기웃기웃 하고 있습니다만, 현업의 일에 치우치다보니, 과거에 관심있던 알고리즘 문제풀이 같은 것은 시간을 못내고 있습니다. 그러다 다시금 취미생활로 공부해보면 어떨까? 싶어서, 연습을 다시 시작하기 전에 이것저것 국내외 사이트에서 정보를 얻고 있습니다. (JMBook은 기대하고 있습니다.)

    제가 길지는 않지만, 회사에서 일하면서 느낀게, 과연 컴퓨터 사이언스적인 PS를 어디에 이용해 먹을 수 있을까? 고민을 해 보았는데 딱히 답이 안나왔다는 것입니다. 차라리 확률통계나 선형대수, 미분방정식 같은 수학들이 제가 하는 분야의 알고리즘을 개발하는데 있어서 훨씬 많이 사용되고 있구요.

    제가 PS를 그리 오랫동안 공부를 못하여, 짧은 지식이기 때문에 PS를 현업에 적용할 마땅한 방안을 찾지 못하였을 수도 있을것 같아서 이렇게 질문을 드려봅니다. 같이 일하시는 많은 분들이 CS가 전공이 아니어서, 물어볼 곳도 마땅치 않아서요.

    혹시 현업에 종사하고 계신분 중에, PS를 함으로써 현업에서 얻는 이득 같은것을 간략히나마 설명해 주실 분이 있으실까요? 논리력이나 문제해결능력 같은 추상적인 능력의 향상보다, 어떠한 실제적인 경험 같은게 있으면 꼭 좀 듣고 싶습니다...

    갑자기 이런 질문을 던지고 가서 죄송합니다.

    답변 부탁드리겠습니다.
    감사합니다.

    PS) 사실 현업이라는 것도 워낙 방대하지만, 조금이나마 어떠한 분야가 되었든 PS를 연습 한 사람과, PS를 안한 사람의 차이를 느낄 수 있는 사건이나 이야기를 들어보고 싶습니다.


    11년 전
12개의 댓글이 있습니다.
  • kcm1700
    kcm1700

    우선 저는 아직 일을 많이 해보진 않아서 그다지 많은 경험은 없다는 것을 이야기하고 싶습니다. 보편적으로 타당한 이야기라기보다는 제가 회사에 있으면서 느낀 것들을 간단히 적어보려고 합니다.
    먼저는 기본 코딩 스킬의 향상을 이야기하고 싶어요. 복잡해 보이는 문제도 잘 쪼개서 간결하고 명확하게 코드로 써내는 훈련이 되더군요. 같이 짜는 코드들 보면 간단한 로직으로 해결될 수 있는 것에 쓸 데 없는 루틴이 이것 저것 복잡하게 들어가는 식으로 코딩하는 경우도 많이 봤어요. 이런 것들에서 버그를 발견하고 깔끔하게 줄이는 것도 종종 했었죠. 아직도 많이 부족하지만 기본 스킬 향상에 도움을 주는 것은 사실인 것 같아요. 특히 탑코더를 할 때 많이 늘었어요.
    직접적으로 PS 풀듯이 도움받은 것은 다음의 문제를 풀 때가 기억나네요. 짝수 픽셀로 align된 채워진 사각형과 align되지 않은 임의의 위치에 직선을 빠르게 그릴 수 있는 라이브러리가 있는데, align되지 않은 사각형(겹칠 수 있음)들의 합집합을 그리려고 했습니다. 꽤 사각형이 많을 수 있고 실시간 처리가 필요했어서 인덱스 트리 써서 했던 기억이 나네요.
    러시아 페인트공 알고리즘을 사용하는 것도 자제하는 효과도 본 것 같아요.
    문제를 모델링하는 능력도 길러진다고 생각해요. PS 쪽 문제들에는 거의 각색이라는 것이 들어있어서 문제 상황을 읽고, 적절한 자료구조로 만들고, 적절한 추상화를 하여 알고 있는 방법으로 문제를 푸는 훈련을 하게 되는데, 이것이 현실에서도 별로 다르지 않은 것 같아요.
    그리고 다른 얘기지만 논리력이나 문제해결능력 같은 것은 추상적인 능력이라기보다는 실질적인 능력이라고 생각해요. 코드 한 줄 한 줄은 증명 하듯이 써야한다고 생각하고 있어요. 논리적으로 코드를 써내는 것은 중요하다고 생각해요. 글 쓰는 것도 되는대로 적어버리면 의도 파악하기도 힘들어지고 알아보기 힘든 것처럼, 코드도 그런 경우를 꽤 봤기 때문에 그런 생각을 하게 되었어요.
    두서 없이 마구 적어놓았더니 알아보기 어렵게 되어버렸네요. 다른 분들께서 좋은 댓글 달아주실 거라고 기대합니다.


    11년 전 link
  • chobo
    chobo

    안녕하세요? 귀찮으셨을텐데, 장문의 답변 감사드립니다. 실제적인 경험도 감사드리구요. :) PS가 여러가지 현실의 문제에 있어서 CS적인 빠른 데이터 추상화와 프로그래밍 스킬을 올려준다는 것은 참 좋은 장점이라고 생각됩니다.

    다시 제 글을 읽어보니, 제 질문이 너무 길고 추상적인 면이 있는거 같네요. 짧게 요약하자면,

    "PS에 익숙한 사람"과 "PS를 경험하지 않은 사람"의 현업에서의 실력차이가 느껴지는 경험을 하신 분이 계신가요?

    입니다. 모든 사람들이 그렇듯, 인생은 짧고 공부할 것은 굉장히 많다고 생각합니다. 저도 지금 PS 외에도 할게 많은데..다시 취미 삼아서라도 해볼까 하는 그저 단순한 욕구 때문에 이렇게 고민 중이구요. 그리고 그 고민의 본질은, 제가 본 많은 경력의 분들이 PS는 거의 관심도 없으시지만..정말 실력이 출중한 분들이 많았거든요.(아닌 분들도 많습니다만) 그래서 이렇게 질문을 올린 이유는, PS가 지금 제 현실에서 저의 실력 향상에 부합될지, 다른 분들의 경험을 통해 느끼고 싶어서 였습니다.

    갑자기 불쑥 나타나 뜬금없는 질문을 날려서 죄송합니다. 다른 분들의 더 많은 사례를 듣고 도움을 얻었으면 좋겠습니다. 감사합니다. 언제나 행복한 하루 되세요.


    11년 전 link
  • JongMan
    JongMan

    물론 문제풀이하는게 좋은 프로그래머의 필수조건일 리 없습니다. ^^; 리누스 아저씨가 탑코더 할리 없지요. ㅎㅎ 좋은 개발자가 되기 위해서 필요한 것은 그 분야가 무엇이 되었건 그걸 깊게 파고들고 열심히 공부하는 자세인 것 같습니다. 하지만 문제 해결을 공부하는 것, 그 중에서도 프로그래밍 대회에 참가하는 것은 많은 선택지 중 비교적 가격대 성능비가 좋은 방법이라고 생각합니다. :-) 프로그래밍을 공부하면서 객관적이고 정확한 피드백을 받고, 다른 사람들과 자신의 코드를 비교할 수 있는 경험은 얼마 되지 않기 때문이지요.
    PS에서 공부하는 주제들을 실질적으로 써먹은 경험은 글쎄요.. 저는 프로덕션 코드보다 리서치 코드를 많이 쓰는 개발자라 그런지, 도움이 된 적이 많습니다. 최적화 알고리즘이나 시뮬레이션 구현할 때 도움이 된 일도 많고요. Aho-corasick 문자열 검색 알고리즘이나 트라이 등의 자료 구조도 유용하게 쓴 적이 있고.. 복잡한 알고리즘 배워서 구현하는 것도 남보다 더 빠르지 않을까 생각합니다. 물론 이런 직접적인 활용은 분야에 따라 있을 수도 있고, 없을 수도 있겠지요. ~_~
    저 또한 kcm님이 위에서 말한 것처럼 코딩 스킬, 모델링 능력, 논리력 등은 추상적이고 모호한 능력이 아니라 구체적이고 정말 너무너무 중요한 능력이라고 생각합니다. 문제 해결을 공부하면서 얻을 수 있는 가장 중요한 능력이지요.
    그리고 뭐, 어차피 진짜 좋은 개발자가 되려면.. 다 공부하면 됩니다. ;)


    11년 전 link
  • chobo
    chobo

    안녕하세요? 답변 감사드립니다. 저도 짧은 생각이지만, 같은 의견입니다. '가성비'가 가장 좋을지는 아직 의문이기는 하지만, 나름 객관적인 평가기준과 검증된 방법에 있어서는 확실히 효율적인 학습 방법이라고 생각합니다.

    저도 연구소에서 리서치 코드를 작성하는지라, 말씀들이 많은 도움이 됩니다. 그리 복잡한 알고리즘들은 아니지만, 논문과 특허를 가지고 많이 노는데, 말씀하신 것 처럼, 구현에 있어서 많은 도움이 되리라 생각합니다. 그래서 다시 PS를 시간을 내어 풀어볼까 했던 것이었구요.

    그런데 거기에 더해 특정 연산 아키텍쳐(DSP, GPU, FPGA 등)에 대한 최적화와 응용 Application 개발 까지 하려니 정말 시간이 모자르네요. 문제는 그렇다보니, PS까지 공부하기엔 벅찬 면도 있고, 과연 나에게 지금 PS같은 공부가 필요할까 하는 의문도 좀 들구요. 개인적인 판단이지만, 코딩 스킬이나 논리력 등이 부족하다는 느낌은 아직까지 못 가져본거 같습니다. 물론 다 공부하면 좋겠지만..역시나 모든건 '가성비'가 아닐까 싶네요.

    답변 감사합니다. 판단을 내리는데 많은 참고를 하겠습니다. 아마 어떻게든 시간을 쪼개고 쪼개어, PS를 다시 공부 해보는 것으로 기울지 않을까 싶습니다. 그럼 행복한 하루 되세요.


    11년 전 link
  • Being
    Being

    훈훈하네요. >_<


    11년 전 link
  • Being
    Being

    논리력 부분에 있어서는, 코드를 쓰는 본인은 잘 못느끼는 경우가 많은데.. 그 코드를 읽는 사람의 입장에서 보면 명확하게 드러나는 경우가 많은 것 같습니다. 같은 동작을 하는 코드를 더 짧게 한다고 할까요..


    11년 전 link
  • JongMan
    JongMan

    제 생각에는 필요한가 필요하지 않은가가 아니라, 무엇이 더 급한가의 문제인 것 같습니다. 더 이상 늘지 않을 정도로 완벽한 사람이 어딨겠습니까. 당연히 더 공부하고 더 잘하면 좋은 것인데, 지금은 더 급하고 당장 큰 영향을 미치는 것이 있는 거죠. 저도 아직 스스로에게 부족한 면이 많다고 느끼고, 다시 문제 해결 공부도 하고 탑코더도 하고 싶지만 업무 관련 공부가 너무 많다 보니... 그리고 책때문에.. 못하고 있지요. ^^


    11년 전 link
  • JongMan
    JongMan

    아 그리고.. 그 OS수업 저는 거의 안들어갔던거 같은데.. ^^; 반갑습니다. -_-;


    11년 전 link
  • chobo
    chobo

    Being님/ 답변 감사합니다. 저도 솔직히 말하자면, 제 코드를 공개하기 부끄러울 정도라서..확실히 다시 생각해보니 탑코더 같은게 저에게 많은 도움이 되겠네요. 사람들이 제가 만든 결과물에만 평가를 하고 소스에 대한 평가는 거의 없다보니, 제 스스로 논리적이라고 평가하기에는 힘들 것 같습니다.

    JongMan님/ 답변 감사드립니다. 네, 제가 단어 선택을 좀 잘못 한 감이 있습니다. 필요하지 않다기보다, 현재 우선순위 상에서 급하지 않다는게 맞는 표현일 것 같네요. 요즘은, 대충대충 듣던 수학 수업들이 너무도 고맙게 생각되는 터라 이것저것 생각이 많아지는가 봅니다.
    OS수업은..저도 JongMan님을 잘 본적은 없는거 같네요. =ㅂ= Pintos 개발할때, 강의 보조용 홈페이지 게시판에서 가끔 본 적이 있는거 같습니다. 저도 대충대충 듣고, 시험 점수만 따고 빠진지라..뭐라 할말은 없습니다.
    다시 한번, 깊은 공부에서 나오는 말씀에, 도움을 많이 받고 갑니다. 감사합니다.


    11년 전 link
  • Xgate
    Xgate

    다들 고수분들이 답글 다셨는데 허접한 실력이지만 답글달아봅니다.

    먼저 현업에서 PS를 하는사람이 뛰어나다는 것을 검증하는건 어려운 문제같습니다. "저 사람 실력이 좋은데"라고 평판이 났어도 PS를 해서 그런건지 고생(?)을 많이 해서 그런건지 알수가 없으니까요. (어디 통계자료라도 있으면 좋으련만 -_-;) 다만, 저같은 경우에는 예외상황이나 오류를 찾아내는 능력에 큰 도움이 되는것같습니다. 문제를 풀다가 "오답"을 맞으면 왜 오답이 나오는지 특이한 입력을 생각하게 되니까요. 실제로 팀원을 도와주는 일도 생기더군요. 코딩을 할 때도 더 빠르게 효과적으로 할 수 있는 방법을 습관적으로 생각하게 된것도 장점이라고 생각해요. 하지만 알고리즘 기법을 현업에서 적용하는 경우는 거의 못본 것같네요. 그래도 저는 PS세계에 발을 담그기로 했습니다.

    사실 이건 선택의 문제같은데요. 저도 이걸 공부해야 하나 고민을 많이 했습니다. 포기를 할까 공부를 할까. 생각하다가 포기하기에는 너무 아쉬웠습니다. 대학때 대회에 나간 경험도 그렇고.. 그래서 올해는 알고리즘을 제대로 공부하기로 마음 먹었습니다. 생각해보니 1년동안 공부하면 꽤 많은 것을 얻을 수 있겠더라고요. 어느정도 수준이 되면 코드잼같은 대회에도 매년 참여할 수 있구요. 곧 있으면 무려 JMBook도 나오고.. 결국 1년이라는 시간동안 튼튼히 공부해두면 각종 기법들을 체화 시킬 수 있겠다는 생각을 했습니다. 내년에는 다른 공부를 병행할 수 있겠지요. 결론적으로, 저에게 던진 질문은 1년이라는 시간을 알고리즘 공부에 투자하기에 아까운가? 였습니다. 대답은 No! 였구요.

    주저리 주저리 말이 길어졌네요 ~_~ 그저 도움이 되었길 바래봅니다.


    11년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    안녕하세요. 저는 4년 정도 현업으로 게임을 만들고 있고, 그동안 느낀 것들을 대충 써보겠습니다. PS를 열심히 해서 특별히 현업에서 도움된 게 있다면, 단연 "남의 코드를 빨리 읽고 빨리 이해하는 능력"이 길러진 것입니다. 이건 현업에서 매우매우 중요한 부분인데, 실제로 일하다보면 딱히 이 부분을 훈련하기가 힘들지요. 남의 코드를 이해해야하는 상황이 그리 자주 오는 것도 아니고, 일정에 쫓기다보면 "내 꺼나 잘하자."는 마음도 생기죠. 어디서 버그가 터져도 결자해지하라는 식으로 철수가 짠 코드는 철수가, 영희가 짠 코드는 영희가, 명박이가 짠 코드는 명박이가 보게 되고, 다른 사람 코드 분석할 일이 별로 없어요. (물론 일에 따라 차이는 있겠지만요...)
    그런데 금방 읽고 금방 이해할 수 있게 되면, 장점이 정말 많아요. 새로운 팀에 가서 적응하기도 쉽고, 다른 사람이 만든 부분을 수정하기도 쉽고, 새로운 미들웨어를 도입하기도 쉽고, 괜히 복잡하게 짠 부분을 쉽게 풀어낼 수도 있고... 특히 새로운 환경에 가서도 빨리 적응한다는 것은 축구로 치면 멀티플레이어가 되는 거랑 비슷하다고 생각해요. 회사 입장에서는 어느 팀에 보내도 금방 적응해서 제 역할을 해주니까 좋아하고, 개인적으로는 어느 회사에 가도 금방 적응할 수 있다는 자신감이 있으니까 이직이나 해직이 두렵지 않게(?) 되고.......
    쓰다보니 또 생각나는 게 있군요. 중학교 교과서에도 나오는 이야기인데, 글짓기를 잘하려면 다독, 다작, 다상을 해야 한다고 하죠. 프로그래밍도 똑같지 않을까요? 남의 코드를 많이 읽고, 스스로 많이 만들어 보고, 또 많이 생각(상상)하고... 근데 PS만큼 양질의 다독을 할 수 있는 방법이 없으니, 저는 PS를 적극 추천하겠습니다.
    긴 글 읽어 주셔서 감사합니다. ~_~


    11년 전 link
  • Signin
    Signin

    좋은 글 / 댓글 감사합니다~!


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.