#Programming

Composing Programs - 1

2026.02.23

Chapter 1 : Building Abstractions with Functions

컴퓨터 과학은 매우 광범위한 학문 분야이다. 전 세계적으로 분산된 시스템, ai, 로봇 공학, 보안, 아키텍쳐 등등 수십개의 신흥 하위 분야들은 매년 새로운 기술과 발견으로 확장되고 있다.

컴퓨터 과학의 높은 생산성은 이 학문이 강력한 기본 개념들을 토대로 구축되었기 때문에 가능하다. 모든 컴퓨팅은 정보를 표현하고, 이를 처리할 논리를 명시하며, 그 논리의 복잡성을 관리하는 추상화를 설계하는 것에서 시작된다. 이러한 기본 원리를 숙달하려면 컴퓨터가 컴퓨터 프로그램을 해석하고 계산 과정을 수행하는 방식을 정확히 이해해야 한다.

계산 과정을 정의하기 위해서는 프로그래밍 언어가 필요하다. 여기서는 Python을 이용한다.

Python은 텍스트 조작, 그래픽 표시, 통신 등 다양한 일반적인 프로그래밍 작업을 위한 지원을 제공한다.

위 코드는 인터넷 상 데이터에 접근하는 기능을 불러온다. 특히 urlopen 함수를 사용하며 흔히 링크를 복사하면 나오는 url에 있는 콘텐츠에 접근할 수 있다.

Statements & Expression

파이썬 코드는 표현식과 지시문으로 구성된다. 광범위하게 보면, 컴퓨터 프로그램은 다음 중 하나의 지시문으로 이루어진다.

  • 어떤 값을 계산하거나
  • 어떤 작업을 수행하거나

지시문은 일반적으로 동작을 설명한다. 인터프리터가 지시문을 실행하면 해당 동작을 수행한다. 표현식은 일반적으로 계산을 설명한다. 파이썬이 표현식을 평가하면 해당 표현식의 값을 계산한다.

Function

함수는 데이터를 조작하는 로직을 캡슐화한다. 위에서 말했던 urlOpen은 함수이다. 웹 주소는 하나의 데이터 조각이다. 하나의 데이터 조각이 다른 데이터 조각으로 이어지는 과정은 복잡할 수 있지만, 그 복잡성이 함수 안에 숨겨져 있기 때문에 우리는 단순한 표현식만으로 그 과정을 적용할 수 있는 것이다.

Objects

객체는 데이터와 그 데이터를 조작하는 로직의 복잡성을 관리하는 방식으로 매끄럽게 묶어낸다.

Interpreter

복합 표현식을 평가하려면, 예측 가능한 방식으로 코드를 해석하는 정밀한 절차가 필요하다. 이러한 절차를 구현하여 복합 표현식을 평가하는 프로그램을 인터프리터라고 한다.

다른 컴퓨터 프로그램과 비교할 때, 프로그래밍 언어용 인터프리터는 그 일반성 면에서 독특하다.

엄청 축약하고 간단하게 설명하긴 했지만 이러한 핵심 개념들은 모두 밀접하게 연관되어있다. 함수는 객체이고 객체는 함수이며 인터프리터는 이 둘 모두의 인스턴스이다.

Errors

인간은 처음부터 완벽하게 코딩하지 못하기 때문에 오류가 발생할 수 있다는 점을 대비해야 한다 컴퓨터는 엄청나게 빠르고 유연하지만, 동시에 매우 경직되어 있기도 하다. 스탠포드 대학의 입문 과정에서는 컴퓨터의 본질을 강력함 + 어리석음으로 설명한다.

오류를 해석하고 예상치 못한 오류의 원인을 진단하는 것을 디버깅이라고 한다. 디버깅의 몇가지 기본 원칙은 아래와 같다.

  1. 점진적으로 테스트하기
  2. 오류 격리하기
  3. 가정사항 확인하기

앞으로 이 카테고리에서의 목표는 각 개념과 코드 조직화에서의 역할을 명확히 이해하는 것이다.