프로그래밍은 기기가 우리를 위해 일을 하도록 만드는 과정이다.
이를 위해 우리가 컴퓨터의 언어를 배우는 것이, 컴퓨터에게 우리의 세계를 가르치는 것보다 훨씬 효율적이다. 프로그래밍은 단순히 컴퓨터를 도구로 사용하는 것을 넘어, 우리가 원하는 대로 작동하도록 컴퓨터를 바꾸는 능력을 제공한다.
컴퓨터는 내부적으로 CPU, 메모리, 네트워크 연결, 하드디스크 등의 자원을 활용하여 작업을 수행한다. 프로그래머는 이러한 자원을 조율하여 사용자가 원하는 결과를 만들어내는 중재자 역할을 한다.
프로그래머는 사용자가 원하는 것을 제공하고, 컴퓨터는 프로그래머에게 자원을 제공한다.
이러한 협업은 코딩 또는 프로그래밍을 통해 이루어지고, 프로그램은 컴퓨터 내 자원에게 내리는 명령문들의 집합이다.
하드웨어 구조, 보조기억장치, CPU, RAM, 여러 입력 장치 등의 같은
단어들을 이해하고 사용할 수 있어야 한다.
컴퓨터에서 뇌와 가장 비슷한 기능을 하는 것은 소프트웨어이다.
하드웨어에서 뇌와 가장 비슷하는 것은 중앙연산처리장치 CPU이다.
하지만 우리는 CPU에 대고 말을 할 수 는 없다.
메인 메모리에 명령이 저장되어 있고, 매우 빠르다.
CPU가 새로운 명령어가 필요하면 메인 메모리에 어디에 명령이 있는지 물어보고
메인 메모리에 전달받은 명령을 실행한다.
다른 명령을 요청하면 CPU가 또 받들어 실행한다.

CPU : 중앙연산처리장치(CPU)는 1초에 30억 번씩 무엇을 해야 할지 물어보고 명령을 실행한다. CPU는 메인 메모리에서 명령을 받아 작업을 처리하며, 이 모든 과정은 프로그래밍을 통해 이루어진다.
메인 메모리 : CPU가 필요한 명령과 데이터를 제공하는 빠른 저장소다. 하지만 전원이 꺼지면 정보가 사라지므로 영구 저장은 보조 기억 장치가 담당한다.
보조 기억 장치 : 하드디스크와 같은 보조 기억 장치는 데이터를 영구적으로 저장하며, 운영체제와 파일 등이 저장된다. 보조 저장소에는 운영체제, 파일, 응용프로그램이 저장되는 곳이다. 컴퓨터가 꺼져있는 동안에도 보관되고 켜지면 로딩이 된다.

마더보드(메인보드) : 메인보드는 모든 부품을 연결하기 때문에 마더보드 또는 메인보드라고 부른다. 메모리만 있으면 아무것도 할 수 없지만, 마더보드에 끼워 넣어야 사용할 수 있다. CPU도 하드드라이브와 같은 보조기억장치 또한 마더보드에 끼워 사용한다.
메인 메모리에 있는 사람이 바로 우리다!
CPU가 다음에 무엇을 할 지 물어보면, 바로 내가 대답해줄 수 있는거다.
우리는 파이썬 코드 따위를 통해 답을 줄 수 있다.
파일에 파이썬 코드를 우리가 쓰면
이렇게 쓴 코드가 메인메모리에 로드되고
로드가 되면 마법같이 번역되어 옮겨질 것이고
1초에 30억개의 질문을 코드가 답할 것이다.
내가 작성한 코드가 업로드되어 실행되는 것이다.
(사실 실제로 코드가 바로 실행되지는 않고 작성한 파이썬 파일이
CPU가 이해할 수 있는 언어로 번역되어야 하는 과정이 필요하다.
보조기억장치에서 기계어로 번역이 되고 이를 통해 CPU와 메인 메모리가 대화를 한다.)
Syntax Error 문법에러가 우리가 부족한 프로그래머라는 것을 의미하지는 않는다.
그저 당신이 무엇을 하고 싶은지 Python은 이해하지 못하는 것일 뿐이다.
Python은 도움을 주고 싶은데 정확한 뜻을 전달받지 못해 한번 더 물어본다고 이해하자.
Elements of Python
Reserved Words 예약어는 파이썬이 의도하고 지정한 의미로만 사용되는 단어들이다.
지정한 의미가 아닌 다른 의미로는 사용될 수 없다.
이건 일종의 약속? 계약? 같은 것이다.
예약어가 아닌 단어는 사용자가 마응대로 사용하는 것이 가능하다.(예를 들면 변수이름 지정)
하지만 이 예약어들 중에서도 몇 개만 빼고 사용하지 않을 것이다.
그저 파이썬 예약어로 되어 있을 뿐이다.
파이썬에서 자체적으로 사용하는 어휘이다.

