SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
D2 CAMPUS WARNING
이 문서는 2016 년 2 월 26 일 네이버 D2 CAMPUS SEMINAR, ' 개발을 잘 하고
싶어요 ! 흙흙흙 ' 이란 제목의 세미나에서 발표 자료로 사용하기 위하여 제작한 것입니다 .
이 문서 또는 이 문서를 매개로 하여 진행하는 발표에서는 문서 제작자 & 발표자가 어떻게
하면 개발 능력을 향상시킬 수 있는 지에 대한 정보를
스스로 어떻게 개발 능력을 향상시켜왔는지에 대한 자기 독백적인 내용을 담고 있습니다 .
따라서 매우 주관적인 견해를 담고 있으며 , 명확한 근거를 제시할 수 없는 주장도 다소
포함하고 있습니다 . 때문에 이 문서의 독자 또는 이 발표의 청중은 비판적인 시각을
지속적으로 유지하고 있기를 권장합니다 . 이 문서와 이 문서를 사용하는 발표에서는
개발 능력 향상 방법과 그 과정을 다룰 뿐 , 개발을 잘 하게 되었을 때의 이로운 점에 대해서
서는 언급하지 않습니다 .
만약 이 경고문이 독자 또는 관중 스스로가 그 이유를 정확하게 파악할 수 없지만 매우
친숙하게 느껴진다면 , 그것은 아마 님하의 착각일 것입니다 .
발표자 소개
• 10+ 년차 전업 개발자
• 개발 원하는 만큼 잘 하게 되기 .vs. 로또 다섯 번 1 등 되기
• 현재 상태 .vs. 개발 원하는 만큼 잘 하게 되는 대신 고자되기
• 지속적으로 개발 능력이 신장되고 있다고 생각함 ( 또는 착각함 )
재작년보다는 작년에 개발 더 잘 하고 , 작년보다는 올해 더 개발을
잘 하는 것 같음
• 10 살 때 처음으로 프로그래밍 시작
왜 개발자가 되었나 ?
1. 개발 그 자체가 재미있으니까
2. ' 되고 싶은 것 ' 들에 대한 집합과 ' 잘 할 수 있는 것 것 ' 집합의
공통 원소였으니까
' 되고 싶은 것 ' 들에는 속했지만 , ' 잘 할 수 있는 것 ' 에는 속하지 않았던 것들 : 락스타 , 천체 물리학자 등
아 .. 락스타가 되어야 80 세애도 연애를 할 수 있는데 ....
3. 먹고 살 걱정은 심각하게 하지 않아도 되니까
4. 세상을 이롭게 할 수 있는 일이라고 생각했으니까
그런데 처음 개발자 ( 프로그래머 ) 가 되겠다고 결정했던 시기에 개발자라는 직업은 배고픈 직업이기는 했었다 .
왜 개발을 계속 더 잘 하고 싶어하나 ?
1. 개발을 더 잘하게 되면
스스로가 계속 더 나은 사람이 되는 것 같은 기분이 들어서
2. 지식 노동자이니까
지식 노동자에게는 지식이 자산
누군가가 필요로 하는 지식은 그 자체로 따끈한 밥이 된다 .
3. 엘 리 제 를 위 하 여 를 연 주 하 고 싶 어 피 아 노 를 배 운 사 람 이
나중에는 차이코프스키 피아노 협주곡을 연주하고 싶어하는 것 처럼
4. 지식 노동자이니까
지식 노동자에게는 지식 그 자체가 품위
지속적인 개발능력 향상은 지속적으로 자존감을 유지하게 한다 .
개발이 ' 잘 할 수 있는 일 ' 에 속하게 된 이유는 뭐라고 생각하나 ?
1. 취미로 시작했으니까
즐거운 놀이로 시작한 일이다보니 재미있게 오랜 시간 개발했다 .
전산이 학교 교과과정 정식 포함이고 , 입시 공부하듯 전산을
공부했다면 아마 개발을 즐기지도 잘 하지도 못했을 것 같다 .
2. 언제나 주변에 지식을 공유할 수 있는 좋은 친구들이 많았다 .
말콜 글래드웰이 말합니다 . 일만 시간의 법칙 ... . 아 그런데 일만 시간 이상 썼지만 난 대가가 아닌데 ...
3. 언제나 수준에 맞는 책이나 웹 페이지를 찾아 볼 수 있었다 .
전산학자 , 프로그래머들 중에는 책을 쓰거나 웹 페이지를 만들어
정보 공유를 즐겨하는 사람이 정말 많다 .
어쨌든 우연한 계기로 프로그래밍을 접하게 되고
취미로 즐기다가 나중에는 전산을 전공하게 되고
직업으로까지 선택하게 되었으며
지속적으로 ' 개발능력 ' 향상을 위하여 노력을
해오기는 했었지만 그다지 체계적인 형태는 아니었었다 .
그러다 ' 어떤 사건 ' 에 의하여 개발능력이 크게
신장하게 되었다고 생각하게 되는 일이 발생했다 .
더불어 ' 그 사건 ' 이전에는 개발이란 노력보다는
' 재능 ' 이 더 중요하게 영향을 끼치는 것이라고 생각해서
능력의 발전에는 한계가 있다고 생각했다 . 하지만
' 그 사건 ' 이후로 생각을 달리하게 된다 .
' 그 사건 '
• 2011 년 봄 , 정답없는 문제에 시달리다
' 정답있는 문제 ' 를 그리워하게 되다 .
그래서 수학의 정석 실력편을 과정별로 구매했다 .
• 시시때때로 문제를 풀기 시작했다 . 급할 게 없기 때문에
풀리지 않는 문제가 있으면 해답을 보고 빨리 해법을
익힐 필요가 없었기 때문에 며칠에 걸쳐서 단 한 문제만을
푼 적도 있었다 .
• 억지로 해야하는 것이 아닌 수학은 참으로 재미있었다 .
• 동시에 깨달은 게 있다 . 고교시절 수학을 잘 하는 편이라
생각했었는데 착각이었다 . 그저 문제 풀이 방법을 기계
적으로 숙지하여 답을 내는 것 뿐이었다는 것을 깨닫다 .
고교시절과는 비교할 없을 정도로 수학을 더 잘
이해하게 되었다 .
' 그 사건 ' 이 주는 깨달음
1. ' 내가 알고 있다고 생각하는 지식 ' 에 대한 회의
2. 오래해야 잘 하게 되는데 , 오래하려면 재미있어야 한다 .
3. 실제 세상에서의 문제를 해결하기 위해 어떻게 접근해야할지
좀 더 잘 알게 되었다 .
분명 알고 있었다는 것을 시간이 지나 다시 공부하게 되면 , 그 때에는 알지 못했던 것을 알게 되는 경우가 많다 .
충분히 잘 알고 있다고 생각하는 것은 추가적인 이해의 기회를 놓치게 되는 일일 수 있다 .
이후 전산 학부 과정 과목을 복습하게 되었다 .
의지가 매우 강해 그다지 하고 싶지 않아도 열심히 하는 사람들도 있지만 , 의지가 약한 사람도 그 무엇을 오래 잘 할 수
있으려면 그 일 자체가 재미있어야 한다 .
수학 문제 풀이와 실제 세상에서의 문제 해결에 대한 접근 방법은 근본적으로 차이가 없는 것이라고 생각하게 되었다 .
물론 이는 수학적으로 증명할 수 있는 대상은 아니다 .
이 점에 대해서 좀 더 자세하게 설명하도록 하겠다 .
4. 지식 습득에 대한 조급함을 버릴 수 있게 되었다 .
지식에 대해서 ' 열패 ' 또는 ' 우열 ' 의 관점을 접근하는 것은 굉장히 부끄러운 일이기는 하지만 ,
떨쳐버리기란 쉽지 않다 . 분명 고등학교 시절 , 나보다 수학을 잘 하는 친구들이 많았다 . 아무리 노력해도 그들만큼은 될
수 없겠지라는 생각이 스스로를 힘들게 하기도 했다 . 그런데 그 시절 ' 그 부러워했던 수준 ' 에 그 시절 이르지는 못했어도
지금은 이를 수 있다 .
아마 내가 천 년을 살게되면 오일러만큼의 업적을 이루게 될지도 ...
입시나 대회같이 어떤 시한을 대상으로 하는 게 아니라면 , 그 누구보다 좀 더 늦게 익히면 어떠한가 .
결국에는 알게 되는 게 더 중요하다 .
수학 문제 풀이와 실제 세상에서의 문제 해결이
왜 다르지 않다고 주장하는가 ?
• 수학문제 풀이란 ?
도구적 지식 문제들
어떤 문제를 검증된 ' 도구적 지식 ' 의 결합과 나열을 통하여 해결하는 것
예 ) 왜 √(2) 는 유리수가 아닌가 ?
검증된 방식인 반례법과 정수론을 이용하여 증명
문제들 집합의 원소에 속하였으나 , 다른 문제를 해결하는데 도움이 되는
것이라면 ' 도구적 지식 ' 에 속하게 되기도 한다 .
우리가 알고 있는 도구적 지식들은 다 이런 탄생 배경을 가지고 있다 .
Reduction 을 이용한 문제 해결
Reduction: 어떤 문제를 잘 알려진 다른 문제로 변환한 뒤
잘 알려진 문제의 해결 방법으로 해결
P != NP 를 비롯한 컴퓨터 과학의 많은 문제 해결 또는
문제 해결 접근 방법은 이 reduction 을 이용하고 있다 .
현실 세계에서의 Reduction 예
그는 울산조선소를 구상하며
기술자들에게 이런 질문을 했다 .
“ 쇠가 물에 뜨냐 ??
< 결단은 칼처럼 행동은 화살처럼 >, 권영욱 지음 , 75 쪽
“ 그래 한번 해보는 거야 . 못할 것도 없지 . 그까짓 철판으
로 만든 큰 덩치의 탱크가 바다에 떠 동력으로 달리는 게 배
지 , 뭐 . 배가 별거냐 .”
어렵고 힘든 일을 부딪치면 쉽고 단순하게 생각하는 정주영
의 주특기가 발휘된다 . 정주영은 조선업자로 조선소 건설
을 생각한 게 아니라 건설업자로서 조선소 건설을 생각했
다 . 배를 큰 탱크로 생각하고 정유공장 세울 때처럼 도면대
로 철판을 잘라서 용접을 하면 되고 , 배의 내부 기계는 건
물에 장치를 설계대로 앉히듯이 도면대로 제자리에 설치하
면 된다고 여긴 것이다 .
http://blog.hani.co.kr/june/32504
결국 프로그래밍을 이용한 문제 해결이란
• 실생활의 문제를 잘 알려진 문제로 변환한 후 , 도구적 지식 ( 프로그래밍
언어에 대한 이해 , 자료구조 & 알고리즘 지식 , 컴퓨터 아키텍처 지식 등 )
을 이용하여 해결하는 것
예 ) 감염 경로 정보를 이용 하여 최초 보균자 찾기 → 트리에서의 부모 찾기
• 결국 도구적 지식을 풍부하게 하고 , 숙지할 수록
문제를 더 잘 해결할 수 있게 된다 .
• 동시에 실생활 문제를 잘 알려진 문제로 환원할 수 있어야 한다 .
개발 능력은 평가 가능한가 ?
또는 측정 가능한가 ?
개발능력
Total Order
• Anti Symmetry: If a ≤ b and b ≤ a then a = b
• Transitivity: If a ≤ b and b ≤ c then a ≤ c
• Totality: a ≤ b or b ≤ a
만약 설현의 개발 능력은 아이유 이상이고 아이유의 개발 능력이 설현 이상이라면
설현과 아이유의 개발 능력은 같다 .
만약 박보검의 개발능력이 강동원 개발능력 이상이고 , 송중기의 개발능력은 박보검 이상이라면
송중기의 개발능력은 강동원 이상이다 .
유라의 개발능력은 혜리 이상이거나 , 혜리의 개발능력은 유라 이상이다 .
이러한 질문을 하는 이유는 ' 개발능력 ' 을 향상시킨다는
것에는 개발능력이란 게 측정할 수 있어 비교할 수 있는
대상이라는 전제가 있기 때문이다 .
물론 그 어떤 이가 나타나 매우 정교한 방법으로
개발능력을 수치화할 수 있을지도 모른다 .
그런데 그 수많은 외국어 능력 시험의 사례를 보더라도
어떤 점수가 능력을 정확하게 표현하기란 대단히 어렵다 .
드래곤볼 , 토리야마 아키라 원작
또한 점수화는 필요 이상의 경쟁을 만들기도 한다 .
경쟁에는 긍정적인 효과를 만들기도 하지만
매우 부정적인 부작용을 만들기도 한다 .
한국에서 태어나 한국에서 교육을 받았다면
이러한 부작용을 너무나 잘 알지 않는가 ?
우열에 대한 비교는 재능있는 사람을 좌절하게 하기도 한다 .
슬램덩크 , 이노우에 다코히코 작 , 대원씨아이 번역본
그래서 개발능력을 ' 건강정도 ' 에 비유해보는 것을
제안하고 싶다 . 그 누구도 건강 정도를 수치로 비교하지
않는다 . 게다가 건강해지려는 노력이 매우 긍정적인 인상을
주는 것처럼 개발 능력을 향상을 위한 노력도
그런 것이었으면 한다 .
1.1 위대한 개발자 그 위대성
• 위대한 음악가라 불리어지는 사람들은
그 어떤 과정에 의하여 위대하다는 평가를
얻게 되었는 가에 대한 연구
• 위대함이라는 칭호에는 음악가 본인의 자질
못지 않게 시대적 조건이란 것 또한 중요
• 음악가가 아닌 개발자를 이야기한다치면
그 무엇이 위대한 개발자를 위대하다고
할 수 있게 할 것인가 ?
https://en.wikipedia.org/wiki/List_of_programmers
이들의 공통점은 ?
잠깐 ! 비교우위를 따지지 말자면서 , 왜 ' 위대한 개발
자 ' 이야기를 꺼내는가 ? 이것이야 말로 비교 아닌가 ?
위대한 개발자로 여겨지는 사람들에 대한 목록은
' 구현능력 ' 순위로 만들어진 것이 아니다 .
현재 컴퓨터 환경에 상당한 영향을 끼친 제품을 만들거나
어떤 이론을 고안한 사람들이다 .
이들이 만든 것들이 무엇인지 아는 것만으로도
컴퓨터 환경을 잘 이해할 수 있는 방법이 된다 .
1-2. 주관이 아닌 객관으로 , 개발능력의 다차원 분석
문장 이해 능력
기억력
수치 논리 능력
직관능력
응용력
...
추론 능력
추상화 능력
아래의 벡터 공간에서의 차원은 발표자 임의로 지정한 것으로
' 개발 능력 ' 이라 불리는 어떤 능력은 다른 수많은 능력들의
조합에 의하여 만들어지는 것이라는 것은 전달하고 싶은 의도
전달하고자 하는 바는 이토록 개발능력이란 것이
심오하고 대단한 능력이라는 것을 전달하려는 것이 아니라 ...
만약 스스로 개발 능력이 잘 신장되고 있지 않다고 판단한다면
개발능력을 구성하는 그 어떤 능력을 신장시키면
전체적인 개발 능력이 향상될 수 있다는 것을 전달하고 싶은 것
1-3. 리비히의 최소율 법칙
http://terms.naver.com/entry.nhn?
docId=3340593&cid=55589&categoryId=55589
식물의 성장은 식물 성장에 필요한 영양소 중 가장 부족한 영양소에
의하여 결정된다는 것
물론 식물의 성장 정도는 크기로 측정 가능하지만 ,
개발 능력은 측정 대상이 아니라고 밝힌바있다 .
게다가 식물 성장 관련된 법칙을 인간의 학습 능력에 적용하는 것은
검증된 접근 방법이 아니다 .
그럼에도 불구하고 최소 성분의 법칙을 개발 능력 향상 방법에
접목해보는 것은 의미가 있다 .
왜냐하면 자기의 개발 능력을 결정 짓는 요소가 무엇인지
더 성장을 하려면 무엇을 신장시켜야 하는지 생각해볼 수 있는
계기가 될 수 있기 때문이다 .
예를 들어 영문 독해 능력을 향상시키는 것도 개발 능력 향상을 위한
좋은 방법이 될 수 있다 . 절대적으로 많은 정보가 영문으로 작성되어
있기 때문이다 .
또한 수학 공부도 개발 능력 향상에 도움이 된다 .
개발 능력의 분해
2-1 구분동작
http://pandawhale.com/post/6320/how-to-gangnam-style-dance
춤에 재능이 있는 사람은 춤을 보기만 해도 바로 따라 할 수 있다 .
그런데 춤에 재능이 없는 사람이라도 구분 동작을 따라하다보면
춤을 따라 할 수 있게 된다 .
프로그램이란 그 규모와 상관없이 함수 호출의 연속 , 함수의 배열
f 1(f 2(f 3(f 4(f 5 (f 6(f ...(x)))))))
복잡하고 빠른 춤도 느린 영상으로 보면서 동작을 하나 씩 구분해 내다보면
춤이 어떻게 구성되어 있을 수 있는지 아는 것 처럼
거대하고 복잡한 프로그램도 그 동작을 잘게 구분하다보면
어떻게 작성해야하는지 알 수 있게 된다 .
그런데 어떻게 해야 이런 능력을 키울 수 있나 ?
추상화 능력이 필요하다 .
2-2 추상화
http://www.nasa.gov/mission_pages/hubble/multimedia/index.html?id=377519
천체 물리학자들은 이 복잡한 우주를 어떻게 대하는가 ?
지표상에서 던진 공은 얼마나 날아가게 될까 ?
• 3 차원 공간에서의 운동을 2 차원으로 단순화
• 2 차원에서의 포물선 운동 적용
• 공기 저항은 고려하지 않음
만약 공기 저항도 고려하고 , 공이 매끄러운 형태의 것이 아니라고 한다면 ?
단순한 모델에서 시작하여 변수를 추가
CSV, XML, JSON, MS Excel 문서의 차이점과 공통점은 무엇일까 ?
2-3 자료구조와 알고리즘 설계 구현 능력
• 앞서 설명하였듯이 문제를 해결하기 위한 도구적 지식
• 많으면 많을 수록 , 익숙하면 익숙할 수록 좋은 것
• 익히는데 많은 시간이 소요된다 .
많은 기업에서 채용 시 자료구조와 알고리즘 설계 구현 능력을
평가하는 이유 중의 하나는 이것 때문이다 .
학교에서 이런저런 알고리즘을 배우기는 하는데
그거 ' 실제 개발 ' 에서는 잘 안 쓰는 것 아닌가요 ?
돈 계산만 할 줄 알면 되었지 , 왜 수학을 배우나요 ?
이름 석자만 쓸 줄 알면 되었지 , 뭐하러 글을 배우나요 ?
' 실제 개발 ' 이라고 생각하는 범위가 어디냐에 따라
다르다고 하겠다 . 만약 프로그램 개발이란 게
출시된 라이브러리와 프레임워크를 조합하는 것이라고 생각한다면
이런 생각이 맞을 수도 있다 .
그러나 라이브러리 ' 사용자 ' 수준이 되는 이상을 원한다면
자료구조와 알고리즘 이해는 매우 중요하다 .
2-4 컴퓨터 언어에 대한 이해
컴퓨터 언어를 잘 이해하고 있냐는 질문은
한국어를 잘 이해하고 있냐고 묻는 것 만큼 모호한 것
또한 컴퓨터 언어가 가리키는 대상은 그만큼 방대한 것
우리가 사용하는 ' 고급 언어 ' 는 수많은 지성들이
연구하여 만들어 낸 결정체이다 .
천재 본 노이만은 고급 언어의 필요성에 동의하지 않았다 . 천재라고 하여 항상 옳은 결정만 하는 것은 아닌
것 같다 .
https://en.wikipedia.org/wiki/Structured_programming
구조적 프로그래밍 관점에서 프로그래밍이란 어떤 함수
(subroutines) 들을 만들 것인가 , 그리고 각각의 함수의 제어를
sequence( 어떤 순서로 함수를 실행할 것인가 ), selection( 분
기 ), iteration( 반복 ), recursion( 재귀 ) 로 구현하는 것
2-5 컴퓨터 아키텍처에 대한 이해
BTree 탄생 과정을 떠올려 보자
http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html
컴퓨터 시스템 환경은 계속 변하고 발전해오고 있다 .
이런 변화에 따라 새로운 알고리즘이 나오기도 한다 .
그런데 이런 알고리즘은 갑자기 하늘에서 뚝 떨어진
게 아니다 . 마이크로 아키텍처가 변할 때 마다
새로운 알고리즘을 만들어 내야 한다라기보다도
이러한 성능 수치 특성에 따라 최적의 알고리즘을
고안해 내는 것이다 .
2-6 문제 파악 능력
앞서 언급했던 reduction 에 관한 것
알고 있다고 생각하는 것을 잘 알고 있는 것도 중요하지만
무엇을 모르고 있다는 것을 아는 것도 중요하다 .
어떤 문제를 해결 방법이 알려진 여러 세부 문제들의 조합들로
나누었다고 했을 때 , 그 세부 문제들을 항상 모두 다
알고 있기란 어렵기 때문이다 . 즉 무엇을 더 알아야 할지 아는 게
중요하다 .
대학생의 개발능력 항상 방법
3-1 절대적으로 필요한 것은 동료
인류가 도시를 만들면서 지식의 양은 폭발적으로 증가했다 .
내가 모르는 것을 누군가는 알고 , 누군가가 모르는 것은
내가 알고 있다 .
같은 관심사를 가진 동료를 옆에 두는 것은 서로의 지식 향상에
많은 도움이 된다 .
물론 동료를 그 어떤 목적을 위한 ' 수단 ' 으로 대하라는 것은 아니다 .
3-1 절대적으로 필요한 것은 동료
인류가 도시를 만들면서 지식의 양은 폭발적으로 증가했다 .
내가 모르는 것을 누군가는 알고 , 누군가가 모르는 것은
내가 알고 있다 .
같은 관심사를 가진 동료를 옆에 두는 것은 서로의 지식 향상에
많은 도움이 된다 .
물론 동료를 그 어떤 목적을 위한 ' 수단 ' 으로 대하라는 것은 아니다 .
3-2 학과 과정의 중요성
전공 과목이든 교양 과목이든 개발 능력 향상에 필요한 것은
모두 대학교 전산학과 교육과정에 다룬다 .
다만 고등학생이라고 하여 중학교 과정을 다 알고 있는 게 아닌 것처럼
역시 어떤 과목에 대한 수업을 듣고 좋은 학점을 얻었다해서 ,
그 과목에 대한 내용을 잘 알고 있다고 말하는 것은 어려울 수 있다 .
인기있는 프레임워크의 사용방법을 익힌다거나 하는 것은 경험있는
실력있는 개발자라면 매우 짧은 시간 안에 익힐 수 있게 된다 .
업계에서 쓰이는 지식을 익히는 것보다는
좀 더 익히는데 오랜 시간이 걸리는 학교 수업 과목에 충실할 것을
권하고 싶다 .
3-3 비학과 과정의 비중요성
언급하였듯이 개발 과정에 필요한 지식들은 모두 학과 과정에서 다룬다 .
다만 발표자 스스로도 대학생 시절을 돌이켜 볼 때 , 학교에서는
도무지 ' 실제 개발 ' 에 필요한 지식을 가르치지 않는다고
불만투성이였던 시절이 있다 . 유행하는 지식을 가르치지 않아서 였다 .
그러나 유행은 유행이었다 .
물론 유행하는 기술을 익혀 만들고 싶은 그 어떤 것을 구현하는 것은
매우 의미있는 일이다 . 다만 유행이 되는 기술을 익히기 위해
더 오랜 시간 동안 가치있을 지식을 습득할 수 있는 기회를 놓치는 것은
아까운 일이다 .
2016 년 현재 4GL 언어는 잘 쓰이지 않고 , PHP 는 점점 활용처가
줄어드는 것처럼 , 지금의 안드로이드나 iOS 또는 웹 개발 프레임워크가
그 전철을 밟을 수도 있다 .
3-4 연습 , 연습 , 연습
모든 것은 연습 대상이다 .
자료구조와 알고리즘 설계 / 구현 능력 뿐만 아니라 ,
' 반복문 ' 을 잘 구현하는 것에도 수 많은 연습이 필요하다 .
10+ 년 전업 개발자인 발표자도 좋은 ' 반복문 ' 구현 예를
찾아 배운다 .
재귀 함수 구현은 말할 것도 없다 .
좋은 반복문 구현 예
문자열 타입으로 된 두 개의 숫자를 입력 받아 곱셈 결과를
반환화는 함수를 구현해야 한다면 ?
대략 몇 줄의 소스 코드가 필요할까 ?
98765432123456789123456789
12345678987654321234X
395061728493827156493827156
296296296370370367370370367
...
1219326320073159590707514115364730767524157626
좋은 반복문 구현 예
간결 간결 !!!
정답을 내는 것에 만족하지 않고 ,
더 간결하게 그리고 더 빠른 실행 속도를
낼 수 있도록 계속 연습하는 게 필요하다 .
하면는다 .
결론
일단 개발을 좋아하는 것이 중요합니다 . 만약 그다지 좋아하지 않는다면
다른 더 좋아하는 일을 찾아보는 것을 권합니다 .
만약 스스로가 개발 능력이 부족하다고 생각한다면 , 개발 능력이란 여러
능력이 결합된 형태라고 할 수 있으니 직접적으로 개발과 상관없다 하더
라도 그 능력이 좋아지면 개발 능력이 덩달아 좋아질 수가 있다고 봅니
다 . 그러한 결정 인자가 무엇인지 찾아 향상시켜보는 경험을 가져보기를
권장합니다 .
개발이란 어떤 도구적 지식을 바탕으로 문제를 해결하는 것을 말합니다 .
이러한 도구적 지식은 대학 전산학과 교과 과정과 교양 강의에서
배울 수 있습니다 . 다만 해당 과목을 수강하는 것만으로는 부족할 수 있
고 별도의 많은 시간을 들여 연습을 해야 합니다 . 재미를 강조한
이유가 이것입니다 . 재미있어야 오랜 시간 동안 연습을 할 수 있을 터이
니까요 .

