단원해설
01. 왜 프로그래밍을 알아야 할까?
프로그래밍이란 간단하게 설명하면 컴퓨터에게 명령을 내리는 것이다. 본래 프로그래밍은 힐버트가 1928년 제안한 문제 중 하나인 ‘원칙적으로 수학의 모든 문제를 순서대로 해결할 수 있는 일반적인 기계적 절차가 있는가?’에서 유래한다. 이 문제를 해결한 수학자 앨런튜링이 내놓은 튜링머신의 문제 해결 명령 및 절차가 ‘프로그래밍’의 시작이었다고 이야기한다.
즉, 프로그래밍은 수학 문제에서 유래되었고, 프로그래밍을 해결하기 위해서는 다양한 지식과 문제해결 절차나 방법인 알고리즘이 사용된다. 프로그래밍을 하기 위해서는 문제를 분석하고 이해하며 논리적인 절차를 만들고, 컴퓨터 언어에 맞추어 검토하고, 디버깅해야 한다.
그렇다면 왜 이러한 프로그래밍의 내용과 방법을 공부해야 할까? 컴퓨터의 언어를 궁금해하고, 직접 무언가를 만들어 보고 싶어 하는 사람도 있지만, 나는 프로그래밍을 만드는 개발자와 아무 관계가 없다고 생각하는 사람도 있을 수 있다. 프로그래밍을 배우는 것은 소프트웨어 개발자가 되기 위해서뿐만 아니라 프로그래밍을 배우는 대표적인 이유 중 하나인 컴퓨팅 사고력을 향상시키기 위함이다. 프로그래밍을 이해하고 적용하는 것은 수학적, 논리적 적용에 있어 다양한 사고와 문제해결력을 길러주고, 실제 생활에서도 주어진 문제 상황에 새로운 방법들을 적용해 가는데 도움을 준다. 또한 점차 다양한 사회분야에 적용되어 가고 있는 프로그래밍을 깊이 있게 이해 할 수 있을 것이다.
02. 어떤 학습 활동을 하나?
먼저 첫 단원에서는 프로그래밍의 기초적인 이해와 더불어 소프트웨어를 만드는 방법, 컴퓨터가 소프트웨어로 움직이는 원리, 프로그래밍 언어의 종류에 대해서 알아보고자 한다. 이미 우리 사회에 깊숙이 들어온 프로그래밍의 현실을 알고, 프로그래밍의 기본적인 내용을 학습할 수 있을 것이다. 또한 프로그래밍의 필요성을 알고, 프로그래밍 학습 방향을 가질 수 있다. 이와 더불어 프로그래밍 언어 중의 하나인 파이선에 대해서 소개한다. 파이선은 문법이 간단하고, 무료로 배포되는 공개 프로그램으로 누구나 이용이 가능한 언어이다. 다양한 라이브러리를 제공하여 많은 사람들이 여러 분야에서 활용하고 있는 언어이다. 우리가 함께 배울 언어가 어떤 특징을 가지고 있는지 알 수 있을 것이다.
다음 2단원부터는 프로그래밍 언어 중 파이선의 개발환경 구축과 기본 사용방법에 대해 소개하고자 한다. 시각장애 학생들을 위해 스크린리더 사용을 전제하여 탭키 및 단축키를 중심으로 설치 과정을 따라 하고, 기본 기능을 이해할 수 있도록 구성하였다.
그리고 파이선을 사용하기 위해 코드 편집기 활용 방법을 학습하고자 한다. 파이선도 일종의 문서이기 때문에 ‘한컴오피스’나 ‘MS 워드’처럼 코드를 입력하고 수정하며 저장할 수 있는 문서 편집기가 필요하다. 문서 편집 프로그램으로는 IDLE을 활용하는 방법, 메모장을 활용하는 방법, 인텔리전스 개발 툴인 비주얼스튜디오를 활용하는 방법을 각각 제시하여 학생의 특성에 알맞은 코딩 방법을 선택할 수 있도록 안내하였다. 또한 각각의 방법을 사용하면서 만날 수 있는 문제점과 그에 따른 해결방안을 통해서 파이선 코드 작성에 대한 기본 방법을 습득할 수 있을 것이다.
1. 컴퓨터 프로그래밍 알아보기
컴퓨터는 우리 일상에서 매우 중요한 역할을 하며 우리는 매일 컴퓨터와 함께 살아간다. 쉽게 생각하면 노트북, 데스크톱 컴퓨터만 생각할 수 있지만 태블릿, 스마트폰도 모두 컴퓨터의 한 종류이다. 그리고 가정에서 사용하는 냉장고나 전기밥솥, 게임기, 거리에서 볼 수 있는 신호등이나 자동차 등에도 요즘은 모두 컴퓨터 시스템이 들어가 있다.
컴퓨터는 정보를 처리하는 전자 장치이다. 종류에 따라 겉모양은 다르지만 컴퓨터는 크게 만질 수 있는 ’하드웨어’와 만질 수 없는 ’소프트웨어’의 두 부분으로 이루어져 있다. 대부분의 컴퓨터는 스스로 생각하거나 프로그램을 실행할 수 없으므로 반드시 명령을 주는 소프트웨어가 필요하다. 이처럼 우리 주변의 모든 자동화된 기계에는 공통점이 있다. 기계 안에 내장된 소프트웨어의 명령에 따라 작업을 수행한다는 점이다. 이렇게 명령에 따라 실행되는 소프트웨어를 프로그램이라고 한다.
요즘 우리가 일상적으로 많이 사용하는 카카오톡이나 페이스북 등 모두 하나의 프로그램이다. 또한 이러한 프로그램은 게임, 음악 재생, 인터넷쇼핑, 스마트TV 등 생활 전반에 다양하게 활용되고 있다.
앞으로 모든 사회의 전반에서 소프트웨어는 더욱 중요한 역할을 하게 될 것이다. 다양한 분야에서 소프트웨어들을 잘 이해하고, 이용해야 하는 시대가 가까이 오고 있다.
1프로그래밍이란 무엇일까?
프로그래밍(Programming)이란 프로그램(Program)을 만드는 작업을 말한다. 프로그램은 컴퓨터에게 내리는 명령어의 모음을 말한다. 이러한 프로그램이 모여서 소프트웨어가 된다. 즉, 프로그래밍은 소프트웨어를 만드는 과정이고, 이러한 소프트웨어를 만들 때 사용하는 도구를 ‘프로그래밍 언어(Programming Language)’라고 한다. 우리에게는 한국어, 미국 사람에게는 영어가 있는 것처럼 컴퓨터에게는 컴퓨터의 언어인 ‘프로그래밍 언어’를 사용하는 것이다.
프로그래밍 언어는 대부분 알파벳과 숫자, 기호나 문장부호의 모음으로 이루어져 있다. 명령어를 입력하면 컴퓨터의 하드웨어가 이해할 수 있는 0과 1의 나열로 바뀌어 전달되지만 이것을 사람이 이해하기 쉬운 형태인 프로그래밍 언어로 만들어 놓은 것이다. 이와 같은 문자나 숫자를 코드(code)라고 한다. 그래서 코드를 작성하는 것이라는 의미에서 프로그래밍을 코딩(coding)이라고 한다. 1)
1) EBS(2016). Hello EBS 소프트웨어. 서울: EBS한국교육방송공사.
2프로그래밍으로 무엇을 할 수 있을까?
가. 문제해결을 키우는 프로그래밍
현대 IT분야의 역사에서 빼놓을 수 없는 MS의 빌 게이츠나 페이스북을 만든 마크 저커버그, 구글을 창업한 래리 페이지는 모두 어려서부터 프로그래밍을 시작했다고 한다. 생각해볼 점은 이 큰 기업의 경영자들이 경영 수업을 받은 적이 없다는 것이다. 회사의 CEO는 사업에 대한 다양한 능력을 필요로 하는 자리이다. 이러한 능력을 기르기 위해 많은 노력을 한다. 그런데 이들은 경영 수업을 받은 적도 없이 어떻게 큰 기업을 성공적으로 만들게 된 것일까? 이들의 공통점은 프로그래밍에 있다. 사람들은 프로그래밍이 이 CEO들의 능력에 영향을 미쳤다고 생각한다. 여러 가지 이유가 있겠지만 프로그래밍이 논리적 추론 능력을 향상시키기 때문이다. 여러 연구에서 컴퓨터 프로그래밍은 우리의 논리적 추론 능력 향상에 도움을 준다고 한다.
또한 우리는 프로그래밍 언어로 문제를 해결하고자 할 때 추상화를 통해 문제를 단순화하여 해결하기 좋은 형태로 만들고, 절차와 방법에 따라 알고리즘을 설계한다. 이렇게 설계한 알고리즘이 프로그래밍 언어로 표현되면 컴퓨터가 그 언어를 해석하여 자동으로 해결할 수 있게 된다. 이렇게 프로그래밍을 하다 보면 논리적 사고, 계획 및 분석 능력, 문제해결능력이 향상된다.
나. 아이디어를 현실로
좋은 아이디어가 있어도 그것을 현실화할 수 있는 도구나 방법을 찾지 못한다면 아무 소용이 없게 된다. 프로그래밍을 할 수 있다면 아이디어에 대한 시뮬레이션을 구현하고, 검토하며 다른 사람과 의견을 나누어 볼 수 있다. 코드는 우리의 아이디어를 현실로 만드는 멋진 재료이다. 예를 들어 예전에는 버스 도착 시간을 알지 못해 버스정류장에서 무작정 기다려야 했지만 요즘은 버스의 위치를 전송받아 어디서든 버스 도착 시간을 확인하고 도착시간에 맞추어 버스정류장으로 움직일 수 있다. 일상생활에서 불편함을 느끼고, 버스의 정보와 교통정보 등을 수집하고 전달하는 소프트웨어를 만들어 내어 많은 사람들이 편리한 생활을 할 수 있게 된 것이다.
즉, 프로그래밍은 자신의 생각을 표현할 수 있는 창의적인 활동이다. 프로그래머는 사람들이 편리하게 사용할 수 있는 소프트웨어를 개발하기도 하며, 다양한 문제를 해결하고, 게임소프트웨어, 컴퓨터그래픽, 웹사이트 등을 만들어 제공한다.
다. 누구나 할 수 있는 프로그래밍
컴퓨터가 처음 세상에 나온 초기에는 과학자와 기술자들만이 컴퓨터를 사용할 수 있었다. 그러나 컴퓨터를 쉽게 다룰 수 있게 하기 위해 프로그래밍 언어가 만들어지면서, 근래에는 초등학생이나 비전공자들도 손쉽게 배울 수 있는 프로그래밍 언어까지 개발되었다. 프로그래밍의 무한한 가능성을 알게 된 세계 각국에서는 남녀노소 모두 프로그래밍을 배우기 위해 다양한 교육과정에 참여하고 있다.
프로그래밍은 개발자만 하는 것이 아니라 누구라도 관심이 있다면 할 수 있다.
3소프트웨어는 어떻게 만들까?
우리가 만약 집을 짓는다고 생각해 보도록 하자. 집을 세울 계획을 마련하고, 설계도를 만들고, 재료를 사용하여 집을 짓는다. 그리고 집을 모두 지은 후 알맞게 잘 지어졌는지 확인을 하게 된다. 문제점이 발견되었을 경우 다시 보수를 하게 된다.
소프트웨어도 마찬가지이다. 어떤 문제상황 앞에서 그 문제를 해결하기 위한 방법을 생각해보고 이를 표현하는 코드를 작성한다. 어떤 재료를 이용할 것인지, 어떤 순서로 진행할 것인지, 어떤 방법으로 할 것인지 준비한다. 그리고 프로그래밍 언어로 이것을 표현한다. 프로그래밍이 끝나면 테스트를 해보고, 잘못된 부분이 있으면 디버깅하게 된다.
기계는 인간처럼 융통성 있는 사고가 불가능하기 때문에 정확하고 논리적으로 명령을 내려야 한다. 우리가 컴퓨터에게 적절한 명령을 주려면 컴퓨터의 언어로 컴퓨터처럼 생각해야 할 필요성이 있다. 이런 방식으로 생각하는 능력을 ‘컴퓨팅 사고력’이라 한다. 컴퓨팅 사고력이란 컴퓨팅의 기본 개념과 원리를 바탕으로 문제를 효율적으로 해결하는 사고 능력을 말한다. 즉, 컴퓨터가 문제를 해결하는 방식을 이해하고, 이를 현실 문제 해결에 적용하는 것이 컴퓨팅 사고력이다.
4컴퓨터는 소프트웨어로 어떻게 움직일 수 있는 걸까? 2)
오늘날의 컴퓨터는 그 모습과 크기 및 성능은 다르지만 기본적인 구조는 거의 똑같다. 1945년에 천재 과학자 존 폰 노이만이 발표한 논문 ‘EDVAC’에서 기술한 컴퓨터의 구조를 그대로 따르고 있다. 폰노이만은 이 논문에서 데이터를 외부로부터 받아들이고 내보내는 입력/출력 장치를 갖고 있고, 데이터와 명령어를 보관하는 기억장치, 그리고 데이터의 가공을 담당하는 중앙처리장치로 구성되는 현대 컴퓨터의 구조를 최초로 정의했다. 이렇게 기억장치에 명령어를 내장하는 컴퓨터를 일컬어 프로그램 내장식 컴퓨터라고 한다. 프로그램 내장식 컴퓨터는 폰 노이만의 논문에서 소개되었기에 ‘폰 노이만 구조’라는 이름으로 알려지게 되었다.
우리가 사용하고 있는 컴퓨터와 폰 노이만 구조를 비교해 보자. 키보드와 마우스는 입력장치, 모니터와 프린터는 출력 장치에 해당한다. 인텔 i7 쿼드 코어 칩은 중앙처리장치, DDR3 DRAM은 기억 장치에 해당한다. 태블릿과 스마트폰도 이 구조를 그대로 따르고 있다.
2) 박상현(2016). 뇌를 자극하는 파이썬 3. 서울: 한빛미디어.
가. 중앙처리장치
중앙처리 장치, 즉 CPU는 컴퓨터에서 가장 중요한 장치라고 할 수 있다. 컴퓨터가 수행하는 계산은 모두 CPU에서 이루어진다. CPU는 크게 두 가지로 이루어져 있다. 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술연산과 참과 거짓을 다루는 논리연산을 수행하는 산술논리장치와 주어진 명령을 가져오거나 해독하고, 데이터를 옮기거나 수행내용을 지시하는 제어장치이다.
제어장치와 산술논리장치는 다음과 같은 과정을 반복한다.
1. 먼저 제어장치가 기억장치로부터 명령어를 가져온다.
2. 제어장치는 가져온 명령어를 해독한다.
3. 제어장치는 해독한 명령어에 따라 산술논리장치에 데이터를 옮기고 어떤 연산을 수행할지를 지시한다.
4. 산술논리장치는 제어장치가 지시한 대로 계산을 수행한다.
5. 그리고 수행한 결과를 기억장치에 다시 저장한다.
나. 기억장치
기억장치는 데이터와 함께 명령어를 저장하는 역할을 한다. 메모리의 용량이 클수록 더 많은 데이터와 명령어를 저장할 수 있고, 메모리가 빠르게 동작할수록 더 빠르게 CPU와 데이터와 명령어를 교환할 수 있다. 컴퓨터의 메모리는 세 계층으로 구성된다. CPU와 가장 가까이에 있는 캐시 메모리가 있고, 캐시 메모리 아래에는 대개 램(RAM)으로 구성되는 주기억 장치가 있다. 그리고 CPU로부터 가장 멀리 떨어져 있는 보조기억 장치가 있다. 보조기억 장치는 하드디스크가 대세였지만, 메모리 기술이 발전하면서 플래시 메모리나 SSD가 보조기억 장치로 많이 쓰이고 있다.
다. 입력/출력 장치
입출력 장치는 컴퓨터가 외부와 소통하는 방법이다. 키보드나 마우스부터 시작해서 터치스크린, 마이크, 게임패드, 동작인식장치 등이 모두 입력 장치로 사용된다. 또한 모니터, 프린터, 스피커, 빔프로젝터 등이 모두 출력장치이다. 이러한 입출력 장치들은 ‘입출력 버스(I/O BUS: 컴퓨터의 정보 전송 회로)’를 통해 중앙처리장치, 기억장치와 정보를 주고받는다.
5프로그래밍 언어에는 어떤 것이 있을까?
우리가 사는 세계에는 한글, 영어, 중국어 등 다양한 언어가 있다. 우리는 이러한 여러 가지 언어를 활용하여 다른 나라의 사람들과 소통하고 함께 살아간다. 바로 언어가 다양한 문화를 이어 주는 매개체 역할을 하는 것이다. 그렇다면 컴퓨터와 대화하거나 명령을 내리려면 어떻게 해야 할까? 바로 사람과 컴퓨터가 서로 소통하고 이해할 수 있는 언어가 필요한 것이다. 그것이 바로 프로그래밍 언어이다. 프로그래밍 언어를 다룬다는 것은 외국어를 익히는 것과 비슷하다. 이러한 프로그래밍 언어는 종류가 매우 많다. 프로그래밍 언어는 발전단계나 실행 방식에 따라 다양하게 나뉘는데 0과 1의 이진수로 된 기계어, 이진수 대신 문자를 사용하는 어셈블리어, 파이선, C, 자바 등이 있다.
어셈블리어는 복잡한 기계어 명령을 사람이 이해할 수 있는 기호나 단어로 바꿔 만든 것이다. 예를 들면 ‘01001100 00001000 10000001 10010000’같은 기계어 명령을 어셈블리어에서는 ‘MOV’라고 표현한다. 물론 컴퓨터는 ’MOV’를 바로 이해하지 못한다. 컴퓨터는 0과 1만 알아듣기 때문이다. 그래서 이 어셈블리어는 컴파일이라는 번역 과정을 거쳐 컴퓨터가 이해할 수 있게 바꾸어 준다. 프로그래머가 어셈블리어로 코드를 작성한 후 ‘컴파일러’로 실행하는데 이 실행파일이 바로 프로그램이다. 반면에 인터프리터는 실시간으로 기계어를 해석해서 실행해 준다. 인터프리터 방식은 오류를 발견해서 수정을 하면 바로 실행이 가능하기 때문에 컴파일 방식에 비해 개발 속도가 빠르다. 우리가 이제 공부할 ‘파이선’도 인터프리터 방식의 프로그래밍 언어이다.
6파이선 알아보기
파이선은 1991년 귀도 반 로섬(Guido van Rossum)이 발표한 프로그래밍 언어이다. 1989년 크리스마스가 있던 주에 연구실이 닫혀서 심심하던 차에 만들기 시작했다고 한다. 파이선이라는 이름은 당시 BBC TV에서 방영되던 영국의 코미디 그룹 ‘Monty Python`s Flying Circus’에서 따왔고, 로고는 파이선(Python)이라는 영어 단어가 뜻하는 ‘비단뱀’을 모티브로 만들어졌다.
가. 파이선의 장점
1) 문법이 간단해서 배우기 쉽다.
일단 문법이 간단하다. 잘 알려진 C언어 등의 프로그래밍 언어는 문법이 복잡해서 어렵게 느껴지는 경우가 많다. 그러나 파이선은 단순한 문법을 가지고 있어서 전문가뿐만 아니라 일반인들도 쉽게 사용 할 수 있다. 쉽게 사용할 수 있으면서도 메모리가 허용하는 한 무한대의 정수를 다룰 수 있는 등 수치 처리에 강점을 보이는 데다 다른 언어에 비해 생산성이 높고, 다른 언어로 작성된 코드와 결합하는 능력이 탁월하여 다양한 전문분야에서 많이 사용하고 있다.
2) 오픈소스이며 다양한 라이브러리를 제공한다.
파이선은 오픈소스이기 때문에 누구나 무료로 다운로드하여 사용할 수 있다. 또한 다른 언어로 만든 프로그램들을 파이선 프로그램 안에 포함할 수 있어서 다양하고 강력한 라이브러리를 제공한다. 파이선은 그 자체로도 생산성이 뛰어나지만 다른 라이브러리의 도움을 받으면 코딩 시간을 크게 줄일 수 있다.
3) 많은 사람들이 사용하고 있어서 굉장히 다양한 분야에 활용할 수 있다.
웹서버, IOT, 기계학습과 딥러닝, 애플리케이션 등 여러 분야에 활용이 가능하다.
4) 대부분의 운영체제(윈도우, 맥, 리눅스)에서 같은 방법으로 사용할 수 있다.
다른 프로그래밍언어의 경우 운영체제가 한정적인 경우가 많다. 그리고 여러 운영체제에서 사용할 수 있어도 사용 방법이 조금씩 다른 경우가 있다. 하지만 파이선은 모든 운영체제에서 같은 방법으로 사용이 가능하다.
나. 파이선의 단점
1) 속도가 느리다.
파이선은 많이 사용하는 C언어와 비교해 보면 10~350배 정도가 느리다. 프로그래밍 언어는 대부분 ‘쉽게 사용할 수 있다’와 ‘빠르다’라는 특징이 반비례한다. 파이선은 쉽게 사용할 수 있는 대신 느리고, C언어는 어려운 대신 빠르다. 그래서 파이선으로 도스나 리눅스 같은 운영체제, 많은 횟수나 반복과 연산을 필요로 하는 프로그램 또는 데이터 압축 알고리즘 개발 프로그램 등을 만드는 것은 어렵다. 즉 빠른 속도나 하드웨어를 직접 제어해야 하는 프로그램에는 어울리지 않는다. 하지만 최근에는 컴퓨터 성능이 좋아져서 게임 등의 연산이 많이 필요한 프로그램이 아니면 속도 차이를 크게 느끼지 못한다.
2) 모바일 프로그래밍은 어렵다.
파이선은 구글이 가장 많이 애용하는 언어이지만 파이선으로 안드로이드 앱(APP)을 개발하는 것은 아직 어렵다. 안드로이드에서 파이선으로 만든 프로그램들이 실행되도록 지원하긴 하지만 이것만으로 앱을 만들기에는 아직 역부족이다. 아이폰 앱 개발 역시 파이선으로는 적절하지 않다.
다. 코드 편집기
파이선 코드도 일종의 문서이기 때문에 ‘한컴오피스’나 ‘MS 워드’처럼 코드를 입력하고 수정하며 저장할 수 있는 문서 편집기가 필요하다. 코드 편집을 할 수 있는 문서 편집 프로그램으로는 파이선을 설치하면 기본으로 설치되는 프로그램인 IDLE을 비롯하여 ‘메모장’, ‘VI Editor(Linux)’, ‘Sublime Text Atom’, ‘PyCharm(파이선 전용 개발도구)’, ‘비주얼 스튜디오 코드’ 등 여러 가지가 있으며 이들은 사용자의 편이에 따라 선택할 수 있다.