1. 프로그래밍의 개념
컴퓨터가 일반 계산기와 다른 점은 프로그래밍(programming)을 할 수 있다는 것이다. 프로그래밍은 컴퓨터에 작업을 지시하는 것이다. 일반적으로 사람에게 작업을 지시할 때는 언어를 사용한다. 그릇을 옮겨 달라고 하든지 문을 닫아 달라고 부탁하면 상대방이 반응한다. 그러나 컴퓨터는 인간이 말하는 언어를 이해하지 못한다. 컴퓨터를 사용하는 작업과 일반적인 작업을 비교해 보자. 어느 식당에서 오늘 하루 판매한 음식 값을 계산한다고 하자. 가장 단순한 방식은 오늘 하루 판매한 음식 개수와 손님이 지불한 돈을 노트에 적는 것이다. 그러고는 영업을 종료한 후 계산기로 모든 음식 값을 더한다. 그러면 하루 판매한 음식을 계산할 수 있다. 컴퓨터를 사용할 때는 음식을 팔 때마다 그 가격을 입력하면 된다. 영업을 종료한 후 클릭 몇 번만으로 오늘 판매한 음식 값을 알 수 있다. 더 나아가 현재까지 판매한 음식들을 분석하여 어떤 음식이 인기가 있는지, 재료는 얼마나 남아 있고 어떤 재료가 더 필요한지도 파악할 수 있다. 계산기보다 컴퓨터를 사용하면 빠르다는 것을 누구나 알 수 있을 것이다. 이것이 프로그래밍을 할 수 있는 계산기인 컴퓨터와 직접 계산기를 두드리는 방식의 차이다. 중요한 점은 이러한 작업을 컴퓨터가 알아서 하지는 않는다는 것이다. 컴퓨터에 하루 음식 값을 다 더하라고 명령을 내리려면 프로그래밍을 해야 한다. 식당주인이 음식 값을 입력하면 전부 더하여 알려 달라고 컴퓨터에 설명하는 것이 프로그래밍이다. 그래서 컴퓨터에 작업을 지시할 때는 프로그래밍을 하며, 이때 사용하는 언어가 프로그래밍 언어(programming language)다. 전 세계에 많은 인종과 다양한 언어가 있듯이, 프로그래밍 언어도 매우 많다. 그중 가장 많은 사람이 사용하는 프로그래밍 언어로는 C 언어와 자바(Java)가 있다. 프로그래밍이 가능하다는 것은 기능을 무한히 확장시킬 수 있다는 의미다. 계산기를 사용하여 하루 음식 값을 계산할 경우, 하루 음식 값 이외에 다른 정보를 얻으려면 또다시 계산기를 두드려야 한다. 그러나 컴퓨터를 사용하면 일주일 혹은 한 달 매출, 음식별 매출 등을 쉽게 계산할 수 있다. 또 어떤 요일에 음식이 더 팔렸는지, 여름에는 어떤 음식이 더 잘 나가는지 등 통계정보도 쉽게 얻을 수 있다. 따라서 프로그래밍이 가능한 계산기인 컴퓨터는 다양한 작업에 사용 가능하다. 일반 계산기와 컴퓨터를 인형에 비유하면, 일반 계산기는 완제품으로 파는 인형과 같고 컴퓨터는 블록으로 만든 인형과 같다. 완제품 인형은 처음 만든 상태에서 변형이 불가능하다. 그러나 블록으로 만든 인형은 해체하여 자동차, 비행기 집 등 다양하게 다시 만들 수 있다. 프로그래밍이 가능하다는 것은 블록처럼 원하는 모양을 만들 수 있다는 의미다. 그래서 우리는 컴퓨터에 노래를 들려 달라고도 하고, 영화를 보여 달라고도 하며, 인터넷에서 쇼핑도 할 수 있게 해 달라고 한다.
2. 프로그래밍과 알고리즘
컴퓨터가 다양한 기능을 수행함에 따라 폭넓게 사용된다. 자동차, 청소기, TV 등 우리 주변에 있는 전자기기 내부에는 대부분 컴퓨터가 탑재된다. 일반 진공청소기와 로봇청소기를 생각해 보자. 일반 진공청소기는 사용자가 가구나 책상을 피해 가며 청소를 한다. 그러나 로봇청소기는 센서를 이용하여 방 크기를 가늠하고 가구나 책상 등 장애물 위치를 파악한 후 청소기가 지나가는 경로를 계산한다. 계산된 경로에 따라 모터와 바퀴를 사용하여 몸통을 움직이며 청소하는 것이다. 방크기는 가로3m와 세로 5m이고, 왼쪽에는 책상이 있으며, 가운데는 테이블이 있다는 것을 사람이 직접 로봇청소기에게 말해 줄 수 없다. 그 대신 프로그래머가 방 크기를 재는 방법, 장애물을 인식하는 방법, 이동할 경로를 찾는 방법을 프로그래밍하여 로봇청소기가 실행하게 한다. 로봇청소기는 이렇게 프로그래밍이 되어 있는 대로 작동한다. 로봇청소기가 경로를 찾도록 프로그래밍된 전체 과정을 알고리즘이라고 한다. 알고리즘은 어떤 문제를 해결하는 동작을 하나로 모은 것이다. 방 크기를 계산하는 동작, 장애물 위치를 찾는 동작, 이러한 정보를 바탕으로 지나가야 하는 길을 찾는 동작을 모은 것이 알고리즘이다. 서울에서 부산을 가는 데 5만 원으로 가장 빨리 갈 수 있는 길을 찾는다고 가정해 보자. 서울에서 부산을 버스, 비행기, 기차로 가는 가격과 시간을 모두 조사하고, 이 조건에 맞는 길을 찾을 것이다. 이렇게 어떤 문제를 해결하고자 전략을 세우는 것이 알고리즘이다. 로봇청소기에 프로그래밍 언어를 사용하여 청소하는 알고리즘을 가르쳐 주면, 자기가 알아서 청소를 한다. 알고리즘은 문제를 해결하는 방법이며, 알고리즘을 프로그래밍 언어를 사용하여 알려주면 컴퓨터는 정해진 절차에 따라 작업을 진행한다. 인간에게도 알고리즘이 있다. 예를 들어 신호등이 빨간색이면 서고 파란색이면 건넌다든지, 아는 사람을 만나면 인사를 한다든지, 뜨거운 음식은 조심스럽게 먹는다든지 같은 것이 알고리즘이다. 인간은 이러한 알고리즘을 수년간 학습과 경험을 통해 뇌에 저장하고 사용한다. 컴퓨터는 기계이기 때문에 작업에 필요한 알고리즘을 프로그래밍을 해서 알려 주어야만 한다. 물론 인공지능 기술을 이용하면 컴퓨터도 인간처럼 학습으로 새로운 지식을 습득할 수 있지만, 대부분의 컴퓨터는 인간이 프로그래밍한 대로만 움직이는 기계다.
◼︎컴퓨터가 작업을 내리는 과정
1) 알고리즘 작성: 우선 컴퓨터가 어떻게 작업할지 결정하는 알고리즘을 짠다. 로봇청소기는 벽을 만났을 때 뒤로 돌아가게 한다든지, 배터리가 부족하면 충전 장소로 이동한다든지 하는 전략을 짠다.
2) 프로그래밍: 작성환 알고리즘을 토대로 컴퓨터애 명령을 내리는 프로그램을 작성한다. 즉, 프로그래밍을 한다. 프로그래밍 언어는 상황과 용도에 따라 C, 자바, 파이썬 등 알맞은 언어를 선택하면 된다.
3) 실행 및 테스트: 작성한 프로긂이 다양한 상황에서 잘 작동하는지 테스트한다.
4) 디버깅: 테스트 과정에서 처음에 생각한 것과 다르게 움직이거나 오류가 발견될 수 있다. 오류가 발견되면 프로그램을 수정하는데, 이를 디버깅이라고 한다. 디버깅은 프로그램 내에 있는 버그(bug)를 잡아 없앤다는 의미다.