4. 우리 wife의 반응
경기 시작 전 “당연히 컴퓨터가 이기는 거 아냐?”
ß (나) “아직 컴퓨터가 그 정도는 아니야,
바둑은 체스랑 달라서 Blah Blah … ”
알파고 1승 후 “컴퓨터 하는 사람이 그것도 몰라?”
ß (나) “쟤는 집에 있는 그런 컴퓨터가 아니야
CPU가 1,920개 GPU가 280개 …”
알파고 2승 후 “거봐” (그날따라 집의 인터넷 느림)
ß (나) “구글이 바둑 두느라고 인터넷, 전기 다 가져다 써서 그래”
5. 이세돌 vs. AlphaGo, 말들
해설자 송태곤 9단 (2국 중간) “이세돌 9단의 패착을 찾지를 못하겠어요.
인간의 눈으로 볼 때는 실수는 알파고만 하고 있었거든요”
허사비스 딥마인드 CEO (1국 승리 후) "우리는 달에 착륙했다. 팀이 자랑스럽다"
이세돌 (1국 패배 후) “진다고 생각 안 했는데 너무 놀랐다”,
“이세돌이 패한 것일 뿐 인간이 패한 것은 아니다”
이세돌 (첫 기자회견) “3대2정도의 승리가 아니라 한판 질까 말까 정도”
이세돌 (대국하루전 알파고 원리를 듣고) “조금 긴장했다. 5대0승리는 아닐 것 같다”
이세돌 (5국 후) “물론 질 수도 있다. 그러나 바둑의 아름다움, 인간의 아름다움을
컴퓨터가 이해하고 두는 게 아니기에 바둑의 가치는 계속될 것”
이세돌 (4국 승리 후) “그전에도, 앞으로도 그 어떤 것과 값어치를 매길 수 없는 1승”
6. 이세돌 vs. AlphaGo, 그 여파
• 온갖 AI 이슈
ü AI의 의도적 실수 and/or 버그,
ü 경기 상황 중간 보고
ü AI의 윤리
• AI vs. 인간
ü 명령을 받을 것인가? 내릴 것인가?
ü AI는 우리의 적인가?
• AI 시대에 대응하는 자세
• 최저 생활비 보장
* AI (Artificial Intelligence, 인공지능)
8. 자동차
• 자동차는 시키는 대로 간다.
– 자동차 자체는 그냥 껍데기일 뿐
– 자동차는 운전자가 원하는 곳으로 간다.
– ‘자동’차 이지만, 모든 것이 자동으로 되지는 않는다.
• 밟으면 엔진이 돌고, 핸들을 돌려야 방향이 바뀐다.
– 더구나, 자동차는 누군가가 만들었다.
– 정말 처음부터 자동으로 된 것은 아무 것도 없다.
• 그 누군가가 설계하고,
• 또 누군가가 Every Detail을 다 정했다.
9. 컴퓨터
• 컴퓨터도 시키는 것만 한다.
– 컴퓨터 자체는 그냥 껍데기일 뿐
– 컴퓨터는 프로그래머가 시킨 일만 한다.
– ‘컴퓨터’ 이지만, 모든 것을 알아서 하지는 않는다.
• 소프트웨어를 만들어 넣고, 사용자가 정한 기능이 수행된다.
– 더구나, 컴퓨터는 누군가가 만들었다.
– 정말 처음부터 자동으로 된 것은 아무 것도 없다.
• 그 누군가가 설계하고,
• 또 누군가가 Every Detail을 다 정했다.
10. 컴퓨터가 하는 일은 문제 해결
• 문제를 모르면 답도 없다. 문제란 두 종류인데,
– 이전에 있던 것들의 생산성을 높이는 것들
– 전혀 새로운 가치를 사람에게 제공하는 것들
• 문제는 사람이 정의한다.
– 그리고, 대부분의 문제는 복잡하다.
• 그 복잡함의 근원에는 다양한 상황과 데이터가 있다.
– 그래서, 완벽하고 간단한 정답은 보통 없으며
– 상황에 따라, 데이터에 따라 여러 가지 답이 있다.
– 어떤 경우에도, 그 답도 사람이 만들고
– 최종적으로는 소프트웨어라는 도구로 구현된다.
11. 문제해결 도구, 소프트웨어
• 복잡한 문제를 해결하는 절차
1. 문제를 잘 이해하려고 노력한다.
• 문제가 존재하는 상황과 연관된 데이터를 잘 살펴본다.
2. 큰 문제를 조금은 덜 복잡한 작은 문제들로 나눈다.
• 조각 낸 작은 문제들의 답을 예측하고,
• 그 답들을 순서에 맞추어 잘 연결하여,
• 처음 큰 문제의 답이 만들어지는지 검토한다.
• 필요하면 작은 문제를 더 작은 문제들로 다시 나눈다.
3. 작은 문제에 대한 답을 구하는 방법을 찾는다.
• 어떤 때는 간단한 논리와 산수로
• 또 어떤 때는 복잡한 논리와 고도의 수학이 필요하다.
4. 작은 문제의 답들을 엮어 큰 문제의 답을 얻는다.
12. 문제의 예: 자동차, 1 단계
• 큰 문제
– 승객을 목적지에 안전하게 도달하게 하는 것
• 큰 문제를 해결하기 위한 작은 문제들
1. 굴러가게 해야 한다.
2. 원하는 방향으로 가게 해야 한다.
3. 설 수 있어야 한다.
4. 안전하고, 편하게 위 목적을 달성해야 한다.
13. 문제의 예: 자동차, 2 단계
• 작은 문제를 더 작게
1. 굴러가게 해야 한다.
• 엔진이 필요하다.
• 엔진의 동력을 바퀴에 전달해야 한다.
2. 원하는 방향으로 가게 해야 한다.
• 핸들이 필요하다. 바퀴를 움직여야 한다.
3. 설 수 있어야 한다.
• 브레이크 페달이 필요하다. 움직이는 바퀴를 세워야 한다
4. 편하게 위 목적을 달성해야 한다.
• 깜박이가, 전조등이, 미등이, 에어백이,
• 에어컨이, 내비게이션이, 블랙박스가 필요하다.
• …
14. 문제의 예: 자동차, 3단계
• 더 작은 문제를 한층 더 작게
1. 굴러가게 해야 한다.
• 엔진이 필요하다.
A. 연료는? (휘발류? 경유? 전기?)
• 연료통 (배터리) 크기?
• 연료통 (배터리) 위치?
• 남은 량 측정?
• 화재 방지 방법?
B. 엔진 출력은?
C. …
• 엔진의 동력을 바퀴에 전달해야 한다.
• …
여러 가지 답
상황을 고려하여
한 가지를 선택하거나
두 가지를 섞어 쓸 수 있다.
선택은 다른 문제를 만든다
(또는 문제를 바꾼다)
가끔은 문제가 작아질수록 더 고도의 전문성이 요구된다.
15. 소프트웨어 / 프로그램 / 프로그래밍 언어
• 컴퓨터 소프트웨어는
컴퓨터 프로그램들을 모아 놓은 것
• 컴퓨터 프로그램은
프로그래밍 언어의 명령들을 모아 놓은 것
• 프로그래밍 언어는
데이터와,
문제를 해결하는 방법(논리와 수학)을
절차적/구조적으로 표현하여
컴퓨터가 실행할 수 있게 해주는 도구
큰 문제
해결 도구
작은 문제
해결
문제 해결
방법 표현
아직은 사람만 가능 J
16. 그래서 뭘 하자는 건가?
• 코딩(프로그램)으로 문제와, 문제의 해결 방안을 표현하는 것
– 문제 그 자체, 또는 문제와 연관된 데이터
(자료구조)
– 논리적/절차적인 문제 해결 방안
(알고리즘)
문제의 핵심, 세상의 모든 것은 데이터 !!
• 데이터를 어떻게 얻고
• 데이터의 의미를 이해하고
• 데이터를 이용하여
• 다른 의미있는 데이터 만들기
17. 코딩: 문제의 근원인 데이터의 표현
• 데이터의 형태
– 숫자 (정수, 실수, ...), 문자, 문자열
• 예, 0, -6, 3.1415, ‘A’, “국민대학교”
– 조직화된 데이터
• 의미 있는 한 덩어리의 데이터
예, (이름, 생년월일, 전화번호)
• 데이터 사이의 관계
– 데이터 또는 조직화된 데이터의 집합 또는 순서
• 예, 오늘의 검색어 순위
• 예, 금주의 음악 챠트
18. 코딩: 문제 해결 방법의 표현
• 순차적 접근 (Procedural)
– 정말로 낱낱이 풀어서, 이것하고, 다음에 저것하고, 그 다음은 …
• 산수와 논리 (Arithmetic & Logic)
– 뭐하고 뭐를 더하고, 곱하고, …. ( +, -, *, /, …)
– 참과 거짓, 그리고, 또는, 반대의 관계 ( True, False, AND, OR, NOT )
• 조건과 분기 (Conditional Branch)
– If (조건) then 이런 일 else 저런 일
• 반복 (Iteration)
– 여기서부터 저기까지 (몇 번, 언제까지, 무한히) 반복
20. 프로그래밍 언어도 많다
• 문제에 따라, 컴퓨터에 따라
http://3.bp.blogspot.com/-QZ4yib_WQFk/VOej26zs_NI/AAAAAAAAAXY/DF7R-KmYzk4/s1600/prog-languages.png
1. Java
2. C
3. C++
4. C#
5. Python
6. PHP
7. JavaScript
8. Perl
9. Ruby
2016-04 TIOBE Index
21. 언어의 첫 걸음: Hello World!
• Java 버전
// Hello World! in Java
class HelloWorld {
static public void main(String args[]) {
System.out.println("Hello World!”);
}
}
22. 언어의 첫 걸음: Hello World!
• C 버전
/* Hello World! in C, Ansi-style */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World!");
return EXIT_SUCCESS;
}
23. 언어의 첫 걸음: Hello World!
• 엔트리
• Python 버전
# Hello World! in Python 3
print("Hello World!")
• Scratch 버전
24. Why Entry?
• Entry(엔트리)는 프로그래밍 언어의 일종
– 쉽고, 재미있고,
– 무료, 오픈 소스이고,
– 웹으로 되고, PC, Mac, 안드로이드, 아이폰에서도 되고,
– 문법보다는 문제에 더 신경쓸 수 있게 해주고
– 역시, 다른 모든 프로그래밍 언어처럼 절차적인 문제 해결,
– “~~일이 발생하면 ~~를 해요” 방식의 문제 해결이 가능
• 어떤 이벤트에 대하여 반응
25. OFF
ON
절차적으로 정리하면
스위치의 위치 확인
만일 스위치가 ON 위치 이면
불을 켠다.
아니면
불이 끈다.
프로그램으로 짜면
if (switch == ON) then
light = ON
else
light = OFF
말로 하면
스위치를 누를 때 불을 켠다.
프로그램의 예 (불 켜기)
* 모든 언어마다 문법은 조금씩 다름
26. 알파고도 풀 수 없는 문제..
시작
(여자가 화가 남)
미안해
뭐가 미안해?
알아몰라
알면서
그래?
모르면서
그래?
잘못했어
뭘 잘못했는데?
남자
여자
: 멘붕에 따른 임의의 선택
(머리속에서 어설픈 동전던지기)
Man Trapped
27. 예제: Man Trapped
여자_화남 = TRUE;
미안: 남자(“미안해”);
여자(“뭐가 미안해?”);
뭐를: 남자(머릿속 동전 던지기);
if (동전=앞면) then
남자(“알아”);
여자( “알면서그래?”);
else
남자(“몰라”);
여자(“모르면서 그래?”);
남자(머릿속 동전 던지기);
if (동전=앞면) then
goto 미안;
남자(“잘못했어”);
여자(“ 뭘 잘못했는데?”);
goto 뭐를;
28. 예제: Man Trapped (Entry code: http://j.mp/man-trapped)
• 사건을 단계로 풀어보면…
1. 시작
2. ‘미안해’ 하고, 이유 추궁 당하고,
3. 아무 대답이나 하고,
4. 제대로 일격을 당하고
나름 작전을 선택하고
5. ‘잘못했어‘ 하고 또 이유 추궁당하고
6. 다시 3번으로
29. 프로그래밍 요소
• 순차 실행
– 아래로 향하는 화살표
– 블록(문장)의 나열
• 반복
– 위로 올라가는 화살표
• 조건에 따른 선택
– 두 방향의 화살표
30. 요약
1. 이세돌 vs. AlphaGo
2. 프로그램을 배운다는 것
ü 자동차 vs. 컴퓨터
3. 프로그래밍에 의한 절차적 문제 해결
ü 데이터 !!
ü 프로그래밍 언어
ü 조건과 절차
ü Man-Trapped
http://j.mp/man-trapped