1.1.1 프로그램이란 무엇인가

프로그램은 어떤 작업을 수행하는 과정을 안내하는 지식이다. 꼭 컴퓨터 분야에만 한정된 이야기가 아닌데, 예를 들면 음식 레시피(조리법)도 일종의 프로그램이다. 레시피에는 재료를 손질하고, 데치고, 찌고, 굽고, 내어 놓는 과정이 순서대로 차근차근 나와 있다. 그 과정을 충실히 따르면 누구나 괜찮은 요리를 할 수 있다. 전문 요리사나 미식가가 아니더라도 말이다.

개념 정리

  • 프로그램: 작업의 수행 과정을 설명한 지식

컴퓨터 프로그램은 컴퓨터가 작업을 수행하는 과정을 담은 지식이다. 컴퓨터는 사람을 이해하며 행동하지 않는다. 단지 프로그램에 기술된 명령을 빠르고 정확하게 수행할 뿐이다. 사람의 일을 이해하고 도와주는 수많은 프로그램을 따름으로써, 컴퓨터는 우리에게 온갖 이로움을 제공할 수 있다.

그림 1-1 컴퓨터와 프로그램

그림 1-1 컴퓨터는 프로그램 덕분에 여러 가지 일을 할 수 있다

그러므로 프로그램이 일을 똑바로 처리할 수 있도록 잘 만드는 것이 중요하다. 이것을 프로그래밍이라고 한다. 컴퓨터가 더 많은 일을 할 수 있게 하고, 더 잘 할 수 있게 개선하는 것이다. 컴퓨터에게 일하는 방법을 가르쳐주면, 사람의 머리와 손으로 해 왔던 귀찮은 일들을 맡길 수 있다. 컴퓨터가 잘못 일하는 부분을 찾아, 더 올바르게 일하도록 고칠 수도 있다.

개념 정리

  • 프로그래밍: 컴퓨터 프로그램을 만드는 활동

1.1.2 프로그래밍 언어는 왜 필요한가

프로그램을 읽고 쓰기 위한 약속

프로그램은 어떤 작업을 수행하는 과정을 안내하는 지식이라고 했다. 이 지식을 정확하게 표현해 컴퓨터에게 일을 시켜야 한다. 그런데 컴퓨터는 사람의 언어를 이해하지 못한다. 그래서 컴퓨터가 이해할 수 있는 언어, 즉 기계어(컴퓨터의 단순한 기본 명령에 일련번호를 부여한 것)로 프로그램을 작성해야 한다.

하지만 기계어는 이진수로 이루어진 데다 CPU와 레지스터를 직접 제어하는 원시적인 명령만 제공한다. 사람의 생각을 표현하기에는 몹시 불편하다. 다음은 기계어로 덧셈식 ‘1789 + 211’을 계산하는 명령을 기계어로 작성해 본 것이다. 간단한 덧셈 연산이지만 이해하기가 쉽지 않다.

코드 1-1 덧셈식 ‘1789 + 211’ 을 계산하는 명령 (기계어)

01001000 11000111 11000000 11111101 00000110 00000000 00000000  (mov rax,0x6fd)
01001000 00000101 11010011 00000000 00000000 00000000           (add rax,0xd3)

기계에게 명령도 내릴 수 있으면서, 사람의 생각을 나타내기에도 용이한 언어가 있다면 프로그램을 만들기 훨씬 좋을 것이다. 그래서 만들어진 것이 프로그래밍 언어다. 다음 코드는 ‘1789 + 211’을 계산하는 명령을 우리가 앞으로 배울 프로그래밍 언어인 파이썬으로 작성해 본 것이다. 덧셈을 아는 사람이라면 누구라도 이해할 수 있을 것이다.

코드 1-2 덧셈식 ‘1789 + 211’ 을 계산하는 명령 (파이썬)

1789 + 211