Sentences or Lines
파이썬 프로그램은 여러개의 문장 또는 라인으로 구성되어 있다.
컴퓨터는 무엇이 다음인지 알고 싶어 한다.
코드는 순서대로 구성되어 있고 라인 순서에 따라 반영할 것이다.
여기에는 변수 연산자 상수 예약어 모두가 포함될 수 있다.
Interactive Python(대화형)
이렇게 상호대화적인 방식으로 파이썬과 대화할 경우,
코드가 생각한대로 작동하는지 테스트하기가 좋다.
Script Python(스크립트형)
프로그램의 코드가 1~2줄 이상으로 길어지면, 스크립트로 작성하는 것이 편리하다.
파일에 프로그램을 짜면 파이썬이 코드를 순서대로 읽어 실행시키는 방법이다.
Program Steps
프로그래밍에는 몇 가지 기본 패턴이 있는데,
이를 이해하면 복잡한 작업도 쉽게 처리할 수 있다.
(1) Sequential Steps 순차문
코드가 순서대로 실행되는 가장 기본적인 형태이다.
파일에 아래 코드를 작성해서 실행시키면, 처음부터 차례대로 실행된다.
특별히 다르게 지정하지 않는 이상 하나의 명령문을 끝내면 다음 명령문으로 넘어간다.
중요한 내용이지만 별로 흥미롭지는 않을 수도 있겠다.
x = 2
print(x)
x = x + 2
print(x)
(2) Conditional Steps 조건문
특정 조건이 참일 때만 실행되는 코드이다.
예약어 if를 사용하고, if는 마치 길을 두 갈래로 나누는 것과 같다.
조건문 안에서 질문을 한다.
x가 10보다 작은지에 대해 참인지 거짓인지 판별한다.
10보다 작으면 들여쓰기가 된 부분으로 넘어간다.
콜론은 들여쓰기가 된 부분의 시작을 표시한다.
만일 거짓이라면 그 부분을 건너뛸 것이다.
x = 5
if x < 10:
print('smaller')
if x > 20:
print('bigger')
print('finish')
(3) Repeated Steps 반복문
조건이 참인 동안 반복적으로 실행되는 코드이다.
조건이 성립하지 않으면 반복문을 빠져나오게 된다.
어떻게 하면 원하는 만큼만 반복하게끔 할 수 있을까?
순차적으로 키워드인 while문에 다다르면
n이 0보다 크냐 라는 질문에 대해서 참 거짓을 판별한다.
그리고 n이 0보다 큰 것이 참일 때, 들여쓰기 된 부분이 반복적으로 실행된다.
저 질문에 대해 거짓임이 판명난다면 반복문을 빠져나오게 된다.
n = 5
while n > 0:
print(n)
n = n - 1
print('blastoff!')
Python 코드 예제: 단어 빈도 분석
아래 코드는 파일 내 모든 단어를 읽고 빈도를 계산하여 가장 많이 등장한 단어를 출력하는 프로그램이다.

python
name = input('Enter file: ')
handle = open(name)
counts = dict()
for line in handle:
words = line.split()
for word in words:
counts[word] = counts.get(word, 0) + 1
bigcount = None
bigword = None
for word, count in counts.items():
if bigcount is None or count > bigcount:
bigword = word
bigcount = count
print(bigword, bigcount)
요약정리하며,,
컴퓨터에서 뇌와 가장 비슷한 기능을 하는 것은 소프트웨어이며, 하드웨어에서 뇌와 가장 비슷한 기능을 하는 것은 CPU이다. CPU는 매우 빠르게 작업을 처리하지만 스스로 생각하지는 못하고 이를 대신하여 잘 짜여진 소프트웨어가 CPU의 지능 역할을 한다. 이를 통해 컴퓨터는 복잡한 문제를 해결할 수 있는 것이다.
프로그래밍은 기계가 인간의 세계를 이해하고 작업하도록 만드는 과정의 일부이다. 이를 통해 우리는 반복적이고 단순한 작업을 자동화하고, 복잡한 문제를 해결할 수 있는데, Python과 같은 언어로 작성한 코드가 메인 메모리에 로드되어 실행되게끔 하여 이러한 과정을 효과적으로 수행할 수 있다.
출처
py4e.com/lessons (Python for Everybody)
boostcourse, 모두를 위한 파이썬