728x90

 

 

2018년도부터 소프트웨어 교육이 의무교육화가 되어 내년부터 교과서 개발에 착수한다라는 인터넷 기사를 접했다. 교육 대상은 초등학교와 중학교다. 초등학생은 2017년부터 의무적으로 소프트웨어 교육을 받게 되며, 중학교의 경우 내년부터 시행 될 자유학기제를 통해 소프트웨어 분야 진로 교육이 강화 된다고 한다.

 

나는 컴퓨터를 접한 시기는 빨랐지만 전문적으로 프로그래밍을 접하게 된 것은 고등학교를 졸업한 이후였다. 남들보다 늦었다는 생각에 아둥바둥 했지만 따라가기 급급했지 선두에 서서 이끌어나가기엔 턱없이 부족했다. 그랬기에 어쩔수 없이 주입식으로 학습했으며, 선암기 후이해를 외치며 통학 왕복 네시간의 시간동안 대중교통에서 졸며 공부했던 기억이다.

 

지금와서 생각해보면 언어라는것은 하나의 표현 방법일 뿐이고, 표현하고자 하는 내용을 어떻게 효율적으로 구성할 수 있는가가 더 중요한 문제였다. 아무리 타이핑이 빨라봤자 효율적인 한 줄이 더 값어치 있는 소스 코드가 되는 것이다. 어린시절 플로피 디스켓을 바꿔가며 뿌요뿌요를 설치했던 시기에 프로그래밍을 접했다면 어땠을까 후회가 되기도 한다.

 

사설이 길었다.

 

요즘 소프트웨어 교육 의무화 라는 토픽이 등장하며 초중등 자녀를 둔 학부모님들의 관심이 몰리고 있다. 검색을 좀 해본 사람이라면 '블록 코딩 방식'이라는 말을 한번쯤은 봤을거다. 검은 화면에 빼곡히 영문으로 타이핑 된 소스코드를 작성하는 것이 아닌, 눈에 보이는 블록들을 마우스를 사용해서 이어붙여 프로그램을 만드는 방식이다. 그 대표적으로 MIT에서 만든 scratch라는 언어가 있고, 네이버의 엔트리 등이 그 예이다. 본격적으로 이 블록코딩을 시작하기 전에 꼭 한번쯤은 생각해보고 넘어가야할 문제가 있다.

 

 

 

 

물론 시간이 지나 익숙해지면 어느정도는 의도하는 프로그램을 잘 만들 수 있게 된다. 하지만 나처럼 뭐가 뭔지 모르고 주먹구구식으로 일단 시작하고 보자라는 접근으로 더이상 멘탈 낭비를 하지 않았으면 한다. 이 글 하나로 얼마나 많은 것을 전달할 수 있을지는 모르겠지만, 컴퓨팅적 사고라는 것이 무엇이며 프로그래밍 관점에서의 컴퓨터란 어떤 것인지에 대해 아는대로 써보려 한다. (프로그래밍을 처음 접하는 단 한사람에게만이라도 도움이 되길 바라는 생각으로..)

 

 

 

컴퓨터를 사용해서 일반적인 문서 작업, 인터넷 검색, 게임 등만 해봤다면 다소 낯설게 느껴질지 모를 내용이다. 컴퓨터는 사람과 다른 큰 특징을 하나 (더 많이 있겠지만 한가지만 언급하려고 한다)가지고 있다. 시키는 것만 시키는대로 한다는 것이다. 우리는 이 부분을 잘 이해해 주어야 한다. 컴퓨터는 전혀 창의적이지도 못하고 유연하지 못하다. 여기서 유연하다라는건 사람과 비교해보면 쉽게 이해할 수 있다. 예들 들어 '손 씻고 와서 밥먹어'라는 말을 우리가 들었다고 하자. 너무나 당연하게도 우리는 이 말을 이해하고 화장실에 가서 손을 씻고 나와 밥을 먹을 것이다. (이런 것을 유연하다라고도 표현한다.) 하지만 이 컴퓨터는 이해하지 못한다. 만약 똑같은 일을 하도록 컴퓨터에게 시키려면 다음과 같은 노력이 필요하다.

 

 

728x90

 

 

옷의 소매를 걷어라.

화장실 앞으로 가라.

화장실 문을 열어라.

앞으로 두 걸음 가라.

오른쪽으로 반바퀴 돌아라.

앞으로 두 걸음 가라.

왼쪽으로 반바퀴 돌아라.

허리를 살짝 숙여라.

수도꼭지를 오른쪽으로 두바퀴 돌려라.

손을 물에 넣어라.

비누를 집어라.

거품을 내라.

비누를 닦아내라.

수도쪽지를 왼쪽으로 두바퀴 돌려라.

왼쪽으로 반바퀴 돌아라.

앞으로 두 걸음 가라.

수건을 집어라.

손을 닦아라.

왼쪽으로 반바퀴 돌아라.

앞으로 두 걸음 가라.

...

 

끝이 나지 않을 것 같아서 중간에 끊었는데도 이렇게 하나부터 열까지 모든것을 자세하게 말해줘야 한다. 과장을 한게 아니라 정말 시키는대로 시키는것만 한다. (사실 더 자세하게 말해줘야 하지만 이정도도 충분한 것 같다.)

 

