현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

44
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점 스페이스바를 눌러 진행하시면 됩니다. 류원하 (Being) 넥슨GT 창조기술팀 Full-stack Dev & Professional Problem Solver

Upload: wonha-ryu

Post on 07-Jan-2017

324 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

현업 엔지니어의 시각에서 본알고리즘 공부의 장점과 단점

스페이스바를 눌러 진행하시면 됩니다.

류원하 (Being)

넥슨GT 창조기술팀

Full-stack Dev & Professional Problem Solver

Page 2: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

오늘의 발표자는 누굴까요?

단칼빙

Page 3: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

누구시길래?

알고리즘

알고스팟 악플러 운영진

KOI 고등부 금상, ACM-ICPC 서울 사이트 우승

각종 생계형 대회 수상

프로그래밍 대회 준비 기간 ≅ 7년

현업 SW 엔지니어

스타트업, 병특, 뉴욕 리모트, 실리콘 밸리, 넥슨GT

자세한 내용은 인터뷰에

Page 4: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

뭐하시길래?요새는 이런 문제들을 풉니다 혹은 풀 예정입니다

긴급한 버그 잡으러 출동

로그 분석 파이프라인 구축

당장의 서버 성능 개선

중장기적인 서버 아키텍처 디자인 통신 레이어부터 DB까지

각종 프로젝트의 기술적 의사결정에 참여

생산성 저하 등을 야기하는 기술 부채 탕감

어떻게 하면 좋은 사람을 더 많이 데려올 수 있을지 고민

Page 5: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

시작하기 전에

Page 6: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

현업 엔지니어의 시각에서 본알고리즘 공부의 장점과 단점

Page 7: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를중심으로 한 알고리즘 공부의 장점과 단점

프로그래밍 대회 참가 ≅ 알고리즘 공부

Page 8: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

대회 준비를 정말 많이 해 본 현업 엔지니어의 시각에서 본 프로그래밍대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점

제 경력이 좀 깁니다

Page 9: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한

알고리즘 공부의 장점과 단점

학부생들이 온다고 알고 왔습니다

Page 10: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가

준비를 중심으로 한 알고리즘 공부의 장점과 단점

회사나 단체의 입장을 대변하는 거 아닙니다

Page 11: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가

준비를 중심으로 한 알고리즘 공부의 귀에 걸면 귀걸이고 코에 걸면코걸이인 장점과 단점

이런 톡은 대충 사기쳐도 아무도 모릅니다

Page 12: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

미래를 상상해 봅시다

알고리즘 공부를 열심히 해서 원하던 회사에 취직했습니다.

Page 13: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

당신은 좋은 엔지니어가 될 것입니다. 왜냐하면,

Page 14: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

1. 반복적인 실패의 경험

문제를 풀면서 틀리는 건 아주 일상적

내가 틀릴 리 없어 → 아 내가 멍청했구나

디버깅: 오류가 발생했을 때 추적하는 연습

Page 15: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

2. 알고리즘 문제 해결은 복합적인 과정

1. 자연어로 된 문제를,

2. 수학적으로추상적으로 모델링해서,

3. 해법을 디자인하고,

4. 해법의 성능과 타당성을 검증하고,

5. 프로그래밍 언어로 구현하고,

6. ???

7. PROFIT!은 꿈이고 WA RTE TLE 틀린다

8. 틀린 이유를 찾고 적당히 돌아가 반복한다

Page 16: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

2. 알고리즘 문제 해결은 복합적인 과정 (cont.)

글을 빠른 시간 안에 읽고 의도하는 바를 이해

모델링을 잘못 하면 문제를 못 풀 때도 있음을 이해

해법은 실행에 옮기기에 앞서 검토가 필요함을 이해

C++은 위험한 언어임을 이해

아무리 수련해도 인간은 같은 실수를 반복함을 이해 정상입니다

Page 17: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

3. 멘탈 수련

"[...] what does not kill me makes me stronger" - Friedrich Nietzsche

번역: "죽지만 않으면 됨 ㅇㅇ" - 니체

Page 18: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

3. 멘탈 수련 (cont.)

시나리오 A

다른 팀들은 다 푸는 문제를 우리만 못 풀고 있는데

틀릴 이유가 없는데

WA와 RTE가 번갈아 날아오고

남은 시간은 얼마 없는데

당연히 채점 큐는 밀렸고

팀원은 다른 문제 풀겠다고 키보드를 가져갔고

프린트된 코드는 눈에 들어오지도 않고

Page 19: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
Page 20: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

3. 멘탈 수련 (cont.)

시나리오 B

집에서 혼자 공부하며 문제를 풀었다

제출하니까 틀렸다는데 아무리 생각해도 틀릴 이유가 없다

다행히 데이터가 있어서 받아봤더니

딱 하나 틀린 케이스가 10만줄짜리다

Page 21: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
Page 22: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

3. 멘탈 수련 (cont.)

시나리오 C, D, ..

끝나고 갓갓들 코드를 봤더니

뭔 소린지 모르겠다

혹은, 나는 200줄인데 50줄에 짰다

혹은, 나는 타임 리밋 안에 간신히 들어왔는데 10ms에 풀었다

Page 23: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
Page 24: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

3. 멘탈 수련 (cont.)

프로그래밍은 멘탈 컨디션에 영향을 많이 받는 일

