Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

프로그램 기초

404 views

Published on

프로그래밍 이란?
앞쪽엔 이세돌 알파고 이야기 잠깐

Published in: Software
  • Be the first to comment

  • Be the first to like this

프로그램 기초

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

×