현업 엔지니어의 시각에서 본알고리즘 공부의 장점과 단점
스페이스바를 눌러 진행하시면 됩니다.
류원하 (Being)
넥슨GT 창조기술팀
Full-stack Dev & Professional Problem Solver
누구시길래?
-
알고리즘
-
알고스팟 악플러 운영진
-
KOI 고등부 금상, ACM-ICPC 서울 사이트 우승
-
각종 생계형 대회 수상
-
프로그래밍 대회 준비 기간 ≅ 7년
-
현업 SW 엔지니어
-
스타트업, 병특, 뉴욕 리모트, 실리콘 밸리, 넥슨GT
-
자세한 내용은 인터뷰에
뭐하시길래?
요새는 이런 문제들을 풉니다 혹은 풀 예정입니다
-
긴급한 버그 잡으러 출동
-
로그 분석 파이프라인 구축
-
당장의 서버 성능 개선
-
중장기적인 서버 아키텍처 디자인 통신 레이어부터 DB까지
-
각종 프로젝트의 기술적 의사결정에 참여
-
생산성 저하 등을 야기하는 기술 부채 탕감
-
어떻게 하면 좋은 사람을 더 많이 데려올 수 있을지 고민
현업 엔지니어의 시각에서 본알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점
프로그래밍 대회 참가 ≅ 알고리즘 공부
대회 준비를 정말 많이 해 본 현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점
제 경력이 좀 깁니다
고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업 엔지니어의 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점
학부생들이 온다고 알고 왔습니다
고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업 엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 장점과 단점
회사나 단체의 입장을 대변하는 거 아닙니다
고민 많은 학부생들에게 전하는 대회 준비를 정말 많이 해 본 현업 엔지니어의 지극히 주관적인 시각에서 본 프로그래밍 대회 참가 준비를 중심으로 한 알고리즘 공부의 귀에 걸면 귀걸이고 코에 걸면 코걸이인 장점과 단점
이런 톡은 대충 사기쳐도 아무도 모릅니다
미래를 상상해 봅시다
알고리즘 공부를 열심히 해서 원하던 회사에 취직했습니다.
당신은 좋은 엔지니어가 될 것입니다. 왜냐하면,
1. 반복적인 실패의 경험
-
문제를 풀면서 틀리는 건 아주 일상적
-
내가 틀릴 리 없어 → 아 내가 멍청했구나
-
디버깅: 오류가 발생했을 때 추적하는 연습
2. 알고리즘 문제 해결은 복합적인 과정
자연어로 된 문제를,
수학적으로추상적으로 모델링해서,
해법을 디자인하고,
해법의 성능과 타당성을 검증하고,
프로그래밍 언어로 구현하고,
???
PROFIT!은 꿈이고 WA RTE TLE 틀린다
틀린 이유를 찾고 적당히 돌아가 반복한다
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.)
현실에선 혼자 일할 순 없습니다. 그런데,
-
협업 경험도 음슴
-
남에게 특히 프로그래머가 아닌 사람에게 지금 겪는 문제를 처음부터 설명해 본 적이 음슴
-
복잡한 코드나 설계를 경험해 본 적도 음슴
-
남의 좋은 코드를 읽어본 적도 음슴
-
남의 코드를 활용해 본 적도 음슴
-
남이 읽을 것을 전제로 코딩해 본 경험도 음슴
-
항상 시간에 쫓긴 구현만 했지 똥코드 발사
잠깐: 파인만 알고리즘
Write down the problem.
Think real hard.
Write down the solution.
2. 실제 문제는 알고리즘 문제와 많이 다름
-
기획서 ≠ 문제 디스크립션
-
아예 잘 정의되지 않은 문제가 훨씬 많음
-
답이 하나인 경우는 드물다
-
알고리즘 문제의 솔루션은 보통 하나지만
-
엔지니어링 문제는 하나가 아님
-
답이 하나뿐인 문제?
-
억지로 알고리즘 문제로 바꾸다보면 오버엔지니어링
-
Step 1: 문제를 적는다.
3. 쌓은 지식 대다수는 쓸모없음
-
Maximum flow? ㅋㅋ
-
DP? ㅋㅋㅋ
-
Backtracking? ㅋㅋㅋㅋ
-
KMP? ㅋㅋㅋㅋㅋ
-
DFS? 어 이 정도는 짤 수도 있겠다
-
기하? 게임 프로그래머라면 어느 정도는
그래서 어쩌라고요?
-
뭔가를 공부한다는 건 일단 훌륭한 것 (짝짝짝)
-
재미없는 걸 공부하는 건 고통스러움
-
재미없다면 다른 공부 하세요. 공부할 거 많음 퇴장하셔도 됩니다
-
재미있다면 계속 하세요
-
사실 현업에서 마주할 어려움은 미리 준비하기 어려움, 알고만 있으시라
-
그래도 좀 더 잘 하고 싶다면 다른 분야의 공부도 하면 됨
-
스킬 랭크 (x) INT 스탯 (o)
-
최적화 문제 인생은 NP입니다 여러분
인접한 가지로 뻗어나가기
-
Modern C++
-
마라톤 매치
-
성능 최적화 → 하드웨어, 아키텍처, 컴파일러, ...
-
수학
회고하기
-
남의 코드를 보고 공부할 것
-
내 코드를 다시 써 볼 것
-
글로 문제와 풀이를 정리해볼 것
딴짓하기
-
동아리에서 같이 연습할 환경을 만들고 싶다 → 슬랙 봇/웹 앱 개발
-
공부한 히스토리를 관리하고 싶다 → git
-
에디터 하나는 알아야 하지 않나 → vim
-
기하 문제 시각화해보기 → 수많은 도구들 d3.js, MetaPost, matplotlib, ...
-
알고스팟에 기여하고 싶다 → django github/jongman/algospot
-
채점 시스템을 만들어보고 싶다 → 시스템 프로그래밍
좀 더 성장하고 싶다면?
We're hiring! (...)
0
현업 엔지니어의 시각에서 본알고리즘 공부의 장점과 단점
스페이스바를 눌러 진행하시면 됩니다.
류원하 (Being)
넥슨GT 창조기술팀
Full-stack Dev & Professional Problem Solver