SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
현업 엔지니어의 시각에서 본
알고리즘 공부의 장점과 단점
스페이스바를 눌러 진행하시면 됩니다.
류원하 (Being)
넥슨GT 창조기술팀
Full-stack Dev & Professional Problem Solver
오늘의 발표자는 누굴까요?
단칼빙
누구시길래?
알고리즘
알고스팟 악플러 운영진
KOI 고등부 금상, ACM-ICPC 서울 사이트 우승
각종 생계형 대회 수상
프로그래밍 대회 준비 기간 ≅ 7년
현업 SW 엔지니어
스타트업, 병특, 뉴욕 리모트, 실리콘 밸리, 넥슨GT
자세한 내용은 인터뷰에
뭐하시길래?
요새는 이런 문제들을 풉니다 혹은 풀 예정입니다
긴급한 버그 잡으러 출동
로그 분석 파이프라인 구축
당장의 서버 성능 개선
중장기적인 서버 아키텍처 디자인 통신 레이어부터 DB까지
각종 프로젝트의 기술적 의사결정에 참여
생산성 저하 등을 야기하는 기술 부채 탕감
어떻게 하면 좋은 사람을 더 많이 데려올 수 있을지 고민
시작하기 전에
현업 엔지니어의 시각에서 본
알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를
중심으로 한 알고리즘 공부의 장점과 단점
프로그래밍 대회 참가 ≅ 알고리즘 공부
대회 준비를 정말 많이 해 본 현업 엔지니어의 시각에서 본 프로그래밍
대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점
제 경력이 좀 깁니다
고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업
엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한
알고리즘 공부의 장점과 단점
학부생들이 온다고 알고 왔습니다
고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업
엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가
준비를 중심으로 한 알고리즘 공부의 장점과 단점
회사나 단체의 입장을 대변하는 거 아닙니다
고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업
엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가
준비를 중심으로 한 알고리즘 공부의 귀에 걸면 귀걸이고 코에 걸면
코걸이인 장점과 단점
이런 톡은 대충 사기쳐도 아무도 모릅니다
미래를 상상해 봅시다
알고리즘 공부를 열심히 해서 원하던 회사에 취직했습니다.
당신은 좋은 엔지니어가 될 것입니다. 왜냐하면,
1. 반복적인 실패의 경험
문제를 풀면서 틀리는 건 아주 일상적
내가 틀릴 리 없어 → 아 내가 멍청했구나
디버깅: 오류가 발생했을 때 추적하는 연습
2. 알고리즘 문제 해결은 복합적인 과정
1. 자연어로 된 문제를,
2. 수학적으로추상적으로
모델링해서,
3. 해법을 디자인하고,
4. 해법의 성능과 타당성을 검증하고,
5. 프로그래밍 언어로 구현하고,
6. ???
7. PROFIT!은 꿈이고 WA RTE TLE
틀린다
8. 틀린 이유를 찾고 적당히 돌아가 반복한다
2. 알고리즘 문제 해결은 복합적인 과정 (cont.)
글을 빠른 시간 안에 읽고 의도하는 바를 이해
모델링을 잘못 하면 문제를 못 풀 때도 있음을 이해
해법은 실행에 옮기기에 앞서 검토가 필요함을 이해
C++은 위험한 언어임을 이해
아무리 수련해도 인간은 같은 실수를 반복함을 이해 정상입니다
3. 멘탈 수련
"[...] what does not kill me makes me stronger" - Friedrich Nietzsche
번역: "죽지만 않으면 됨 ㅇㅇ" - 니체
3. 멘탈 수련 (cont.)
시나리오 A
다른 팀들은 다 푸는 문제를 우리만 못 풀고 있는데
틀릴 이유가 없는데
WA와 RTE가 번갈아 날아오고
남은 시간은 얼마 없는데
당연히 채점 큐는 밀렸고
팀원은 다른 문제 풀겠다고 키보드를 가져갔고
프린트된 코드는 눈에 들어오지도 않고
3. 멘탈 수련 (cont.)
시나리오 B
집에서 혼자 공부하며 문제를 풀었다
제출하니까 틀렸다는데 아무리 생각해도 틀릴 이유가 없다
다행히 데이터가 있어서 받아봤더니
딱 하나 틀린 케이스가 10만줄짜리다
3. 멘탈 수련 (cont.)
시나리오 C, D, ..
끝나고 갓갓들 코드를 봤더니
뭔 소린지 모르겠다
혹은, 나는 200줄인데 50줄에 짰다
혹은, 나는 타임 리밋 안에 간신히 들어왔는데 10ms에 풀었다
3. 멘탈 수련 (cont.)
프로그래밍은 멘탈 컨디션에 영향을 많이 받는 일
압박 상황에서도 집중해야 할 때 할 수 있어야 함
세상엔 나보다 똑똑한 사람들이 한바가지이지만,
그래도 굴하지 않고 내가 할 일을 내가 한다는 마음을 가져야 함
노-답이어도 포기하지 않고 끈질기게 물고 늘어질 줄 알아야 함 근성!
4. 기타 훌륭한 마음가짐
문제 해결은 즐거운 일이구나!
오래도록 끙끙 앓던 문제를 푸는 건 더 즐거운 일이구나!
새로운 걸 배워 익히는 건 즐거운 일이구나!
여러 직관들
문제는 작게 쪼개면 풀기 쉽구나!
경계 조건은 정말 중요하구나!
세상 만사 다 NP구나! 인류는 망했구나!
5. 지식은 거들 뿐
자료구조에 대한 깊은 이해
데이터의 양과 성능 사이의 관계에 대한 감
영어
정리: 지식은 모르겠고 마음가짐에는 확실히 도움이 된다.
그러나 한편,
당장 회사에 가서 일하면 내가 이렇게 엉망진창인가 싶을 거예요. 왜냐하면,
1. 그동안 배운 건 지나치게 자기중심적
당신의 첫 코드 리뷰는 아마도
번역
냥!
이리 와보라냥!
이게 뭐냥?
냥?
바보냥!
이 똥덩어리 뭐냥!
(냥리둥절)
1. 그동안 배운 건 지나치게 자기중심적 (cont.)
현실에선 혼자 일할 순 없습니다. 그런데,
협업 경험도 음슴
남에게 특히 프로그래머가 아닌 사람에게
지금 겪는 문제를 처음부터 설명해 본 적이 음슴
복잡한 코드나 설계를 경험해 본 적도 음슴
남의 좋은 코드를 읽어본 적도 음슴
남의 코드를 활용해 본 적도 음슴
남이 읽을 것을 전제로 코딩해 본 경험도 음슴
항상 시간에 쫓긴 구현만 했지 똥코드 발사
잠깐: 파인만 알고리즘
1. Write down the problem.
2. Think real hard.
3. Write down the solution.
2. 실제 문제는 알고리즘 문제와 많이 다름
기획서 ≠ 문제 디스크립션
무엇이 가능하고 불가능한지 모르니까
아예 잘 정의되지 않은 문제가 훨씬 많음
답이 하나인 경우는 드물다
알고리즘 문제의 솔루션은 보통 하나지만
엔지니어링 문제는 하나가 아님
답이 하나뿐인 문제?
억지로 알고리즘 문제로 바꾸다보면 오버엔지니어링
Step 1: 문제를 적는다.
3. 쌓은 지식 대다수는 쓸모없음
Maximum flow? ㅋㅋ
DP? ㅋㅋㅋ
Backtracking? ㅋㅋㅋㅋ
KMP? ㅋㅋㅋㅋㅋ
DFS? 어 이 정도는 짤 수도 있겠다
기하? 게임 프로그래머라면 어느 정도는
정리: 실무랑 많이 다른 건 사실이긴 하다.
그래서 어쩌라고요?
뭔가를 공부한다는 건 일단 훌륭한 것 (짝짝짝)
재미없는 걸 공부하는 건 고통스러움
재미없다면 다른 공부 하세요. 공부할 거 많음 퇴장하셔도 됩니다
재미있다면 계속 하세요
사실 현업에서 마주할 어려움은 미리 준비하기 어려움, 알고만 있으시라
그래도 좀 더 잘 하고 싶다면 다른 분야의 공부도 하면 됨
스킬 랭크 (x) INT 스탯 (o)
최적화 문제 인생은 NP입니다 여러분
뭐가 최선인지는 나도 몰랑 :p
EOD
들어주셔서 감사합니다
조금만 더 현실적인 결론
예시일 뿐
인접한 가지로 뻗어나가기
Modern C++
새로운 언어 컨셉들 → 다른 언어 공부
마라톤 매치
성능 최적화 → 하드웨어, 아키텍처, 컴파일러, ...
수학
이산수학
선형대수학
확률과 통계
기계 학습
회고하기
남의 코드를 보고 공부할 것
깔끔하고 명료한 스타일을 가진 사람들이 있음
내 코드를 다시 써 볼 것
재사용성
가독성
글로 문제와 풀이를 정리해볼 것
딴짓하기
동아리에서 같이 연습할 환경을 만들고 싶다 → 슬랙 봇/웹 앱 개발
공부한 히스토리를 관리하고 싶다 → git
에디터 하나는 알아야 하지 않나 → vim
기하 문제 시각화해보기 → 수많은 도구들 d3.js, MetaPost, matplotlib, ...
알고스팟에 기여하고 싶다 → django github/jongman/algospot
채점 시스템을 만들어보고 싶다 → 시스템 프로그래밍
좀 더 성장하고 싶다면?
We're hiring! (...)
진짜 EOD
들어주셔서 감사합니다

