3. 자동차
• 자동차는 시키는 대로 간다.
– 자동차 자체는 그냥 껍데기일 뿐
– 자동차는 운전자가 원하는 곳으로 간다.
– ‘자동’차 이지만, 모든 것이 자동으로 되지는 않는다.
• 밟으면 엔진이 돌고, 핸들을 돌리면 방향이 바뀐다.
– 더구나, 자동차는 누군가가 만들었다.
– 정말 처음부터 자동으로 된 것은 아무 것도 없다.
• 그 누군가가 설계하고,
• 또 누군가가 Every Detail을 다 정했다.
4. 컴퓨터
• 컴퓨터는 시키는 것만 한다.
– 컴퓨터 자체는 그냥 껍데기일 뿐
– 컴퓨터는 프로그래머가 시킨 일만 한다.
– ‘컴퓨터’ 이지만, 모든 것을 알아서 하지는 않는다.
• 소프트웨어를 넣고, 사용자가 지정한 기능이 수행된다.
– 더구나, 컴퓨터는 누군가가 만들었다.
– 정말 처음부터 자동으로 된 것은 아무 것도 없다.
• 그 누군가가 설계하고,
• 또 누군가가 Every Detail을 다 정했다.
5. 컴퓨터가 하는 일은 문제 해결
• 문제를 모르면 답도 없다. 문제란 두 종류인데,
– 이전에 있던 것들의 생산성을 높이는 것들
– 전혀 새로운 가치를 사람에게 제공하는 것들이다
• 문제는 사람이 정의한다.
– 그리고, 대부분의 문제는 복잡하다.
• 그 복잡함의 근원에는 다양한 상황과 데이터가 있다.
– 그래서, 완벽하고 간단한 정답은 보통 없으며
– 상황에 따라, 데이터에 따라 여러 가지 답이 있다.
– 어떤 경우에도, 그 답도 사람이 만들고
– 최종적으로는 소프트웨어라는 도구로 구현된다.
6. 문제해결 도구, 소프트웨어
• 복잡한 문제를 해결하는 절차
1. 문제를 잘 이해하려고 노력한다.
• 문제가 존재하는 상황과 연관된 데이터를 잘 살펴본다.
2. 큰 문제를 조금은 덜 복잡한 작은 문제들로 나눈다.
• 조각 낸 작은 문제들의 답을 예측하고,
• 그 답들을 순서에 맞추어 잘 연결하여,
• 처음 큰 문제의 답이 만들어지는지 검토한다.
• 필요하면 작은 문제를 더 작은 문제들로 다시 나눈다.
3. 작은 문제에 대한 답을 구하는 방법을 찾는다
• 어떤 때는 간단한 논리와 산수로
• 또 어떤 때는 복잡한 논리와 고도의 수학이 필요하다.
4. 작은 문제의 답들을 엮어 큰 문제의 답을 얻는다.
7. 문제의 예: 자동차, 1 단계
• 큰 문제
– 승객을 목적지에 안전하게 도달하게 하는 것
• 큰 문제를 해결하기 위한 작은 문제들
1. 굴러가게 해야 한다.
2. 원하는 방향으로 가게 해야 한다.
3. 설 수 있어야 한다.
4. 안전하고, 편하게 위 목적을 달성해야 한다.
8. 문제의 예: 자동차, 2 단계
• 작은 문제를 더 작게
1. 굴러가게 해야 한다.
• 엔진이 필요하다.
• 엔진의 동력을 바퀴에 전달해야 한다.
2. 원하는 방향으로 가게 해야 한다.
• 핸들이 필요하다. 바퀴를 움직여야 한다.
3. 설 수 있어야 한다.
• 브레이크 페달이 필요하다. 움직이는 바퀴를 세워야 한다
4. 편하게 위 목적을 달성해야 한다.
• 깜박이가, 전조등이, 미등이, 에어백이,
• 에어컨이, 네비게이션이, 블랙박스가 필요하다.
• …
9. 문제의 예: 자동차, 3단계
• 더 작은 문제를 한층 더 작게
1. 굴러가게 해야 한다.
• 엔진이 필요하다.
A. 연료는? (휘발류? 경유? 전기?)
• 연료통 (배터리) 크기?
• 연료통 (배터리) 위치?
• 남은 량 측정?
• 화재 방지 방법?
B. 엔진 출력은?
C. …
• 엔진의 동력을 바퀴에 전달해야 한다.
• …
여러 가지 답
상황을 고려하여
한 가지를 선택하거나
두 가지를 섞어 쓸 수 있다.
선택은 다른 문제를 만든다
(또는 문제를 바꾼다)
가끔은 문제가 작아질 수록 전문성이 더 요구된다.
10. 소프트웨어 / 프로그램 / 언어
• 컴퓨터 소프트웨어는
컴퓨터 프로그램들을 모아 놓은 것
• 컴퓨터 프로그램은
프로그래밍 언어의 명령들을 모아 놓은 것
• 프로그래밍 언어는
문제를 해결하는 방법(논리와 수학)을
절차적/구조적으로 표현할 수 있게 해주는 것
큰 문제
해결 도구
작은 문제
해결
문제 해결
방법 표현
11. 소프트웨어 / 프로그램 / 언어
• 컴퓨터 소프트웨어는
컴퓨터 프로그램들을 모아 놓은 것
• 컴퓨터 프로그램은
프로그래밍 언어의 명령들을 모아 놓은 것
• 프로그래밍 언어는
문제를 해결하는 방법(논리와 수학)을
절차적/구조적으로 표현할 수 있게 해주는 것
큰 문제
해결 도구
작은 문제
해결
문제 해결
방법 표현
아직까지는 사람만 가능
12. 그래서 뭘 하자는 건가?
• 코딩(프로그램)으로 표현 하는 것
– 문제 그 자체, 또는 문제와 연관된 데이터
(자료구조)
– 논리적/절차적인 문제 해결 방안
(알고리즘)
문제의 핵심은 데이터
13. 코딩: 문제의 근원인 데이터의 표현
• 데이터의 형태
– 숫자 (정수, 실수, ...), 문자, 문자열
• 예, 0, -6, 3.1415, ‘A’, “국민대학교”
• 데이터의 조직화
– 의미 있는 한 덩어리의 데이터
• 예, (이름, 생년월일, 전화번호)
• 데이터 사이의 관계
– 데이터 또는 조직화된 데이터의 집합 또는 순서
• 예, 오늘의 검색어 순위
• 예, 금주의 음악 챠트
14. 코딩: 문제 해결 방법의 표현
• 순차적 접근 (Procedural)
– 이것하고, 다음에 저것하고, 그 다음은 …
• 산수와 논리 (Arithmetic & Logic)
– 뭐하고 뭐를 더하고, 곱하고, …. ( +, -, *, /, …)
– 참과 거짓의 관계 ( AND, OR, NOT )
• 조건과 분기 (Conditional)
– if (조건) then 이런 일 else 저런 일
• 반복 (Iterative)
– 여기서부터 저기까지 이런 일을 반복
16. 프로그래밍 언어도 많다
• 문제에 따라, 컴퓨터에 따라
http://3.bp.blogspot.com/-QZ4yib_WQFk/VOej26zs_NI/AAAAAAAAAXY/DF7R-KmYzk4/s1600/prog-languages.png
1. Java
2. C
3. C++
4. Objective-C
5. C#
6. JavaScript
7. PHP
8. Python
9. Visual Basic
2015-04 TIOBE Index
17. 언어의 첫 걸음: Hello World!
• Java 버전
// Hello World in Java
class HelloWorld {
static public void main(String args[]) {
System.out.println("Hello World!”);
}
}
18. 언어의 첫 걸음: Hello World!
• C 버전
/* Hello World in C, Ansi-style */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
puts("Hello World!");
return EXIT_SUCCESS;
}
19. 언어의 첫 걸음: Hello World!
• Scratch 버전
• Python 버전
# Hello World in Python 3
print("Hello World!")
20. Why Scratch?
• Scratch는 프로그래밍 언어의 일종
– 쉽고, 재미있고,
– 무료
– 웹으로 되고, PC, Mac에서도 되고
• 아이폰, 아이패드에서는 아직 안되고.
– 문법보다는 의미에 더 신경쓸 수 있게 하고
– “~~일이 발생하면 ~~를 해요” 스타일이 가능
• 어떤 이벤트에 대하여 반응
21. OFF
ON
절차적으로 정리하면
만일 스위치가 ON 위치 이면
불이 켜지고,
아니면
불이 꺼진다.
프로그램으로 짜면
if (switch == ON) then
light = ON
else
light = OFF
말로 하면
스위치를 누르면 불이 켜진다.
프로그램의 예
* 모든 언어마다 문법은 조금씩 다름
22. 예제: Man Trapped
Woman_Angry = TRUE;
미안: Man_Says(“미안해”);
Woman_Says(“뭐가 미안해?”);
뭐를: if Man_Knows(“뭐”) then
Woman_Says( “알면서그래?”);
else
Woman_Says(“모르면서 그래?”);
if (동전=앞면) then
goto 미안;
Say(“잘못했어”);
Woman_Says ( “ 뭘 잘못했는데?”);
goto 뭐를;
23. 예제: Man Trapped
• 우선, .. 이 문제는 끝나지 않는다.
• 문제를 소프트웨어로 해결하기 위한 단계
1. 시작단계
2. ‘미안해’ 하고, 이유 추궁 당하고,
아무 대답이나 하는 단계
3. 다시 추궁 당하는 단계
4. ‘잘못했어‘ 하고, 이유 추궁 당하고,
아무 대답이나 하는 단계