Más contenido relacionado

La actualidad más candente

홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
Changyol BAEK
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
KyeongWon Koo
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 

La actualidad más candente (20)

나의 이직 이야기
나의 이직 이야기나의 이직 이야기
나의 이직 이야기
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
(독서광) 책 vs 책 - 파이썬 신간 분석
(독서광) 책 vs 책 - 파이썬 신간 분석(독서광) 책 vs 책 - 파이썬 신간 분석
(독서광) 책 vs 책 - 파이썬 신간 분석
 
더 나은 개발자 되기
더 나은 개발자 되기더 나은 개발자 되기
더 나은 개발자 되기
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 

Similar a 개발을잘하고싶어요-네이버랩스 송기선님

SWDeveloperStory201502
SWDeveloperStory201502SWDeveloperStory201502
SWDeveloperStory201502
Suho Kwon
 
교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO
교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO
교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO
한국디자인진흥원 공공서비스디자인PD
 
SWDeveloprStory201601
SWDeveloprStory201601SWDeveloprStory201601
SWDeveloprStory201601
Suho Kwon
 
애자일 도입과 사례 공유
애자일 도입과 사례 공유애자일 도입과 사례 공유
애자일 도입과 사례 공유
agilekorea
 

Similar a 개발을잘하고싶어요-네이버랩스 송기선님 (20)