Weitere ähnliche Inhalte

Was ist angesagt?

프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
Chris Ohk
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
Changyol BAEK
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 

Was ist angesagt? (20)

프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기
 
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
새해 일어난 일
새해 일어난 일새해 일어난 일
새해 일어난 일
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
 
김동건, 게임팅커가 되자, 2015년 데브캣 스튜디오 워크샵
김동건, 게임팅커가 되자, 2015년 데브캣 스튜디오 워크샵김동건, 게임팅커가 되자, 2015년 데브캣 스튜디오 워크샵
김동건, 게임팅커가 되자, 2015년 데브캣 스튜디오 워크샵
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
 
딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
 
알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기알아두면 쓸데있는 신비한 딥러닝 이야기
알아두면 쓸데있는 신비한 딥러닝 이야기
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 

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

0917_서인고_멘토링_오원종_최종.pdf
0917_서인고_멘토링_오원종_최종.pdf0917_서인고_멘토링_오원종_최종.pdf
0917_서인고_멘토링_오원종_최종.pdf
WonJongOh1
 
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
해강
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf
ssuser597fbd
 
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
devCAT Studio, NEXON
 
2.성길제 좌충우돌 컴즈인 적응기
2.성길제  좌충우돌 컴즈인 적응기2.성길제  좌충우돌 컴즈인 적응기
2.성길제 좌충우돌 컴즈인 적응기
Jinho Jung
 
