목차
▸프로그래밍이란?
▸왜 프로그래밍을 하지?
▸좋은 프로그래머란?
▸오늘날의 소프트웨어 개발
▸무엇을 해야 할까?
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에서 직접 따라하면서 익힐 것
▸벽에 부딪히는 것은 당연
▸커뮤니티의 도움을 받자.
▸ 본연의 목적을 잊지는 말자.
전문가 행세나 친목 위주의 활동에는 주의