2011~2012 소프트웨어 관련도서 추천 리뷰 모음
2011~2012 소프트웨어 관련도서 추천 리뷰 모음2011~2012 소프트웨어 관련도서 추천 리뷰 모음
2011~2012 소프트웨어 관련도서 추천 리뷰 모음
 
성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk
 
Book report apprenticeship patterns
Book report  apprenticeship patternsBook report  apprenticeship patterns
Book report apprenticeship patterns
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
 
SWDeveloperStory201502
SWDeveloperStory201502SWDeveloperStory201502
SWDeveloperStory201502
 
Hello World 천안아산 발표자료 - 학생 개발자로 학생을 뛰어넘기
Hello World 천안아산 발표자료 - 학생 개발자로 학생을 뛰어넘기Hello World 천안아산 발표자료 - 학생 개발자로 학생을 뛰어넘기
Hello World 천안아산 발표자료 - 학생 개발자로 학생을 뛰어넘기
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
 
[동그라미재단] 2014ㄱ찾기_어썸스쿨_교육자용 메뉴얼_두런두런 학교변화 프로젝트
[동그라미재단] 2014ㄱ찾기_어썸스쿨_교육자용 메뉴얼_두런두런 학교변화 프로젝트[동그라미재단] 2014ㄱ찾기_어썸스쿨_교육자용 메뉴얼_두런두런 학교변화 프로젝트
[동그라미재단] 2014ㄱ찾기_어썸스쿨_교육자용 메뉴얼_두런두런 학교변화 프로젝트
 