박병림 퍼즐주주개발을통해얻은5가지교훈 130424
박병림 퍼즐주주개발을통해얻은5가지교훈 130424박병림 퍼즐주주개발을통해얻은5가지교훈 130424
박병림 퍼즐주주개발을통해얻은5가지교훈 130424
Byunglim Park
 
10장 동기부여와훈련 경험
10장 동기부여와훈련 경험10장 동기부여와훈련 경험
10장 동기부여와훈련 경험
Jong Pil Won
 
Why problemsolving
Why problemsolvingWhy problemsolving
Why problemsolving
JunSeok Seo
 
Matrix에 오신 것을_환영합니다!
Matrix에 오신 것을_환영합니다!Matrix에 오신 것을_환영합니다!
Matrix에 오신 것을_환영합니다!
Lee_Cheol_Hyun
 
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
해강
 

Ähnlich wie 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점 (20)

0917_서인고_멘토링_오원종_최종.pdf
0917_서인고_멘토링_오원종_최종.pdf0917_서인고_멘토링_오원종_최종.pdf
0917_서인고_멘토링_오원종_최종.pdf
 
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
 
임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드
 
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)[14.06.28]  이 구역의 프로그래머는 나야(devrookie - 공개용)
[14.06.28] 이 구역의 프로그래머는 나야(devrookie - 공개용)
 
