프로그램 기초

31
Computer Programming I 알파고 이야기, Programming 이민석 국민대학교 컴퓨터공학부

Upload: minsuk-lee

Post on 17-Jan-2017

139 views

Category:

Software


1 download

TRANSCRIPT

Computer Programming I

알파고 이야기, Programming

이민석국민대학교 컴퓨터공학부

학습 목표

1. 이세돌 vs. 알파고2. 프로그램을 배운다는 것

3. 프로그래밍에 의한 절차적 문제 해결

이세돌 vs. AlphaGo

우리 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,인공지능)

프로그래밍에 의한 문제 해결

비교 예..자동차 만들기 vs. 컴퓨터로 문제 해결하기

자동차

• 자동차는 시키는 대로 간다.– 자동차 자체는 그냥 껍데기일 뿐– 자동차는 운전자가 원하는 곳으로 간다.– ‘자동’차 이지만, 모든 것이 자동으로 되지는 않는다.

• 밟으면 엔진이 돌고, 핸들을 돌려야 방향이 바뀐다.

– 더구나, 자동차는 누군가가 만들었다.– 정말 처음부터 자동으로 된 것은 아무 것도 없다.

• 그 누군가가 설계하고,• 또 누군가가 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

고맙습니다

https://www.facebook.com/groups/kmu.cs/