Composing Programs - 1

Chapter 1 : Building Abstractions with Functions
컴퓨터 과학은 매우 광범위한 학문 분야이다. 전 세계적으로 분산된 시스템, ai, 로봇 공학, 보안, 아키텍쳐 등등 수십개의 신흥 하위 분야들은 매년 새로운 기술과 발견으로 확장되고 있다.
컴퓨터 과학의 높은 생산성은 이 학문이 강력한 기본 개념들을 토대로 구축되었기 때문에 가능하다. 모든 컴퓨팅은 정보를 표현하고, 이를 처리할 논리를 명시하며, 그 논리의 복잡성을 관리하는 추상화를 설계하는 것에서 시작된다. 이러한 기본 원리를 숙달하려면 컴퓨터가 컴퓨터 프로그램을 해석하고 계산 과정을 수행하는 방식을 정확히 이해해야 한다.
계산 과정을 정의하기 위해서는 프로그래밍 언어가 필요하다. 여기서는 Python을 이용한다.
Python은 텍스트 조작, 그래픽 표시, 통신 등 다양한 일반적인 프로그래밍 작업을 위한 지원을 제공한다.

위 코드는 인터넷 상 데이터에 접근하는 기능을 불러온다. 특히 urlopen 함수를 사용하며 흔히 링크를 복사하면 나오는 url에 있는 콘텐츠에 접근할 수 있다.
Statements & Expression
파이썬 코드는 표현식과 지시문으로 구성된다. 광범위하게 보면, 컴퓨터 프로그램은 다음 중 하나의 지시문으로 이루어진다.
- 어떤 값을 계산하거나
- 어떤 작업을 수행하거나
지시문은 일반적으로 동작을 설명한다. 인터프리터가 지시문을 실행하면 해당 동작을 수행한다. 표현식은 일반적으로 계산을 설명한다. 파이썬이 표현식을 평가하면 해당 표현식의 값을 계산한다.
Function
함수는 데이터를 조작하는 로직을 캡슐화한다. 위에서 말했던 urlOpen은 함수이다. 웹 주소는 하나의 데이터 조각이다. 하나의 데이터 조각이 다른 데이터 조각으로 이어지는 과정은 복잡할 수 있지만, 그 복잡성이 함수 안에 숨겨져 있기 때문에 우리는 단순한 표현식만으로 그 과정을 적용할 수 있는 것이다.
Objects
객체는 데이터와 그 데이터를 조작하는 로직의 복잡성을 관리하는 방식으로 매끄럽게 묶어낸다.
Interpreter
복합 표현식을 평가하려면, 예측 가능한 방식으로 코드를 해석하는 정밀한 절차가 필요하다. 이러한 절차를 구현하여 복합 표현식을 평가하는 프로그램을 인터프리터라고 한다.
다른 컴퓨터 프로그램과 비교할 때, 프로그래밍 언어용 인터프리터는 그 일반성 면에서 독특하다.
엄청 축약하고 간단하게 설명하긴 했지만 이러한 핵심 개념들은 모두 밀접하게 연관되어있다. 함수는 객체이고 객체는 함수이며 인터프리터는 이 둘 모두의 인스턴스이다. 앞으로 이 카테고리에서의 목표는 각 개념과 코드 조직화에서의 역할을 명확히 이해하는 것이다.