[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)[Dev rookie] Omnibus Me (2014.01.11)
[Dev rookie] Omnibus Me (2014.01.11)
 
위대한개발문화
위대한개발문화위대한개발문화
위대한개발문화
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf
 
해외에서 일하며 Ver 2
해외에서 일하며 Ver 2해외에서 일하며 Ver 2
해외에서 일하며 Ver 2
 
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
 
2.성길제 좌충우돌 컴즈인 적응기
2.성길제  좌충우돌 컴즈인 적응기2.성길제  좌충우돌 컴즈인 적응기
2.성길제 좌충우돌 컴즈인 적응기
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)
 
박병림 퍼즐주주개발을통해얻은5가지교훈 130424
박병림 퍼즐주주개발을통해얻은5가지교훈 130424박병림 퍼즐주주개발을통해얻은5가지교훈 130424
박병림 퍼즐주주개발을통해얻은5가지교훈 130424
 
10장 동기부여와훈련 경험
10장 동기부여와훈련 경험10장 동기부여와훈련 경험
10장 동기부여와훈련 경험
 
Why problemsolving
Why problemsolvingWhy problemsolving
Why problemsolving
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇
 
Matrix에 오신 것을_환영합니다!
Matrix에 오신 것을_환영합니다!Matrix에 오신 것을_환영합니다!
Matrix에 오신 것을_환영합니다!
 
개발자를 위한 공부의 필요성 0.5
개발자를 위한 공부의 필요성 0.5개발자를 위한 공부의 필요성 0.5
개발자를 위한 공부의 필요성 0.5
 
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
 
