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

Trustin Lee

July 14, 2017
Tweet

More Decks by Trustin Lee

Other Decks in Programming

Transcript

  1. 학생을 위한 직업 소개:
    프로그래머
    이희승
    [email protected]
    부천 고등학교 23기
    Jul 2017

    View Slide

  2. 목차
    ▸프로그래밍이란?
    ▸왜 프로그래밍을 하지?
    ▸좋은 프로그래머란?
    ▸오늘날의 소프트웨어 개발
    ▸무엇을 해야 할까?

    View Slide

  3. 프로그래밍이란?

    View Slide

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

    View Slide

  5. ‘문제’란?
    ▸세상사 모든 것
    ▸지루하거나 복잡하고 오래 걸리는 일
    ▸ 계산, 계획, 검증, 웹/쇼핑 검색 …
    ▸이전에는 불편했을 일
    ▸ 전자 메일, 인스턴트 메시징, 전자 결제/뱅킹 …
    ▸이전에는 심심했을 일
    ▸ 동영상, 음악, 게임, 소셜 네트워크, VR …

    View Slide

  6. 프로그램의 작성
    ▸문제: 전교생 명부를 키 순서대로 정렬해줘
    ▸사람 – OK! (아놔…)
    ▸기계 – What is 정렬? I’m so 멘붕...
    ▸문제: 이 종이에 적힌 걸 그대로 타이핑해줘
    ▸사람 – OK! (니가 하지 왜 나한테…)
    ▸기계 – What is 글자? I’m so 문맹...

    View Slide

  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;
    }
    }
    }
    }

    View Slide

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

    View Slide

  9. 왜 프로그래밍을 하지?

    View Slide

  10. 프로그래머의 동기
    ▸내적 동기가 외적 동기에 비해
    중요한 직업
    ▸과정
    ▸‘흥미로운 문제’를 ‘흥미로운 방법’으로 해결한다.
    ▸사람들과 ‘함께’ 프로그램을 ‘성장’시키고 ‘진화’시킨다.
    ▸결과
    ▸함께 문제 해결의 과정과 결과를 나누고 ‘세상을 바꾼다.’

    View Slide

  11. 좋은 프로그래머란?

    View Slide

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

    View Slide

  13. 좋은 프로그래머의 자질 (계속)
    ▸체계적 · 논리적 · 디테일 중심적
    ▸자신의 체계나 논리에 구멍이 없는지 챙기는 꼼꼼함
    ▸그 체계를 ‘코드’로 잘 표현해낼 수 있다면…
    ▸커뮤니케이션 기술
    ▸규모가 커지면서 팀 플레이의 중요성이 ↑↑↑
    ▸고객과 팀원이 원하는 것을 읽어내기
    ▸나의 논리와 체계를 남에게 글로 설명하기

    View Slide

  14. 사실은 잘 못해도 괜찮은 것: 수학
    ▸고1수준으로 충분
    ▸집합, 명제, 함수, 수열, 지수와 로그, 순열과 조합, 확률, 통계
    (설마 이 정도도 필요 없다고 생각 한 것은…ㅋ)
    ▸분야에 따라서는…
    ▸암호화
    ▸기계 학습
    ▸컴퓨터 그래픽스
    ▸알고리즘 트레이딩

    View Slide

  15. 역시 잘 하면 좋은 것: 영어
    ▸컴퓨터 기술의 제1언어는 영어
    ▸프로그래머가 작성하는 ‘코드’는 전부 영어
    ▸제대로 된 용어를 사용하는 것이 품질에 중대한 영향
    ▸ habgye = jwapyo.x + jwapyo.y (스, 스미마셍…)
    sum = coordinate.x + coordinate.y (끄덕끄덕)
    ▸‘영어 가능’ 프로그래머가 한국어 가능자 대비 절대다수
    ▸내가 짠 끝내주는 프로그램을 한국 사람만 알아야 한다니…
    ▸더 많은 일자리, 더 많은 선택지

    View Slide

  16. 그래서…
    ‘내적 동기’와 ‘자질’이
    어느 정도 맞아 떨어지면
    프로그래머가 되는 것을
    생각해 볼만 할 지도!?
    (또는 그렇게 스스로를 만들어 보면…?)

    View Slide

  17. 오늘날의 소프트웨어 개발
    (흔한 소셜 네트워크 앱으로 살펴보는)

    View Slide

  18. 몇 명의 프로그래머가 필요할까?
    ▸타임라인
    ▸이미지·동영상 저장
    ▸인앱 구매
    ▸프로필·업체 정보
    ▸친구 추천
    ▸메시징
    ▸음성·화상 통화
    ▸로그인·계정 분실
    ▸사용자 행동 분석
    ▸스팸·악성 사용자 검출
    ▸타겟 광고
    ▸성능 분석
    ▸푸시 알림
    ▸타사 앱 연동
    ▸공통 모듈
    ▸…

    View Slide

  19. 오늘날의 소프트웨어
    ▸인공 생명체·하늘에 뜬 비행기
    ▸각각의 역할을 갖는 다양한 모듈로 구성
    ▸기능과 구조, 특징이 계속해서 변화
    ▸변화의 와중에도 24시간 서비스
    ▸한 모듈의 문제가 다른 모듈에 영향을 끼치지 않도록 설계

    View Slide

  20. 첫 직장에서는 아마도…
    ▸서비스 기능의 일부의 일부의 일부의 일부를
    개발
    ▸개별 모듈의 이해도가 상승하면서
    점차 더 많은 모듈을 이해할 수 있게 된다.
    ▸전체의 모습을 모두 이해하기는 너무나 큰
    ▸좋은 소식 – 사실 다 아는 사람은 없다.
    ▸나쁜 소식 – 앞으로도 없을 것이다.
    ▸좋은 소식 – 그래도 괜찮게 만들었다.

    View Slide

  21. 무엇을 해야 할까?

    View Slide

  22. 혼자 처음부터 끝까지 만들어 보기
    ▸간단하지만 완전한 시스템을 만들어 보자.
    ▸앱 또는 웹앱
    ▸서버
    ▸데이터베이스
    ▸조금씩 살을 붙이고 개선해 보자.
    ▸가져다 쓴 모듈 안까지 깊이 들어가 분석해 보자.
    ▸다른 사람과 공유하자.

    View Slide

  23. 기초 공부를 병행하자
    ▸컴퓨터 공학 개론
    ▸알고리즘·자료구조
    ▸언어 마스터하기

    View Slide

  24. 전혀 경험이 없다면…
    ▸유·무료 온·오프라인 과정을 찾아 보자.
    ▸Google “무료 프로그래밍 수업”
    ▸반드시 자신의 PC에서 직접 따라하면서 익힐 것
    ▸벽에 부딪히는 것은 당연
    ▸커뮤니티의 도움을 받자.
    ▸ 본연의 목적을 잊지는 말자.
    전문가 행세나 친목 위주의 활동에는 주의

    View Slide

  25. Q&A
    감사합니다

    View Slide