프로그래밍과 코딩이 밀접한 관계에 있지만, 프로그래밍이 더 큰 의미로 사용된다.
프로그래밍이 문제를 추상화 한 모델에서 알고리즘을 도출하는 것까지를 포함한다면, 코딩은 주어진 알고리즘을 프로그래밍 언어로 변환한 것을 의미한다.
즉, 코딩에는 알고리즘의 좋은 점이나 나쁜 점이 그대로 반영된다고 할 수 있다.
프로그래밍이 아니면 배울 수 없는 것은 무엇일까? 꼭 프로그래밍을 해야만 하는 것일까?에 대한 의문이 있다면, 스스로 프로그래밍에 의해 무엇을 배울 수 잇는지 스스로 생각해 볼 필요가 있다. 프로그램을 작성해야만 얻을 수 있는 컴퓨터의 개념이 있을까?
컴퓨터의 원리를 이해한다는 것은 컴퓨터가 할 수 잇는 것은 무엇이든 만들 수 있다는 것을 의미한다. 외부로부터 컴퓨터를 접하는 사용자의 입장이 아니라 컴퓨터를 활용해서 무엇이든 만들 수 있다는 가능성을 창조할 수 있는 일이 바로 프로그래밍을 통해서 가능해 질 수 있다. 이것이 바로 컴퓨터를 사용하는 모든 사람이 프로그래밍을 배워야 하는 이유이기도 하다.
자신이 직접 코드를 작성하고, 구동시키고, 결과를 보고, 수정할 수 있도록 하는 과정을 반복하면서 깨닫게 되는 것, 그리고 자신만의 아이디어를 완성해 갈 수 있는 힘을 기르는 것이 프로그래밍 교육의 목표라 할 수 있다.
다양한 논문에서 제시하는 프로그래밍 교육의 교육적 의미는 다음과 같다.
첫째, 프로그래밍 언어 학습은 오류 수정 활동을 통해 논리적 사고력을 향상시킬 수 있다. 오류 수정은 여러 가지 어려움을 하나 하나 처리해 감으로써 상대적으로 개선된 프로그램을 만들어 감을 의미한다. 반복되는 오류수정 속에서 스스로 오류도 찾고 알고리즘을 분석하여 수정함으로서 논리적 사고력 향상에 도움을 주게 된다.
둘째, 프로그래밍 학습은 자신의 생각을 표현해 보는 과정을 통해 실생활의 문제를 해결하는 데 도움을 줄 수 있도록 한다. 논리적으로 생각하고, 표현하는 방법을 배움으로써 구조화된 문제해결이 가능하도록 하는데 도움을 준다.
프로그래밍 교육은 다음과 같은 명확한 목적을 가지고 있기에 필요한 교육이다.
첫째, 프로그래밍 교육은 정보교육의 기본이 되는 내용을 학습하도록 한다. 프로그래밍 교육은 프로그래밍의 기초 내용을 이해함으로서 컴퓨터의 동작 원리까지 쉽게 이해할 수 있게 되고, 지식기반사회의 인프라 구조에서 가장 핵심 요소인 소프트웨어 개발 능력을 예비하는 기초가 되기도 한다.
둘째, 프로그래밍 교육은 학습자들에게 다양한 교육 경험을 제공한다. 프로그래밍 교육은 소프트웨어 사용법에 국한되어 있지 않기 때문에 다양한 주제를 생각해서 결과물을 만들 수 있어 다양한 교육 경험을 하게 된다. 프로그래밍은 어떤 문제를 해결하기 위해서 프로그래밍 작성자가 실제 구현하는 것이기 때문에 교육 경험을 통해 자신의 인지 유형을 만들 수도 있다.
셋째, 프로그래밍 교육은 학습자의 논리적 사고력과 문제해결력과 같은 고등 인지 능력을 향상시키고, 프로그램의 완성을 통한 성취감과 자신감을 얻게 한다. 또한, 프로그래밍 교육은 에러를 찾고 이를 수정하면서 구체적인 문제해결과정을 관리할 수 있는 능력이 생기고, 컴퓨터 과학의 이해에 도움을 주기도 한다.
넷째, 프로그래밍은 추상적인 개념을 쉽게 이해시키기도 하고, 여러 방면으로 생각해서 추상적인 것을 구체화하기 때문에 창의성이 향상된다. 프로그래밍 교육은 같은 소스코드를 사용하더라도 학습자의 생각과 판단에 따라서 여러 방면으로 얼마든지 다양한 창의적인 결과를 보여줄 수가 있다.
아울러 프로그래밍을 하기 위해서는 열정과 인내 또한 필요한데, 프로그래밍에 관심을 갖고 열심히 하는 학습자라면 열정과 인내 또한 부수적으로 가지게 될 것이다.
2000년 ‘정보통신기술교육 운영 지침’을 발표하면서 그 동안 사용하던 ‘컴퓨터교육’이라는 용어를 버리고 ‘정보통신기술(ICT) 교육’이라는 용어로 대체하였다. ICT교육은 ‘컴퓨터’만을 가르치던 관점에서 벗어나 컴퓨터와 인터넷을 모든 교과에서 활용하고자 하는 의지를 담은 표현이라고 할 수 있다. 이 표현은 ICT교육의 목표와 내용에 보다 구체적으로 나타나 있으며, 그 동안 실과 교과에 제한적으로 흡수되었던 내용과는 질적으로 다른 위치이다. ICT교육은 크게 ICT소양 교육과 ICT활용 교육으로 나눌 수 있다. 본래 ICT소양 교육의 목표는 정보통신기술을 문제해결의 도구로 적극 활용하는 것이었다. 그러나 교사와 학습자 모두 정보통신기술을 문제해결의 도구로 사용하기에는 이해가 부족하다보니 응용 소프트웨어의 사용법을 가르치는 교육으로 바뀌게 되었다. 교육과정 입장에서는 응용 소프트웨어의 사용법을 가르치는 정보교육이 실과교과에서 불필요하다고 주장하여 시수를 감축하기도 하였다.
응용 소프트웨어의 사용법만 가르치던 초등학교가 2006년에 개정안이 새롭게 발표되면서 기본적인 컴퓨터 조작을 통해 정보통신기술에 대한 기초적인 내용을 습득하고, 문제해결능력을 향상시키기 위한 논리적 사고력을 증진시키며, 응용 소프트웨어를 활용하는 방법과 정보 사회에 참여하는 태도를 익혀 올바른 정보통신윤리 의식이 형성되도록 하는 목적을 가지게 되었다. 특히, 2006년에 발표된 개정안은 논리적 사고력과 창의적 사고력의 증진을 위해, 프로그래밍 교육의 강화 차원으로 개정되었다. 개정안에 따라, 초등학교 5∼6학년 때 프로그래밍의 기초 교육이 등장하기 시작하였다.
현재는 초등학생들도 누구나 쉽게 프로그래밍에 접할 수 있도록 하는 시도가 많아지고 있다. 스크래치, 엔트리 등은 블록형 프로그래밍 언어로 학령이 낮은 학습자들이 학습하기에 적합한 것으로 제시되고 있다. 인도의 경우, 초등학교 3~4학년에, 미국이나 영국도 초등학생 수준에서 블록형 프로그래밍 언어 학습이 필요함을 교육과정을 통해 언급하고 있다.
2015 개정시기 교육과정에서 '[6실04-09] 블록 기반의 교육용 프로그래밍 도구를 활용하여 기초적인 프로그래밍 과정을 체험하고 자신만의 간단한 프로그램을 만들어 본다.'는 성취기준 해설을 제시하였다.
과목명이 '정보'로 명명된 2007 개정시기 교육과정에서 정보과목은 컴퓨터과학의 원리에 근거하였고, '문제해결 방법과 절차' 영역을 통해 알고리즘과 프로그래밍에 대한 내용들을 토대로 단원을 구성하였다. '문제 해결 방법과 절차' 영역은 생활 속에 적용된 정보 처리의 기본 지식을 이해하고, 지식의 응용을 통해 생활 속의 문제에 대해 다양한 방법으로 문제를 해결할 수 있도록 하는 능력을 기르기 위한 목적이었다.
2009 개정시기 교육과정에서는 4개의 단원 중 4번째 단원으로 '문제 해결 방법과 절차'의 동일한 명칭으로 사용되었다. 그리고 2015 개정시기 교육과정에서 '문제 해결과 프로그래밍' 단원에서 추상화, 알고리즘, 프로그래밍이라는 핵심 개념을 기본으로 교과 전체의 50%를 차지하는 내용으로 2018년부터 중학교에서 적용될 예정이다. 프로그래밍에 관한 내용은 프로그래밍 언어의 문법 이해와 관련된 지협적인 내용이 아닌 문제 분석, 추상화, 알고리즘 설계, 프로그램 개발 및 수정 등 일련의 수행 과정을 종합적으로 학습할 수 있는 구성을 권장하고 있다.
고등학교의 학제에 따른 교육과정은 교육과정 부분에서 다루기로 하고, 본 내용은 프로그래밍으로 한정한다.
2015 개정시기 교육과정의 과목의 성격에 나타난 바와 같이 고등학교 정보과목은 컴퓨터과학의 기본 개념과 원리를 바탕으로 실생활 및 다양한 학문 분야의 문제를 창의적으로 해결하는 컴퓨팅 사고력 및 네트워크 컴퓨팅 기반 환경을 중심으로 한다. 문제 해결을 위한 해법을 컴퓨터 과학의 관점에서 설계하고 이를 소프트웨어로 구현하는 프로그래밍 능력과 태도를 함양하기 위한 기능을 갖는다.
일반고에서 '정보'과목의 프로그래밍 부분은 텍스트 기반 프로그래밍 언어의 개발 환경 및 특성을 이해하고 변수와 연산, 입력과 출력, 실행 흐름 제어를 위한 제어 구조, 배열과 함수 등 프로그래밍의 기본 개념과 원리를 적용하도록 하는 것이 중요하다. 또한 프로그래밍 응용 분야의 프로젝트 수행 과정에서 협력을 통해 과제를 수행하는 데 중점을 둔다.
프로그래밍 교육에 사용되는 언어들은 여러 종류가 있다. 언어의 종류를 크게 블록형 언어와 텍스트형 언어로 구분할 수 있다. 블록형 프로그래밍 언어는 명령 블록을 맞춤으로써 프로그램을 구현하는 방법으로 스크래치, 엔트리, 앱인벤터 등이 이에 속한다. 텍스트형 프로그래밍 언어는 문자를 직접 타이핑해서 프로그래밍하는 언어로써 두리틀, 파이썬 등이 이에 속한다.
블록형 프로그래밍 언어는 블록을 드래그앤드롭방식으로 프로그래밍하기 때문에 인지수준이 낮은 학습자들도 접근이 쉽다는 장점이 있다. 반면 텍스트형 프로그래밍 언어는 명령어의 한 문자라도 오타가 나게되면 바로 에러를 발생시키기 때문에 정확한 문법을 알고 있어야 원활한 프로그래밍이 가능하다. 교육용 프로그래밍 언어에 대해서는 [교육용 도구] - [교육용 언어]에서 보다 자세히 기술하도록 한다.