프로그래머의 뇌
프로그래머의 뇌프로그래머의 뇌
프로그래머의 뇌
 

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

  • 1. 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점 스페이스바를 눌러 진행하시면 됩니다. 류원하 (Being) 넥슨GT 창조기술팀 Full-stack Dev & Professional Problem Solver
  • 3. 누구시길래? 알고리즘 알고스팟 악플러 운영진 KOI 고등부 금상, ACM-ICPC 서울 사이트 우승 각종 생계형 대회 수상 프로그래밍 대회 준비 기간 ≅ 7년 현업 SW 엔지니어 스타트업, 병특, 뉴욕 리모트, 실리콘 밸리, 넥슨GT 자세한 내용은 인터뷰에
  • 4. 뭐하시길래? 요새는 이런 문제들을 풉니다 혹은 풀 예정입니다 긴급한 버그 잡으러 출동 로그 분석 파이프라인 구축 당장의 서버 성능 개선 중장기적인 서버 아키텍처 디자인 통신 레이어부터 DB까지 각종 프로젝트의 기술적 의사결정에 참여 생산성 저하 등을 야기하는 기술 부채 탕감 어떻게 하면 좋은 사람을 더 많이 데려올 수 있을지 고민
  • 6. 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
  • 7. 현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점 프로그래밍 대회 참가 ≅ 알고리즘 공부
  • 8. 대회 준비를 정말 많이 해 본 현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점 제 경력이 좀 깁니다
  • 9. 고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점 학부생들이 온다고 알고 왔습니다
  • 10. 고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업 엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점 회사나 단체의 입장을 대변하는 거 아닙니다
  • 11. 고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업 엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 귀에 걸면 귀걸이고 코에 걸면 코걸이인 장점과 단점 이런 톡은 대충 사기쳐도 아무도 모릅니다
  • 12. 미래를 상상해 봅시다 알고리즘 공부를 열심히 해서 원하던 회사에 취직했습니다.
  • 13. 당신은 좋은 엔지니어가 될 것입니다. 왜냐하면,
  • 14. 1. 반복적인 실패의 경험 문제를 풀면서 틀리는 건 아주 일상적 내가 틀릴 리 없어 → 아 내가 멍청했구나 디버깅: 오류가 발생했을 때 추적하는 연습
  • 15. 2. 알고리즘 문제 해결은 복합적인 과정 1. 자연어로 된 문제를, 2. 수학적으로추상적으로 모델링해서, 3. 해법을 디자인하고, 4. 해법의 성능과 타당성을 검증하고, 5. 프로그래밍 언어로 구현하고, 6. ??? 7. PROFIT!은 꿈이고 WA RTE TLE 틀린다 8. 틀린 이유를 찾고 적당히 돌아가 반복한다
  • 16. 2. 알고리즘 문제 해결은 복합적인 과정 (cont.) 글을 빠른 시간 안에 읽고 의도하는 바를 이해 모델링을 잘못 하면 문제를 못 풀 때도 있음을 이해 해법은 실행에 옮기기에 앞서 검토가 필요함을 이해 C++은 위험한 언어임을 이해 아무리 수련해도 인간은 같은 실수를 반복함을 이해 정상입니다
  • 17. 3. 멘탈 수련 "[...] what does not kill me makes me stronger" - Friedrich Nietzsche 번역: "죽지만 않으면 됨 ㅇㅇ" - 니체
  • 18. 3. 멘탈 수련 (cont.) 시나리오 A 다른 팀들은 다 푸는 문제를 우리만 못 풀고 있는데 틀릴 이유가 없는데 WA와 RTE가 번갈아 날아오고 남은 시간은 얼마 없는데 당연히 채점 큐는 밀렸고 팀원은 다른 문제 풀겠다고 키보드를 가져갔고 프린트된 코드는 눈에 들어오지도 않고
  • 19.
  • 20. 3. 멘탈 수련 (cont.) 시나리오 B 집에서 혼자 공부하며 문제를 풀었다 제출하니까 틀렸다는데 아무리 생각해도 틀릴 이유가 없다 다행히 데이터가 있어서 받아봤더니 딱 하나 틀린 케이스가 10만줄짜리다
  • 21.
  • 22. 3. 멘탈 수련 (cont.) 시나리오 C, D, .. 끝나고 갓갓들 코드를 봤더니 뭔 소린지 모르겠다 혹은, 나는 200줄인데 50줄에 짰다 혹은, 나는 타임 리밋 안에 간신히 들어왔는데 10ms에 풀었다
  • 23.
  • 24. 3. 멘탈 수련 (cont.) 프로그래밍은 멘탈 컨디션에 영향을 많이 받는 일 압박 상황에서도 집중해야 할 때 할 수 있어야 함 세상엔 나보다 똑똑한 사람들이 한바가지이지만, 그래도 굴하지 않고 내가 할 일을 내가 한다는 마음을 가져야 함 노-답이어도 포기하지 않고 끈질기게 물고 늘어질 줄 알아야 함 근성!
  • 25. 4. 기타 훌륭한 마음가짐 문제 해결은 즐거운 일이구나! 오래도록 끙끙 앓던 문제를 푸는 건 더 즐거운 일이구나! 새로운 걸 배워 익히는 건 즐거운 일이구나! 여러 직관들 문제는 작게 쪼개면 풀기 쉽구나! 경계 조건은 정말 중요하구나! 세상 만사 다 NP구나! 인류는 망했구나!
  • 26. 5. 지식은 거들 뿐 자료구조에 대한 깊은 이해 데이터의 양과 성능 사이의 관계에 대한 감 영어
  • 27. 정리: 지식은 모르겠고 마음가짐에는 확실히 도움이 된다.
  • 29. 당장 회사에 가서 일하면 내가 이렇게 엉망진창인가 싶을 거예요. 왜냐하면,
  • 30. 1. 그동안 배운 건 지나치게 자기중심적 당신의 첫 코드 리뷰는 아마도 번역 냥! 이리 와보라냥! 이게 뭐냥? 냥? 바보냥! 이 똥덩어리 뭐냥! (냥리둥절)
  • 31. 1. 그동안 배운 건 지나치게 자기중심적 (cont.) 현실에선 혼자 일할 순 없습니다. 그런데, 협업 경험도 음슴 남에게 특히 프로그래머가 아닌 사람에게 지금 겪는 문제를 처음부터 설명해 본 적이 음슴 복잡한 코드나 설계를 경험해 본 적도 음슴 남의 좋은 코드를 읽어본 적도 음슴 남의 코드를 활용해 본 적도 음슴 남이 읽을 것을 전제로 코딩해 본 경험도 음슴 항상 시간에 쫓긴 구현만 했지 똥코드 발사
  • 32. 잠깐: 파인만 알고리즘 1. Write down the problem. 2. Think real hard. 3. Write down the solution.
  • 33. 2. 실제 문제는 알고리즘 문제와 많이 다름 기획서 ≠ 문제 디스크립션 무엇이 가능하고 불가능한지 모르니까 아예 잘 정의되지 않은 문제가 훨씬 많음 답이 하나인 경우는 드물다 알고리즘 문제의 솔루션은 보통 하나지만 엔지니어링 문제는 하나가 아님 답이 하나뿐인 문제? 억지로 알고리즘 문제로 바꾸다보면 오버엔지니어링 Step 1: 문제를 적는다.
  • 34. 3. 쌓은 지식 대다수는 쓸모없음 Maximum flow? ㅋㅋ DP? ㅋㅋㅋ Backtracking? ㅋㅋㅋㅋ KMP? ㅋㅋㅋㅋㅋ DFS? 어 이 정도는 짤 수도 있겠다 기하? 게임 프로그래머라면 어느 정도는
  • 35. 정리: 실무랑 많이 다른 건 사실이긴 하다.
  • 36. 그래서 어쩌라고요? 뭔가를 공부한다는 건 일단 훌륭한 것 (짝짝짝) 재미없는 걸 공부하는 건 고통스러움 재미없다면 다른 공부 하세요. 공부할 거 많음 퇴장하셔도 됩니다 재미있다면 계속 하세요 사실 현업에서 마주할 어려움은 미리 준비하기 어려움, 알고만 있으시라 그래도 좀 더 잘 하고 싶다면 다른 분야의 공부도 하면 됨 스킬 랭크 (x) INT 스탯 (o) 최적화 문제 인생은 NP입니다 여러분
  • 39. 조금만 더 현실적인 결론 예시일 뿐
  • 40. 인접한 가지로 뻗어나가기 Modern C++ 새로운 언어 컨셉들 → 다른 언어 공부 마라톤 매치 성능 최적화 → 하드웨어, 아키텍처, 컴파일러, ... 수학 이산수학 선형대수학 확률과 통계 기계 학습
  • 41. 회고하기 남의 코드를 보고 공부할 것 깔끔하고 명료한 스타일을 가진 사람들이 있음 내 코드를 다시 써 볼 것 재사용성 가독성 글로 문제와 풀이를 정리해볼 것
  • 42. 딴짓하기 동아리에서 같이 연습할 환경을 만들고 싶다 → 슬랙 봇/웹 앱 개발 공부한 히스토리를 관리하고 싶다 → git 에디터 하나는 알아야 하지 않나 → vim 기하 문제 시각화해보기 → 수많은 도구들 d3.js, MetaPost, matplotlib, ... 알고스팟에 기여하고 싶다 → django github/jongman/algospot 채점 시스템을 만들어보고 싶다 → 시스템 프로그래밍
  • 43. 좀 더 성장하고 싶다면? We're hiring! (...)