프로그램과 프로그래머와 프로그래밍 언어의 개념

프로그래밍 기초 수업이나 소프트웨어 교육을 시작할 때, 프로그램 관련 용어 개념을 아는 것은 중요합니다. 그래서 정리해 보았습니다


프로그램/프로그래밍/프로그래밍언어/프로그래머의 개념



  프로그램이란? 

컴퓨터 프로그램(computer program)이란, 문제를 해결하기 위해 컴퓨터가 알아들을 수 있는 명령어를 이용하여 작성한 문서, 컴퓨터를 실행시키기 위한 일련의 명령어들의 모음입니다.


'프로그램'은 본래 ‘미리 쓴다’는 뜻을 지닌 라틴어에서 유래된 말로서, 진행되는 순서를 미리 짜 놓은 것을 의미하였다고 합니다. 1920년대 이후 '라디오 방송 프로그램'처럼 시간표를 일컫는 말로 흔히 사용되었으며, 컴퓨터에서는 1946년 「네이처 Nature」에 게재된 '에니악' 관련 기사에서 처음으로 쓰였습니다.


☞ 컴퓨터란 프로그램에 따라, 즉 명령어가 제시된 순서에 따라 그대로 실행하여 일을 처리하고 그 결과를 내보내는 장치라고 할 수 있습니다.


  프로그래밍이란? 

문제 해결을 위해 명령어(프로그램)를 작성하는 과정을 말합니다.



  프로그래밍 언어란? 

프로그래머가 컴퓨터에게 명령을 내리기 위해(프로그램 작성을 위해) 사용하는 언어를 프로그래밍 언어라고 합니다. 


프로그래밍 언어가 필요한 이유는, 사람과 컴퓨터가 쓰는 언어가 다르기 때문입니다. 사람이 쓰는 언어를 자연어라고 하고 컴퓨터가 쓰는 언어는 0과 1로 된 기계어입니다. 사람이 컴퓨터에게 명령을 내기기 위해서는 이해하기 쉬운 형태의 프로그래밍 언어로 프로그램을 작성하면 컴퓨터는 컴퓨터가 이해할 수 있는 형태의 기계어로 변환(컴파일)시켜 실행한답니다. 대표적인 프로그래밍 언어로는 C언어, 자바, 파이썬, 자바 스크립트 등이 있습니다. 


  프로그래머란? 

컴퓨터 프로그래머(programmer)란 컴퓨터 프로그램을 설계하고 작성하는 사람, 논리나 알고리즘을 설계하고 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하고 테스트하는 사람입니다.


프로그램 개념


그러면 '프로그래머가 프로그램을 작성하기 위해 컴퓨터에서 프로그래밍 언어를 이용해 프로그래밍 하고 있다'라는 말이 이해가 되시나요? 이해가 된다면 각각의 개념이 무슨 말인지 알고 있는 것입니다.



컴퓨터와 프로그램 개념 이해 활동


그러면 컴퓨터의 역할과 프로그머의 역할을 통해 프로그래밍의 개념에 대해 더 알아보도록 하겠습니다.


  컴퓨터와 프로그램 


1. 학습 주제 : 컴퓨터에게 정확한 명령어를 전달하려면 어떻게 해야 할까?

2. 학습 목표 : 컴퓨터와 프로그래머의 역할 활동을 통해 프로그래밍 과정을 이해할 수 있다.


컴퓨터라는 기계에게 프로그래머가 내리는 명령어(프로그램)들이 어떻게 전달이 되어 표현되는지에 대해 알아보는 활동입니다. 잘못된 명령어가 어떤 결과를 가져오는지, 정확한 표현을 위해서는 어떤 명령어를 어떤 절차를 따라 진행해야 하는지를 알아보고, 이를 통해 프로그램과 프로그래머, 컴퓨터의 관계를 알 수 있는 활동입니다. 


3. 활동 방법


2~4인 정도를 모둠으로 구성하고 한 사람은 프로그래머, 나머지는 컴퓨터(기계) 역할을 합니다.