컴퓨팅적인 사고를 해야하는 궁극적인 이유는, 우리가 삶을 살아감에 있어서 컴퓨터가 가지는 장점을 적극 활용하여 일상의 문제를 해결하기 위함이다. 고속도로 위의 하이패스라던가 스마트폰의 다양한 앱을 사용해서 여러가지 데이터를 가공한다거나 하는 등 다양한 분야에서 컴퓨터가 사용되고 있고 또 앞으로 더 많이 활용 될 것이다. 그렇기 때문에 우리가 컴퓨터 프로그램을 개발함에 있어서 컴퓨터에 대한 이해는 필연적이라고 할 수밖에 없다.

 

컴퓨팅적 사고는 다음과 같은 주요한 요소들이 있다.

 

1. 재귀적 사고

재귀적 사고란 동일 과정을 반복 적용하여 문제를 해결하는 것을 뜻한다.

 

2. 개념화

단순하게 코딩을 하는 것이 아닌, 문제 해결의 각 과정에 추상화 개념을 도입하여 생각해 보는 것을 뜻한다.

 

3. 병렬처리

보다 넓은 시각으로 문제를 파악하고 문제를 병렬으로 동시에 처리할 수 있는 사고력을 뜻한다.

 

4. 추상화

추상화란 구체화의 반대되는 말이다. 직면한 문제의 공통적인 부분을 추상화 과정을 통해 밝혀내는 사고력을 뜻한다.

 

5. 분해

큰 문제를 작은 단위로 나누어 생각하는 방향으로 접근한다. 큰 문제를 해결하기 위해 작은 문제부터 점진적으로 해결해나가는 것을 뜻한다.

 

위에서 언급한 다섯가지 요소중에 추상화에 대해서 잘 이해가 되지 않을 수 있다. (나는 그랬었다.) 위에도 언급했듯 추상화란 구체화와 반대되는 개념이다. 예를 들어보자.

 

나는 지구에 살고 있다.

조금 더 구체적으로 표현 한다면 나는 아시아에 살고 있다.

조금 더 구체적으로 표현 한다면 나는 한국에 살고 있다.

조금 더 구체적으로 표현 한다면 나는 경기도에 살고 있다.

조금 더 구체적으로 표현 한다면 나는 안양에 살고 있다.

 

점점 그 범위가 좁혀지는게 느껴지는가. 이렇게 하나의 대상으로 좁혀지는게 구체화라면 그 반대가 바로 추상화이다. 그렇다면 왜 추상적으로 생각해야 하는가에 대해 의문이 들어야 한다. 우리가 무엇인가를 하는 이유는 그것을 함으로 인해서 장점이 있기 때문이다. 특정 대상에 대해 추상화 과정을 거치면 공통적인 속성을 추출해내어 하나의 묶음으로 표현할 수 있기 때문이다.

 

장바구니를 생각해보자. 장바구니가 만약 고구마 전용 장바구니, 감자 전용 장바구나, 소시지용 장바구니가 따로 있다면, 굉장히 불편할거다. 시장 한 번 보기 위해서 모든 식재료 종류별로 전용 바구니가 필요할테니 말이다. 그런데 이 문제를 추상화 시켜 생각해보면, 무엇인가를 담는다는 공통점을 가지고. 있다. 그렇기 때문에 우리는 시장을 볼 때 식재료별 전용 바구니가 아닌 그냥 바구니 하나에 여러 재료를 담는데 사용할 수 있다.

 

 

 

 

 

구체적인 개념에 대해 정리하다보니 본래 목적에서 좀 벗어난 것 같다. 결국 이 글을 통해 내가 꼭 전하고 싶은 것은 '스크래치를 사용하는 것이 오히려 독이될 수 있다'라는 것이다. 스크래치가 나쁘다는게 아니다. 교육적으로 문제가 있다는것도 아니다. 다만 사용해본 입장에서 확실히 프로그래밍에 대한 진입 장벽은 낮아졌지만 스크래치라는 언어 학습에 심취해서 본래 목적인 컴퓨팅적인 사고를 하지 못할 수 있겠다라는 우려이다.

 

그래서 만약 처음으로 프로그래밍을 접한다면, 소프트웨어 교육을 시작한다면, 스트래치 언어를 바로 접하기 보다 '언플러그드 활동'을 통해서 컴퓨터는 어떻게 사고하고 작동하는가에 대해 미리 접하고 나서 였으면 좋겠다는 바람이다. 한 번 잘하기로 마음먹으면 그쪽으로 편향되어 본질을 잃어버리는 사태가 발생할지도 모르기 때문이다. 언플러그드 활동이란 컴퓨터 없이 컴퓨팅적인 사고를 신체 활동을 통해 배워보는 활동이다. 컴퓨터가 아닌 직접 몸을 움직여 하는 활동이기 때문에 보다 높은 집중력을 가지고 참여하고 또 보통 다른 사람들과 함께 하기 때문에 협업에 대해서도 자연스럽게 익히는데 많은 도움이 된다. 그리고 직접 이렇게 체득한 내용은 더 오랫동안 기억에 남기 때문에 다방면에서 처음 프로그래밍을 접할 경우 긍정적인 효과를 기대할 수 있다. 프로그래밍이란 전문성이 필요한 분야에 첫 걸음을 내딛는다면 '해야하는 것'이 아닌 '하고싶은 것'이 될 수 있었으면 좋겠다.

 

 

 

 

728x90

+ Recent posts