교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO
교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO
교육자를 위한 디자인사고 워크북 2.0 한글 번역본 - IDEO
 
IDEO 교육자를 위한 디자인사고 워크북 2.0(한국어번역)
IDEO 교육자를 위한 디자인사고 워크북 2.0(한국어번역)IDEO 교육자를 위한 디자인사고 워크북 2.0(한국어번역)
IDEO 교육자를 위한 디자인사고 워크북 2.0(한국어번역)
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers 스마일게이트 서버개발캠프 - 5vengers
스마일게이트 서버개발캠프 - 5vengers
 
디미컨 어린이컴퓨터교육 7주차
디미컨 어린이컴퓨터교육 7주차디미컨 어린이컴퓨터교육 7주차
디미컨 어린이컴퓨터교육 7주차
 
SWDeveloprStory201601
SWDeveloprStory201601SWDeveloprStory201601
SWDeveloprStory201601
 
애자일 도입과 사례 공유
애자일 도입과 사례 공유애자일 도입과 사례 공유
애자일 도입과 사례 공유
 
[개발자영어 #4] 개발 관련 질문과 대답 방법
[개발자영어 #4] 개발 관련 질문과 대답 방법[개발자영어 #4] 개발 관련 질문과 대답 방법
[개발자영어 #4] 개발 관련 질문과 대답 방법
 
20150307 abcd발표_ux디자이너 실력으로 살아남기
20150307 abcd발표_ux디자이너 실력으로 살아남기20150307 abcd발표_ux디자이너 실력으로 살아남기
20150307 abcd발표_ux디자이너 실력으로 살아남기
 
20141215 액션러닝 원장님강의08
20141215 액션러닝 원장님강의0820141215 액션러닝 원장님강의08
20141215 액션러닝 원장님강의08
 
소프트웨어개발자는누구인가?
소프트웨어개발자는누구인가?소프트웨어개발자는누구인가?
소프트웨어개발자는누구인가?
 

Más de NAVER D2

Más de NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

개발을잘하고싶어요-네이버랩스 송기선님

  • 1. D2 CAMPUS WARNING 이 문서는 2016 년 2 월 26 일 네이버 D2 CAMPUS SEMINAR, ' 개발을 잘 하고 싶어요 ! 흙흙흙 ' 이란 제목의 세미나에서 발표 자료로 사용하기 위하여 제작한 것입니다 . 이 문서 또는 이 문서를 매개로 하여 진행하는 발표에서는 문서 제작자 & 발표자가 어떻게 하면 개발 능력을 향상시킬 수 있는 지에 대한 정보를 스스로 어떻게 개발 능력을 향상시켜왔는지에 대한 자기 독백적인 내용을 담고 있습니다 . 따라서 매우 주관적인 견해를 담고 있으며 , 명확한 근거를 제시할 수 없는 주장도 다소 포함하고 있습니다 . 때문에 이 문서의 독자 또는 이 발표의 청중은 비판적인 시각을 지속적으로 유지하고 있기를 권장합니다 . 이 문서와 이 문서를 사용하는 발표에서는 개발 능력 향상 방법과 그 과정을 다룰 뿐 , 개발을 잘 하게 되었을 때의 이로운 점에 대해서 서는 언급하지 않습니다 . 만약 이 경고문이 독자 또는 관중 스스로가 그 이유를 정확하게 파악할 수 없지만 매우 친숙하게 느껴진다면 , 그것은 아마 님하의 착각일 것입니다 .
  • 2. 발표자 소개 • 10+ 년차 전업 개발자 • 개발 원하는 만큼 잘 하게 되기 .vs. 로또 다섯 번 1 등 되기 • 현재 상태 .vs. 개발 원하는 만큼 잘 하게 되는 대신 고자되기 • 지속적으로 개발 능력이 신장되고 있다고 생각함 ( 또는 착각함 ) 재작년보다는 작년에 개발 더 잘 하고 , 작년보다는 올해 더 개발을 잘 하는 것 같음 • 10 살 때 처음으로 프로그래밍 시작
  • 3. 왜 개발자가 되었나 ? 1. 개발 그 자체가 재미있으니까 2. ' 되고 싶은 것 ' 들에 대한 집합과 ' 잘 할 수 있는 것 것 ' 집합의 공통 원소였으니까 ' 되고 싶은 것 ' 들에는 속했지만 , ' 잘 할 수 있는 것 ' 에는 속하지 않았던 것들 : 락스타 , 천체 물리학자 등 아 .. 락스타가 되어야 80 세애도 연애를 할 수 있는데 .... 3. 먹고 살 걱정은 심각하게 하지 않아도 되니까 4. 세상을 이롭게 할 수 있는 일이라고 생각했으니까 그런데 처음 개발자 ( 프로그래머 ) 가 되겠다고 결정했던 시기에 개발자라는 직업은 배고픈 직업이기는 했었다 .
  • 4. 왜 개발을 계속 더 잘 하고 싶어하나 ? 1. 개발을 더 잘하게 되면 스스로가 계속 더 나은 사람이 되는 것 같은 기분이 들어서 2. 지식 노동자이니까 지식 노동자에게는 지식이 자산 누군가가 필요로 하는 지식은 그 자체로 따끈한 밥이 된다 . 3. 엘 리 제 를 위 하 여 를 연 주 하 고 싶 어 피 아 노 를 배 운 사 람 이 나중에는 차이코프스키 피아노 협주곡을 연주하고 싶어하는 것 처럼 4. 지식 노동자이니까 지식 노동자에게는 지식 그 자체가 품위 지속적인 개발능력 향상은 지속적으로 자존감을 유지하게 한다 .
  • 5. 개발이 ' 잘 할 수 있는 일 ' 에 속하게 된 이유는 뭐라고 생각하나 ? 1. 취미로 시작했으니까 즐거운 놀이로 시작한 일이다보니 재미있게 오랜 시간 개발했다 . 전산이 학교 교과과정 정식 포함이고 , 입시 공부하듯 전산을 공부했다면 아마 개발을 즐기지도 잘 하지도 못했을 것 같다 . 2. 언제나 주변에 지식을 공유할 수 있는 좋은 친구들이 많았다 . 말콜 글래드웰이 말합니다 . 일만 시간의 법칙 ... . 아 그런데 일만 시간 이상 썼지만 난 대가가 아닌데 ... 3. 언제나 수준에 맞는 책이나 웹 페이지를 찾아 볼 수 있었다 . 전산학자 , 프로그래머들 중에는 책을 쓰거나 웹 페이지를 만들어 정보 공유를 즐겨하는 사람이 정말 많다 .
  • 6. 어쨌든 우연한 계기로 프로그래밍을 접하게 되고 취미로 즐기다가 나중에는 전산을 전공하게 되고 직업으로까지 선택하게 되었으며 지속적으로 ' 개발능력 ' 향상을 위하여 노력을 해오기는 했었지만 그다지 체계적인 형태는 아니었었다 . 그러다 ' 어떤 사건 ' 에 의하여 개발능력이 크게 신장하게 되었다고 생각하게 되는 일이 발생했다 . 더불어 ' 그 사건 ' 이전에는 개발이란 노력보다는 ' 재능 ' 이 더 중요하게 영향을 끼치는 것이라고 생각해서 능력의 발전에는 한계가 있다고 생각했다 . 하지만 ' 그 사건 ' 이후로 생각을 달리하게 된다 .
  • 7. ' 그 사건 ' • 2011 년 봄 , 정답없는 문제에 시달리다 ' 정답있는 문제 ' 를 그리워하게 되다 . 그래서 수학의 정석 실력편을 과정별로 구매했다 . • 시시때때로 문제를 풀기 시작했다 . 급할 게 없기 때문에 풀리지 않는 문제가 있으면 해답을 보고 빨리 해법을 익힐 필요가 없었기 때문에 며칠에 걸쳐서 단 한 문제만을 푼 적도 있었다 . • 억지로 해야하는 것이 아닌 수학은 참으로 재미있었다 . • 동시에 깨달은 게 있다 . 고교시절 수학을 잘 하는 편이라 생각했었는데 착각이었다 . 그저 문제 풀이 방법을 기계 적으로 숙지하여 답을 내는 것 뿐이었다는 것을 깨닫다 . 고교시절과는 비교할 없을 정도로 수학을 더 잘 이해하게 되었다 .
  • 8. ' 그 사건 ' 이 주는 깨달음 1. ' 내가 알고 있다고 생각하는 지식 ' 에 대한 회의 2. 오래해야 잘 하게 되는데 , 오래하려면 재미있어야 한다 . 3. 실제 세상에서의 문제를 해결하기 위해 어떻게 접근해야할지 좀 더 잘 알게 되었다 . 분명 알고 있었다는 것을 시간이 지나 다시 공부하게 되면 , 그 때에는 알지 못했던 것을 알게 되는 경우가 많다 . 충분히 잘 알고 있다고 생각하는 것은 추가적인 이해의 기회를 놓치게 되는 일일 수 있다 . 이후 전산 학부 과정 과목을 복습하게 되었다 . 의지가 매우 강해 그다지 하고 싶지 않아도 열심히 하는 사람들도 있지만 , 의지가 약한 사람도 그 무엇을 오래 잘 할 수 있으려면 그 일 자체가 재미있어야 한다 . 수학 문제 풀이와 실제 세상에서의 문제 해결에 대한 접근 방법은 근본적으로 차이가 없는 것이라고 생각하게 되었다 . 물론 이는 수학적으로 증명할 수 있는 대상은 아니다 . 이 점에 대해서 좀 더 자세하게 설명하도록 하겠다 . 4. 지식 습득에 대한 조급함을 버릴 수 있게 되었다 . 지식에 대해서 ' 열패 ' 또는 ' 우열 ' 의 관점을 접근하는 것은 굉장히 부끄러운 일이기는 하지만 , 떨쳐버리기란 쉽지 않다 . 분명 고등학교 시절 , 나보다 수학을 잘 하는 친구들이 많았다 . 아무리 노력해도 그들만큼은 될 수 없겠지라는 생각이 스스로를 힘들게 하기도 했다 . 그런데 그 시절 ' 그 부러워했던 수준 ' 에 그 시절 이르지는 못했어도 지금은 이를 수 있다 . 아마 내가 천 년을 살게되면 오일러만큼의 업적을 이루게 될지도 ... 입시나 대회같이 어떤 시한을 대상으로 하는 게 아니라면 , 그 누구보다 좀 더 늦게 익히면 어떠한가 . 결국에는 알게 되는 게 더 중요하다 .
  • 9. 수학 문제 풀이와 실제 세상에서의 문제 해결이 왜 다르지 않다고 주장하는가 ? • 수학문제 풀이란 ? 도구적 지식 문제들 어떤 문제를 검증된 ' 도구적 지식 ' 의 결합과 나열을 통하여 해결하는 것 예 ) 왜 √(2) 는 유리수가 아닌가 ? 검증된 방식인 반례법과 정수론을 이용하여 증명 문제들 집합의 원소에 속하였으나 , 다른 문제를 해결하는데 도움이 되는 것이라면 ' 도구적 지식 ' 에 속하게 되기도 한다 . 우리가 알고 있는 도구적 지식들은 다 이런 탄생 배경을 가지고 있다 .
  • 10. Reduction 을 이용한 문제 해결 Reduction: 어떤 문제를 잘 알려진 다른 문제로 변환한 뒤 잘 알려진 문제의 해결 방법으로 해결 P != NP 를 비롯한 컴퓨터 과학의 많은 문제 해결 또는 문제 해결 접근 방법은 이 reduction 을 이용하고 있다 .
  • 11. 현실 세계에서의 Reduction 예 그는 울산조선소를 구상하며 기술자들에게 이런 질문을 했다 . “ 쇠가 물에 뜨냐 ?? < 결단은 칼처럼 행동은 화살처럼 >, 권영욱 지음 , 75 쪽 “ 그래 한번 해보는 거야 . 못할 것도 없지 . 그까짓 철판으 로 만든 큰 덩치의 탱크가 바다에 떠 동력으로 달리는 게 배 지 , 뭐 . 배가 별거냐 .” 어렵고 힘든 일을 부딪치면 쉽고 단순하게 생각하는 정주영 의 주특기가 발휘된다 . 정주영은 조선업자로 조선소 건설 을 생각한 게 아니라 건설업자로서 조선소 건설을 생각했 다 . 배를 큰 탱크로 생각하고 정유공장 세울 때처럼 도면대 로 철판을 잘라서 용접을 하면 되고 , 배의 내부 기계는 건 물에 장치를 설계대로 앉히듯이 도면대로 제자리에 설치하 면 된다고 여긴 것이다 . http://blog.hani.co.kr/june/32504
  • 12. 결국 프로그래밍을 이용한 문제 해결이란 • 실생활의 문제를 잘 알려진 문제로 변환한 후 , 도구적 지식 ( 프로그래밍 언어에 대한 이해 , 자료구조 & 알고리즘 지식 , 컴퓨터 아키텍처 지식 등 ) 을 이용하여 해결하는 것 예 ) 감염 경로 정보를 이용 하여 최초 보균자 찾기 → 트리에서의 부모 찾기 • 결국 도구적 지식을 풍부하게 하고 , 숙지할 수록 문제를 더 잘 해결할 수 있게 된다 . • 동시에 실생활 문제를 잘 알려진 문제로 환원할 수 있어야 한다 .
  • 13. 개발 능력은 평가 가능한가 ?
  • 14. 또는 측정 가능한가 ? 개발능력 Total Order • Anti Symmetry: If a ≤ b and b ≤ a then a = b • Transitivity: If a ≤ b and b ≤ c then a ≤ c • Totality: a ≤ b or b ≤ a 만약 설현의 개발 능력은 아이유 이상이고 아이유의 개발 능력이 설현 이상이라면 설현과 아이유의 개발 능력은 같다 . 만약 박보검의 개발능력이 강동원 개발능력 이상이고 , 송중기의 개발능력은 박보검 이상이라면 송중기의 개발능력은 강동원 이상이다 . 유라의 개발능력은 혜리 이상이거나 , 혜리의 개발능력은 유라 이상이다 .
  • 15. 이러한 질문을 하는 이유는 ' 개발능력 ' 을 향상시킨다는 것에는 개발능력이란 게 측정할 수 있어 비교할 수 있는 대상이라는 전제가 있기 때문이다 . 물론 그 어떤 이가 나타나 매우 정교한 방법으로 개발능력을 수치화할 수 있을지도 모른다 . 그런데 그 수많은 외국어 능력 시험의 사례를 보더라도 어떤 점수가 능력을 정확하게 표현하기란 대단히 어렵다 . 드래곤볼 , 토리야마 아키라 원작
  • 16. 또한 점수화는 필요 이상의 경쟁을 만들기도 한다 . 경쟁에는 긍정적인 효과를 만들기도 하지만 매우 부정적인 부작용을 만들기도 한다 . 한국에서 태어나 한국에서 교육을 받았다면 이러한 부작용을 너무나 잘 알지 않는가 ? 우열에 대한 비교는 재능있는 사람을 좌절하게 하기도 한다 . 슬램덩크 , 이노우에 다코히코 작 , 대원씨아이 번역본
  • 17. 그래서 개발능력을 ' 건강정도 ' 에 비유해보는 것을 제안하고 싶다 . 그 누구도 건강 정도를 수치로 비교하지 않는다 . 게다가 건강해지려는 노력이 매우 긍정적인 인상을 주는 것처럼 개발 능력을 향상을 위한 노력도 그런 것이었으면 한다 .
  • 18. 1.1 위대한 개발자 그 위대성 • 위대한 음악가라 불리어지는 사람들은 그 어떤 과정에 의하여 위대하다는 평가를 얻게 되었는 가에 대한 연구 • 위대함이라는 칭호에는 음악가 본인의 자질 못지 않게 시대적 조건이란 것 또한 중요 • 음악가가 아닌 개발자를 이야기한다치면 그 무엇이 위대한 개발자를 위대하다고 할 수 있게 할 것인가 ?
  • 21. 잠깐 ! 비교우위를 따지지 말자면서 , 왜 ' 위대한 개발 자 ' 이야기를 꺼내는가 ? 이것이야 말로 비교 아닌가 ? 위대한 개발자로 여겨지는 사람들에 대한 목록은 ' 구현능력 ' 순위로 만들어진 것이 아니다 . 현재 컴퓨터 환경에 상당한 영향을 끼친 제품을 만들거나 어떤 이론을 고안한 사람들이다 . 이들이 만든 것들이 무엇인지 아는 것만으로도 컴퓨터 환경을 잘 이해할 수 있는 방법이 된다 .
  • 22. 1-2. 주관이 아닌 객관으로 , 개발능력의 다차원 분석 문장 이해 능력 기억력 수치 논리 능력 직관능력 응용력 ... 추론 능력 추상화 능력 아래의 벡터 공간에서의 차원은 발표자 임의로 지정한 것으로 ' 개발 능력 ' 이라 불리는 어떤 능력은 다른 수많은 능력들의 조합에 의하여 만들어지는 것이라는 것은 전달하고 싶은 의도
  • 23. 전달하고자 하는 바는 이토록 개발능력이란 것이 심오하고 대단한 능력이라는 것을 전달하려는 것이 아니라 ... 만약 스스로 개발 능력이 잘 신장되고 있지 않다고 판단한다면 개발능력을 구성하는 그 어떤 능력을 신장시키면 전체적인 개발 능력이 향상될 수 있다는 것을 전달하고 싶은 것
  • 24. 1-3. 리비히의 최소율 법칙 http://terms.naver.com/entry.nhn? docId=3340593&cid=55589&categoryId=55589 식물의 성장은 식물 성장에 필요한 영양소 중 가장 부족한 영양소에 의하여 결정된다는 것
  • 25. 물론 식물의 성장 정도는 크기로 측정 가능하지만 , 개발 능력은 측정 대상이 아니라고 밝힌바있다 . 게다가 식물 성장 관련된 법칙을 인간의 학습 능력에 적용하는 것은 검증된 접근 방법이 아니다 . 그럼에도 불구하고 최소 성분의 법칙을 개발 능력 향상 방법에 접목해보는 것은 의미가 있다 . 왜냐하면 자기의 개발 능력을 결정 짓는 요소가 무엇인지 더 성장을 하려면 무엇을 신장시켜야 하는지 생각해볼 수 있는 계기가 될 수 있기 때문이다 . 예를 들어 영문 독해 능력을 향상시키는 것도 개발 능력 향상을 위한 좋은 방법이 될 수 있다 . 절대적으로 많은 정보가 영문으로 작성되어 있기 때문이다 . 또한 수학 공부도 개발 능력 향상에 도움이 된다 .
  • 27. 2-1 구분동작 http://pandawhale.com/post/6320/how-to-gangnam-style-dance 춤에 재능이 있는 사람은 춤을 보기만 해도 바로 따라 할 수 있다 . 그런데 춤에 재능이 없는 사람이라도 구분 동작을 따라하다보면 춤을 따라 할 수 있게 된다 .
  • 28. 프로그램이란 그 규모와 상관없이 함수 호출의 연속 , 함수의 배열 f 1(f 2(f 3(f 4(f 5 (f 6(f ...(x))))))) 복잡하고 빠른 춤도 느린 영상으로 보면서 동작을 하나 씩 구분해 내다보면 춤이 어떻게 구성되어 있을 수 있는지 아는 것 처럼 거대하고 복잡한 프로그램도 그 동작을 잘게 구분하다보면 어떻게 작성해야하는지 알 수 있게 된다 . 그런데 어떻게 해야 이런 능력을 키울 수 있나 ? 추상화 능력이 필요하다 .
  • 30. 지표상에서 던진 공은 얼마나 날아가게 될까 ? • 3 차원 공간에서의 운동을 2 차원으로 단순화 • 2 차원에서의 포물선 운동 적용 • 공기 저항은 고려하지 않음 만약 공기 저항도 고려하고 , 공이 매끄러운 형태의 것이 아니라고 한다면 ? 단순한 모델에서 시작하여 변수를 추가 CSV, XML, JSON, MS Excel 문서의 차이점과 공통점은 무엇일까 ?
  • 31. 2-3 자료구조와 알고리즘 설계 구현 능력 • 앞서 설명하였듯이 문제를 해결하기 위한 도구적 지식 • 많으면 많을 수록 , 익숙하면 익숙할 수록 좋은 것 • 익히는데 많은 시간이 소요된다 . 많은 기업에서 채용 시 자료구조와 알고리즘 설계 구현 능력을 평가하는 이유 중의 하나는 이것 때문이다 .
  • 32. 학교에서 이런저런 알고리즘을 배우기는 하는데 그거 ' 실제 개발 ' 에서는 잘 안 쓰는 것 아닌가요 ? 돈 계산만 할 줄 알면 되었지 , 왜 수학을 배우나요 ? 이름 석자만 쓸 줄 알면 되었지 , 뭐하러 글을 배우나요 ? ' 실제 개발 ' 이라고 생각하는 범위가 어디냐에 따라 다르다고 하겠다 . 만약 프로그램 개발이란 게 출시된 라이브러리와 프레임워크를 조합하는 것이라고 생각한다면 이런 생각이 맞을 수도 있다 . 그러나 라이브러리 ' 사용자 ' 수준이 되는 이상을 원한다면 자료구조와 알고리즘 이해는 매우 중요하다 .
  • 33. 2-4 컴퓨터 언어에 대한 이해 컴퓨터 언어를 잘 이해하고 있냐는 질문은 한국어를 잘 이해하고 있냐고 묻는 것 만큼 모호한 것 또한 컴퓨터 언어가 가리키는 대상은 그만큼 방대한 것 우리가 사용하는 ' 고급 언어 ' 는 수많은 지성들이 연구하여 만들어 낸 결정체이다 . 천재 본 노이만은 고급 언어의 필요성에 동의하지 않았다 . 천재라고 하여 항상 옳은 결정만 하는 것은 아닌 것 같다 . https://en.wikipedia.org/wiki/Structured_programming 구조적 프로그래밍 관점에서 프로그래밍이란 어떤 함수 (subroutines) 들을 만들 것인가 , 그리고 각각의 함수의 제어를 sequence( 어떤 순서로 함수를 실행할 것인가 ), selection( 분 기 ), iteration( 반복 ), recursion( 재귀 ) 로 구현하는 것
  • 34. 2-5 컴퓨터 아키텍처에 대한 이해 BTree 탄생 과정을 떠올려 보자 http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html 컴퓨터 시스템 환경은 계속 변하고 발전해오고 있다 . 이런 변화에 따라 새로운 알고리즘이 나오기도 한다 . 그런데 이런 알고리즘은 갑자기 하늘에서 뚝 떨어진 게 아니다 . 마이크로 아키텍처가 변할 때 마다 새로운 알고리즘을 만들어 내야 한다라기보다도 이러한 성능 수치 특성에 따라 최적의 알고리즘을 고안해 내는 것이다 .
  • 35. 2-6 문제 파악 능력 앞서 언급했던 reduction 에 관한 것 알고 있다고 생각하는 것을 잘 알고 있는 것도 중요하지만 무엇을 모르고 있다는 것을 아는 것도 중요하다 . 어떤 문제를 해결 방법이 알려진 여러 세부 문제들의 조합들로 나누었다고 했을 때 , 그 세부 문제들을 항상 모두 다 알고 있기란 어렵기 때문이다 . 즉 무엇을 더 알아야 할지 아는 게 중요하다 .
  • 37. 3-1 절대적으로 필요한 것은 동료 인류가 도시를 만들면서 지식의 양은 폭발적으로 증가했다 . 내가 모르는 것을 누군가는 알고 , 누군가가 모르는 것은 내가 알고 있다 . 같은 관심사를 가진 동료를 옆에 두는 것은 서로의 지식 향상에 많은 도움이 된다 . 물론 동료를 그 어떤 목적을 위한 ' 수단 ' 으로 대하라는 것은 아니다 .
  • 38. 3-1 절대적으로 필요한 것은 동료 인류가 도시를 만들면서 지식의 양은 폭발적으로 증가했다 . 내가 모르는 것을 누군가는 알고 , 누군가가 모르는 것은 내가 알고 있다 . 같은 관심사를 가진 동료를 옆에 두는 것은 서로의 지식 향상에 많은 도움이 된다 . 물론 동료를 그 어떤 목적을 위한 ' 수단 ' 으로 대하라는 것은 아니다 .
  • 39. 3-2 학과 과정의 중요성 전공 과목이든 교양 과목이든 개발 능력 향상에 필요한 것은 모두 대학교 전산학과 교육과정에 다룬다 . 다만 고등학생이라고 하여 중학교 과정을 다 알고 있는 게 아닌 것처럼 역시 어떤 과목에 대한 수업을 듣고 좋은 학점을 얻었다해서 , 그 과목에 대한 내용을 잘 알고 있다고 말하는 것은 어려울 수 있다 . 인기있는 프레임워크의 사용방법을 익힌다거나 하는 것은 경험있는 실력있는 개발자라면 매우 짧은 시간 안에 익힐 수 있게 된다 . 업계에서 쓰이는 지식을 익히는 것보다는 좀 더 익히는데 오랜 시간이 걸리는 학교 수업 과목에 충실할 것을 권하고 싶다 .
  • 40. 3-3 비학과 과정의 비중요성 언급하였듯이 개발 과정에 필요한 지식들은 모두 학과 과정에서 다룬다 . 다만 발표자 스스로도 대학생 시절을 돌이켜 볼 때 , 학교에서는 도무지 ' 실제 개발 ' 에 필요한 지식을 가르치지 않는다고 불만투성이였던 시절이 있다 . 유행하는 지식을 가르치지 않아서 였다 . 그러나 유행은 유행이었다 . 물론 유행하는 기술을 익혀 만들고 싶은 그 어떤 것을 구현하는 것은 매우 의미있는 일이다 . 다만 유행이 되는 기술을 익히기 위해 더 오랜 시간 동안 가치있을 지식을 습득할 수 있는 기회를 놓치는 것은 아까운 일이다 . 2016 년 현재 4GL 언어는 잘 쓰이지 않고 , PHP 는 점점 활용처가 줄어드는 것처럼 , 지금의 안드로이드나 iOS 또는 웹 개발 프레임워크가 그 전철을 밟을 수도 있다 .
  • 41. 3-4 연습 , 연습 , 연습 모든 것은 연습 대상이다 . 자료구조와 알고리즘 설계 / 구현 능력 뿐만 아니라 , ' 반복문 ' 을 잘 구현하는 것에도 수 많은 연습이 필요하다 . 10+ 년 전업 개발자인 발표자도 좋은 ' 반복문 ' 구현 예를 찾아 배운다 . 재귀 함수 구현은 말할 것도 없다 .
  • 42. 좋은 반복문 구현 예 문자열 타입으로 된 두 개의 숫자를 입력 받아 곱셈 결과를 반환화는 함수를 구현해야 한다면 ? 대략 몇 줄의 소스 코드가 필요할까 ? 98765432123456789123456789 12345678987654321234X 395061728493827156493827156 296296296370370367370370367 ... 1219326320073159590707514115364730767524157626
  • 43. 좋은 반복문 구현 예 간결 간결 !!! 정답을 내는 것에 만족하지 않고 , 더 간결하게 그리고 더 빠른 실행 속도를 낼 수 있도록 계속 연습하는 게 필요하다 .
  • 45. 결론 일단 개발을 좋아하는 것이 중요합니다 . 만약 그다지 좋아하지 않는다면 다른 더 좋아하는 일을 찾아보는 것을 권합니다 . 만약 스스로가 개발 능력이 부족하다고 생각한다면 , 개발 능력이란 여러 능력이 결합된 형태라고 할 수 있으니 직접적으로 개발과 상관없다 하더 라도 그 능력이 좋아지면 개발 능력이 덩달아 좋아질 수가 있다고 봅니 다 . 그러한 결정 인자가 무엇인지 찾아 향상시켜보는 경험을 가져보기를 권장합니다 . 개발이란 어떤 도구적 지식을 바탕으로 문제를 해결하는 것을 말합니다 . 이러한 도구적 지식은 대학 전산학과 교과 과정과 교양 강의에서 배울 수 있습니다 . 다만 해당 과목을 수강하는 것만으로는 부족할 수 있 고 별도의 많은 시간을 들여 연습을 해야 합니다 . 재미를 강조한 이유가 이것입니다 . 재미있어야 오랜 시간 동안 연습을 할 수 있을 터이 니까요 .