[목 차]
머리말 / 5
제1장 컴퓨팅 사고와 파이썬 시작하기
1. 프로그래밍이란 무엇인가? / 15
2. 컴퓨팅 사고력(Computational Thinking)이란? / 22
3. 문제를 “알고리즘”으로 생각한다는 것 / 28
4. 파이썬은 왜 알고리즘 학습에 적합한가? / 34
5. 파이썬 실행 환경 / 43
6. 첫 파이썬 실행: “대박, 반갑습니다.!” / 49
제2장 값과 출력: 컴퓨터와의 첫 대화
1. 프로그램의 실행 흐름 / 57
2. print()로 생각을 표현하기 / 62
3. 문자열과 숫자의 차이 / 69
4. 문자열 표현의 진화 / 74
5. 출력 형식 제어하기: print()문에서 end와 sep 옵션 / 80
제3장 변수와 자료형: 정보를 저장하는 방법
1. 변수란 무엇인가? / 95
2. 값, 객체, 이름의 관계 / 105
3. 기본 자료형 / 111
4. type()으로 자료형 확인하기 / 117
5. 값을 입력받기: input() 함수와 형 변환 / 122
6. 상수와 주석 / 129
제4장 연산과 표현식: 계산은 어떻게 이루어지는가
1. 대입과 계산의 차이 / 143
2. 산술 연산자 / 148
3. 비교 연산자 / 154
4. 논리 연산자 / 158
5. 비트 연산자 / 163
6. 연산자 우선순위와 괄호 / 169
제5장 조건문: 선택의 논리
1. 조건이란 무엇인가? / 182
2. if 문 / 186
3. if∼else 구조 / 192
4. if∼elif∼else 다중 분기 / 197
5. 조건 중첩과 가독성 / 203
제6장 반복문: 같은 일을 여러 번 하는 방법
1. 반복이 필요한 이유 / 212
2. for 문과 range / 216
3. while 문 / 222
4. (for/while)∼else 문 / 227
5. continue와 break 문 / 232
6. 반복문과 조건문의 결합 / 237
제7장 알고리즘적 사고 입문
1. 알고리즘이란 무엇인가? / 248
2. 문제를 단계로 나누는 방법 / 253
3. 순차・선택・반복 구조의 결합 / 258
4. 간단한 알고리즘 설계 / 263
5. 시간 복잡도의 직관적 이해(O 개념 맛보기) / 269
제8장 함수: 생각을 묶는 도구
1. 함수가 필요한 이유 / 279
2. 함수 정의와 호출 / 285
3. 매개변수와 반환값 / 290
4. 지역 변수와 전역 변수 / 301
5. 람다(Lambda) 함수와 특수 함수들 / 306
6. 내장 함수 / 313
7. 함수 설계 사고법 / 320
제9장 리스트와 시퀀스: 데이터의 집합
1. 리스트(List) 개념 / 333
2. 인덱싱과 슬라이싱 / 339
3. 리스트 연산 / 344
4. 리스트 메소드 / 350
5. 리스트 패킹과 언패킹 / 358
6. 리스트 컴프리헨션 / 362
7. 중첩 리스트 / 367
제10장 튜플・집합・사전: 자료구조의 확장
1. 튜플(Tuple)과 불변성 / 381
2. 집합(Set)과 중복 제거 / 387
3. 사전(Dictionary)과 키-값 구조 / 395
4. 자료구조 선택 기준 / 403
제11장 미니 프로젝트
1. 프로젝트 설계하기 / 414
2. 스네이크 게임 / 419
부록
부록 1. Python 내장 함수 목록 / 430
부록 2. 주요 파이썬 패키지 공식 사이트 목록 / 431
부록 3. 예외 처리 / 432
부록 4. 코드 스타일:PEP8 / 434
부록 5. 코드 리펙토링 / 437
[본 문]
제1장 컴퓨팅 사고와 파이썬 시작하기
1. 프로그래밍이란 무엇인가?
프로그래밍이란 사람이 해결하고자 하는 문제를 컴퓨터가 수행할 수 있도록 명확한 절차로 표현하는 행위이다. 여기서 중요한 점은, 프로그래밍의 핵심이 컴퓨터나 언어 그 자체에 있는 것이 아니라, 사람의 사고를 어떻게 구조화하느냐에 있다는 사실이다.
컴퓨터는 매우 빠르게 계산하고 많은 정보를 처리할 수 있지만, 스스로 판단하거나 맥락을 이해하지는 못한다. 따라서 컴퓨터가 어떤 일을 하도록 만들기 위해서는, 사람이 먼저 그 일을 구체적이고 모호함 없이 정의해야 한다. 프로그래밍은 바로 이 과정을 코드라는 형태로 표현하는 방법이다.
우리가 일상에서 사용하는 말은 종종 모호하다. 예를 들어 “정리해 줘”, “적당히 처리해 줘”와 같은 표현은 사람에게는 어느 정도 통하지만, 컴퓨터는 아무 의미가 없다.
컴퓨터는 다음과 같은 질문에 명확한 답이 주어질 때만 행동할 수 있다.
이 질문들에 대한 답을 명확한 규칙과 순서로 정리한 것이 바로 프로그램이며, 그 프로그램을 작성하는 행위가 프로그래밍이다. 이 책에서는 이 점을 분명히 한다. 프로그래밍은 새로운 문법을 암기하는 일이 아니라, 문제를 해결할 수 있는 형태로 바꾸는 사고 훈련이라는 것이다. 즉, 코드는 사고의 출발점이 아니라 사고의 결과물이다.
예를 들어 “학생들의 점수를 입력받아 평균을 계산한다”라는 문제를 생각해 보자. 이 문제를 컴퓨터가 처리하려면, 사람은 다음과 같은 절차를 먼저 떠올려야 한다.
이 다섯 단계는 아직 코드가 아니지만, 이미 알고리즘의 형태를 갖추고 있다. 프로그래밍은 이러한 알고리즘을 컴퓨터가 이해할 수 있는 언어로 옮기는 작업이다. 이처럼 프로그래밍은 단순히 “코드를 작성하는 기술”이 아니라, 문제를 분석하고, 절차를 설계하며, 그 절차를 정확하게 표현하는 사고의 과정이다. 그래서 프로그래밍을 배우는 과정은 자연스럽게 논리적 사고력과 문제 해결 능력을 함께 키우게 된다.
또한 프로그래밍은 특정 전공자만을 위한 기술이 아니다. 데이터를 다루는 일, 반복되는 작업을 자동화하는 일, 조건에 따라 다른 결정을 내려야 하는 모든 상황에서 프로그래밍적 사고는 매우 강력한 도구가 된다. 이 때문에 오늘날 프로그래밍은 모든 분야의 학생들에게 요구되는 기본 역량으로 자리 잡고 있다.
이 책에서는 프로그래밍을 어렵고 추상적인 기술로 설명하지 않는다. 대신, 사람이 생각하는 방식을 컴퓨터가 이해할 수 있도록 정리하는 방법으로 접근한다. 이러한 관점에서 출발할 때, 프로그래밍은 더 이상 두려운 대상이 아니라 문제를 해결하기 위한 하나의 자연스러운 언어가 된다.
가. 프로그래밍 언어란 무엇인가?
그렇다면 프로그래밍 언어란 무엇일까? 프로그래밍 언어는 인간이 컴퓨터에게 ‘무엇을 어떻게 할지’ 알려주는 명령을 표현하는 도구이다. 예를 들어 카페에서 커피를 주문할 때, 우리는 원두의 종류, 컵의 크기, 샷 추가 여부, 시럽 여부 등을 명확한 규칙에 따라 전달한다. 컴퓨터 역시 이와 마찬가지로, 사람이 이해하기 쉬운 언어가 아니라 컴퓨터가 이해할 수 있는 형식과 규칙에 맞는 명령을 필요로 한다.
프로그래밍 언어는 바로 이러한 규칙과 형식을 제공한다.
각 언어마다 표현 방식은 다르지만, “문장을 구성해 의미를 전달한다”는 본질은 동일하다. 즉, 프로그래밍 언어란 인간의 명령을 컴퓨터가 이해할 수 있는 형태로 변환해 주는 도구이며, 정해진 규칙에 따라 컴퓨터에게 작업을 지시할 수 있도록 만든 언어이다. 우리가 이러한 규칙에 따라 명령을 작성하는 과정을 “컴퓨터 프로그래밍을 한다”고 표현한다. 다시 말해, 컴퓨터 프로그래밍이란 인간의 생각과 명령을 컴퓨터가 이해할 수 있도록 조직화하는 과정이다.
나. 일반 컴퓨터 프로그램과 인공지능 컴퓨터 프로그램은 어떻게 다른가?
일반적인 컴퓨터 프로그램은 미리 작성된 명령과 규칙에 따라 작업을 수행한다. 즉, 정의된 상황에 대해서만 정확하게 동작하며, 정의되지 않은 새로운 상황이 발생하면 오류를 일으키거나 작업을 수행하지 못한다. 반면, 인공지능 프로그램은 작성된 명령뿐만 아니라 학습과 추론을 통해 새로운 상황에 대응할 수 있다. 예를 들어, 몇 가지 덧셈 규칙(3+4=7, 5+6=11 등)을 학습한 인공지능 프로그램은 이전에 주어지지 않은 새로운 덧셈 문제(99+16)에도 학습한 패턴을 바탕으로 올바른 결과를 도출할 수 있다. 이 차이는 AX(인공지능 전환) 시대에 왜 사고력과 문제 정의 능력이 중요한지를 잘 보여준다.
다. 왜 모든 사람이 프로그래밍을 배워야 하는가?
참고 영상
다음 영상들은 프로그래밍의 의미를 이해하는 데 큰 도움이 된다. 이 책을 수업 교재로 활용하는 경우, 강의 시간에 함께 시청하여 학습 공감대를 형성하기를 권한다.
CS146S 사고 질문 (Thinking Questions)
1. 프로그래밍을 “코드를 작성하는 기술”이 아니라 “문제를 절차로 표현하는 사고 과정”이라고 정의할 때, 이 두 관점의 가장 큰 차이는 무엇인가?
2. 사람이 이해할 수 있는 모호한 명령(예: “적당히 처리하라”)이 컴퓨터에게는 왜 사용할 수 없는지 설명하라.
3. “입력 → 처리 → 출력” 구조가 대부분의 프로그램에서 공통적으로 등장하는 이유는 무엇인가?
4. 평균 계산 문제에서, 알고리즘을 먼저 설계하지 않고 바로 코드를 작성하면 어떤 문제가 발생할 수 있는가?
5. 프로그래밍 학습이 논리적 사고력과 문제 해결 능력을 함께 향상시키는 이유를 본문 내용을 바탕으로 설명하라.
6. 당신의 전공 분야 또는 일상생활에서 프로그래밍적 사고가 유용하게 활용될 수 있는 사례를 하나 제시하고, 그 이유를 설명하라. (생각할 시간 5분 후 답변한다.)