프로그래머 역할을 맡은 사람에게 그림이 그려진 종이 한 장을 나누어 줍니다. 이때 컴퓨터 역할을 맡은 사람에게 그림을 보여주면 안됩니다. 프로그래머는 '그림 1)'을 보고 컴퓨터 역할을 맡은 사람들에게 한번만 말로 설명을 합니다.  그러면 컴퓨터는 설명만 듣고 그림을 그립니다.


역할 활동을 할 때 규칙은 다음과 같습니다.


프로그래머의 역할

 컴퓨터의 역할

 - 주어진 그림을 컴퓨터에게 한 번씩만 시간 간격을 두면서,

 - 순서대로 설명해준다.

 - 컴퓨터의 눈치를 보지 않는다.

 - 손짓발짓몸짓… 모두 금지오직 말로만 설명한다.

 - 프로그래머는 컴퓨터가 그리고 있는 중간에 그림을 볼 수 없다.

 - 생각하지 않는다.

 - 절대 프로그래머에게 기다려 달라고 하거나,

 - 물어보지 않는다.

 - 프로그래머가 말한 대로 그림을 그린다.


<그림 1> 간단한 1단계 그림 설명하고 표현하기


- 사전에 그 어떠한 언질을 주지 않습니다.

- 역할 분담에 충실하도록 합니다.

- 시간이 남는 모둠은 추가 문제를 풀도록 한다

- 결과 확인 과정에서 왜 그런 결과가 나왔는지 명확하게 알도록 합니다.


컴퓨터와 프로그래머 개념이해 문제



'그림 1)'을 설명하고 그리는 시간은 2~5분 정도 주시면 됩니다.


예를 들어, 프로그래머가 그냥 '네모를 그리세요'라고 말하는 사람이 있는가 하면 '정사각형을 그리세요'라고 설명을 하는 사람도 있을 것입니다. 그 다음에는 '반을 나누세요' 또는 '가로로 가운데에 선을 그으세요'라고 말하는 사람도 있을 것입니다. 설명하기에 따라 완전히 다른 그림이 나오게 됩니다. 일단 한번만 설명하고 컴퓨터끼리도 그리는 과정을 볼 수 없도록 가리고 프로그래머의 명령대로 그리게 합니다. 이때, 컴퓨터는 기계이기 때문에 말을 하면 안됩니다. 질문도 할 수 없습니다. 들은 대로 그냥 실행만 하면 됩니다. 

빨리 끝난 모둠은 추가 보너스 문제까지 풀도록 하고 일정 시간이 지나면 그린 그림을 같이 봅니다. 프로그래머가 의도한 대로 그림이 그려졌는지 확인하고 컴퓨터는 어떻게 이해하고 그림을 그렸는지 서로 이야기합니다. 그리고 왜 그런 결과가 나왔는지에 대해 아주 자세하게 서로 서로 이야기를 하도록 합니다. 이 과정에서 학생들은 '아! 이렇게 설명하면 안되는구나'라는 것을 알게 됩니다. 여기에서 프로그램의 개념을 설명하면 됩니다. 프로그램은 명령어의 집합이며, 프로그래머가 컴퓨터에게 명령을 내리면 컴퓨터는 그대로 실행만 하는 기계라는 것을 인지할 수 있도록 설명을 합니다. 정확한 명령어로 전달하지 않으면 엉뚱한 결과가 나오는 것을 알게 됩니다. 


"프로그래머가 컴퓨터에게 명령어로 지시를 하면 컴퓨터는 그대로 실행한다. 이 명령어의 집합을 프로그램이라고 한다"


이번에는 '그림 2)'를 프로그래머 역할의 학생에게 제공합니다. 이번에는 좀 더 복잡한 문제입니다. 그리고 5분 정도의 시간을 줍니다. 모둠별로 프로그래머들이 설명하는 내용을 잘 들어보면 이전보다 굉장히 정교해진 것을 알 수 있습니다. 예를 들면 과학이나 수학적으로 생각하는 학생들은 '1mm 동그라미를 1cm 간격으로 5*5로 그려!' 그리고 '(0,1)와 (0,2)를 한 줄로 이어'라고 표현하는 학생들도 생겨납니다. 반면에 '동그라미 5개를 그려, 그리고 그 아래 5줄을 그려'라고 설명하는 학생들도 있습니다. 추가 보너스 문제도 풀어보라고 합니다. 많이 난처해합니다. 감정을 표현하는 얼굴 모양이라서 설명하기가 좀 어렵습니다. 그리고 두 번째 눈을 보시면 크기가 다릅니다. 예리하게 그것도 설명으로 표현하는 학생들도 더러 있습니다. 여기에서 프로그래머의 역할이 무엇인지, 명령어를 절차적으로 얼마나 정교하게 표현해야 제대로 된 결과물이 나올 수 있는지 이해할 수 있게 됩니다. 