프로그래밍 언어는 프로그램을 더 편하게 읽고 쓰기 위해 만든 언어다. 사람도 쉽게 이해할 수 있고, 번역 프로그램을 통해 기계어로 번역하면 컴퓨터도 이해할 수 있다. 프로그래밍 언어는 기계어와 자연어(사람의 일상 언어)의 중간에 위치한다. 프로그래밍 언어에도 여러 가지가 있는데, 컴퓨터의 기계적인 특성에 가까울수록 저수준 언어, 사람의 생각에 가까울수록 고수준 언어로 분류한다. 파이썬은 사람이 사용하기 쉬운 고수준 언어다.

그림 1-2 고수준 언어와 저수준 언어

그림 1-2 고수준 언어와 저수준 언어

프로그래밍 언어는 약속이다. 같은 약속을 따르는 프로그래머들은 소스 코드를 서로 돌려 보거나 함께 협업할 수도 있다. 파이썬을 사용하는 프로그래머들은 세계 곳곳에 아주 많다. 외국어를 배우면 외국인과 의사소통할 수 있듯, 파이썬을 배우면 파이썬 프로그래머들과 소통할 수 있다.

개념 정리

  • 기계어: 컴퓨터가 이해하는 유일한 언어
  • 프로그래밍 언어: 프로그램을 작성할 때 사용하는 언어. 사람도 쉽게 이해할 수 있다. 번역 프로그램을 이용해 기계어로 번역하거나 실행시킬 수 있다.

프로그램의 번역과 실행

프로그래밍 언어로 작성한 프로그램 코드를 소스 코드(source code)라고 한다. 프로그래밍 언어마다 소스 코드를 기계어 코드로 번역하기 위한 프로그램이 있다. 이런 번역 프로그램은 크게 컴파일러(compiler)인터프리터(interpreter)로 나뉜다. 컴파일러는 소스 코드를 기계어로 미리 번역해 둘 때 사용하는 프로그램이다. 인터프리터는 실행이 필요할 때 소스 코드를 실시간으로 해석해서 그에 맞는 명령을 컴퓨터에게 지시하는 프로그램이다.

그림 1-3 프로그램의 번역 과정

그림 1-3 프로그램의 번역 과정

파이썬은 인터프리터를 사용하는 언어다. 그래서 파이썬 언어로 작성한 프로그램은 컴파일 과정을 거치지 않고 바로 실행시킬 수 있다. 이 방식이 편리하기는 하지만 인터프리터가 컴퓨터에 미리 설치되어 있어야 하는 단점도 있다. 파이썬 인터프리터 프로그램을 줄여서 ‘파이썬’이라고 부를 때가 많다. ‘파이썬’이라고 하면 언어를 뜻할 때도 있고, 인터프리터 프로그램을 뜻할 때도 있다. 파이썬 인터프리터는 잠시후 함께 설치해 볼 것이다.

개념 정리

  • 소스 코드: 기계어로 번역되지 않은 원본 프로그램 코드
  • 인터프리터: 소스 코드를 해석해서 실행시켜주는 프로그램.

1.1.3 파이썬 살펴보기

파이썬은 누가 만들었나

파이썬은 귀도 반 로섬(Guido van Rossum)이라는 프로그래머가 1989년에 처음 만들었다. 2001년에는 귀도를 포함해 파이썬의 발전에 기여해 온 사람들을 중심으로 파이썬 소프트웨어 재단(Python Software Foundation, PSF)이 설립되었다. 파이썬 소프트웨어 재단이 파이썬 언어를 정의·개정하는 일을 맡아오고 있고, 그 외에도 수많은 프로그래머가 다양한 라이브러리(여러분의 프로그램에 삽입할 수 있는 프로그램 조각)를 개발해 파이썬 생태계에 기여하고 있다. 기술의 발전·프로그래밍 방식의 변화에 부응해 프로그래밍 언어도 새로운 기능이 추가되고 발전해야 하기 때문에 이런 노력은 꾸준히 필요하다.

그림 1-4 파이썬 로고

그림 1-4 파이썬 로고

파이썬의 이용권

