Upgrade to Pro — share decks privately, control downloads, hide ads and more …

학생을 위한 직업 소개 - 프로그래머

학생을 위한 직업 소개 - 프로그래머

2017.07.14 부천 고등학교

강의 중 소개되는 동영상들 (한국어 자막을 켜세요):
- 동기 유발의 놀라운 과학 https://www.ted.com/talks/dan_pink_on_motivation?language=ko
- 신체언어가 여러분의 모습을 만듭니다 https://www.ted.com/talks/amy_cuddy_your_body_language_shapes_who_you_are?language=ko

9b123f408258511b201ca1230f260340?s=128

Trustin Lee

July 14, 2017
Tweet

Transcript

  1. 학생을 위한 직업 소개: 프로그래머 이희승 t@motd.kr 부천 고등학교 23기

    Jul 2017
  2. 목차 ▸프로그래밍이란? ▸왜 프로그래밍을 하지? ▸좋은 프로그래머란? ▸오늘날의 소프트웨어 개발

    ▸무엇을 해야 할까?
  3. 프로그래밍이란?

  4. 프로그래밍이란? ▸‘(컴퓨터) 프로그램을 작성’해 ▸‘문제를 해결하는’ 행위

  5. ‘문제’란? ▸세상사 모든 것 ▸지루하거나 복잡하고 오래 걸리는 일 ▸

    계산, 계획, 검증, 웹/쇼핑 검색 … ▸이전에는 불편했을 일 ▸ 전자 메일, 인스턴트 메시징, 전자 결제/뱅킹 … ▸이전에는 심심했을 일 ▸ 동영상, 음악, 게임, 소셜 네트워크, VR …
  6. 프로그램의 작성 ▸문제: 전교생 명부를 키 순서대로 정렬해줘 ▸사람 –

    OK! (아놔…) ▸기계 – What is 정렬? I’m so 멘붕... ▸문제: 이 종이에 적힌 걸 그대로 타이핑해줘 ▸사람 – OK! (니가 하지 왜 나한테…) ▸기계 – What is 글자? I’m so 문맹...
  7. 사람과 기계와의 간극 메꾸기 ▸문제를 ‘명확하게’ 이해하기 ▸기계가 이해할 수

    있는 수준까지 ▸기계의 언어 ‘코드’로 표현하기 ▸Java, Swift, Rust, Go, Python, Ruby, JavaScript … public static void bubbleSort(int[] numArray) { int n = numArray.length; for (int i = 0; i < n; i++) { for (int j = 1; j < (n - i); j++) { if (numArray[j - 1] > numArray[j]) { int temp = numArray[j - 1]; numArray[j - 1] = numArray[j]; numArray[j] = temp; } } } }
  8. 코드 이상의 것 ▸MS Windows = 5천만 줄 이상의 코드

    ▸어떻게 구획을 나누고 조직화할까? ▸문제가 있는데 어느 부분이 원인이지? ▸더 빠르게 하고 싶은데 어디를 고쳐야 하지? ▸회사에 사람이 새로 들어오면 어떻게 설명하지? ▸새로운 기능을 추가해야 하는데 고칠 곳이 너무 많아… ▸이제부터 이걸 폰에서도 돌릴 거래… (맙소사, 집에 가긴 글렀군!)
  9. 왜 프로그래밍을 하지?

  10. 프로그래머의 동기 ▸내적 동기가 외적 동기에 비해 중요한 직업 ▸과정

    ▸‘흥미로운 문제’를 ‘흥미로운 방법’으로 해결한다. ▸사람들과 ‘함께’ 프로그램을 ‘성장’시키고 ‘진화’시킨다. ▸결과 ▸함께 문제 해결의 과정과 결과를 나누고 ‘세상을 바꾼다.’
  11. 좋은 프로그래머란?

  12. 좋은 프로그래머의 자질 ▸변화를 받아들이기 ▸내적으로: 롤이나 옵치보다도 메타의 변화가

    빠른 곳 ▸외적으로: 이거랑 저것도 해 주세요~ (앗, 이젠 필요 없어졌어요ㅋㅋㅋ) ▸변화에 따라 끊임없이 체계적으로 재구성하기 ▸내 MP3·MKV 컬렉션의 폴더 구조를… 태그는 일관되게… ▸약간은 게으르기 ▸반복되는 작업을 자동화·재사용하기 ▸주어진 도구에 만족하지 않고 도구를 프로그래밍하기
  13. 좋은 프로그래머의 자질 (계속) ▸체계적 · 논리적 · 디테일 중심적

    ▸자신의 체계나 논리에 구멍이 없는지 챙기는 꼼꼼함 ▸그 체계를 ‘코드’로 잘 표현해낼 수 있다면… ▸커뮤니케이션 기술 ▸규모가 커지면서 팀 플레이의 중요성이 ↑↑↑ ▸고객과 팀원이 원하는 것을 읽어내기 ▸나의 논리와 체계를 남에게 글로 설명하기
  14. 사실은 잘 못해도 괜찮은 것: 수학 ▸고1수준으로 충분 ▸집합, 명제,

    함수, 수열, 지수와 로그, 순열과 조합, 확률, 통계 (설마 이 정도도 필요 없다고 생각 한 것은…ㅋ) ▸분야에 따라서는… ▸암호화 ▸기계 학습 ▸컴퓨터 그래픽스 ▸알고리즘 트레이딩
  15. 역시 잘 하면 좋은 것: 영어 ▸컴퓨터 기술의 제1언어는 영어

    ▸프로그래머가 작성하는 ‘코드’는 전부 영어 ▸제대로 된 용어를 사용하는 것이 품질에 중대한 영향 ▸ habgye = jwapyo.x + jwapyo.y (스, 스미마셍…) sum = coordinate.x + coordinate.y (끄덕끄덕) ▸‘영어 가능’ 프로그래머가 한국어 가능자 대비 절대다수 ▸내가 짠 끝내주는 프로그램을 한국 사람만 알아야 한다니… ▸더 많은 일자리, 더 많은 선택지
  16. 그래서… ‘내적 동기’와 ‘자질’이 어느 정도 맞아 떨어지면 프로그래머가 되는

    것을 생각해 볼만 할 지도!? (또는 그렇게 스스로를 만들어 보면…?)
  17. 오늘날의 소프트웨어 개발 (흔한 소셜 네트워크 앱으로 살펴보는)

  18. 몇 명의 프로그래머가 필요할까? ▸타임라인 ▸이미지·동영상 저장 ▸인앱 구매 ▸프로필·업체

    정보 ▸친구 추천 ▸메시징 ▸음성·화상 통화 ▸로그인·계정 분실 ▸사용자 행동 분석 ▸스팸·악성 사용자 검출 ▸타겟 광고 ▸성능 분석 ▸푸시 알림 ▸타사 앱 연동 ▸공통 모듈 ▸…
  19. 오늘날의 소프트웨어 ▸인공 생명체·하늘에 뜬 비행기 ▸각각의 역할을 갖는 다양한

    모듈로 구성 ▸기능과 구조, 특징이 계속해서 변화 ▸변화의 와중에도 24시간 서비스 ▸한 모듈의 문제가 다른 모듈에 영향을 끼치지 않도록 설계
  20. 첫 직장에서는 아마도… ▸서비스 기능의 일부의 일부의 일부의 일부를 개발

    ▸개별 모듈의 이해도가 상승하면서 점차 더 많은 모듈을 이해할 수 있게 된다. ▸전체의 모습을 모두 이해하기는 너무나 큰 ▸좋은 소식 – 사실 다 아는 사람은 없다. ▸나쁜 소식 – 앞으로도 없을 것이다. ▸좋은 소식 – 그래도 괜찮게 만들었다.
  21. 무엇을 해야 할까?

  22. 혼자 처음부터 끝까지 만들어 보기 ▸간단하지만 완전한 시스템을 만들어 보자.

    ▸앱 또는 웹앱 ▸서버 ▸데이터베이스 ▸조금씩 살을 붙이고 개선해 보자. ▸가져다 쓴 모듈 안까지 깊이 들어가 분석해 보자. ▸다른 사람과 공유하자.
  23. 기초 공부를 병행하자 ▸컴퓨터 공학 개론 ▸알고리즘·자료구조 ▸언어 마스터하기

  24. 전혀 경험이 없다면… ▸유·무료 온·오프라인 과정을 찾아 보자. ▸Google “무료

    프로그래밍 수업” ▸반드시 자신의 PC에서 직접 따라하면서 익힐 것 ▸벽에 부딪히는 것은 당연 ▸커뮤니티의 도움을 받자. ▸ 본연의 목적을 잊지는 말자. 전문가 행세나 친목 위주의 활동에는 주의
  25. Q&A 감사합니다