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