SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
현업 엔지니어의 시각에서 본
알고리즘 공부의 장점과 단점
스페이스바를 눌러 진행하시면 됩니다.
류원하 (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
들어주셔서 감사합니다

Contenu connexe

Tendances

손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.Kwangsung Ha
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵Javajigi Jaesung
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례Hyung Lee
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
나의 이직 이야기
나의 이직 이야기나의 이직 이야기
나의 이직 이야기종립 이
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018Taehoon Kim
 
[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법Sehyeon Nam
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들Yu Yongwoo
 
프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요Chris Ohk
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기Changyol BAEK
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 

Tendances (20)

손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
나의 이직 이야기
나의 이직 이야기나의 이직 이야기
나의 이직 이야기
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
 
[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
 
프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 

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

0917_서인고_멘토링_오원종_최종.pdf
0917_서인고_멘토링_오원종_최종.pdf0917_서인고_멘토링_오원종_최종.pdf
0917_서인고_멘토링_오원종_최종.pdfWonJongOh1
 
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!Startlink
 
임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드임태현, 프로그래머 생존 가이드
임태현, 프로그래머 생존 가이드태현 임
 
[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 발표 자료seungdols
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdfssuser597fbd
 
해외에서 일하며 Ver 2
해외에서 일하며 Ver 2해외에서 일하며 Ver 2
해외에서 일하며 Ver 2Hakhyun Kim
 
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011
오승준, 사회적 기술이 프로그래머 인생을 바꿔주는 이유, NDC2011devCAT Studio, NEXON
 
2.성길제 좌충우돌 컴즈인 적응기
2.성길제  좌충우돌 컴즈인 적응기2.성길제  좌충우돌 컴즈인 적응기
2.성길제 좌충우돌 컴즈인 적응기Jinho Jung
 
[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가지교훈 130424Byunglim Park
 
10장 동기부여와훈련 경험
10장 동기부여와훈련 경험10장 동기부여와훈련 경험
10장 동기부여와훈련 경험Jong Pil Won
 
Why problemsolving
Why problemsolvingWhy problemsolving
Why problemsolvingJunSeok Seo
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇민건 주
 
Matrix에 오신 것을_환영합니다!
Matrix에 오신 것을_환영합니다!Matrix에 오신 것을_환영합니다!
Matrix에 오신 것을_환영합니다!Lee_Cheol_Hyun
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기Hyun-woo Park
 
개발자를 위한 공부의 필요성 0.5
개발자를 위한 공부의 필요성 0.5개발자를 위한 공부의 필요성 0.5
개발자를 위한 공부의 필요성 0.5lamoneknight
 
[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)[Dev rookie] 무엇을 하고 있습니까(13.05.11)
[Dev rookie] 무엇을 하고 있습니까(13.05.11)해강
 

Similaire à 현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점 (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)
 

Dernier

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Dernier (6)

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

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

  • 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! (...)