PYPL, Tiobe를 참고하면 파이썬 언어의 사용 빈도 순위는 모두 5위 안에 들만큼 전 세계의 많은 사람이 사용하고 있다. 그만큼 쉬운 문법 구조와 사용 및 편리함을 나타내고 있다.
컴퓨터 및 전자 관련 전공으로 입학하면 가장 먼저 배우는 것이 '컴퓨터 구조'다. 폰 노이만의 현대식 컴퓨터 개발부터 시작해, 오늘날 운영체제의 원리까지 길고 긴 여정이 시작된다. 그중 가장 기본적인 컴퓨터 구조 및 원리에서 동시성과 병렬화를 빼놓을 수 없다. 이러한 개념을 적용하는 이유는 바로 프로그램의 속도 때문이다. 더 빠르고 효율적으로 연산을 수행하고자 적용하는데, 이제 막 입문한 사람들에게 쉽지만은 않다.
이 책은 스레드, 프로세스, 실행자, 풀, 이벤트 기반 및 리액트 프로그래밍 같은 컴퓨터 과학의 개념과 함께 이를 파이썬 프로그래밍으로 풀어본다. 어려운 개념과 설명을 쉽게 예제 형식으로 풀었으며, 실제로 이러한 개념을 적용할 때 사용되는 다양한 라이브러리를 적극적으로 이용한다.
먼저 동시성과 병렬화의 기본적인 개념을 소개한다. 컴퓨터 아키텍처와 관련된 부분도 쉽게 설명하고 있다. 다음으로 스레드와 관련해 설명한다. 큐 자료 구조와 접목한 스레드 프로그램을 작성해본다. 6장에서는 파이썬 프로그램의 디버깅과 벤치마킹을 해본다. 7장과 8장에서는 퓨처 객체, ProcessPoolExecutor, 멀티프로세싱에 대해 살펴본 후, 9장에서 asyncio 라이브러리를 활용해 이벤트 기반 프로그래밍을 배워본다. 10장에서는 RxPY 라이브러리를 이용해 리액트 프로그래밍을 알아보고, 11장에서는 GPU를 활용해 본다.
입문 및 예제에 초점이 맞춰진 책이다 보니, 깊은 개념에 대한 설명이 조금 부족할 수 있다. 각주 및 참고 박스를 통해 최대한 친절하게 전달하고자 노력했다. 대부분 윈도우 운영체제 환경에서 정상적으로 실행되지만, 스레드나 프로세스를 다루는 예제에서는 리눅스 환경을 이용하거나 각주를 참고하자.
최근에는 초등학교부터 코딩 열풍이 분다고 한다. 사교육 시장에서는 단순한 암기와 주입식 코딩 교육이 많다고 한다. 가장 중요한 것은 흥미다. 내가 좋아하는 부분에 흥미를 가지고 즐겁게 프로그래밍을 배우고, 모르는 부분은 스스로 찾아보고 생각하는 과정이 가장 중요하다. 때로는 정교한 알고리즘을 설계해야 하며, 좋은 라이브러리가 있을 때는 이를 적재적소에 활용할 필요도 있다. 컴퓨터 과학을 배우기 시작했고 기본적인 파이썬 언어를 다룰 줄 안다면 이 책을 적극 추천한다.
데이터 분석은 자연과학, 생명공학, 사회과학 분야에서 풍부하게 사용되고 있다. 대부분의 산업 영역에서 데이터 분석은 '데이터 과학(Data Science)'이라고 불리며 그 영향을 넓혀가고 있다. 데이터 분석과 데이터 과학은 데이터로부터 정보를 추출해내는 작업으로 통계학, 머신 러닝, 신호 처리, 자연어 분석, 컴퓨터공학 등의 기술에 사용된다.
데이터 분석에 사용되는 파이썬 소프트웨어를 나타내는 마인드 맵을 1장에서 먼저 살펴본다. 첫 번째로 다룰 부분은 넓고 다양한 파이썬 생태계다. 여기에는 NumPy, SciPy, matplotlib와 같은 잘 알려진 패키지도 있다. 1989년부터 파이썬이 개발됐기 때문에 아마 많은 사람들이 알고 있을 것이다. 파이썬은 배우기 쉽고 사용하기도 쉬우며, 다른 언어에 비해 복잡하지 않고 간결하다. 파이썬에 대해 모르더라도 다른 언어를 배워봤다면, 며칠 안에 기본적인 부분은 익힐 수 있을 것이다. 이 책을 제대로 이해하려면, 기초보다 좀 더 나아간 수준의 지식이 필요하다. 파이썬에 관련된 도서, 강의, 온라인 교습들이 많으니 그것들을 활용하자.
프로그래밍 방법론과 패러다임이 많이 발전하고 있습니다. 기계어, 어셈블리어가 나오면서 가장 먼저 나온 패러다임이 명령형 프로그래밍입니다. 많은 사람에게 가장 익숙한 형태일 것입니다. 명령형 프로그래밍은 절차형과 객체지향형으로 나뉠 수 있습니다. 코드 순서대로 실행되는 절차형과 클래스란 개념을 가져오는 객체지향형은 C, C++, 자바 등에서 쉽게 찾아볼 수 있습니다.
명령형 프로그래밍과 대조되는 함수형 프로그래밍은 선언형 프로그래밍으로, 어떤 것을 실행할지에 초점이 맞춰져 있습니다. 문법과 언어에 초점이 맞춰진 명령형 패러다임과 달리 함수형 프로그래밍은 함수의 구성에 초점 맞춰져 있습니다.
함수형 프로그래밍은 우리가 배웠던 수학의 함수 개념으로 계산에 접근합니다. 여러 함수를 중첩 사용하기 때문에 함수의 내부를 알지 못하더라도 쉽게 사용할 수 있습니다. 이때 필요한 개념에는 여러 가지가 있습니다. 먼저 순수 함수(pure function)란 동일한 입력에 항상 동일한 출력을 보이는 함수로, 입력과 출력을 매핑시켜 호출하는 쪽과 순수 함수의 통신이 가능합니다. 자세한 사항은 1장에서 다룹니다. 함수 중첩을 통해 여러 함수를 하나의 동작으로 묶을 수 있습니다. 이런 것이 가능한 함수를 고차 함수(high order function)라고 합니다. 고차 함수는 2장부터 자세히 다룹니다. 이렇듯 함수형 프로그래밍은 라이브러리만 잘 구축한다면 코드를 굉장히 간결하고 이해하기 쉽게 만들 수 있는 장점이 있습니다. 메소드에 진입할 때 사용하는 . 기호를 사용하거나 괄호의 개수를 줄이는 등 코드 가독성을 높이고 수준 높은 프로그래밍을 할 수 있습니다.
자바스크립트 언어 자체가 웹 프로그래밍 영역에서는 거의 필수적으로 사용되는 언어입니다. 좋은 프로그래밍 언어를 평가하는 기준에는 사용성, 확장성, 성능, 변경 유용성 등이 있습니다. 함수형 프로그래밍은 언어 내의 조합성을 강조한 프로그래밍으로, 사용성 부분은 떨어질 수 있습니다. 하지만 함수형 프로그래밍 개념을 익히면 조합성과 모듈성이 높아져 결국은 코드의 오류가 줄어들게 되고, 모듈화가 잘된 코드는 효율적으로 수정과 디버깅이 가능합니다.
함수형 프로그래밍을 처음 접한다면 이 책을 처음 보는 순간, 프로그래밍 언어를 새로 배우는 느낌이 들 것입니다. 처음 언어를 배울 때 어렵고 시간이 걸리지만 점점 익숙해지듯이 함수형 프로그래밍도 자바스크립트뿐만 아니라 파이썬 등의 다양한 언어로 개념을 다진다면 어떠한 프로그래밍 언어도 쉽게 넘나들 수 있는 개발자가 될 거라고 생각합니다. 1장부터는 함수형 프로그래밍의 실용성과 효율성, 모듈성에 대해 배우며, 8, 9장에서는 함수자와 모나드의 개념을, 10장에서는 ECMAScript 8에서 새로 명시된 async와 await를 배웁니다. 마지막으로 함수형 프로그래밍 테스트까지 전반적인 함수형 프로그래밍 기초 개념과 필요한 라이브러리 구축 등을 배웁니다. 전체 코드는 바벨 노드(babel-node) 기반으로 실행돼 코드 확인이 간편합니다. 자세한 실행 방법은 2장에서 살펴볼 수 있습니다. 직접 코드 수정을 거친 만큼 이 책을 통해 함수형 프로그래밍과 좀 더 친해지길 바랍니다.