파이썬으로 시작하는 컴퓨터 과학 입문 1장
[1장] 파이썬으로 시작하는 컴퓨터 과학 입문
책 파이썬으로 시작하는 컴퓨터 과학 입문을 읽고 몰랐던 내용이나 남겨두고 싶은 부분들을 기록해 보았다.
- 1p 현대적인 컴퓨터는 ‘변경 가능한 프로그램의 제어에 따라 정보 처리와 저장을 수행하는 장치’라고 정의할 수 있다. 이 정의는 두 가지 중요한 요소를 포함한다. 우선 컴퓨터는 정보 처리를 위한 장치라는 것이다. 다시 말해, 우리가 컴퓨터에 정보를 입력하면 컴퓨터는 이를 새로운 형태의 유용한 정보로 변환하고, 그 결과를 다시 우리가 이해할 수 있는 형태로 출력한다.
- 2p ‘컴퓨터 프로그램’은 컴퓨터가 어떤 일을 해야 하는지 단계별로 자세히 기술한 일련의 명령어 집합이다. 프로그램을 수정하면 컴퓨터는 수정 전과 다르게 행동하며 따라서 이전과 다른 일을 하게 된다. 컴퓨터의 이런 유연함 때문에 우리는 컴퓨터로 가계부를 쓰거나 문서를 작성하거나 게임을 할 수 있다. 기계는 그대로이지만 이를 제어하는 프로그램이 변화하는 것이다.
- 2p 컴퓨터 과학의 중요한 발견 중 하나는 이처럼 다양한 컴퓨터가 모두 능력이 동일함을 알게된 것이다. 적절하게 프로그래밍만 한다면 모든 컴퓨터는 기본적으로 다른 컴퓨터가 할 수 있는 일을 모두 할 수 있다.
- 4p 컴퓨터는 물론 컴퓨터 과학에서 중요한 도구이지만 연구 대상이 되지는 않는다. 컴퓨터는 우리가 기술할 수 있는 일을 다 수행할 수 있으므로 여기서 진짜 질문은 ‘무엇을 기술할 수 있는가?’이다. 바꿔 말하면, 컴퓨터 과학의 바탕이 되는 질문은 ‘계산 가능한 것은 무엇인가?’가 된다.
- 4p 어떤 문제를 해결할 수 있다는 증거를 보이기 위한 방법 중 하나는 직접 해결책을 설계해 보이는 것이다. 다시 말해 원하는 결과를 얻기 위한 단계별 처리 방법을 만드는 것이다. 컴퓨터 과학에서는 이를 ‘알고리즘’이라고 부른다. 어려운 단어 같지만 ‘조리법’과 비슷한 뜻이라고 생각하면 된다.
- 7p 컴퓨터가 사람의 말을 이해할 수 있다고 해도 인간의 언어는 복잡한 알고리즘을 나타내는 데 적합하지 않다. 자연 언어는 모호성과 불명확성으로 가득하다 … 컴퓨터 과학은 연산을 명확하고 모호하지 않게 나타내느 표기법을 고안해 이 문제를 해결했다. 이 표기법을 ‘프로그래밍 언어’라고 한다. 프로그래밍 언어의 모든 구조는 정확한 형태(구문)와 정확한 의미(의미론)을 갖는다. 프로그래밍 언어는 컴퓨터가 지시를 이해하고 따를 수 있는 암호(코드)같은 것이라고 할 수 있다. 실제로 프로그래머들은 자신이 작성한 프로그램을 ‘코드’라고 부르며, 알고리즘을 프로그래밍 언어로 작성하는 행위를 ‘코딩’이라 부른다.
- 8p 인터프리터는 컴퓨터가 고수준 언어를 이해하는 것처럼 시물레이션을 해 주는 프로그램이다. … 인터프리터 방식과 컴파일러 방식의 차이는, 컴파일러는 전체 프로그램을 한 번에 번역하기 때문에 번역된 프로그램을 컴파일러 없이도 여러 번 실행할 수 있다. 그러나 인터프리터는 프로그램을 실행하려고 할 때마다 소스 코드가 필요하다.그리고 대화식으로 유연하게 구성된 프로그래밍 환경을 갖춘 인터프리터 방식에 비해 컴파일러로 번역된 프로그램은 대체로 실행이 좀 더 빠른 것이 특징이다.
- 9p 컴퓨터 안에서 이뤄지는 연산 과정은 마치 마법을 사용하기 위해 부리는 정령과도 같다. 하지만 안타깝게도 이 정령들은 우리가 이해하지 못하는 신비한 언어만을 사용한다. 이제 우리에게는 이 정령들에게 우리가 원하는 바를 전달해 달라고 부탁할 요정이 필요하다. 부탁할 요정은 파이썬 인터프리터다.
- 14p 파이썬은 컴파일 방식과 인터프리터 방식의 절충형을 취하고 있다. 파이썬 모듈에 포함된 소스 코드는 ‘바이트 코드’라는 조금 더 원시적인 형태로 컴파일 된다. 이 바이트 코드가 인터프리터에서 해석되어 실행된다. 이렇게 만들어진
.pyc
파일을 보관해 두면 다음에 이 모듈을 실행할 때 조금 더 빨리 실행할 수 있다. 하지만 디스크 공간을 절약하고 싶다면 삭제해도 무방하다. 파이썬은 필요할 때 이 파일을 다시 만들 수 있다. - 19p 이 chaos 프로그램의 두 가지 특징, 예측 불가성과 초깃값에 대한 극도의 민감성은 혼돈 상태가 갖는 전형적인 특징이다. 혼돈은 컴퓨터 과학에서 중요한 의미를 지닌다. 우리가 컴퓨터를 이용한 모형화를 통해 예측을 시도했던 실세계 현상 중 상당수가 이런 혼돈 상태와 같은 행동을 보였기 때문이다. ‘나비 효과’라는 말을 들어 본 적 있을 것이다. 이는 날씨의 변화를 예츠가힉 위해 만든 컴퓨터 모형은 너무도 민감해 뉴저지에서 나비 한 마리가 날갯짓만 해도 그 영향이 피오리아의 일기 예보에까지 미친다는 이야기다.