Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

프로그래밍이란?

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

사람과 기계와의 간극 메꾸기 ▸문제를 ‘명확하게’ 이해하기 ▸기계가 이해할 수 있는 수준까지 ▸기계의 언어 ‘코드’로 표현하기 ▸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; } } } }

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

왜 프로그래밍을 하지?

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

좋은 프로그래머란?

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

무엇을 해야 할까?

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Q&A 감사합니다