본문 바로가기

프로그래밍, 더 쉽고 똑똑해진다

프로그래밍, 더 쉽고 똑똑해진다

 

 

컴퓨터는 365일 24시간 언제나 우리와 함께하고 있다. 이러한 컴퓨터를 사용자가 원하는 대로 움직이게 하기 위해 필요한 것이 ‘소프트웨어’다. 과거에는 소프트웨어가 하드웨어에 최적화되지 않아 하드웨어의 발열을 일으켜 성능을 저하시키거나, 소프트웨어 용량이 매우 크고, 또 비정상적인 동작도 많았던 것이 사실이다. 허나 컴퓨터과학이 발전하며 더 강력하고 효율적인 소프트웨어가 출시되기 시작했고, 그 다양성의 폭도 넓어졌다. 그리고 최근에는 소비자들은 더 이상 원하는 프로그램을 찾기 위해 이리저리 기웃거리며 웹 서핑을 할 필요가 없어졌다. 프로그래밍 덕분이다. 또 요즘의 프로그래밍은 일반인들도 쉽게 프로그래밍을 할 수 있게끔 더 쉽고 똑똑하게 바뀌었다. 더 이상 매우 높은 수준의 컴퓨터과학을 배운 사람들만의 전유물이 아닌, 평범한 일반인도 간단한 지식만 습득하면 개발할 수 있게끔 변모한 것이다. 따라서 오늘은 지난 번 프로그래밍 열풍이 불다 라는 기사에 이어더욱 스마트해진 프로그래밍에 대해 이야기하려 한다.

 

SK Careers Editor 배지훈


프로그래밍을 배우면 신세계를 맛볼 수 있다
프로그래밍의 중요성 아무리 강조해도 지나치지 않다. 실제 서울대학교 L교수는 “반드시 프로그래밍을 할 줄 알아야 할 필요는 없지만, 비전공자에게 프로그래밍을 추천한다면, 그 이유는 단 하나 ‘새로운 세상’에 접근할 수 있는 까닭에서다”라고 말했다. 그는 프로그래밍을 영어, 일본어, 중국어 등의 언어라고 비유하기도 했다. 그 대상이 컴퓨터 일 뿐인 것.


계속해서 그는 “프로그래밍의 미래는 사용자 입장에서 더 쉬워지고, 재미있어 지지 않을까”라는 말과 함께 프로그래밍을 배우려는 일반인 및 비전공자에게 파이선(Python)을 추천하기도 했다. 배우기에도 어렵지 않고, 라이브러리가 많아서 입문하기에 좋다는 게 그 이유였다.


프로그래밍은 어렵다?
최소한 처음 접하는 사람에겐 그럴 수 있다. 뭐든 처음에 어렵지 않은 것이 어디 있겠냐 만은 프로그래밍은 특히 초기에 배워야 하는 그 문법과 구조와 객체 때문에 상당한 진입장벽을 가지는 것이 사실이다. 그렇기에 최근에는 이렇게 높은 프로그래밍의 진입장벽을 낮추는 시도가 다양하게 시도되고 있다.


1) 스크래치(Scratch)
그 첫 번째 예로 어린 아이들을 위한 학습용 프로그래밍 언어인 ‘스크래치(Scratch)’를 들 수 있다. 스크래치는 MIT 미디어랩 평생유치원 그룹(Lifelong Kindergarten Group)이 개발했다. 스크래치와 같은 프로그래밍을 ‘비주얼 프로그래밍(Visual Programming)’ 부른다. 비주얼 프로그래밍은 프로그램의 처리 절차를 도형, 이미지로 나타내 부품화한 다음 그것을 화면상에서 조합해 프로그램을 개발하는 것을 말한다. 프로그램의 흐름을 이해하기 쉽고, 결과를 바로 확인할 수 있어 매우 직관적인 프로그래밍 방법이다.


스크래치는 아이들에게 비주얼 그래픽(Visual Graphic) 환경을 통해 어렵게만 느껴졌던 컴퓨터 프로그래밍을 보다 쉽게 접근하고 배울 수 있게 하기 위해 만들어진 프로그래밍 언어 및 통합 환경이다. 글자로 쓴 일반적인 프로그래밍과 달리, 기능이 적혀진 박스를 결합하고 제어하면서 프로그래밍을 한다. 스크래치는 https://scratch.mit.edu/에서 언제 어디서든 무료로 할 수 있다.

 

