"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
7. 아마도 하루 중 대부분의 시간을....
http://awesomegeekblog.blogspot.kr/2013/11/the-software-developers-fallacy.html
"개발" 보다 "디버깅" 에 더 많은 시간을 쓰고 있다!
"디버깅" == "problem solving"
TDD, Code-review, unit-test 등 이와 같은 문제를 개선하기 위한 방법론이나 프로세스들은 많지만,
근본적으로는 SW Engineer가 꼼꼼하게 문제를 정의하고, 발생 가능한 문제를 예측하고, 깔끔하게 작성해야..!!
8. Problem Solving
우리가 수학을 배우는 이유.
미적분 몰라도 먹고 사는데 지장 없어요.
계산기 있잖아요.
-> 수학공부를 통해 길러지는 사고력, 논리력, 응용력
Problem Solving 을 통해 키워지는 역량
타인의 코드를 읽고 이해하는 능력
문제를 정의하고 추상화 하는 능력
예외 상황이나 오류를 찾아내는 능력
기본 코딩 스킬
9. Google, Microsoft, Apple, Yahoo, Facebook, Amazon, Netflix 등등 수많은 기업의
Interview Process
그들이 평가하는 것
문제를 잘 이해하는가? 필요한 조건 및 가정을 잘 도출하는 가?
어떤 과정을 통해 문제를 접근하고 풀어나가는가?
그 과정에서 의사소통을 잘 하는가?
깔끔하게 코딩을 잘 하는가?
자신의 풀이에서 버그나 예외 상황은 없는 지 검증하고 디버깅을 잘 하는가?
그들의 인터뷰 목표
“잘하는 사람을 놓치더라도 자질이 부족한 엔지니어를 채용하는 일은 없도록 하
자”
위와 같은 역량이 뛰어난 엔지니어들만이 보유하고 있는 스킬이라는 것이 아니라
모든 SW Engineer가 기본적으로 갖춰야 하는 역량이라고 본다는 의미!
참고
http://www.quora.com/TopCoder/Why-are-programmers-in-the-software-engineering-job-interviews-
tested-on-skills-similar-to-a-Topcoder-contest-irrespective-of-the-fact-that-the-skills-required-in-the-
industry-are-entirely-different
10. 국내 동향
Coding Interview
쿠팡, LG 전자, Daumkakao, ESTSoft…..
LG전자
Coding Interview 도입
Code Jam 통해 일정 비율 선발
Coding Expert 선발
Daumkakao 멀티미디어처리파트
지원자의 역량, 필요한 스킬에 따라 직접 문제를 만들어서,
3차례에 걸쳐 코딩, 시스템디자인, 관련 전공 지식을 심층 면접
11. 의도적 수련
Do you remember this old joke?
A young man is on the subway, carrying a guitar case.
He’s a member of a band that is performing a concert at Carnegie Hall;
and he’s running late.
He knows that the performance hall is close, but he doesn’t know the direction.
So he stops an old man on the street and asks:
“Excuse me sir, but how do I get to Carnegie Hall?”
The old man looks at the lad with his guitar case and says:
“Practice son, Practice.”
12. All professionals practice
프로 운동선수들은 자기 시간 중 20%를 시합에, 80%를 훈련에 투자한다.
한 조사에 의하면 대부분의 직장인들은 자기 시간의 99%를 일에,
1%를 자기계발에 투자 한다.
운동선수로 치자면 거의 연습도 하지 않고, 시합에 임하는 것과 마찬가지다.
-혼다 나오유키, [레버리지 씽킹]
15. 1만 시간 법칙에 대한 오해
http://agile.egloos.com/4834009
당신이 지금까지 걸은 시간을 합하면 1만 시간을 훌쩍 넘는다.
당신은 당신을 "걷기 마스터" 라고 부르는가?
당신은 지금껏 적어도 20년 넘게 숨을 쉬어왔다.
당신의 "폐활량"은 박태환 만큼 될까?
"버티는 시간이 아니라, 의도적 수련의 시간이 중요!"
16. Do Practice!
손코딩뇌컴파일눈디버깅
코딩 전 꼼꼼하게 검토하는 습관
+
생각을 있는 그대로 코드로 풀어내는 연습
Kent Beck once said
“I’m not a great programmer,
I’m just a good programmer with great habits.”
17. 오늘의 Practice!
(밑줄은 산출물)
코딩에 들어가기 전
문제를 풀기 위해 필요한 가정 도출
테스트 케이스
알고리즘 서술
코딩
서술한 알고리즘을 그대로 동작하는 코드로 옮기기
코딩 후
테스트 + 디버깅하기
시간/공간 복잡도 계산해보기
개선점 찾아보기
18. 오늘의 Practice!
Coding Session #1 (1hr)
시간/공간 복잡도의 제한이 없다고 가정하고 합시다.
그 외 필요한 가정은 쉬운 방향으로 세우고 시작합시다.
5분 자기소개
5분 가정도출
10분 솔루션 찾기 + 테스트 선정
30분 코딩 + 디버깅
10분 Code Review
19. 그라운드 룰
Communication
머리 속에서 혼자 하지 말고 말로 표현하여 서로 토론하고 검증하기
Question
좋은 질문은 좋은 답을 이끌어낸다.
Focusing
자신의 생각은 잠시 내려놓고 현재 논의 중인 내용에 집중하기.
Done is better than perfect
Small step
Time keeper
20. 오늘의 문제
Triple sum
숫자 리스트가 주어졌다고 하자.
리스트 내의 3개의 수를 골라 합이 0이 되는 경우의 수
를 반환하는 함수를 작성하라.
21. 문제 이해하기
필요한 가정
시간 / 공간 복잡도 제한은?
숫자의 범위는? 0도 포함인가?
숫자 리스트의 크기는 어느정도인가?
순서가 중요한가?
숫자는 중복이 가능한가?
23. 예상 답안
예상 답안은 참석자에 한해 별도로 드리겠습니다
kwangswei@gmail.com
24. Retrospective
각자 포스트 잇에 작성 (5min)
놀란 점, 배운 점, 실천할 것 각 1가지씩.
조별로 공유 (5min)
전체 공유(10min)
자유 토론(10min)
25. 손코딩뇌컴파일눈디버깅 모임
“코딩 기술은 정확한 프로그램을 작성하는 데 있어 작은 한 부분에 지나지 않는다. 작업의 대부분은...(중략)...문제 정의, 알고리즘
디자인, 데이터 구조의 선택이다. 이 작업들을 잘 해낼 수 있다면, 정확한 코드의 구현은 쉬운 것이 보통이다." - 생각하는 프로그래
밍
"제가 생각하는 바람직한 소프트웨어 엔지니어가 갖추어야 할 역량은 programming skill, domain knowledge, communication skill 입니
다." - LG전자 소프트웨어플랫폼 연구소장(전)
Online Coding study or Coding Interview 를 앞두고 계신 분. or 기타…
kwangswei@gmail.com
linkedin : kwangsung ha
그동안의 모임 Editorial 보기 (http://kwangswei.tistory.com)
개요 http://kwangswei.tistory.com/421 2회 http://kwangswei.tistory.com/422
3회 http://kwangswei.tistory.com/423 4회 http://kwangswei.tistory.com/424
5회 http://kwangswei.tistory.com/425 6회 http://kwangswei.tistory.com/426
7회 http://kwangswei.tistory.com/427 8회 http://kwangswei.tistory.com/428
26. 참고자료
Books
Cracking the coding interview
The coding dojo handbook
알고리즘 문제 해결 전략
Algorithm Judge or Competitions
http://topcoder.com/tc
http://codeforces.com
http://algospot.com
Coding interview
http://www.careercup.com
http://www.glassdoor.com/index.html
http://oj.leetcode.com