파이썬은 무료다. 파이썬 소스 코드를 실행하는 데 필요한 인터프리터는 파이썬 공식 웹사이트(https://www.python.org/)에서 다운로드할 수 있다. 이 책에서는 ‘파이참(PyCharm)’이라는 개발 도구를 이용해 학습을 진행할 것인데, 파이참을 설치하면 파이썬 인터프리터가 함께 설치되므로 직접 다운로드하지 않아도 된다. 파이참 역시 커뮤니티판이 무료로 제공된다.

파이썬을 활용하기에 좋은 분야

파이썬은 다양한 분야에서 인기를 누리고 있다.

  • 프로그래밍 교육: 배우기 쉬운 언어인 파이썬은 프로그래밍 입문용 언어로 사랑받고 있다.

  • 웹 서비스: 웹 사이트, 인터넷 쇼핑몰, 블로그, 채팅 등 우리가 웹 브라우저로 이용하는 서비스들을 웹 서비스라고 한다. 장고(Django), 플라스크(Flask) 등 파이썬 기반의 웹 프레임워크로 제작·운영되는 웹 서비스가 많다.

  • 데이터 과학: 데이터 과학이란 통계와 시각화 도구를 활용해 데이터 속에서 의미 있는 지식과 통찰을 이끌어내는 기술이다. 파이썬에는 판다스(Pandas), 넘파이(NumPy), 맷플롯(matplotlib) 등 데이터 과학에 이용할 수 있는 편리한 도구가 많다.

  • 기계학습: 기계학습은 컴퓨터가 대량의 데이터를 통계적으로 학습하도록 하여 데이터를 구별하고 분류하는 기술이다. 알파고, 이미지 인식, 자율주행 등 인공지능 기술에서 약방의 감초처럼 쓰이고 있다. 대표적인 기계학습 도구 텐서플로(TensorFlow)를 이용하려면 파이썬이 필요하다.

  • 사무자동화: 단순 반복 작업은 사람의 손과 머리보다는 컴퓨터로 수행하는 편이 훨씬 빠르고 정확하다. 파이썬을 이용하면 귀찮고 번거로운 작업을 자동화할 수 있다. 잘만 하면 여러분이 해야 할 귀찮은 숙제나 업무를 파이썬이 대신해 줄 수도 있다.

  • 컴퓨터 시스템의 운영·관리: 파이썬은 시스템 제어 프로그래밍을 할 수 있는 데다, 쉽고 빠르게 작성할 수 있어 간단한 시스템 제어 유틸리티나 시스템을 공격하는 스크립트를 만들기에 좋다. 그래서 시스템 관리자와 해커들에게도 사랑받고 있다.

다른 프로그래밍 언어가 필요한 분야

어떤 분야는 사용하는 언어가 정해져 있다. 예를 들어 마이크로소프트 엑셀에서 실행하기 위한 매크로를 작성하려면 비주얼 베이직을 사용해야 한다. 이렇게 특정 언어가 강제되는 분야가 많지만, 파이썬을 배우면서 얻은 프로그래밍 지식은 다른 언어에서도 통용된다. 파이썬으로 기본을 다진 뒤 원하는 분야에 필요한 언어를 배우는 것도 좋은 방법이다.

  • 프론트엔드 웹 개발: 프론트엔드 웹 개발이란 웹 서비스의 개발 중에서 웹 브라우저를 제어하는 부분을 뜻한다. 웹 문서를 전달력 있게 표현하거나 웹 브라우저에서 실행되는 프로그램을 만드는 데 필요하다. 이 분야에는 하이퍼텍스트 마크업 언어(HTML), 캐스케이딩 스타일 시트(CSS), 자바스크립트(Javascript)라는 언어가 주로 사용된다.

  • 모바일 애플리케이션: 안드로이드 애플리케이션 개발에는 자바와 코틀린(Kotlin), iOS 애플리케이션 개발에는 오브젝티브-C(Objective-C)와 스위프트(Swift)가 사용된다.

  • 컴퓨터 게임: 파이게임(Pygame) 라이브러리를 이용해 파이썬으로도 간단한 2차원 그래픽 게임을 만들 수 있다. 하지만 최신 고사양 3차원 그래픽 게임을 만들 때는 파이썬보다는 C, C++, C# 등 컴파일 언어가 주로 사용된다.