<직접 사용해 본 스크래치 프로그래밍>

 

2) IFTTT
새로운 패러다임으로 추앙 받는 IFTTT는 ‘If This Then That’ 의 약자로 컴퓨터와 모바일에 존재하는 여러 개의 서비스와 애플리케이션을 사용자가 직접 연동시켜 제어하는 프로그래밍이다. 예전에는 이러한 복잡한 코딩을 하기 위해선 그 프로그램에 대한 지식과 연동을 위한 프로그래밍 기술에 해박한 지식을 가지고 있어야만 했다. 하지만, IFTTT를 통해, 무료계정을 가지고 있는 사람들은 쉽고 간편하게 앱의 연동화와 자동화를 할 수 있다. 방법은 간단하다. 사이트에 들어가서 간단하게 회원가입을 하고, 조건문을 만들면 된다. 이를 테면, ‘if ‘어떤 애플리케이션에서 어떤 일이 생기면’ then ‘다른 애플리케이션에서 이렇게 해라’라는 식이다.
아래는 본 에디터가 간단하게 만든 프로그램이다(IFTTT 에선 Recipe 라고 부른다). 페이스북에 태그 될 시, 휴대전화로 문자 메시지가 오게끔 했다.

 

또한, IFTTT 홈페이지(https://ifttt.com/)에서는 다른 사람이 만든 프로그램(Recipe)도 볼 수 있고, 무료로 자유롭게 사용할 수 있다. 

 
알아 두면 좋을 프로그래밍 역사
프로그래밍은 어떤 특정한 목적을 달성하기 위해 컴퓨터에게 명령을 내리는 것과 같다. 이때 컴퓨터에게 명령을 내리기 위한 언어(Language)는 매우 다양하다. 크게 접근성에 따라 저급언어, 중급언어, 고급언어로 나눌 수 있다. 사람에게 친숙하고 접근하기 쉬운 언어일수록 고급언어에 속하고, 컴퓨터에 가까운 언어일수록 저급언어에 속한다. 저급언어란 컴퓨터가 이해하기 쉬운 이진법으로 이루어진 언어를 말한다. 0과 1로만 이루어져 있어 컴퓨터가 바로 실행할 수 있지만 가독성과 생산성이 낮으며 컴퓨터마다 언어가 다르다. 

 

<기계어 예시>


프로그램 속도가 빠르며, 프로그램 크기 또한 더 작다. 대표적인 언어로, 기계어와 어셈블리어가 있다. 반대로 고급언어란 사람이 이해하기 쉬운 자연어에 가깝게 만들어진 프로그래밍 언어로, 프로그래밍 하기가 쉽고 가독성 및 생산성이 높다. 현재 많은 프로그래머들이 쓰는 개발언어가 고급언어입니다. 대표적인 언어로, C와 JAVA가 있다. 이 저급언어와 고급언어는 프로그래밍 역사와 매우 관련이 깊다.

 

1940년~1950년대의 초창기 컴퓨터는 전선 연결 조합을 통해 프로그래밍을 했다. (전선이 연결된 곳은 1, 연결되지 않은 곳은 0) 이런 형태의 배선을 만드는 데에는 많은 노력이 들었고, 문제가 생겼을 때 에러를 찾아내기가 매우 힘들었다. 에러가 생기면, 수천 수만 개의 전선을 하나하나 옮겨가며 문제를 찾아야 했다. 새로운 프로그램을 추가할 때도 새로운 배선 조합을 짜서, 일일이 배열해야 했기 때문에 시간이 오래 걸렸다.
시간이 지나고, 기술이 발전해 ‘메모리’ 내의 값(0,1)을 통한 프로그래밍이 나타나게 되었다. 이전의 전선 연결 조합의 프로그래밍보다 훨씬 빠르고, 효율적이었다. 허나, 0과 1로 이루어진 비트는 가독성이 떨어지고, 수정하기 불편하다는 단점이 있었다. 그래서 0과 1로 이루어진 일종의 비트 패턴을 사람에게 친숙한 약어로 만들기 시작했다. 이때 생겨난 프로그래밍 언어가 어셈블리어와 같은 ‘저급언어’이다.


임의로 정한 약어로 이루어진 초기 프로그래밍 언어인 어셈블리어. 하지만, 기계어는 오직 0과 1로 이루어져 있기 때문에, 어셈블리어를 기계어로 변경해야만 했다. 이때 생겨난 것이 ‘어셈블러’이다. 이 어셈블리어와 어셈블러는 후기 컴퓨터 프로그래밍 언어에 큰 영향을 미치게 되었는데, 그 이유는 사람에게 친숙한 언어로 프로그래밍을 해도 컴파일러(중급, 고급언어에 쓰임)라는 변형기가 기계어로 바꿔주기 때문이다. 어셈블러는 이 컴파일러의 탄생이 매우 큰 밑그림이 되었다. 그렇기에 이 어셈블러라는 개념은 사람이 비로소 컴퓨터 프로그래밍을 쉽고, 간단하고, 재미있게 할 수 있는 길을 열어준 큰 혁명이라 할 수 있다.

 

어셈블리어 이후, 포트란이 나왔지만 프로그래밍의 난이도가 매우 어려웠고, 그로 인해 유지관리의 어려움이 생겼다. 그리고 1970년대 드디어 우리에게도 익숙한 C언어가 등장한다. C언어는 포트란이 가지고 있던 문제들을 해결하며 강력하고 효율적인 프로그래밍을 가능케 했다. C언어가 포트란과 가장 큰 차이점은 ‘구조’. 포트란은 소설책처럼 길게 쓴 코딩이었다면, C언어는 프로그램 동작에 맞는 ‘구조’를 각각 만들어, 가독성과 유지관리를 쉽게 만들었다.


 

객체지향형 프로그래밍의 등장
먼저 객체의 사전적 의미는, 행위가 미치는 대상, 작용이 대상이 되는 쪽을 의미한다. 객체 지향 프로그래밍은 데이터와 그 데이터에 관련되는 동작을 모두 포함한 개념이다. 예를 들어, 토끼라는 객체는 눈, 귀, 몸무게, 털, 큰 뒷다리 라는 ‘속성’을 가지고 있다. 그리고 토끼는 깡총깡총 뛰어다니고, 채소를 먹고, 새끼를 낳는 ‘행동’을 할 수 있다. 이렇듯 객체지향형 프로그래밍은 어떠한 사물을 속성과 동작(함수), 두 가지로 나누어 생각하는 것이라고 보면 편하다.
 

그렇다면 객체지향형 프로그래밍은 왜 탄생했을까? 그 이유는 ‘생산성’ 때문이다. 기존의 절차적 코드로 이루어진 C와 같은 구조체 프로그래밍 언어의 경우, 프로그램이 복잡해지고, 많은 기능이 요구될 경우 소스 코드가 수백, 수천 줄이 될 수 있다. 그런데 이렇게 수백, 수천 줄이 되는 프로그램일 경우 수정하거나, 에러를 찾기가 매우 힘들다. 그렇기에 프로그래머들은 프로그램의 동작(함수)와 속성을 분리시켜, 객체간 상호작용을 할 수 있게끔 했고, 수정시간을 획기적으로 단축시켰다. 예컨대, 위의 토끼의 예시에서 ‘토끼 프로그램’을 실행시켰더니, 점프를 못한다면, 뒷다리 객체에 문제가 있다는 것을 쉽게 유추할 수 있다. 에러가 발생해도, 에러가 발생한 ‘객체’만 수정하면 되기 때문에 대폭 시간절약이 됐다. 또한, 똑같은 프로그램을 만든다 해도, 절차적 코드는 순서대로 처음부터 다 만들어야 하기 때문에 한 사람이 해야 하는 경우가 대부분이다. 하지만, 객체지향형은 여러 명의 프로그래머가 동시에 각각의 객체를 만들어 맨 마지막에 합치면 되기 때문에 획기적인 비용절감을 할 수 있었다. 이는 현대사회에서 보다 빠른 개발과, 보다 효율적인 수정을 할 수 있게끔 만들어 프로그램 및 기업경쟁력을 강화시키는 역할을 했다.

 

 

 

과거부터 그리고 지금까지도 프로그래밍은 끊임없이 발전하고 있다. 그리고, 그 기반에는 더 좋은 프로그램, 더 좋은 언어, 더 좋은 세상을 만들려는 열망이 있다. 프로그래밍은 과거에도 그랬고, 현재에도 그렇고, 미래에도 그럴 듯이 더 멋진 삶과 사회를 만들기 위해 변하고 있다. 혹시, 세상이 어떻게 변할지 궁금한가? 그렇다면 세상을 바꾸는 한 획, 프로그래밍을 주시하길 바란다.