Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

11,129 views

Published on

제 4회 D2 CAMPUS SEMINAR 2세션

Published in: Technology

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

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

×