1강.Computation이란 무엇인가? | MIT 6.0001
컴퓨터는 어떤 일을 하는가? What does a computer DO?
기본적으로,
- 1초에 몇 십억의 계산을 수행한다. (덧셈, 뺄셈, 곱셈 등등...)
- 약 100 기가바이트의 계산 결과를 기억한다.
컴퓨터 계산(Calculations) 이란?
- 언어에 내장되어있다. (built- in to the language like python, c++...)
- 프로그래머가 정의하는 것 (ones that you define as the programmer)
"컴퓨터는 여러분이 컴퓨터에게 말한 것만 알 수 있고 수행한 것만 할 수 있다."
"computers only know what you tell them and only do what you tell them to do"
지식의 형태 (Types of Knowledge)
- 선언적 지식(declarative knowledge)은 사실을 서술하는 문장이다. ex) y * y 는 x이다.
- 절차적 지식(imperative knowlege) "어떻게" 문제를 해결하는지에 관한 지식이다.
컴퓨터 프로그램의 종류
- 정적 프로그램(fixed program) computer
ex) calculator (only know 덧셈, 뺄셈, 곱셈, 나눗셈)
- 내장 프로그램(stored program) computer
ex) 명령어를 저장한 후 실행하는 프로그램, 명령어의 순서에 따라 주변기기와 상호작용하며 프로그램을 실행
컴퓨터의 기본 구조 ( Basic Machine Architecture)
메모리(Memory) : 많은 데이터 & 순차적인 명령어를 포함하고 있음 contains bunch of datas & sequences of instruction
산술논리장치(ALU) : 연산을 하는 장소 (덧셈, 뺄셈 등..) the place all of operations are done
제어장치 (Control Unit) : 프로그램 카운터(PC)를 포함하고 있다. includes program counter (PC)
연산 과정 (Process of operation)
1) 명령어들이 메모리에 입력되면 명령어의 첫 번째 줄부터 시작한다. -> 첫 번째 명령어 제어장치로 보냄
2) 제어장치(Control Unit)에 첫번째 명령어가 들어오면 산술논리장치(ALU)로 보낸다.
3) 그럼 산술논리장치(ALU)는 처리할 명령어를 위한 data를 메모리로부터 받는다.
4) ALU에서 몇 가지 산술연산을 한 뒤에 결과값을 메모리로 다시 보낸다.
5) 모든 연산이 끝나면 제어장치에 신호를 줘서 pc 값을 +1한다.
6) 그 뒤로 다시 메모리로 돌아가 다음 instruction으로 갈지(next), 다시 instruction을 앞으로 돌아갈지(back) 해당 명령어를 넘어갈지(skip) 결정한다.
7) 모든 연산이 끝나면 Output으로 보낸다.
내장 프로그램 컴퓨터 (Stored program computer)
*내장 프로그램 컴퓨터란? 저장되어 있는 명령어의 집합이 있는 컴퓨터*
1) 산술논리연산 명령어 (arithmetic and logic)
2) 간단한 테스트를 위한 명령어 (simple test)
3) 데이터를 옮기기 위한 명령어 (moving data)
* 인터프리터(interpreter)가 명령어를 순서대로 실행한다.
- 조건문에 따라 수행 후, 명령어가 끝나면 DONE
기본적인 컴퓨터의 동작
- 튜링(Turing)은 6개의 primitive로 어떤 것이든 컴퓨팅할 수 있다는 것을 증명해냈다.
(move left, move right, read, write, scan, and do nothing.)
- 현대의 프로그래밍 언어는 원시 프로그래밍언어보다 훨씬 더 편리하다.
- 하나의 언어에서 컴퓨팅할 수 있는 것은 다른 프로그래밍 언어에서도 컴퓨팅할 수 있다!! (Powerful!!!)
프로그래밍 언어란?
- 기본적인 구조
* 영어 : 단어들
* 프로그래밍 언어 : 숫자, 문자열, 연산자
"프로그래밍 할 때 문법과 정적의미를 고려해야한다"
문법 (syntax)
* 영어 : "cat dog boy" -> 문법적 오류(syntatically invalid) "cat hugs boy" -> 문법적으로 맞음 (syntatically valid)
* 프로그래밍 언어 : "hi"5 -> 문법적 오류(syntatically invalid) "3.2*5" -> 문법적으로 맞음 (syntatically valid)
정적의미 (static sementic) : 문법적으로는 맞지만, 말이 되는지 안되는지 판단
* 영어 : "I are hungry" -> 문법적으로는 맞지만, 의미적으로 틀리다. (syntactically valid, but static semantic error)
* 프로그래밍 언어 : 3+"hi" -> 문법적으로는 맞지만, 의미적으로 틀리다. (syntactically valid, but static semantic error)
-> 말이 안되기 때문
프로그래밍의 여러가지 에러
- 문법적 에러 (syntatic errors) : 흔하고 찾기 쉽다.
- 정적 의미 에러 (static semantic errors) : 몇몇 언어는 프로그램을 실행하기 전에 이 에러를 찾아낸다. 예측할 수 없는 결과를 만들어 낸다.
- 의미에 오류가 있는 것은 아니지만 명령어가 프로그래머가 의도한 바와 다른 의미로 해석될 때 : 1) 프로그램 중단, 2) 프로그램이 끝없이 돌아감, 3) 결과를 내지만 예상했던 결과가 아님
파이썬 명령어의 종류 (Type of Object)
- 명령어의 종류는 아주 다양하다. (scalar vs non-scalar)
- int : 정수 ex) 5
- float : 실수 ex) 3.27
- bool : 논리자료형 ex) 참과 거짓 (True and False)
- NoneType : 특별하고, 하나의 값을 가짐 NONE
- type() 이라는 statement를 사용하면 해당 수의 object를 알 수 있음
예시
5의 type찾고싶으면 type(5)치면 됨
결과 : int
Type 을 바꾸고 싶을 때는 어떻게 해야할까?
- 파이썬에서는 쉽게 자료형의 타입을 바꿀 수 있다.
- float(3) -> 3.0
- int (3.9) -> 3
파이썬으로 콘솔에 값 프린팅하는 법
프린팅이란? 유저와 소통하는 방법 how you interact with user
예시 1)
In [11] : 3+2
Out [11] : 5
-> 유저와 소통한 것이 아니라 shell에서만 값을 출력한 것임 (프린팅이 아님)
예시 2)
In [12] : print(3+2)
5
-> Out이라는 쉘이 나오지 않은 것은 확실하게 유저에게 값을 프린트했다는 뜻임
"파이썬에서 값을 프린트 하고 싶다면 print() 를 이용하면 된다."
Expression & Operator
<object> <operator> <object> 형태로 만들 수 있다.
- Sum : i+j
- Difference : i-j
- Product : i*j
- Division : i/j (결과는 항상 float)
- Remainder : i%j
- Power : i**j
"우선순위는 수학과 같고 우선순위를 바꾸기 위해서는 괄호를 이용할 것" (** ☞ * ☞ / ☞ +,-)
"precedence is same as math, if you want to change precedence, use parenthesis"
* 예시 : 이 때, 마지막 radius 값은 어떻게 될까?
pi = 3.14159
radius = 2.2
area = pi*(radius**2)
radius = radius+1
1) 위의 그림처럼 radius 값은 re-bind된다.
2) radius의 이전 값인 2.2는 메모리에는 저장되어 있지만, 2.2를 변수를 이용해 다룰 수는 없다.
3) area 값은 다시 연산하지 않는 이상 radius의 값이 re-bind되었다고 값이 변하지는 않는다.
이번 강의 lecture quiz 풀어보기
1강 과제
- pset 0 (finish!!!)
- 교재 Chapters 1 and 2.1 Reading
@Copyright MIT License