컴퓨터와 프로그래머 개념이해 문제2



이렇게 프로그래머와 컴퓨터의 역할을 통해 프로그램의 개념을 이해할 수 있습니다. 예전에 개그콘서트에서 '사이보그지만 괜찮아'라는 코너가 있었습니다. 로봇 박사의 명령에 따라 로봇들이 그대로 명령어를 이행하는데, 명확한 명령어가 아니라서 제대로 수행하지 못하는 것을 보여주는 개그입니다. 이 영상으로 프로그래머(로봇 박사)가 잘못된 명령어나 애매모호한 명령어를 사용했을 경우 어떤 일이 일어나는지 재미있게 알 수 있습니다. 유튜브에서 검색해서 보여주시면 됩니다.


잘못된 명령어 예-사이보그지만 괜찮아


프로그램이 정교하지 못했을 때 일어날 수 있는 일들에 대해 말해봅시다. 명령어 순서를 틀리게 하거나 알아듣지 못하는 명령어를 사용한 경우 혹은 판단을 잘못 했을 경우, 어떤 일이 생길수 있을까요? 만약에(그런 일은 없겠지만) 사람이 운전하지 않아도 되는 자율 주행차 프로그램에서 초록불이 아니라 빨간불에 지나가라고 잘못된 프로그램을 작성하면 어떤 일이 발생할지는 안봐도 알 수 있습니다. 그리고 모든 경우의 수를 예측하지 못하면 큰 사고로 이어질 수도 있습니다. 실제로 자율 주행차가 앞에 오는 흰색 차량을 햇빛에 반사되어 인식하지 못해 탑승자가 사망한 사고도 있었습니다. 예측하지 못한 경우라 프로그램에 반영을 못한 경우입니다.  


그러면 이번에는

'로봇에게 라면을 끓이도록 한다면 로봇에게 어떤 명령어를 어떤 순서로 사용해야 할까요?'

라는 문제를 학생들에게 제시해 봅니다.


위의 활동을 끝내고 아이들에게 이 문제를 내면 이제는 아주 정교한 명령어를 사용하기 시작합니다. 예를 들면 '냄비에 물 2컵을 채운다 - 가스불을 켠다 - 라면을 넣는다 - 불을 끈다 - 라면을 먹는다' 이런 방식으로 한 학생이 말하면 다른 모둠원들이, 


"그렇게 하면 로봇이 냄비가 어디에 있는지 모르잖아?"

"그리고 수돗물을 넣어? 아님 정수기 물을 넣어?"

"로봇이 가스불을 켤 줄 알아?"

"라면이 다 끓으면 꺼야지 그냥 꺼?, 몇 분 뒤에?"


신기하게도 이렇게 서로서로 질문하면서 활발하게 의견을 나누고 나중에는 라면 끓이는 방법에 대해 A4용지 한 장 넘게 기발할 정도의 내용으로 채워 옵니다. 


로봇은 단순히 컴퓨터라는 기계이고 자신들이 프로그래머라는 것을 인식하며, 프로그램(명령어)에 대해 절차적으로 논리적으로 프로그램을 작성하는 개념에 대해 알게 됩니다.


마지막으로 또다시 학생들에게 질문을 합니다.


프로그래머에게 요구되는 자질은 무엇일까요? 


대답이 어떻게 나올까요? 

"꼼꼼해야 할 것 같아요", "논리적이어야 할 것 같아요", "순서를 잘 생각해야 할 것 같아요", "모든 경우를 대비해서 생각할 줄 알아야 해요" 등, 다양한 대답들이 나오게 됩니다.


이 글을 공유하기

댓글

Designed by JB FACTORY