압박 상황에서도 집중해야 할 때 할 수 있어야 함

세상엔 나보다 똑똑한 사람들이 한바가지이지만,

그래도 굴하지 않고 내가 할 일을 내가 한다는 마음을 가져야 함

노-답이어도 포기하지 않고 끈질기게 물고 늘어질 줄 알아야 함 근성!

Page 25: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

4. 기타 훌륭한 마음가짐

문제 해결은 즐거운 일이구나!

오래도록 끙끙 앓던 문제를 푸는 건 더 즐거운 일이구나!

새로운 걸 배워 익히는 건 즐거운 일이구나!

여러 직관들

문제는 작게 쪼개면 풀기 쉽구나!

경계 조건은 정말 중요하구나!

세상 만사 다 NP구나! 인류는 망했구나!

Page 26: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

5. 지식은 거들 뿐

자료구조에 대한 깊은 이해

데이터의 양과 성능 사이의 관계에 대한 감

영어

Page 27: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

정리: 지식은 모르겠고 마음가짐에는 확실히 도움이 된다.

Page 28: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

그러나 한편,

Page 29: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

당장 회사에 가서 일하면 내가 이렇게 엉망진창인가 싶을 거예요. 왜냐하면,

Page 30: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

1. 그동안 배운 건 지나치게 자기중심적

당신의 첫 코드 리뷰는 아마도

번역

냥!이리 와보라냥!이게 뭐냥?냥?바보냥!이 똥덩어리 뭐냥!(냥리둥절)

Page 31: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

1. 그동안 배운 건 지나치게 자기중심적 (cont.)

현실에선 혼자 일할 순 없습니다. 그런데,

협업 경험도 음슴

남에게 특히 프로그래머가 아닌 사람에게 지금 겪는 문제를 처음부터 설명해 본 적이 음슴

복잡한 코드나 설계를 경험해 본 적도 음슴

남의 좋은 코드를 읽어본 적도 음슴

남의 코드를 활용해 본 적도 음슴

남이 읽을 것을 전제로 코딩해 본 경험도 음슴

항상 시간에 쫓긴 구현만 했지 똥코드 발사

Page 32: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

잠깐: 파인만 알고리즘

1. Write down the problem.

2. Think real hard.

3. Write down the solution.

Page 33: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

2. 실제 문제는 알고리즘 문제와 많이 다름

기획서 ≠ 문제 디스크립션

무엇이 가능하고 불가능한지 모르니까

아예 잘 정의되지 않은 문제가 훨씬 많음

답이 하나인 경우는 드물다

알고리즘 문제의 솔루션은 보통 하나지만

엔지니어링 문제는 하나가 아님

답이 하나뿐인 문제?

억지로 알고리즘 문제로 바꾸다보면 오버엔지니어링

Step 1: 문제를 적는다.

Page 34: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

3. 쌓은 지식 대다수는 쓸모없음

Maximum flow? ㅋㅋ

DP? ㅋㅋㅋ

Backtracking? ㅋㅋㅋㅋ

KMP? ㅋㅋㅋㅋㅋ

DFS? 어 이 정도는 짤 수도 있겠다

기하? 게임 프로그래머라면 어느 정도는

Page 35: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

정리: 실무랑 많이 다른 건 사실이긴 하다.

Page 36: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

그래서 어쩌라고요?

뭔가를 공부한다는 건 일단 훌륭한 것 (짝짝짝)

재미없는 걸 공부하는 건 고통스러움

재미없다면 다른 공부 하세요. 공부할 거 많음 퇴장하셔도 됩니다

재미있다면 계속 하세요

사실 현업에서 마주할 어려움은 미리 준비하기 어려움, 알고만 있으시라

그래도 좀 더 잘 하고 싶다면 다른 분야의 공부도 하면 됨

스킬 랭크 (x) INT 스탯 (o)

최적화 문제 인생은 NP입니다 여러분

Page 37: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

뭐가 최선인지는 나도 몰랑 :p

Page 38: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

EOD

들어주셔서 감사합니다

Page 39: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

조금만 더 현실적인 결론예시일 뿐

Page 40: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

인접한 가지로 뻗어나가기

Modern C++

새로운 언어 컨셉들 → 다른 언어 공부

마라톤 매치

성능 최적화 → 하드웨어, 아키텍처, 컴파일러, ...

수학

이산수학

선형대수학

확률과 통계

기계 학습

Page 41: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

회고하기

남의 코드를 보고 공부할 것

깔끔하고 명료한 스타일을 가진 사람들이 있음

내 코드를 다시 써 볼 것

재사용성

가독성

글로 문제와 풀이를 정리해볼 것

Page 42: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

딴짓하기

동아리에서 같이 연습할 환경을 만들고 싶다 → 슬랙 봇/웹 앱 개발

공부한 히스토리를 관리하고 싶다 → git

에디터 하나는 알아야 하지 않나 → vim

기하 문제 시각화해보기 → 수많은 도구들 d3.js, MetaPost, matplotlib, ...

알고스팟에 기여하고 싶다 → django github/jongman/algospot

채점 시스템을 만들어보고 싶다 → 시스템 프로그래밍

Page 43: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

좀 더 성장하고 싶다면?

We're hiring! (...)

Page 44: 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점

진짜 EOD

들어주셔서 감사합니다