sw교육을 탐구하는 교사워크숍(snap!)

128
- 1 - 미래창조과학부 소프트웨어교육을 탐구하는 교사 워크숍 Snap, The Art of Programming 미래인재연구소

Upload: phamdat

Post on 29-Jan-2017

226 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: SW교육을 탐구하는 교사워크숍(Snap!)

- 1 -

미래창조과학부

소프트웨어교육을�탐구하는�

교사�워크숍

Snap,� The� Art� of� Programming

미래인재연구소

Page 2: SW교육을 탐구하는 교사워크숍(Snap!)

- 2 -

미래창조과학부

미래인재연구소

Page 3: SW교육을 탐구하는 교사워크숍(Snap!)

교사 워크숍 상세 일정

날짜 시간 행사�내용 강사(진행) 장소

12.4�

(금)

15:30~16:00 등록(교원연수관� 301호) 스텝 교원연수관� 3층

16:00~16:10 개강식 사회자 교원연수관� 301호

16:10~16:40 SW교육을�탐구(쏘탐교)하는�우리!! 한선관�교수 교원연수관� 301호

16:40~18:00SW교육의�컴퓨팅�사고에�대한� 토론�

(배영권,� 김석전,� 한건우,� 전수진)한선관�교수 교원연수관� 301호

18:00~19:00 저녁식사 스텝 함인당�식당

19:00~19:30 컴퓨팅사고�토론에�대한� 분임토의와�공유 류미영�교수교원연수관� 301호,�

304호,� 분임토의실

19:30~21:30피지컬컴퓨팅(체인리액션)� 협동프로젝트�

실습이진태�교수

교원연수관� 301호,�

304호

21:30~ 자유�토론�및�취침함인당(1인1실)

12.5�

(토)

8:00~9:00 아침식사 스텝함인당�식당

교원연수관� 3층

9:00~9:20 SW교육정책�안내�및� 정책�추진� 소개미래창조과학부�

손종걸�사무관교원연수관� 301호

9:20~12:10컴퓨팅� 사고를� 위한� BJC� 교육과정� 소개�

및� 적용� 사례

Dan� Garcia,�

Brian� Harvey,�

Jongpil� Cheon�

교원연수관� 301호

12:20~13:20 점심� 식사 스텝 함인당

13:30~16:20BJC� 교육과정� 내의� SNAP,� 교육용� 프로

그래밍�예술

Brian� Harvey,�

Dan� Garcia,�

Jongpil� Cheon�

교원연수관� 301호

16:20~16:50 SW교육을�위한�패널� 토의 Jongpil� Cheon� 교원연수관� 301호

16:50~17:00 설문� 및� 수료식 �한선관�교수 교원연수관� 301호

ㅇ 강사진: Brian Harvey, UC Berkeley 대학교 교수, SNAP 개발자

Dan Gracia, UC Berkeley 대학교 교수, SNAP 교육과정 BJC 프로그램 개발 및 운영

Jongpil Cheon, Texas Tech 대학교교수, 컴퓨팅 교수학습방법 연구 및 개발

한선관, 경인교육대학교 컴퓨터교육과 교수

이진태, 경인교육대학교 미래인재연구소, 컴퓨터교육 겸임교수

류미영, 경인교육대학교 미래인재연구소, 융합인재교육전공 강의교수

배영권, 대구교육대학교 컴퓨터교육과 교수, 중등 정보교과서 집필

한건우, 경기모바일과학고 교사, 컴퓨터교육학 박사

김석전, 송도중학교 교사, 교원대 파견교사

전수진, 부천부곡초등학교, 컴퓨터교육학 박사

Page 4: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 4 -

SW중심사회와 초중등 SW교육

미래창조과학부�손종걸

Page 5: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 5 -

Page 6: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 6 -

Page 7: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 7 -

Page 8: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 8 -

Page 9: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 9 -

Page 10: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 10 -

Page 11: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 11 -

Page 12: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 12 -

Page 13: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 13 -

Page 14: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 14 -

Page 15: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 15 -

Page 16: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 16 -

Page 17: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 17 -

[6실04-01]� 가꾸기와�기르기의�의미를�이해하고�동식물�자원의�중요성을�설명한다.

[6실04-02]� 생활�속� 식물을�활용�목적에�따라�분류하고,� 가꾸기�활동을�실행한다.

[6실04-03]� 생활�속� 동물을�활용�목적에�따라�분류하고,� 돌보고�기르는�과정을�실행한다.

[6실04-04]� 수송과�수송�수단의�의미를�알고,� 수송�수단의�기본�요소를�설명한다.

[6실04-05]� 다양한�재료를�활용하여�수송�수단을�구상하고,� 제작한다.

[6실04-06]� 자전거의�구성�요소와�안전하게�관리하는�방법을�알고�실천한다.

[6실04-07]� 소프트웨어가�적용된�사례를�찾아보고�우리�생활에�미치는�영향을�이해한다.

SW교육을 탐구하는 우리

경인교육대학교�교수�한선관

1.� SW교육의�현재�

� (1)� 정보과목군�연혁

� � o� ‘90년부터�컴퓨터�교육이�도입되었으나,� 도구적�활용교육에�치중

� � o� ‘10년� 교과서�개편으로�알고리즘/프로그래밍�교육은�확대되었으나,� 심화․선택과목으로�편성됨

� (2)� 2015� 교육과정�개정�초등학교의�정보교육(실과�내� 17차시)

� � 실과� 교육과정� 중� � 기술� 시스템에� 포함:� 기술이� 투입-과정-산출-되먹임의�시스템을�통해� 이루어지

는�것을�이해하고�체험�활동을�통해�기술적�문제해결능력�및�기술시스템설계능력을�함양한다.

Page 18: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 18 -

[6실04-08]� 절차적�사고에�의한�문제�해결의�순서를�생각하고�적용한다.

[6실04-09]� 프로그래밍�도구를�사용하여�기초적인�프로그래밍�과정을�체험한다.

[6실04-10]� 자료를� 입력하고� 필요한� 처리를� 수행한� 후� 결과를� 출력하는� 단순한� 프로그램을� 설

계한다.

[6실04-11]� 문제를�해결하는�프로그램을�만드는� 과정에서�순차,� 선택,� 반복�등의� 구조를� 이해한

다.

� (3)� 2015� 교육과정�개정�중학교의�정보교과(34차시)

o� 정보� 교과의� 내용은� ‘정보문화’,� ‘자료와� 정보’,� ‘문제� 해결과� 프로그래밍’,� ‘컴퓨팅� 시스템’� 영역

으로� 구분되며,� ‘정보문화’와� ‘자료와� 정보’� 영역은� 정보사회� 구성원으로서� 갖추어야� 할� 기본�

소양을� 증진하는� 데� 중점을� 둔다.� ‘문제� 해결과� 프로그래밍’,� ‘컴퓨팅� 시스템’� 영역은� 컴퓨터과

학을�토대로�한� 실생활�및� 다양한�학문�분야의�문제�해결�능력을�신장하는�데� 중점을�둔다.

o� 정보� 교과에서� 추가하는� 교과� 역량은� ‘정보문화소양’,� ‘컴퓨팅� 사고력’,� ‘협력적� 문제해결력’으로�

역량별�의미와�하위�요소는�다음과�같다.

-� ‘정보문화소양’은� 정보사회의� 가치를� 이해하고� 정보사회� 구성원으로서� 윤리의식과� 시민의식

을� 갖추고� 정보기술을� 활용하여� 문제를� 해결할� 수� 있는� 능력을� 말한다.� ‘정보문화소양’은�

‘정보윤리의식’,� ‘정보보호능력’,� ‘정보기술활용능력’을�포함한다.

-� ‘컴퓨팅� 사고력’은� 컴퓨터과학의� 기본� 개념과� 원리� 및� 컴퓨팅� 시스템을� 활용하여� 실생활과�

다양한� 학문� 분야의� 문제를� 이해하고� 창의적으로� 해법을� 구현하여� 적용할� 수� 있는� 능력을�

말한다.� ‘컴퓨팅� 사고력’은� ‘추상화(abstraction)능력’과� 프로그래밍으로� 대표되는� ‘자동화

(automation)능력’,� ‘창의・융합능력’을� 포함한다.� 추상화는� 문제의� 복잡성을� 제거하기� 위해�사용하는� 기법으로� 핵심� 요소� 추출,� 문제� 분해,� 모델링,� 분류,� 일반화� 등의� 방법으로� 이루

어진다.� 추상화�과정을�통해�도출된�문제�해결�모델은�프로그래밍을�통해�자동화된다.

-� ‘협력적� 문제해결력’은� 네트워크� 컴퓨팅� 환경에� 기반한� 다양한� 지식・학습�공동체에서�공유와�효율적인� 의사소통,� 협업을� 통해� 문제를� 창의적으로� 해결할� 수� 있는� 능력을� 말한다.� ‘협력

적� 문제해결력’은� ‘협력적� 컴퓨팅� 사고력’,� ‘디지털� 의사소통능력’,� ‘공유와� 협업능력’을� 포함

한다.

Page 19: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 19 -

� (4)� 2015� 교육과정�개정�고등학교의�정보교과

o� 고등학교� ‘정보’에서는� 정보윤리의식을� 바탕으로� 정보보호를� 실천하기� 위한� 역량을� 강화하고�

실생활의� 기초적인� 문제뿐만� 아니라� 다양한� 학문� 분야의� 복잡한� 문제� 해결을� 위해� 정보기술

활용�능력과�컴퓨팅�사고력,� 협력적�문제해결력을�기르는�데� 중점을�둔다.

-� 정보사회에서� 정보과학의� 가치와� 영향력을� 인식하고� 정보윤리,� 정보보호� 및� 보안을� 실천할�

수� 있는�태도를�기른다.

-� 정보�활용�목적에�따라�효율적인�디지털�표현�방법을�이해하고�정보기술을�활용하여�자료와�

정보를�수집,� 분석,� 관리하는�능력과�태도를�기른다.

-� 컴퓨터과학의�기본�개념과�원리에�따라�다양한�학문�분야의�문제를�추상화하여�해법을�설계

하고�프로그래밍�과정을�통해�소프트웨어로�구현하여�자동화할�수�있는�능력을�기른다.

-� 컴퓨팅� 시스템의� 효율적인� 자원� 관리� 방법을� 이해하고� 다양한� 학문� 분야의� 복잡한� 문제� 해

결을�위한�피지컬�컴퓨팅�시스템을�창의적으로�구현할�수� 있는�능력을�기른다.

Page 20: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 20 -

Page 21: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 21 -

○�초등학교�소프트웨어�관련�교육을�아래와�같이�운영합니다.�

� � -� 실과교과의� ICT� 활용� 중심의� 정보� 관련� 내용을� 소프트웨어� 기초� 소양� 교육으로� 개편하여�

5∼6학년군에서� 17시간�내외로�학습하게�됩니다.�

� � -� 교육�내용은�소프트웨어의�제작원리를�이해하고,� 놀이�중심의�알고리즘*� 체험과�교육용�도구

를�활용한�프로그래밍�체험�등을�통해�쉽고�재미있게�학습할�수� 있도록�합니다.

� � � *� 문제해결을�위한�일련의�절차와�과정을�의미하며,� 프로그래밍의�기초�단계임

� (5)� 2015� 교육과정�개정에서�소프트웨어(SW)� 교육은�어떻게�이루어지나요?�

○� 창조경제� 시대에� 필요한� 논리적� 사고력과� 창의력� 증진을� 위해� 컴퓨터를� 이용한� 문제해결� 능

력을�함양하는�소프트웨어(SW)� 교육을�실시

� � -� 교육과정은� 다양한� 문제를� 창의적이고� 효율적으로� 해결하는� 컴퓨팅� 사고력을� 함양하고� 협업

적�문제해결�과정을�통해�의사소통능력,� 공동체�의식을�함양하는�내용으로�구성합니다.

� � -� 소프트웨어의� 제작� 원리에� 대한� 이해와� 더불어,� 발달� 수준에� 따른� 놀이� 중심의� 다양한� 교수․학습방법과� 교육용� 도구를� 활용한� 프로그래밍� 체험을� 통해� 쉽고� 재미있게� 학습하도록� 구성

하였습니다.

○�이를�위해�소프트웨어�관련�교육과정을�아래와�같이�운영

� � -� 초등학교는� 실과교과의� ICT� 활용� 중심의� 정보� 관련� 단원을� 소프트웨어� 기초소양� 내용� 중심

으로�확대�개편하였습니다.�

� � -� 중학교는�선택교과의『정보』를�소프트웨어�내용�중심으로�개편하고,『과학/기술ㆍ가정/정보』교과

군에�필수과목으로�포함하였습니다.

� � -� 고등학교는� 심화선택『정보』과목을� 소프트웨어� 중심으로� 내용을� 개편하고,� 일반선택� 과목으로�

전환하였습니다.

○�내실있는� SW교육을�위해�초․중등�교원의� SW교육�역량�강화를�위한�연수를�실시할�예정

� � -� 초등학교의� 경우,� 2018년까지� 전체� 초등교사의� 30%인� 6만명을� 대상으로� 직무연수를� 실시

하고,� 이� 중� 6천명(초등학교� 1개교당� 1명)에게� 심화연수를� 실시하여� 핵심교원으로� 양성할�

예정입니다.

� � -� 중학교의� 경우,『정보』과목� 교사� 및� ‘정보․컴퓨터’� 자격증� 소지� 교사� 전체를� 대상으로� 심화연수를�실시하고,� 부족한�교원은�시․도�협의를�거쳐�연차별로�확충할�예정입니다

o�초등학교�소프트웨어(SW)� 교육은�어떻게�이루어지나요?

교육부,『2015� 개정�교육과정』� 질의 ․ 응답�자료� � �

Page 22: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 22 -

o� 교사와�학생을�위한�온라인� SW교육�사이트� (� http://koreasw.org� )

o� 창의성을�신장시키기�위한�컴퓨팅�교육(� http://computing.or.kr� )

Page 23: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 23 -

SW교육의 컴퓨팅 사고에 대한 토론 1

대구교육대학교�교수�배영권

1.� 교육용�프로그래밍�언어에�대한� 소프트웨어교육에서의�역할과�적합성

� (1)� 교육용�프로그래밍�언어와�범용�프로그래밍�언어의�차이점�

� 교육용� 프로그래밍� 언어는� 학습자에게� 프로그래밍� 언어에� 대한� 흥미를� 유발하고,� 보다� 쉽게� 프로

그래밍� 언어를� 접할� 수� 있도록� 도와주는� 부분이� 강조된다.� 교육용� 프로그래밍� 언어에� 대한� 정의는�

학자들마다� 다르지만,� 위키피디아에서는� 교육용� 프로그래밍� 언어에� 대한� 공통점을� 정리하여� 다음

과�같이�설명하고�있다.

Many� educational� programming� languages� position� themselves� inside� a�

learning� path,� that� is� a� sequence� of� languages� each� designed� to� build� on� the�

others� moving� a� student� from� easy� to� understand� and� entertaining�

environments� to� full� professional� environments.

대부분의� 교육용� 프로그래밍� 언어들은� 학습의� 흐름(learning� path)를� 포함하고� 있으며,� 일련

의� 프로그래밍�과정을�통해�학생들의� 이해하고�쉽고�흥미�있게�참여할� 수� 있는�환경으로부터�전

문적인�과정으로�전이될�수�있도록�설계된�것이다.

� (2)� 핀란드�코딩�교육과정� (신승기,� 배영권,� 2015a)

학교급 학년 교수학습내용

초등학교

1~2학년 문제해결방법과�전략을�학습하기�위한�놀이로써의�프로그래밍�교육

3~6학년학습자의� 인지적� 발달단계를� 고려하여� 비주얼� 프로그래밍� 언어를�

활용한�프로그래밍�교육

중학교 7~9학년텍스트�기반의� 프로그래밍�언어를�학습하며,� 특정언어만을�학습하는�

것이�아니라�프로그래밍에�대한�개념�이해에�초점을�두고�있음

Page 24: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 24 -

� (3)� 에스토니아�코딩�교육과정� (신승기,� 배영권,� 2015b)

학교급 학년 교수학습내용

초등학교

1~4학년

1. 프로그래밍을�위한�첫걸음

- 마우스와�키보드의�사용방법�익히기

- 논리력과�사고력을�포함하고�있는�게임하기

2.� 비주얼�프로그래밍�언어�활용하기

5~6학년

1. 레고로봇�활용하기

2. 웹�프로그래밍(웹사이트�만들기,� 웹� 어플리케이션�만들기)중학교 7~9학년

고등학교 10~12학년 웹�프로그래밍(웹사이트�만들기,� 웹� 어플리케이션�만들기)

� � (4)� 다른�교육과정�분석을�통한�교육과정�편성�제언� (신승기,� 배영권,� 2015b)

Page 25: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 25 -

2.� 소프트웨어교육과�컴퓨팅사고(Computational� Thinking)대한�의견

(1)� 컴퓨팅�사고를�일반교사나�처음�접한�사람들에게�소개하기�위한�정의나�사례를�든다면?�

☞� 1980년에� Papert에� 의해서� Computational� Thinking이라는� 용어가� 처음� 사용되었으며�

(Papert,� 1980),� Computational� Thinking은� 일상생활� 속에서� 요구되는� 능력으로� 문제해결

을�위한�일반적인�사고방법으로�자리매김할�것이라고�언급하였다� (Papert,� 1996).

☞� 이후,� 당시� 카네기� 멜론� 대학의� 컴퓨터과학과에� 교수로� 재직하던� (현재는� 마이크로소프트�

부사장)� Wing에� 의해� 2006년� 언급되면서� 21세기의� 중요한� 사고전략으로� 각광을� 받게� 되었

다.� 당시,� 카네기� 멜론� 대학만의� 컴퓨터과학과의� 특별한� 교육과정을� 만들기� 위해� 인문학적� 접

근을� 실시하였고,� 사고� 과정에� 대해� 초점을� 두면서� Computational� Thinking� 용어를� 사용하

였으며,� 교육과정� 소개를� 위한� 프레젠테이션이� 이슈가� 되면서� 추후� 논문화� 되었다� (Wing,�

2008;� Wing,� 2006)

☞� Wing� (2006)에� 의하면� Computational� Thinking의� 출발점은� 문제해결력이며,� 문제해결력

은� 일상생활� 속에서� 필요한� 요소라고� 언급하며,� 추상화(Abstraction)과� 자동화(Automation)

이� 가장�중요한�요소라고�하였다.

☞� 추상화(Abstraction)에� 대하여� 예를� 들면,� 추상표현의� 대가로� 일컬어지는� 피카소의� 그림을�

떠올려보면,� 유의미하고�중요한�부분을�대범하게�크게�표현하고,� 필요�없는�부분을�과감히�삭제

하여� 표현하는� 모습과� 같이,� 우리가� 바라보는� 문제도� “유의미한� 단순화,� 간단화� or� 개략화

(Simplify)”를� 통해� 의미� 있는� 것을� 강조해서� 간단하게� 표현하고� 문제를� 간단하게� 만드는� 것

으로�설명할�수� 있다.� 다른�예를�들면,� 아침에�우리가�출근하는�과정을�떠올린다면,

세수� →� 식사� →� 양치� →� 옷� 입기� →� 자동차� 시동� 걸기� →� 운전하기� →� 사무실� 문� 열기�

→� 과업�확인하기

이러한�일련의�과정들을�유의미한�핵심과제�중심으로�간단히,�

집� →� 도로�→�사무실

이렇게�표현하는�과정이�추상화�과정이다.

☞� � 자동화는� 문제해결방법에� 대해서� 익숙해진� 이후� 접하게� 되는� 문제상황에� 대해서는� 이것

이�문제인지도�인식하지�못할�정도의�숙달된�상태를�통해,� 자연스럽게�유사한�문제를�해결하

Page 26: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 26 -

는� 것을� 의미한다.� 과거에는� 문제상황으로써� 문제해결방법에� 대한� 연구와� 학습이� 필요했으나,�

이러한� 일련의� 과정이� ‘자동화’되어� 문제라고� 인식하기도� 전에� 자동적으로� 쉽게� 해결되는� 것�

즉,� 학습자가� 인식하지�못하는� 상태에서�과거에는�문제상황으로�인식되었던�것을� 최적의� 해결

방법을�활용하여�자동으로�문제를�해결하는�것을�의미한다.

☞� � 프로그래밍� 과정에서� ‘자동화’에� 대한� 내용을� 예제로� 살펴본다면,� 학습자가� ‘반복문’에� 대

해서� 학습한다고� 가정하자.� 처음에� 학습자는� 반복문을� 모르는� 상태였으나,� 연습과� 학습을� 통

해� 반복문이�익숙해졌다.� 이후� 프로그래밍을�개발할� 때에는� 반복문이�무엇인지에�대한� 정의와�

개념을� 다시� 살펴보는� 것이� 아니라,� 어떻게� 반복문이� 활용되어� 문제가� 효율적으로� 해결될� 수�

있을지�무의식적으로�활용하는�단계를�의미한다.

� �

(2)� 컴퓨팅�사고가�과연�초중등�보편교육에서�일반화시킬�수� 있는�기초�사고력인가?

☞� � 맞는� 말이다.� Wing교수에� 의하면� CT는� 컴퓨터� 사이언스에서� 왔지만� 모든� 사람에게� 필요한�

능력이다.� 3Rs(Read,� wRite,� aRithmatic)만큼�중요한�기초요소라고�하였다.� (Wing,� 2006)

(3)� 어떻게� 컴퓨팅� 사고를� 신장시킬�수� 있는가?� 신장시키기�위한� 구체적인�방법과� 도구들

은�무엇인가?

☞� � Computational� Thinking사고�신장을� 위해서는,� Computational� Thinking이� 신장되었는

지를� 확인할� 수� 있어야� 하며,� 이를� 위해서는� 평가도구가� 필요하다.� 아직은� Computational�

Thinking에� 대한� 연구가� 초기� 단계이기� 때문에,� 어떠한� 방법과� 도구들이� Computational�

Thinking을� 신장시키는지에� 대한� 연구가� 지속적으로� 이루어져야� 하며,� 이를� 판별하기� 위해서는�

객관화� 된� 평가도구� 개발이� 선행되어야� 한다.� 즉� 평가도구� 개발� 후� 논의가� 필요한� 사항이며,�

지속적�연구가�필요한�부분이다.�

(4)� 프로그래밍,� 코딩을�하면�컴퓨팅�사고가�신장되는가?

☞� 신장된다.� 이유는� 프로그래밍과� 코딩의� 핵심적인� 요소도� 자동화이다.� 추상화는� 프로그램을�

하기�위한�준비단계에서�필수적으로�요구되는�능력이다.�

Page 27: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 27 -

(5)� 컴퓨팅� 사고를� 신장시키면� 일상생활의� 문제해결에� 진짜� 도움이� 되는가?� 다른� 사고력

에�전이되는가?

☞� 맞다고� 생각한다.� Computational� Thinking의� 뿌리는� 문제해결력이다� (Wing,� 2008;�

Wing� 2006).� 문제해결력의� 추세는� 일상생활의� 문제해결이다.� 교육� 공학� 연구에서� 문제해결

력이�다른�사고력에�전이된다는�연구는�많이�이루어져�있다� (Jonassen,� 2002).

(6)� 구글이나� CSTA에서�정의하는�컴퓨팅�사고와�이번� 2015년� 정보교과에서�추구하는�컴

퓨팅사고와�어떻게�다른가?

☞� 교육과정에서� 제시된� 것은� 유사하다.� 세부적인� 교수학습� 모형은� 교육과정에는� 없고,� 지침

에� 나와� 있는데� CSTA와� 유사하다.� 컴퓨팅사고에�대한� 연구자체가�초기단계다.� 학자마다� 의견

이�다양하다.�

(7)� 초중등교육의� 소프트웨어교과에서� 추구해야� 할� 컴퓨팅� 사고는� 어떻게� 전개되어야� 하

는가?

1)� 교육과정� 측면에서� 체계적인� 교육과정을� 제시하여� 초중등에서의� 위계성을� 갖는� 교육과정�

편성이�요구되며,� 다른�교과에�비해�이론적�배경�연구가�필요하다

2)� 프로그래밍� 언어� 자체에� 대한� 교육� 이외에� 문제해결력과� 창의융합적� 사고력을� 신장하는데�

목적을� 두어야� 한다.� 문제를� 해결할� 수� 있는� 도구로써� 프로그래밍� 언어를� 제시해야� 한다.� 학

습의�동기�및� 목적을�명확히�해야�된다.

3)� CT� 평가도구관련해서� 미국에서는� NSF에서� funding을� 해서� 2018년에� 완료예상으로� 연구

를� 진행하고� 있다.� 또한� CT� 개념� 및� 평가도구가� 초기단계의� 연구이다.� 그렇기� 때문에� 한국에

서도� CT에� 대한� 개념적� 측면� 및� 이론적� 연구,� 모형� 개발,� 평가� 도구� 개발에� 대한� 구체적인�

향후�연구가�필요하다.�

Page 28: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 28 -

참고문헌

신승기,� 배영권� (2015a).� 핀란드의� 코딩기반� 소프트웨어� 교육에� 대한� 고찰.� 한국정보교육학회논문

지.� 제19권� 1호.� pp.� 127-138.

신승기,� 배영권� (2015b).� 에스토니아의� 소프트웨어� 교육� 정책� 분석을� 통한� 교육과정� 설계에� 대한�

시사점�고찰.� 한국정보교육학회논문지.� 제19권� 3호.� pp.� 361-372.

Jonassen,� D.� H.,� Howland,� J.,� Moore,� J.,� &� Marra,� R.� M.� (2002).� Learning� to� solve�

problems� with� technology:� A� constructivist� perspective.

Wikipedia� (2015).� List� of� educational� programming� languages.� Retrieved� from�

https://en.wikipedia.org/wiki/List_of_educational_programming_languages

Wing,� J.� M.� (2006).� Computational� thinking.� Communications� of� the� ACM,� 49(3),� 33-35.

Wing,� J.� M.� (2008).� Computational� thinking� and� thinking� about� computing.� Philosophical�

Transactions� of� the� Royal� Society� of� London� A:� Mathematical,� Physical� and�

Engineering� Sciences,� 366(1881),� 3717-3725.

Page 29: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 29 -

SW교육의 컴퓨팅 사고에 대한 토론 2

경기�모바일과학고등학교�한건우

� 소프트웨어� 교육이란� 무엇인가?� 학교� 현장의� 중등교사로서� 소프트웨어� 교육에� 대한� 광범위한� 명칭에�대해�다소�혼란이�있을�수� 있다.� 이는� 2014년� 7월� 소프트웨어�중심�사회� 선포식을�전후하여�

등장한� 용어라고� 생각된다.� 디지털� 사회에서� 창조� 경제의� 혈액과도� 같은� 소프트웨어� 산업을� 육성

하기�위해�소프트웨어�중심�사회를�선언한�것이다.

� � 이� 시점을� 전후하여� 소프트웨어� 교육이라는� 용어가� 등장하게� 되고� 보편교육으로서� 초중등교육에�

소프트웨어�교육을�실시하겠다고�언론매체에�대대적으로�보도되었다.

� � 그러나� 학교� 현장에서는� 이미� 선택과목으로� 정보를� 선택하여� 실시하고� 있었다.� 국가가� 요구하는�

소프트웨어� 산업� 육성을� 위한� 보편교육으로� 학생들의� 정보과학적� 사고력� 강화를� 위한� 교육이�

2007개정교육과정부터�시행되고�있었다.�

� � 소프트웨어�교육이라는�광의적인�범위에서�정보� 과목은� 정보사회에�적응하기�위한� 학생들의�역량

을� 신장시키고�소프트웨어�교육의� 핵심인� 컴퓨터� 과학이라는�학문적� 토대를� 바탕으로�교육하는�과

목이다.�

� � 따라서� 소프트웨어� 교육이라는� 명칭은� 일반인들에게는� 쉽게� 이해될� 수� 있지만� 학교� 현장의� 교육

으로� 이해되기에는� 다소� 부족한� 점이� 있다.� 정확하게� ‘정보(informatics)’� 교육이라는� 과목� 명칭으

로�제시해�주는�것이�향후�교육과정을�구성하는데�보다�명확할�것으로�본다.

1.� 소프트웨어교육에서의�교육용�프로그래밍�언어의�역할과�적합성

� � 컴퓨터는� 보편적인� 만능기계(universal� machine)이다.� 보편적인� 만능기계는� 문제해결에� 필요한�

명확한� 과정을� 제시하게� 되면� 절차에� 따라� 유한시간이든,� 무한시간이든� 결과를� 출력하게� 된다.� 이�

때� 명확한� 과정을� 도출하는� 과정을� 추상화(abstraction)이라고� 볼� 수� 있으며,� 제시한� 과정을� 절차

에� 따라� 수행하는� 과정을� 자동화(automation)이라고� 볼� 수� 있다.� 이러한� 과정을� 배우는� 것이� 컴

퓨팅�사고력(computational� thinking)이다.

� � 정보� 교과에서� 중요한� 역량� 중� 하나는� 컴퓨팅� 사고력(computational� thinking)이다.� 이� 중� 컴퓨

터의� 처리� 능력을� 활용하여� 자동화(automation)하는� 과정을� 사용하는� 것이다.� 이러한� 관점에서�

프로그래밍은�매우�중요한�교육내용이다.

Page 30: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 30 -

� � 일반적인�프로그래밍�언어는�매우�추상적인�관점에서�다루어지기�때문에�학생들에게�높은�인지적�

� 사고력을� 요구한다.� 따라서� 학생들에게� 구체적이고� 가시적인� 결과물을� 제공하면서� 접근하는� 교육용�

프로그래밍의�역할은�중요하다고�볼� 수� 있다.

� � 스크래치,� 엔트리,� 스냅� 등의� 교육용� 프로그래밍� 언어의� 등장으로� 인지발달� 단계상� 형식적� 조작기�

이전의� 학생들도� 쉽게� 프로그래밍을� 학습할� 수� 있다.� 이러한� 교육용� 프로그래밍� 언어는� 매우� 가치

가�높다고�판단된다.� 수리적�사고력,� 과학적�탐구력이�형성되는�시기에�컴퓨팅�사고력도�같이�형성

시킬� 수� 있다는� 점이� 큰� 가치라고� 본다.� 즉,� 학생들이� 컴퓨터로� 문제해결을� 위해� 사고하는� 과정을�

배우기� 시작하는� 것이다.� 기본적인� 순차,� 선택,� 반복이라는� 절차� 구조를� 배우면서� 컴퓨터에게� 명확

한�절차를�제시할�수� 있도록�사고하기�시작한다.

� � 2015년� 발표된�교육과정에서는�초등학교,� 중학교의�소프트웨어�교육이�필수�교과와�과목으로�확정�

고시되었다.� 초등학교는� 실과에서� 17시간,� 중학교는� 정보� 교과에서� 34시간� 기준으로� 배당하도록�

고시되었다.�

� � 따라서� 초중등학교에서는� 교육과정에� 따라� 컴퓨팅� 사고력� 중� 자동화에� 대한� 프로그래밍� 교육이�

진행된다.� 교육용�프로그래밍�언어의�수준,� 학교급별�수준에�따라�다양한�언어가�선택될�것으로�예

상된다.� 또한� 중등교육과정에서는� 피지컬� 컴퓨팅까지� 포함하고� 있기� 때문에� 프로그래밍� 언어의� 선

정이�매우�신중하다.

Page 31: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 31 -

� � 2015년� 발표된� 교육과정의�시수와�교육과정의�위계를�고려해볼�때� 고시된�프로그래밍�언어는�초

등학교와� 중학교에서는� 교육용� 프로그래밍� 언어,� 고등학교는� 텍스트� 기반� 프로그래밍� 언어로� 제시

되었다.� 이� 점은� 앞으로� 지속적으로� 수준을� 높여야� 된다고� 생각된다.� 그� 이유는� 현재� 교육용� 프로

그래밍�언어의�대부분은�블록기반�프로그래밍이며,� 시각적�결과물에�보다�집중하기� 때문이다.� 문제

의� 핵심을� 분석하고� 해결하는데� 멀티미디어적인� 요소를� 집중하기� 때문에� 보다� 핵심적인� 사고력을�

키우는데� 부적합할� 수� 있다고� 생각된다.� 따라서� 향후� 교육과정에서는� 수업� 시수와� 분량,� 학생들의�

컴퓨팅� 사고력� 수준을� 고려하여� 초등학교� 수준에서� 교육용� 프로그래밍� 언어를� 다루고,� 중학교� 수

준에서는� 블록과� 연계되는� 스크립트� 기반� 언어,� 고등학교에서는� 텍스트� 기반� 언어를� 사용하는� 것

이�필요하다고�생각된다.�

2.� 소프트웨어교육과�컴퓨팅사고(Computational� Thinking)대한�의견

� � 2015년� 발표된�교육과정에서�정보�교육의�역량은�크게�세�가지이다.

첫째는� 정보문화소양이다.� 지식정보사회를� 올바르게� 이해하고� 정보사회� 구성원으로서의� 정보윤리

의식,� 정보보호능력,� 정보기술활용능력�등을�키운다.

둘째는�컴퓨팅�사고력이다.� 컴퓨터과학의�기본�개념과�원리를�바탕으로�실생활�및� 다양한�학문�분

야의�문제를�창의적으로�해결하는�능력을�키운다.

셋째는�네트워크�컴퓨팅�기반�환경의�다양한�공동체에서�협력적�문제해결력을�키운다.

� � 정보� 교육이� 필수로� 배우는� 보편교육으로� 들어온� 것으로� 직업적� 소양이나� 컴퓨터� 기능적� 소양을�

키우기� 위한� 목적이� 아니라� 보편적인� 사고력� 교육의� 필요성을� 표현한� 것이라고� 생각된다.� 일반적

인� 타� 교과를� 살펴보면� 교과서에� 직업적� 소양과� 관련하여� 소개하는� 단원을� 찾아보기� 어렵다.� 이는�

초중등교육과정에서�배우는�교과나�과목은�학생들이�일반적으로�알아야하는�기본적인�학문이나�소양

이라는�의미이다.�

� (참고로� 정보� 교과는� 지속적으로�직업적� 소양의� 관점보다는�진로� 교육의� 관점에서� 교육을� 진행하고�

있다.� 이는� 앞으로의� 직업이� 정보과학으로� 인해� 크게� 변화될� 것이며,� 이에� 대한� 이해와� 학문의� 중

요성을� 강조하기� 위한� 것이다.� 무엇보다� 소프트웨어� 관련� 직업에� 대한� 문화가� 바뀌어야� 할� 것이

다.)

� � 따라서�정보�교육은�컴퓨팅�사고력의�관점에서�교육되어야�한다.

� � 컴퓨팅� 사고력은� 보편적인� 사고력으로� 수학,� 과학의� 학문에서도� 사용하기도� 한다.� 문제를� 해결하

기� 위해� 문제를� 추출하고,� 분해하는� 등의� 추상화� 과정과� 문제� 해결의� 과정을� 진행하는� 자동화� 과

정이다.� 그러나� 수학이나� 과학의� 학문과� 다르게� 정보� 교육에서는� 컴퓨팅� 기기의� 처리� 능력을� 통해�

자동화하여�문제를�해결할�수�있는�역량을�키워주어야�한다.�즉,�프로그래밍�언어로�문제해결의�과정

Page 32: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 32 -

� 을� 작성하고�컴퓨팅�기기에게�시키면�되는�것이다.�

� � 간혹� 정보� 교육을� 하다보면� 수학� 과목과� 유사하다고� 보는� 사람이� 있다.� 왜냐하면� 문제를� 해결하

기� 위해� 계산을� 하기� 때문이다.� 수학은� 인간을� 둘러싼� 세상을� 수와� 그들� 간의� 관계로써� 표현하고�

해석하는�학문이며,� 수학의�문제는�수와�그들�간의�관계를�계산을�통해�해결하는�문제이다.

� � 예를� 들면� 다음과� 같은� 문제를� 생각해� 보면� 수학은� 이를� 해결하기� 위해� 수들의� 관계를� 분석하여�

공식을�만들어�쉽게�자동화한다.

1+2+3+…+10=?1+2+3+…+100=?1+2+3+…+1000=?

그러나�다음의�문제는�공식으로�만들�수�없다.

1×2×3×…×10=?1×2×3×…×100=?1×2×3×…×1000=?

� � 이런�경우� 컴퓨팅�기기에게�문제해결의�과정을�명확하게�제시하고�처리하면�문제를� 해결할�수� 있

다.� 즉,� 수학을� 모르더라도� 처리의� 과정을� 명확히� 순서대로� 제시하면� 계산의� 문제를� 해결할� 수� 있

다는�점이다.

� � 여기에� 더� 나아가� 컴퓨터� 과학의� 원리를� 이해하고�창의적으로�문제를� 해결할� 수� 있어야� 한다.� 이

것이� 정보� 교육의� 핵심이다.� 단순히� 추상화와� 자동화의� 과정으로� 문제를� 해결하는� 것이� 아니라� 문

제� 해결에� 필요한� 이론적� 내용을� 바탕으로� 창의성을� 발휘해야� 한다.� 그리고� 정의적인� 관점에서� 올

바른�가치관과�협력적�자세를�가질�수�있도록�교육해야�한다.

토론을�마치면

� � 정보�교육의�본질이�무엇인지�파악하고�이를�배우는�것이�중요하다.

� � 컴퓨터�과학의�아버지라고�불리는�앨런�튜링은�가정부에게�복잡한�수학�문제를�해결하기�위한�방법

을�간단하고�구체적으로�설명한�후,� 가정부가�그�문제를�해결하는�과정을�목격하게�된다.� 이를�통해�

아주� 복잡한� 문제라도� 해결� 과정을� 구체적이고� 간단한� 방법으로� 표현하고� 전달할� 수만� 있다면,�

기계도�문제를�해결할�수�있음을�증명한다.

Page 33: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 33 -

� � 즉,� 추상화와� 자동화의� 과정을� 거치면� 컴퓨팅� 기기로� 문제를� 해결할� 수� 있다는� 것이다.� 여기에서�

출발한�것이�컴퓨터�과학이며,� 이것이�정보�교육의�본질이다.�

� � Everybody� in� this� country� should� learn� how� to� program� a� computer...� because� it�

teaches� you� how� to� think.

� -� Steve� Jobs� -

� � 컴퓨터� 과학은� 머리로� 궁리하는�것에� 대한� 공부(science� of� intelligence)이고� 그� 응용은� 인간�

지능/본능/현실의�확장이다.

-� 컴퓨터과학이�여는�세계�저자�이광근(서울대�컴퓨터공학부�교수)� -

Page 34: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 34 -

SW교육의 컴퓨팅 사고에 대한 토론 3

송도�중학교�김석전

1.� 교육용�프로그래밍�언어에�대한� 소프트웨어교육에서의�역할과�적합성

-� 교육용�프로그래밍�언어와�범용�프로그래밍�언어의�차이점은?

∘ 교육용프로그래밍�언어의�사용자� :� 일반인,� 모든�연령대,� 초보자,� 어린학생∘ 범용�프로그래밍언어�사용자:� SW개발자,� 프로그래머가�되기�위한�학생,� 과학자(분석등),� IT종사자

따라서� EPL은� 사용하기�쉬우며,� 문법을�익히는데�걸리는�시간이�최소여야하며,� 범용�언어의�기본

기능을� 포함하여� 사용자가� 원하는� 기능을� 구현해야한다.� 오히려� EPL이� 요구조건이� 더� 많다고� 볼�

수�있다.� 범용프로그래밍으로�전이시키는데�주된�목적이�있는�건� 아니다.�

∘ 엔트리,� 스크래치,� 스냅,� 스크립트언어(C,� Java,� 파이썬� 등)의� 교육� 적용� 적합성(학년수준,� 학교급� �� 특성,� 교육과정�적용�가능성,� 프로그래밍�언어의�특성에�따른�의견)

∘ 초등� :� 엔트리,� 스크래치� +� 센서보드∘ 중등� :� 스크래치,� 엔트리,+� 센서보드,� 앱인벤터,� 블록코딩�아두이노∘ 고등� :� 앱인벤터,� C,� Java,� 파이썬,� HTML5,� 자바스크립트,� 아두이노초등교육과정은� 체험위주이므로� 흥미를� 유발하고,� 지속� 가능하게� 만드는� 언어를� 채택해야� 할� 것

이다.�

중등의� 중학교는� 간단한� 문제를� 해결� 가능해야하고� 프로그래밍을� 직접� 체험해� 보는� 교육과정이

므로�블록언어�중� 좀� 더� 기능면에서�상위의�언어를�채택해야�할�것이다.�

중등의� 고등학교에서는� 다양한� 제어구조와� 함수,� 재귀를� 다루므로� 초기의� 블록� 언어에서� 텍스트

언어로�바꿔가야�할� 것이다.�

-� 소프트웨어교육은� 사고력� 신장을� 위한� 일반교과의� 특성을� 지니는가?� 직업적� 소양을� 키워

주는�진로�교과의�특성을�지니는가?�

� � 초중등� 교육은� 보편교육으로� 모든� 사람이� 공통으로� 가져야할� 교양으로써의� 관점을� 가진다.� 소프

트웨어�교육이�초중등에�도입되고�교육된다는�것은�교양으로써�인식하고,� 인식되어야�함을�뜻한다.�

만약� 직업,� 진로교육관점이라면� 전문계교나� 대학에서� 전공을� 하면� 될� 것이다.� 정보교과의� 모태인�

컴퓨터과학기반아래�사고력을�키우고�문제해결력을�키우는�교과로�인식되어야�할� 것이다.�

Page 35: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 35 -

2.� 소프트웨어교육과�컴퓨팅사고(Computational� Thinking)대한�의견

-� 컴퓨팅�사고를�일반교사나�처음�접한�사람들에게�소개하기�위한�정의나�사례를�든다면?

� � 수학과� 비교하여� 설명� :� 수학은� 산업사회에� 필요한� 인재라면� 반드시� 이수해야할� 교과이다.� 실제�

사회에� 진출해서� 계산이나� 셈을� 할� 때만� 수학지식을� 사용하지만� 논리적사고력의� 기본이므로� 배워

야� 한다고� 주장한다.� 이와� 비슷하게� 디지털� 사회를� 살아가는� 사람은� 프로그래머가� 되지는� 않지만�

학교에서� SW교육을� 받아� 문제해결과정에� 컴퓨터를� 이용해� 문제를� 더� 쉽고� 빠르게� 해결하는데� 컴

퓨팅사고를� 사용하게� 된다.� 복잡한� 문제를� 더� 단순하게� 만들고,� 문제를� 점진적으로�해결하며,� 동료

와� 협업으로� 해결하며,� 컴퓨팅기기를� 이용하고� 조작하여� 문제를� 해결하는� 방법을� 배움으로써� 디지

털�사회에�효과적으로�적응하기�위함이다.�

� � 인간두뇌의� 무한� 확장을� 돕는� 컴퓨팅� 파워의� 도움을� 받아� 문제(어떠한� 문제든)를� 해결하는� 방법

을�배우는�것이다.�

컴퓨터사람 양자간의 배움

� � 인간이� 컴퓨터를� 만들었다.� 컴퓨터가� 인간에게� 배웠다고� 말할� 수� 있겠다.� � 컴퓨터는� 날로� 능력이�

극대화되어�갔다.� 이제는�인간이�컴퓨터에게서�배운다고�말할�수� 있다.�

-� 컴퓨팅�사고가�과연�초중등�보편교육에서�일반화시킬�수� 있는�기초�사고력인가?

� � 현재� 학교교육은� 지식위주의� 강의식� 교육을� 주로� 진행하고� 있다.� 지식을� 전달받는� 것은� 중요하

다.� 하지만� 지식을� 학생� 스스로� 구성할� 수� 있는� 환경(다음,� 네이버,� 구글)이� 도래� 하였다.� 교사의�

역할과� 위치가� 변화를� 요구� 받고� 있다.� 학생이� 자신에게� 주어진� 문제에� 관한� 자료를� 수입하는� 방

법,� 분석하는� 방법,� 표현하는� 방법,� 복잡한� 문제를� 단순화� 하는� 방법,� 큰� 문제를� 작은� 문제로� 쪼개

는�방법,� 컴퓨터에게�일을�시키기�위해�알고리즘을�짜는�방법,� 컴퓨터에게�명령을�내리기위한�코딩

하는�방법을�안다면�그들의�인생은�달라질�가능성이�많다.� 어느�교과도�사회에서,� 실생활에서�요구

되는� 능력을� 신장시키는� 것을� 목적으로� 한다고� 말하지만,� 실상은� 실생활과� 괴리되어� 있다.� 지식의�

소유자로써� 가르친다고� 생각하는� 교사로� 남는다면� 일반화될� 수� 없을� 것이다.� 하지만� 지식전달자에

만� 머무르지� 않고� 안내자,� 조력자로써의� 역할도� 같이� 수행한다면� 앞으로� 모든� 교과에서� 컴퓨팅기

기를�이용한�수업을�진행할�때� 일반화�시킬�수� 있는�효과적인�사고력이�될� 것이다.�

Page 36: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 36 -

-� 어떻게� 컴퓨팅� 사고를� 신장시킬� 수� 있는가?� 신장시키기� 위한� 구체적인� 방법과� 도구들은�

무엇인가?

� 사고력도구(T차트,� 피시본�등)� 사용으로�학생�스스로�사고할�시간을�줘야한다.

� 효과적인� 질문을� 통해� 학생의� 생각이� 확장되도록� 해야� 한다.(� 학생들은� 자신이� 현재� 가지고� 있는�

지식을�기반으로�새로운�지식을�이해한다.)

협업을�통해�문제에�대한�다양한�접근법을�인식하고�가장�좋은�접근법을�선택하도록�해야�한다.�

학생들이� 직접� 문제를� 해결하는� 과정을� 체험해� 보도록� 한다.� 해결하는� 과정에서� 필요한� 생각들을�

주입하는�것이�아니라�직접�사고해서�결과를�도출하는�수업이�되어야�한다.�

--예)� 우리가� 중력가속도� g에� 대해� 배우는� 내용은� 그� 값이� 대략� 9.8m/s� 이라는� 것이다.� 지식으로�

전달� 받고� 공식에� 대입해� 물리문제를� 풀어� 나간다.� 이는� 실제� 시험문제풀이에� 도움이� 되지만� 실제

문제를� 해결하는� 데는� 별� 도움이� 안� 된다.� 인터넷� 검색하면� 이런� 지식은� 금방� 알� 수� 있다.� 갈릴레

오는� 빗면실험을� 통해� 몇� 백년� 전에� 이미� 중력가속도� 값의� 근사치를� 구했다.� 빗면에� 공을� 굴리는�

실험을� 수백� 번하고� 데이터를� 축적하였고,� 빗면의� 각도를� 90도로� 근사시키면서도� 자료를� 수집했

다.� 이� 자료에서� 패턴을� 찾아� 빗면이� 90도에� 갈수록� 9.8m/s에� 근사한다는� 것을� 알아내었다.� 갈릴

레오는� 현재로� 말하면� 컴퓨팅사고를� 사용하여� 중력가속도를� 알아낸� 것이다.� 우리는� 이� 실험을� 컴

퓨터로� 모델링하여� 시뮬레이션함으로써� 갈릴레오의� 전체� 실험과정을� 간접� 경험� 할� 수� 있다.� 그러

면�현제�우리가�느끼는�중력가속도� g를� 학생은�우리와�다르게�느낄�것이다.�

-� 프로그래밍,� 코딩(기존�프로그래밍교육과점,� 타이핑)을�하면�컴퓨팅�사고가�신장되는가?

� �

� 코딩은� 컴퓨팅사고� 관점에서� 일부분에� 지나지� 않는다.� 문제해결을� 위한� 방법론을� 구상하고� 실천을�

안할�수�없으므로�이를�실천하기위한�도구가�코딩이라고�보면�된다.�

� 코딩은� 컴퓨팅� 사고의� 추상화� 부분을� 실현하기위한� 기술이다.� 코딩은� 알고리즘개발이� 전제가� 되어

야� 하므로� 코딩� 자체만� 가지고는� 컴퓨팅사고와의� 연관성은� 없어� 보인다.� 자신이� 개발한� 알고리즘을�

코딩하면서�잘못을�알아내고�수정하며�점진적인�문제해결을�경험하며�사고력이�신장된다.� �

-� 컴퓨팅� 사고를� 신장시키면� 일상생활의� 문제해결에� 진짜� 도움이� 되는가?� 다른� 사고력에�

전이되는가?�

� 문제를� 접했을� 때� 문제와� 관련된� 자료를� 수집하고,� 분석하고,� 표현하여� 문제를� 이해하고,� 문제를�

해결하기� 위한� 전략적� 차원에서� 문제를� 단순화� 시키고� 분해해� 본다.� 반복되는� 데이터에서� 패턴을�

찾고,� 그� 패턴을� 일반화해서� 공식으로� 만들고,� 해결책으로� 알고리즘을� 작성해� 보고� 코딩으로� 옮겨�

SW를�직접�만들어�봄으로써�실제�문제�해결에�실질적인�도움이�된다.� 일상의�문제�해결엔�코딩을�

Page 37: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 37 -

통한�자동화보다는�자료�수집,� 분석,� 표현,� 분해,� 패턴인식,� 단순화를�통한�추상화�과정이�일상의�문

제�해결에�더� 도움이�되는�것� 같다.�

-� 구글이나� CSTA에서� 정의하는� 컴퓨팅� 사고와� 이번� 2015년� 정보교과에서�추구하는� 컴퓨팅

사고와�어떻게�다른가?

� 구글같은� 경우는� 교과차원의� 접근이� 필요� 없기� 때문에� 순수하게� 사고력차원의� 접근이라고� 본다.�

구글이� SW회사이지만� 프로그래머� 양성에� 초점을� 맞추지� 않는� 이유는� 전문� 프로그래머만� 가지고는�

융합적문제를� 해결하기� 불가능하기� 때문에� 해당분야의� 전문가와� 프로그래머와의� 협업이� 필수라고�

본� 것� 같습니다.� 따라서� 컴퓨터과학적� 관점에서� CT를� 바라보지� 않고� 범교과주제에� 적용하는� 것� 같

습니다.

� CSTA는� 교육과정의� 5가지� 영역의� 한� 부분으로� CT를� 가지고� 있습니다.� CT의� 하위� 9가지� 요소를�

학생들이� 학습할� 필요성이� 있다고� 보는� 것� 같습니다.� 컴퓨팅사고를� 해서� 문제해결과정을� 컴퓨터과

학적인� 주제만� 사용하는� 것이� 아니라� 범교과주제를� 이용할� 수� 있는� 것입니다.� 예를� 들어� 영어의� a,�

an을� 붙이는� 패턴을� 인식하고� 이를� 알고리즘으로� 나타내는� 수업을� 통해� 알고리즘을� 설계하는� 법을�

배웁니다.� 이후에� 단어에� a,� an을� 자동으로� 붙이는� 프로그램개발단계가� 필수는� 아니라고� 보는� 것�

같습니다.�

� 우리나라의� 경우� 정보가� 필수교과로� 처음� 지정되었고,� 정보교과의� 정체성� 문제나� 교과로� 인정� 받

기위한� 지식� 체계를� 설계할� 때� 컴퓨터과학과� 프로그래밍을� 소홀히� 할� 수� 없는� 문제로� 인해� 프로그

램을� 짜는� 것에� 중점을� 두었다고� 생각합니다.� 컴퓨팅사고력� 교과라는� 것은� 존재하기� 힘들기� 때문에�

정보교과에서� 추구하는� 컴퓨팅사고는� 프로그램을� 만드는� 과정에� 필요한� 사고력으로� 한정하는� 느낌

입니다.� 컴퓨터과학에서는� SW를� 만들면� 문제가� 끝나지만,� 실제문제는� 문제해결과정에� SW가� 필요

해� SW를�만들고,� SW를�이용해�원래�문제를�해결한다고�볼� 수� 있습니다.� �

-� 초중등교육의�소프트웨어교과에서�추구해야�할� 컴퓨팅�사고는�어떻게�전개되어야�하는가?

� 기획력도� 있으면서� 기술력도� 있다면� 좋겠지요.� 못질,� 톱질을� 잘하면서� 집� 설계도� 잘한다면� 훌륭한�

집을� 지을� 것입니다.� 대학의� 컴퓨터공학과는� 컴퓨터� 엔지니어를� 양성� 합니다.� 고객이� 원하는� SW를�

개발하는� 것이� 주된� 임무입니다.� 프로그래밍에� 필요한� 컴퓨팅� 사고력� 요소만(분해,� 알고리즘� 설계,�

자동화)� 강조한다면� 학생들이� 프로그램은� 잘� 만들지� 모르겠습니다.� 하지만� 초중등� 보편교육에서� 학

생들을� 엔지니어로� 키울� 것이� 아니기� 때문에� 기획분야나� 판단분야와� 관련된� 자료수집,� 분석,� 표현,�

패턴일반화,� 패턴인식,� 추상화� 요소들도� 주요하게� 다뤄져야� 한다고� 생각합니다.� 실제� 이요소들은� 컴

퓨터를�이용하여�다루어지게�됩니다.�

Page 38: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 38 -

초등� :� 프로그램� 작성을� 목표로� 하지� 말고� 임의의� 문제를� 알고리즘� 설계� 단계까지만이라도� 체험해�

보는�과정이�들어가면�좋겠다.�

중등� :� 문제가� 꼭� 프로그램을� 짜서� 해결해야만� 하는� 문제만� 있는� 것은� 아니므로� 문제를� 해결하기위

한� 큰� 추상화� 단계를� 거치고� 기존� SW를� 이용하여� 해결가능하면� 응용SW를� 이용하여� 해결하게� 하

고,� 기존� SW가�없다면�학생이�직접�설계하여�만들�수도�있다는�점을�알게�해야�한다.�

Page 39: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 39 -

SW교육의 컴퓨팅 사고에 대한 토론 4

부천�부곡초등학교�전수진

교육용�프로그래밍�언어에�대한� 소프트웨어교육에서의�역할과�적합성

� 초등에서� 교육용� 프로그래밍� 언어(EPL;� Educational� Programming� Language)는� 코딩이� 단순해

야�한다.� 특히�초등학생들에게는�프로그래밍에�대한�흥미를�유지시키는�게� 중요하기�때문이다.� 아무

리� 훌륭한� 개념과� 기능이� 있어도� 코딩이� 어렵거나� 디버깅이� 어려우면� 안� 된다.� 천재가� 아니어도� 코

딩을�할�수�있어야한다.�

� EPL이� 꼭� 비쥬얼� 프로그램일�필요는� 없으나�문법은� 쉬워야한다.� 조잡하고�복잡한� 기호로�표현하거

나� OOP(Object� Oriented� Programming)등의� 차원� 높은� 개념이� 들어� 있을� 필요도� 없다.� APPLE

사의�초기�타이핑식�언어나�촌스러운� Visual� Basic도� 좋다.�

� 중요한� 것은� 학생들이� 코딩하기�쉽고� 문법적� 실수를� 최소화� 할� 수� 있는� 언어여야� 한다.� 따라서� 그

동안� EPL� 개발자들은� 최대한� 자연어와� 비슷하면서도� 문법� 오류에� 의한� 디버깅은� 최소화� 하도록� 언

어를� 고안하고자하였다.� 현재� 우리가� 많이� 사용하는� 스크래치나� 엔트리나� 거북명령� 프로그램� 등이�

그런�맥락이었다.� 단순히�화려하고�멀티미디어�표현이�좋아서�만이�아니다.�

� 언어도구의�디자인이나�스크립팅�방식에� 있어서� 연령이나�경험� 또는� 학교급� 별로도� 선호하는�언어

가� 있겠지만� 성별이나� 취향에� 따라� 선호하는� 언어가� 다를� 수도� 있다.� 그러나� 대체적으로� 초등학교

에서는� 엔트리나� 스크래치가� 유용할� 수� 있다.� 엔트리는� 디자인이� 예쁘고� 여학생들이� 좋아하는� 스타

일의� 스토리텔링방식의� 장면전환� 기능이� 잘되어있다.� 스크래치도� 비슷한� 수준의� 코딩이� 가능하며�

방송하기�기능이�엔트리에�비해�강점일�수� 있다.�

� 프로그램� 간에� 이러한� 소소한� 차이는� 있지만� 학생들은� 텍스트� 코딩언어라도� 즐겁게� 자주� 접하는�

것을� 더� 선호할� 것이다.� 필자는� 개인적으로� 초등학생� 때� 텍스트방식의� APPLE� 언어를� 배웠었는데�

어렵지� 않았고� 거부감도� 없었다.� 언어의� 종류도� 중요하지만� 학생들� 수준에� 맞는� 학습� 내용과� 교수

법도� 중요하다.� 결국,� EPL은� 공장에서� 돌아가는� 복잡한� 기계와� 같은� 범용언어와는� 다르게� 추상적인�

‘퍼즐� 놀이감’의� 느낌을� 주면된다.� 초등학교� 시절� 학생들이� 느낀� 흥미는� 자신감을� 갖게� 하고� 해당�

학습을�지속가능하게�하기�때문이다.

-� 소프트웨어교육은�사고력�신장을�위한�일반교과의�특성을�지닐까�직업적�소양을�키워주는�

진로�교과의�특성을�지닐까?�

� � 이러한� 의문은� 응용학문이� 교과로서� 자리매김하게� 된� 첫� 케이스이기에� 생기는� 혼란일� 것이다.� 건

축이�미래�필수�핵심역량이라면�건축과목이�생겼을�것이다.� 하지만�정보교과가�지난� 10년간�지속

Page 40: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 40 -

� 적으로� 논의가� 되고� 있다는� 것은� 이제는� 단순히�직업교과로서의�응용학문을�뛰어� 넘는다는� 의미가�

될�것이다.

� 반면� 국어과에선� 일반교과냐�작가나� 소설가� 등의� 직업� 교과냐라는� 논의가� 없다.� 그냥� 모든� 영역에

서� 필요하기도하고� 특정� 직업을� 갖기� 위해서도� 필요한� 교과이다.� 정보교과도� 그런� 맥락에서� 지난�

10년간� 요구되어왔고� 교과가� 되었다.� 그러나� 최근� SW교육이� 몇몇� 자원이� 풍족하지� 않은� 나라들에

서� 특별히� 대두� 되었을� 때는� 국가의� 관련� 직업� 인재� 양성의� 정책적인� 의도도� 있었을� 것이다.� 우리

나라� 또한� 그러할� 것이다.� 개인적인� 역량� 계발과� 기본� 소양을� 갖추는� 일� 외에도� 국가경쟁력�측면의�

필요도�분명히�있기�때문이다.� 그러나�초등에서는�이�모든�가능성을�열어두는�것이�좋다.�

‘Facebook’� 창업자인� ‘마크� 주커버그’도� 처음� 컴퓨터를� 배울� 때에는� 컴퓨터과학�지식을� 모두� 배우고�

싶다거나� 관련� 전문가가� 되고� 싶어서� 시작했던� 것은� 전혀� 아니었다고� 말했다.� 그는� 그냥� 하고� 싶어

서� 했으며� 단지� 자신의� 여동생과� 놀고� 싶었던� 것뿐이었다라고�말했다.� 필자도� 초등학생� 때� 단순� 흥

미로�프로그래밍을�했으나�직업을�염두에�두지는�않았다.� 그리고�프로그래머도�되지�않았다.� 그러나�

관련� 영역에서� 노력하고� 있는� 연구자이자� 교사가� 되었다.� 그러나� 그� 당시� 동시에� 같은� 컴퓨터학원

을� 다니던� 친구들� 대다수가� 컴퓨터� 관련� 직업을� 갖지는� 않았을� 것이다.� 이렇듯� 우리는� 초등학생들

에게�모든�가능성을�열어주어야�한다.

소프트웨어교육과�컴퓨팅사고(Computational� Thinking)대한�의견

� Computational� Thinking(CT)이� 기존에� 없던� 사고력을� 명명하는� 것은� 아닐� 것이다.� 그러나� 기존

의� 연필과� 종이나� 어떤� 구체물로� 생각을� 표현하는� 것이� 아니라� 도구와� 표현� 방식이� 달라지기� 때문

에� 특별한� 구분이� 필요하다.� 같은� 도구� 즉,� 같은� 컴퓨터를� 사용한다해도� 프로그래밍을� 한다는� 것은�

단순히� 프리젠테이션이나� 워드작성을� 할� 때와는� 다른� 사고과정과� 사고수준을� 요구한다.� 즉� 우리가�

원하는�출력물이나�반응을�얻기�위해서는� ‘컴퓨터의�언어’를� 거쳐야하기�때문이다.�

� 도자기를� 빗기� 위해� 점토를� 만지는� 것이� 아니라� 도자기를� 빗는� 로봇을� 조정해야� 한다.� 그러기� 위

해서는� 참� 답답한� 과정을� 거친다.� 사람� 손으로� 직접� 빗는� 것이� 훨씬� 더� 직접적이고� 자연스럽고� 직

관적일� 수� 있는데� 말이다.� 소소한� 행동들을� 모두� 계산해서� 조정해야하고� 지시의� 순서가� 잘못되면�

안되며,� 무엇보다� 로봇은� 임기응변� 능력이나� 눈치도� 없다.� 그렇기에� 이렇게� 한다리� 건너서� 내가� 원

하는� 것을� 한다는� 것은� 또� 다른� 사고능력을� 요구하는� 것이다.� 이러한� 인지� 능력을� ‘메타인지’라고도�

말한다.�

� 메타인지는� 자신의� 인지적� 활동에� 대한� 지식과� 조절을� 의미하는� 것으로� 내가� 무엇을� 알고� 모르는

지에� 대해� 아는� 것에서부터� 자신이� 모르는� 부분을� 보완하기� 위한� 계획과� 그� 계획의� 실행과정을� 평

가하는�것에�이르는�전반을�의미한다1).� 따라서�이�임기응변능력�없고�눈치�없는�로봇(컴퓨터)에게�

1) Flavell, J. H. (1979). Metacognitionandcognitivemonitoring. AmericanPsychologist, 34, 906-911.

Page 41: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 41 -

지시하기�위해서는�특별한�메타인지가�필요하며�이러한�능력이�바로� CT이다.

쉽게� 말해� 이러한� CT는� 그러한� 로봇(컴퓨터)의� 수준에� 맞추어� 일을� 수행시킬� 수� 있는� 능력이다.� 그�

로봇은�단순하지만�성실하다.� 그래서�단순하고�반복적인�일을�시킬수�있다.� 우리가�한번만�고생하면�

도자기� 한� 개� 만들� 시간에� 수십,� 수백배� 또는� 무한개의� 것을� 만들� 수도� 있다.� 물론� 그� 결과물은� 우

리의� 의도대로� 매우� 창의적일수도� 있다.� 컴퓨터가� 단순하고도� 성실하게만� 수행해줬음에도� 불구하고�

참� 놀랍다.� 결국�이러한�단순과�성실이�바로� CT의� 추상화(Abstract)와�자동화(Automation)이다.

-� 어떻게� 컴퓨팅� 사고를� 신장시킬� 수� 있는가?� 신장시키기� 위한� 구체적인� 방법과� 도구들은�

무엇인가?

� 초등에서는� 간단하다.� 학생들이� 그� 도자기� 빗는� 로봇을� 잘� 파악하여� 조정해� 보는과정을� 경험해� 보

면된다.� 물론� 도자기도� 빗고� 악기도� 연주해보고� 탐험도� 떠나고....로봇의� 다양한� 삶을� 만들어� 보는�

것이다.� 따라서� 컴퓨터의� 속성을� 잘� 이해하도록� 해야� 하며,� 간단하고� 친숙한� 주제를� 가지고� 프로그

래밍�해보는�과정도�중요하다.�

� CT를� 신장시키기� 위해서는� 기능� 중심이� 아닌� 학생들의� 사고력� 중심의� 수업이� 되어야한다.� 수학에

서� 계산만� 잘한다고�수학적� 사고력이�높은� 것이� 아니기� 때문에� 다양한� 발문과� 조작활동을�선행하는�

것과� 마찬가지로� CT� 신장� 교육에서도� 다양한� 교수전략이� 필요하다.� 그래서� 많은� 연구진들은� 어린�

학생들이나� 초보자들을� 위해� 언플러그드와� 같은� 놀이를� 통한� 컴퓨터과학� 교육방법이나� EPL을� 이용

한�게임이나�스토리텔링식�개발�등을�제안하고�있다.�

� 또한� 구글이나� CSTA에서는� 식물기르기,� 교통체증,� 먹이� 연쇄와� 같이� 학생들의� 일상생활이나� 타교

과와�연결된�주제중심�프로젝트를�통해� CT를� 기르기�위한�교육안을�제시하고�있기도�하다.� 최근�우

리나라� 초등학교교육도� 주제중심통합교과� 융합교육이� 화두가� 된� 것은� 사실이지만� 사실� 진짜로� 그렇

게� 하고� 있는� 곳은� 참� 드물다.� 실제로� 여러가지� 학교여건상� 참� 쉽지않으리라� 본다.� 융합형� 프로젝

트� 학습� 뿐아니라� 단순히� 프로그래밍� 교육만� 볼� 때에도� 쉽지� 않은� 것이� 기존의� 따라하기식� 강의법

을�벗어나는�것이다.�

-� 컴퓨팅�사고를�신장시키면�일상생활의�문제해결에�진짜�도움이�될까?�

단순히� 다른� 교과� 학습에� 이것이� 도움이� 될� 것인가를� 생각하는� 것에서� 벗어날� 필요가� 있다.� 우리의�

사고는� 그렇게� 단순하지는� 않다.� 문제� 해결� 능력은� 매우� 다양한� 상황에서� 필요한� 능력이다.� 심지어�

우리는� 우리� 생활� 전반에서� 우리가� 맞닥뜨리는� 관계� 또는� 마음의� 복잡한� 문제� 또한� 우리는� 면밀히�

분석해야� 할� 때가� 있다.� 그럴� 때,� 가만히� 우리의� 마음과� 상황을� 들여다보며� 그� 문제들을� 분해하고�

이해하고자�하는�과정을�습관적으로�할� 수� 있어야�한다.�

Page 42: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 42 -

물론� 구체적인� 학습� 상황에서도� 긍정적인� 영향은� 분명히� 있다.� 개인적으로는� 프로그래밍을� 했던� 경

험이� 나의� 논리적� 사고에� 지대한� 영향을� 미쳤다.� 이후� 이러한� 논리적으로� 생각하는� 습관은� 학습적

인�면에서는�논술이나�논문과�같은�논리적인�글을�쓰는데도�도움이�되었다고�확실히�느낀다.�

Page 43: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 43 -

피지컬 컴퓨팅 협력 프로젝트미래인재연구소�이진태

Page 44: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 44 -

Page 45: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 45 -

Page 46: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 46 -

Page 47: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 47 -

Page 48: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 48 -

스크래치(Scratch) 그리고 스냅(Snap!)

미래인재연구소�이진태

현재� 스크래치는� 현실세계의� 문제를� 찾아� 분석/분해하고,� 분해된� 조각에서� 패턴을� 찾아� 알고리즘

을� 만들어� 자동화를� 경험해� 볼� 수� 있는� 도구로서� 최고의� 지위를� 누리고� 있다.� 스크래치가� 가지고�

있는� 여러� 장점에� 대해서는�많은� 이들이�이야기하며�공감하고�있기에� 여기에서는�조금� 다른�이야기

를�해볼까�한다.

사실,� 스크래치가�목표로� 하는� 대상과� 추구하고자�하는� 철학적� 경계는� 분명하다.� 어린� 아이들에게�

개방,� 참여,� 공유,� 협력이라는� 문화� 속에서� 현실� 세계의� 문제� 해결� 과정을� 시뮬레이션� 해� 볼� 수� 있

도록� 해주는� 도구.� 자신의� 생각을� 논리적으로� 풀어� 표현해� 볼� 수� 있도록� 해� 주는� 도구다.� 단,� 이는�

스크래치가�가지고� 있는� 철학과� 목표로� 하는� 대상� 안에서� 이루어질�때� 빛을� 발할� 수� 있다.� 그� 경계

를�넘어가는�순간�오히려�부작용이�더� 커질�가능성이�있다.�

스크래치로� 스프라이트와� 블록� 스크립트를� 아주� 많이� 사용해� 복잡한� 프로그램을� 만들면� 이� 아이

는�논리적� /� 창의적�사고를�잘한다고�말할�수� 있을까?� 또는�컴퓨팅�사고를�잘� 한다고�말할�수� 있을

까?� 이� 질문에� 대한� 답을� 찾기� 위해� 현재� 국내외에서� 스크래치로� 만든� 프로젝트를� 분석하여� 평가�

준거를� 만들고� 완성된� 프로젝트�파일로� 해당� 아이의� 수준을� 시각적으로�보여주는�툴들이� 활발히� 개

발� 중이다.� 하지만� 스크래치가� 가지고� 있는� 대상� /� 철학적� 경계를� 넘어가는� 수준의� 프로젝트를� 분

석하는� 것이� 유의미할까� 라는� 의문을� 가져볼� 필요가� 있다.� 왜냐하면� 스크래치는� 다양한� 정보과학적�

사고와� 컴퓨터� 과학에� 대한� 지식을� 바탕으로�현실� 세계의�문제를� 효율적으로�풀어내기�위한�방법을�

충분히� 제공하지� 않기� 때문이다.� 물론� 밥숟가락으로� 흙구덩이를� 파는데� 적합하지� 않다고� 불평할� 수�

없듯이�이를�스크래치의�단점으로�볼�수는�없다.

오히려,� 스크래치를�모든� 이에게� 상상력,� 창의력,� 컴퓨팅� 사고력,� 코딩� 능력,� 융합적� 사고력� 등� 흔

히� 미래� 사회를�준비하기�위해� 필요하다고�이야기하는�모든� 것을� 완벽히�가르칠�수� 있는�만능�도구

로� 생각하지� 말고� 스크래치가� 의도한� 것� 이상의� 교육을� 하고� 싶으면� 다른� 도구를� 사용하라는� 무언

의�메시지는�아닌지�생각해�본다.

Snap! Build Your Own Block

스냅은 미국 UC 버클리대의 브라이언 하비(Brian Harvey)와 옌스 뫼니크(Jens Mönig)가 스크

래치에서 모티브를 얻어 개발한 교육용 프로그래밍 언어이다. 모티브는 스크래치에서 얻었지만

추구하고자 하는 철학과 대상은 분명하게 다르다.

Page 49: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 49 -

1. 프로그래밍 패러다임

스크래치는�이벤트� 주도,� 명령형�프로그래밍의�패러다임을�갖고�있으나� 스냅은�객체지향�프로그래

밍을�경험해� 볼� 수� 있는� 언어적� 특성을� 갖고� 있다.� 객체지향� 프로그래밍이� 기존의� 절차지향�프로그

래밍� 보다� 무조건적으로� 좋은� 패러다임이라고� 말할� 수� 있는� 것은� 아니나� 시대적� 변화와� 기존� 프로

그래밍�방법들의�단점을� 보완하여�발전시킨�개념으로�좀� 더� 고차원적인�컴퓨팅� 사고를� 바탕으로�현

실�세계의�문제를�시뮬레이션해�볼�수� 있다.

-ᅠ명령형 프로그래밍(Imperative programming)

선언형 프로그래밍과 반대되는 개념으로, 프로그래밍의ᅠ상태와 상태를 변경시

키는 구문의 관점에서 연산을 설명하는ᅠ프로그래밍 패러다임의 일종이다.ᅠ자연

언어에서의ᅠ명령법이 어떤 동작을 할 것인지를 명령으로 표현하듯이, 명령형 프

로그램은ᅠ컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이다.

-ᅠ사건 기반 프로그래밍(event-driven programming; EDP)

비주얼 베이직과 같이, 사용자의 명령, 마우스 클릭, 다른 프로그램의 메시지,

키보드 글쇠 입력 등의 '사건'에 따라,ᅠ제어 흐름이 결정되어 일을 하도록 하게

끔 만들어진 프로그래밍 언어 방식을 뜻한다.

-ᅠ객체 지향 프로그래밍(object-Oriented Programming, OOP)

컴퓨터 프로그래밍의ᅠ패러다임의 하나이다. 객체 지향 프로그래밍은ᅠ컴퓨터

프로그램을ᅠ명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위,

즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는ᅠ메시지를 주고

받고,ᅠ데이터를 처리할 수 있다.

<출처 : https://ko.wikipedia.org/wiki/프로그래밍_패러다임>

Page 50: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 50 -

2. 교육 대상

http://bjc.berkeley.edu/

스크래치가� 목표로� 하는� 대상은� 유치원�

및� 초등학생,� 프로그래밍을� 처음으로� 접

하는� 사람들이다.� 이에� 반해� 스냅은� 프로

그램� 초심자를� 포함한� 중/고급의� 수학� 및�

컴퓨터적� 아이디어를� 구현해보고자� 하는�

사람을� 대상으로� 한다.� 현재� UC� 버클리

대를� 중심으로� 미국의� 고등학생과� 대학생�

등� 컴퓨터과학� 비전공� 학생들에게� 컴퓨터�

과학�개론�수업에�활용하고�있다.�

3. 스냅의 언어적 특징

The most important features which differentiate it from Scratch, include:

1) first class functions or procedures (their mathematical foundations are

called also "Lambda calculus")

2) first class lists (including lists of lists)

3) first class sprites

(in other words prototype-oriented instance-based classless programming)

4) nestable sprites

5) codification of Snap! programs to mainstream languages such as

Python, JavaScript, C, etc

A data type is first class in a programming language if data of that type can be

√ the value of a variable

√ an input to a procedure

√ the value returned by a procedure

√ a member of a data aggregate

√ anonymous (not named)

A fundamental design principle in Snap! is that all data should be first class.

<출처 : http://snap.berkeley.edu/SnapManual.pdf>

Page 51: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 51 -

스냅은� 기본적으로� 모든� 데이터� 타입을� 1급� 객체로� 사용할� 수� 있다.� 예를� 들어,� 스크래치에서� 사

용하는� 숫자와� 문자열은� 1급� 객체라� 말할� 수� 있다.� 변수의� 값으로� 사용되기도� 하며,� 함수의� 매개변

수로� 사용할� 수도� 있고� 리턴� 값으로� 받을� 수도� 있다.� 그러나� 리스트의� 경우는� 좀� 다르다.� 리스트�

자체를� 변수의� 값으로� 사용할� 수는� 없으며,� 매개변수로� 전달하거나� 리스트� 안에� 리스트를� 넣을� 수�

없다.� 하지만� 스냅은� 가능하다.� 스냅은� 모든� 것을� 1급� 객체로� 간주하기에� 위에� 열거된� 다양한� 일들

을�할� 수� 있다.�

즉,� 스냅은� EPL의� 특징은� 그대로� 유지하면서도,� 우리의� 사고를� 좀� 더� 유연하게� 확장하고� 구조적

으로�짜임새�있는�프로그래밍을�경험할�수� 있도록�도와준다.

4. Build Your Own Block.

� 스크래치와� 스냅� 모두� 블록� 만들기를� 통해� 자신만의� 블록을� 만들어� 사용할� 수� 있다.� 그러나� 블

록� 만들기로� 만든� 블록의� 활용도는� 크게� 차이가� 난다.� 스크래치는� 하나의� 스프라이트� 안에� 명령들

을� 모아� 놓은� 블록을� 생성하고� 그� 스프라이트에서만� 사용자가� 만든� 블록을� 쓸� 수� 있다.� 즉,� 프로젝

트� 전반에� 걸쳐� 쓸� 수� 있는� 블록을� 사용자가� 직접� 생성하지� 못한다.� 하지만� 스냅은� 사용자가� 만든�

블록을� 프로젝트� 전체에서� 자유롭게� 사용할� 수� 있으며,� 이렇게� 만든� 블록을� 라이브러리화하여� 쉽게�

공유할�수� 있다.�

하나의�예로,� 위� 그림은�프로그래밍에서�가장�많이�쓰이는�구문�중� 하나인� for� 문을�사용자가�직접�

정의하여�만든�것이다.� 즉,� 스프라이트의�행동에�관련된�블록만이�아니라�프로그램에�일반적으로�쓰

이거나� 자주� 쓰는� 기능을� 블록으로� 만들� 수� 있는� 기능을� 제공한다.� 사실� 이는� 거의� 모든� 프로그래

밍�언어에서�너무도�당연하게�생각하는�부분이다.�

Page 52: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 52 -

5. 가능성

사실� 아무리� 좋은� 프로그램이라도� 지속적으로� 업데이트가� 안� 되거나� 콘텐츠가� 풍부하지� 않으면�

선뜻� 손이� 안� 가게� 마련이다.� 스냅은� 현재� UC� 버클리대의� 브라이언�하비를� 중심으로� 같은� 대학� 교

수인� 댄� 가르시아(Dan� Garcia)가� 커리큘럼� 연구� 및� 적용을� 활발히� 진행하고� 있고,� 옌스� 뫼니크

(Jens� Mönig)가� 주도하여� 지속적으로� GitHub(https://github.com/jmoenig/Snap—

Build-Your-Own-Blocks)에� 프로그램을� 업데이트� 하고� 있다.� 지금� 릴리즈된� 스냅의� 버전은� 4.0�

Beta� 이나,� 조만간� 베타� 딱지를� 떼고� 4.1� 버전이� 릴리즈될� 예정이라고� 하니� 이러한� 걱정은� 잠시�

접어둬도�괜찮을�듯� 싶다.� �

Page 53: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 53 -

Transforming High School CS

The Beauty and Joy of ComputingDan� Garcia

Page 54: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 54 -

Page 55: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 55 -

Page 56: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 56 -

Page 57: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 57 -

Page 58: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 58 -

Page 59: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 59 -

Page 60: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 60 -

Page 61: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 61 -

Page 62: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 62 -

Page 63: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 63 -

Page 64: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 64 -

Page 65: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 65 -

Page 66: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 66 -

Page 67: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 67 -

Page 68: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 68 -

Page 69: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 69 -

Page 70: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 70 -

The Beauty and Joy of Computing

Brian� Harvey

Page 71: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 71 -

Page 72: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 72 -

Page 73: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 73 -

Page 74: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 74 -

Programming is Cool Again

Brian� Harvey

Page 75: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 75 -

Page 76: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 76 -

Page 77: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 77 -

Page 78: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 78 -

Page 79: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 79 -

Page 80: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 80 -

Page 81: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 81 -

Panel Discussion

Computational Thinking & SW Education

Texas� Tech� University� Dr.� Jongpil� Cheon

Page 82: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 82 -

Page 83: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 83 -

Page 84: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 84 -

Page 85: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 85 -

Page 86: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 86 -

Page 87: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 87 -

Page 88: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 88 -

Page 89: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 89 -

Page 90: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 90 -

Page 91: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 91 -

Page 92: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 92 -

번역� :� 미래인재연구소(이진태,� 최상현,� 안준별,� 홍수빈,� 윤종원,� 서정원,� 조현룡,� 류미영)

Page 93: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 93 -

목�차�

I.� 블록,� 스크립트,� 스프라이트

� � � � � 가.� 스크립트

� � � � � 나.� 모자� 블록

� � � � � 다.� 명령블록

� � 1.� 스프라이트와�병렬화

� � 2.� 모양과�소리

� � � � � 가.� 모양

� � � � � 나.� 소리

� � � � � 다.� 방송하기를�이용한�스프라이트�간의�통신

� � 3.� 네스팅(중첩)� 스프라이트� :� 앵커(Anchors)와� 부품(Parts)

� � 4.� 리포터�블록과�표현식

� � 5.� 술어와�조건문

� � 6.� 변수

� � � � � 가.� 전역변수

� � � � � 나.� 스크립트�변수

7.� 기타� 사항

III.� 블록�만들기

� � 1.� 간단한�블록� 만들기

� � � � � 가.� 사각형�그리기

� � � � � 나.� 매개변수가�있는�블록� 만들기

� � 2.� 재귀

� � � � � 가.� 나무그리기

� � � � � 나.� 팩토리얼(factorial)� 함수

� � 3.� 블록�라이브러리

Ⅳ.� 퍼스트�클래스�리스트

� � 1.� 리스트�블록

� � 2.� 리스트의�리스트

� � 3.� 리스트�프로그래밍의�기능과�명령

� � 4.� 고차함수�리스트�작업과�링

V.� 입력�형식

� � 1.� 스크래치�형식�표기법(Scratch’s� Type� Notation)

� � 2.� SNAP� 입력� 형식� 다이얼로그(The� Snap!Input� Type� Dialog)

� � � � � 가.� 절차적�형식(Procedure� Types)

� � � � � 나.� 풀다운�입력(Pulldown� inputs)

� � � � � 다.� 변형� 입력(Input� variants)

� � � � � 라.� 힌트형�프로토타입(Prototype� Hints)

� � � � � 마.� 제목� 텍스트와�기호(Title� Text� and� Symbols)

Page 94: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 94 -

I.� 블록,� 스크립트,� 스프라이트

� � 스냅은� 스크래치에서� 영감을� 얻어� 작성된� 교육용� 프로그래밍� 언어입니다.� 스크래치와는� 다른� 스냅� 고유의�

특징을�가지고�있지만�사용법의�많은�부분이�스크래치와�유사합니다.� 스크래치�경험자는�이번�장을� 간단히�살

펴보고�넘어가도�됩니다.

� � 스냅은� 프로그래밍� 언어입니다.� 따라서,� 여러분이� 스냅으로� 컴퓨터에� 명령하면� 스냅은� 여러분이� 지시한� 대

로� 작동합니다.� 스냅은� 대부분의� 프로그래밍� 언어와� 달리� 시각적인� 프로그래밍� 언어입니다.� 키보드로� 타이핑

하여� 프로그램을� 작성하는� 것� 대신에,� 스냅은� 사용자에게� 친숙한� 드래그� 앤� 드롭같은� 인터페이스를� 사용합니

다.

� � 스냅을�시작하면�다음과�같은� 작업�영역을�볼� 수� 있습니다.

(각� 작업� 영역의�비율은�여러분의�브라우저�크기�및� 모양,� 해상도에�따라�달라질�수�있습니다.)

가. 스크립트

스냅�프로그램은�여러�블록으로�만들어진�스크립트로�구성됩니다.�

스크립트는�일반적으로�이와�같은� 모습을�갖고� 있습니다.

� � 스크립트는� 창의� 중간� 부분에� 있는� 스크립팅� 영역으로� 블록을� 드래그하여� 만들� 수� 있습니다.� 위� 스크립트

를� 구성하는� 5개의�블록은� 3개의�서로� 다른� 색상을�가지고� 있는데,� 이는� 각� 블록들의� 동작이�서로� 다른� 특징

을�가지고�있음을�나타냅니다.�

� � 스냅� 창의� 왼쪽� 모서리에는� 8개의� 구분되는� 블록� 팔레트가� 있으며� 블록을� 클릭함으로써� 각� 영역에� 해당하

는�명령�블록들을�불러올�수� 있습니다.

Page 95: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 95 -

� 이� 스크립트에서,� 금색� 블록은� 제어� 팔레트,� 녹색� 블록은� 펜� 팔레트,� 파란색� 블록은� 동작� 팔레트에� 가져온�

블록입니다.�

블록들은� 다른� 블록의� 탭처럼� 볼록� 튀어� 나온� 부분에� 드래그� 함으로써�

서로�연결됩니다.

하얀선은� 블록끼리� 서로� 연결될� 수� 있을� 경우� 나타나며,� 연결되는� 위치

를�파악하는데�도움이�됩니다.

나. 모자�블록

� � 위� 스크립트에서� 가장� 위에� 있는� 블록을� 모자� 블록이라� 부르며,� 이� 모자� 블록은� 스크립트가� 수행되어야� 할�

시기를� 나타냅니다.� 모자� 블록의� 이름들은� 일반적으로� “~일� 때”를� 가지고� 있습니다.� 위에� 사용된� 녹색� 깃발이�

있는�블록은�스냅�툴바의�오른쪽�끝에� 있는�녹색� 깃발을�클릭했을�때�실행됩니다.

� � 스크립트에� 모자� 블록이� 꼭� 있어야만� 실행이� 되는� 것은� 아닙니다.� 스크립트� 자체를� 클릭하여� 실행할� 수도�

있습니다.� 그러나� 하나로�연결된� 스크립트에�하나� 이상의�모자� 블록을� 사용할� 수는� � 없으며,� 모자블럭은� 항상�

스크립트의�가장�위쪽에�위치해야�합니다.

다. 명령블록

� � 이� 스크립트를� 통해� 알아야할� 또� 다른� 블럭은� 명령� 블록들입니다.� 스냅� 프로그램� 안에는� 이미� 각� 명령� 블

록이�어떻게�동작을�수행해야�하는지�프로그램�되어�있습니다.

� 예를� 들어,� 은� 스프라이트가� 바라보고� 있는� 방향으로� 10만큼을� 이동시킵니다.� (숫자� 10

은� 스테이지의�좌표를�기준으로� 10만큼의�거리를�말합니다.)

� � 스프라이트는� 여러� 개가� 스테이지에� 배치될� 수� 있으며,� 각� 스프라이트는� 자신만의� 스크립트를� 가지게� 됩니

다.� 또한� 스트라이트는� 반드시� 처음� 기본으로� 생성되는� 화살촉� 모양일� 필요는� 없으며,� 어떠한� 그림도� 스프라

이트가�될� 수� 있습니다.�

� � 블록의� 모양은� 여러분이� 레고를� 만들� 듯이� 부담없이� 쌓을� 수� 있도록� 하기� 위해� 고안되었습니다.� 스크립트

는� 블록들의� 모음입니다.� ("블록"이란� 단어는� 화면에� 보이는� 그래픽적인� 모양과� 함께� 블록이� 수행해야� 하는�

절차와�행동을�나타냅니다.)

� � 움직이기�블록�안에� 있는� 10� 이라는�숫자를�클릭하여�다른�숫자� 값을� 넣을� 수� 있습니다.� 물론� 희색� 타원모

양의� 자리에� 특정한� 숫자� 대신에� 여러� 변수� 값을� 넣어� 계산할� 수� 있습니다.� 한� 개� 이상의� 입력� 슬롯을� 가진�

블록들도�많이�있습니다.

� � 대부분의� 명령� 블록은� 그� 벽돌� 모양을� 갖지만,� 반복하기� 블록� 같은� 것들은� C자형의� 모양을� 갖습니다.� 대부

분의� C� 자형�블록은�제어�팔레트에�있습니다.� C� 자형의�내부�슬롯은�스크립트를�입력�받는� 특별한�종류의�슬

롯입니다.�

Page 96: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 96 -

1. 스프라이트와�병렬화

� � 무대에� 새로운� 스프라이트를� 추가하기� 위하여� 무대� 아래에� 있는� (새로운� 스프라이트� 추가하기)버튼을�

눌러보세요.�

� � 새로운� 스프라이트는� 방향,� 색깔,� 위치가� 랜덤하게� 생성되어� 무대에� 나타나게� 됩니다.� 스프라이트는� 각자의�

스크립트들을� 가지고� 있습니다.� 스크립팅� 영역에서� 특정� 스프라이트의� 스크립트를� 보려면,� 스프라이트� 울타리

에서�해당�스프라이트를�클릭합니다.�

� � 두� 개의� 스프라이트를�만들고�각각의�스프라이트에�아래의�스크립트를�넣어�보세요.

스프라이트1 스프라이트2

� � 녹색� 깃발을�클릭하면,�

� � 스프라이트� 하나는� 앞뒤로� 이동하고� 또� 다른� 스프라이트는� 회전하는� 모습을� 볼� 수� 있습니다.� 이� 예제는� 서

로� 다른�스프라이트의�스크립트들이�병렬로�실행되는�방법을�보여줍니다.

� � 또� 다른� 병렬화의� 모습은� 하나의� 스프라이트� 안에� 여러� 개의� 스크립트를� 넣어� 실행시킴으로써� 확인해� 볼�

수� 있습니다.�

� �

� � 스페이스� 키를� 누르면� 원� 안에서� 무한히� 회전하는� 스프라이트를� 볼� 수� 있습니다.� 이는� 이동과� 회전블록이�

병렬로�실행되기�때문입니다.

2. 모양과�소리

가. 모양

� � 스프라이트의�모습을�바꾸는�방법에는� 3가지가�있습니다.� 우선� 바꾸고자�하는�스프라이트를�선택하세요.� 그

리고�작업창의�모양탭을�선택하세요.

Page 97: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 97 -

1.� 미디어� 라이브러리에서� 원하는� 모양을� 선택할� 수� 있습니다.� 도

구모음에서� 파일� 아이콘을( )� 클릭한� 후,� “모양…”메뉴를� 선택

하세요.

2.� 컴퓨터에� 저장되어� 있는� 그림을� 불러올� 수� 있습니다.� 파일� 아

이콘을� 클릭하고,� “가져오기…”메뉴를� 선택하세요.� PNG,� JPEG� 등

과� 같은�그림파일�포맷을�선택할�수� 있습니다.�

3.� 원하는� 파일을� 스냅� 창으로� 드래그� 하세요.� 빠르게� 스냅으로�

그림�파일을�불러�올�수�있습니다.

원하는�파일이� 바탕� 화면에�표시되면� 세� 번째� 방법은� 빠르게�실행

할�수� 있습니다.� 스냅� 창에� 그� 파일을�드래그하여�옮기세요.�

� 여러분은� 하나의� 스프라이트에� 많은� 모양을� 넣을� 수� 있습니다.� 그리고� 스크립트에� 있는�

의� 블록이나 의� 블록을� 사용하여� 원하는� 모양을� 선택할� 수� 있습니다.� 모든� 모양은� 모양� 고유의� 이름

을� 갖으면서� 동시에� 순서� 값을� 가집니다.� 다음모양� 블록은� 모양이� 가지고� 있는� 순서� 값에� 따라� 스프라이트의�

모양을�바꿉니다.� 가장�마지막�모양에서는�처음모양으로�바뀝니다.�

� � 새로운� 스프라이트를� 생성할� 때� 기본으로� 만들어지는� Turtle(화살표)은� 모양� 번호값으로� 0을� 가지며,� 다음�

모양� 블록을�통해서는�다음� 모양으로�바꿀�수� 없습니다.� Turtle� 모양은� 스프라이트의�펜� 색깔� 값에� 따라� 같은�

색으로�바뀌는�유일한�모양입니다.

나. 소리

� � 하나의�스프라이트는�스크립트,� 모양과�함께� 소리라는�속성을�갖고� 있습니다.

� � 소리� 파일은�여러분의�브라우저에서�지원가능한�WAV,� OGG,� MP3� 등의� 형식을�사용할�수�있습니다.�

두� 개의�블록이�소리를�재생하는�작업을�수행합니다.

소리내기�블록은�나머지�스크립트가�실행되면서�소리가�재생됩니다.

끝까지� 소리내기� 블록은� 소리의� 재생이� 완료되면� 끝까지� 소리내기� 이후의� 스

크립트를�실행합니다.

� � 여러분은�스크립트가� 실행되는� 동안�소리가� 재생되기를� 원한다면� 블록을�사용할� 수� 있다.� 반대로,� 스크립트

의�나머지를�계속�실행하기�전에�소리� 재생이�완료되기를�기다리고�싶다면�블록을�사용할�수� 있다.

다. 방송하기를�이용한�스프라이트�간의�통신

� � 앞에서� 우리는� 동시에� 움직이는� 두� 스프라이트� 예를� 보았습니다.� 더욱� 재미있고� 흥미로운� 프로그램을� 만들

기�위해서는�무대�위의� 스프라이트들이�서로�이야기하고�게임하기�위한�상호작용을�해야�합니다.�

종종� 하나의� 스프라이트는� 스크립트를� 실행하기� 위해� 다른� 스프라이트에게� 이야기해야합니다.� 여기에� 간단한�

Page 98: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 98 -

예가�있습니다.

� 블록에서,� “bark”이란� 단어는� 임의로�만든� 이름입니다.� 여러분이� 입력� 슬롯� 오른쪽�화살

표를�클릭해서� “새로� 만들기”를�선택하면�새�방송의�이름을�입력할�수�있습니다.�

� � 이� 블록이�작동하면,� 선택한�메시지는�모든�스프라이트로�전송됩니다.� 위� 예에서�소년� 스프라이트는� bark를�

방송하고� 기다리는� 스크립트를� 가지고� 있습니다.� 소년의� 스크립트가� 방송하고� 기다리기를� 사용하기� 때문에,�

강아지의� 스크립트가� 완료될� 때까지� 다음의� 블록으로� 넘어갈� 수� 없습니다.� 방송하고� 기다리기를� 이용하여� 서

로�다른�스프라이트가�번갈아�가며� 대화를�이어갈�수�있습니다.

� 말하기� 블록에는� 사각형� 모양의� 입력� 슬롯이� 있습니다.� 이� 사각형� 모양의� 입력� 슬롯에는� 숫자� 뿐만이� 아니

라� 텍스트를� 입력할�수� 있습니다.� 텍스트�입력� 슬롯에서�공백은� 갈색� 점으로� 표시됩니다.� 이를� 이용하여� 입력

된�텍스트에�포함된�공백의�개수를�셀� 수도�있고,� 빈� 슬롯과�공백� 포함된�슬롯을�구분할�수도�있습니다.�

� � 블록이�실행될�때,� 갈색�점은� 무대에�표시되지�않습니다.

� � 무대에도� 스크립트를� 넣을� 수� 있습니다.� 스프라이트� 울타리의� 왼쪽에� 있는� 무대� 아이콘을� 클릭함으로써� 무

대를� 선택할� 수� 있습니다.� 스프라이트와� 달리� 무대에는� 동작블럭을� 넣을� 수� 없습니다.� 또한� 파일� 메뉴에서는�

모양� 대신에� 배경� 메뉴가� 나타납니다.� 배경은� 무대전체를� 채우게� 됩니다.� 그리고� 다른� 스프라이트들은� 항상�

무대�앞쪽에�나타납니다.� 무대에�넣은� 스크립트는�보통�프로젝트를�전반적으로�관리하기�위해�사용합니다.

3. 네스팅(중첩)� 스프라이트� :� 앵커(Anchors)와� 부품(Parts)

� � 종종� 함께� 움직이지만�분리될�수도�있는� 부분들로�구성된�일종의� “슈퍼� 스프라이트”� 같은� 것을� 만드는�것이�

좋습니다.� 일반적으로�사람의�몸은� 몸통,� 팔,� 다리,� 머리로�구성됩니다.

� � 스냅은� 특정� 스프라이트를� 부품처럼� 작동하는� 여러� 스프라이트를� 결합한� 앵커(Anchor)로� 지정할� 수� 있습

니다.� 스프라이트� 울타리에서� 부품� 스프라이트를� 드래그하여� 무대� 화면의� 원하는� 앵커� 스프라이트로� 드래그�

함으로써�네스팅(중첩)� 스프라이트를�만들�수� 있습니다.

� 스프라이트의�중첩은�앵커와�부품� 모두�스프라이트�울타리에�아이콘으로�표시됩니다.

스프라이트� 1� :� 앵커(Anchor)

스프라이트� 2� :� 부품(Part)

Page 99: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 99 -

� � 아래� 삽화에서처럼�알론조의�팔을�움직이게�하는�방법을�알아봅니다.

(알론조의�팔이�녹색인�이유는�두� 스프라이트간의�관계를�더� 분명히�나타태기�위해서다.� 다른� 이유는�없다.)

알론조의�몸을�나타내는�스프라이트� 1은�앵커입니다.� 스프라이트� 2는� 팔입니다.

� � 앵커의� 아이콘은� 아이콘� 아래� 부분에� 최대� 세� 개의� 연결� 부품� 이미지를� 보여줍니다.� 각� 부품의� 아이콘은�

왼쪽�상단� 모서리에�앵커의�작은� 이미지를�보여주고,� 오른쪽�상단� 모서리에는�회전�옵션� 표시를�보여줍니다.�

위� 그림에서� 보는� 것처럼� 초기� 설정은� 앵커� 스프라이트가� 회전� 할� 때� 이� 부품� 스프라이트는� 앵커� 스프라이트�

주변을�돌면서�동시에�방향을�바꾸며�함께� 회전합니다.

� � 회전옵션� 표시를� 클릭하여� 직선� 화살표로� 바꾸면� 앵커� 스프라이트가� 회전할� 때� 부품� 스프라이트는� 앵커� 스

프라이트� 주변을� 돌지만� 원래� 방향을� 유지합니다.� 부품� 스프라이트는� 회전하기� 블록을� 사용하여� 독립적으로�

회전할�수도� 있습니다.

� � 앵커� 스프라이트의�위치나�크기의�변화는�항상� 부품� 스프라이트에�영향을�미칩니다.

4. 리포터�블록과�표현식

� � 지금까지� 우리는� 모자� 블록과� 명령� 블록을� 사용� 했습니다.� 또� 다른� 종류의� 블록은� 타원형� 모양인� 리포터�

블록입니다( ).�

� � 리포터� 블록은� 어떠한� 행동을� 하는� 대신에� 다른� 블록의� 입력� 값으로� 사용되어� 질� 수� 있는� 값을� 가지고� 있

습니다.� 리포터�블록을�스크립트�영역으로�가져다�놓은� 다음�클릭하면�리포터�블록의�값이�말풍선에�표시됩니

다.

� � 다른� 블록의� 입력� 슬롯에� 리포터�블록을�가까이�가져가면,� 입력� 슬롯� 주위로�흰색� 박스가� 나타납니다.� 리포

터�블록의�값을� 다른�블록의�입력�값으로�사용할�수� 있다는�의미입니다.

Page 100: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 100 -

� � 다음은�리포터�블록을�사용하는�간단한�스크립트입니다.

x좌표� 블록은�말하기�블록의�첫� 번째�입력으로�사용하였습니다.�

(무대� 중앙(0,� 0)을� 기준으로� 왼쪽은� x좌표가� 음의� 값을� 갖고� 오른쪽은� 양의� 값을� 갖습니다.� y좌표도� 마찬가

지로� 무대� 중앙을� 기준으로� 위쪽은� 양의� 값을� 갖고� 아래쪽은� 음의� 값을� 갖습니다.� 무대의� 좌표� 크기는� 가로�

480,� 세로� 360입니다.)

연산�팔레트에서�리포터�블록을�이용하여�연산을�수행할�수�있습니다.

� � 반올림� 블록은� 리포터� 블록의� 값을� 소숫점은� 버리고� 정수형으로� 반올림합니다.� 그리고� +� 연산자� 블록을� 이

용하여�반올림한�값에� 100을� 더합니다.

(반올림� 블록은� +� 블록과� 함께� 연산� 팔레트에� 있지만� 밝기가� 조금� 다릅니다.� 스냅은� 같은� 팔레트에� 있는� 블

록끼리�중첩될�때�블록의�밝기를�변경하여�가독성을�높입니다.)

입력� 슬롯을� 가지고� 있는� 리포터� 블록은� 다른� 리포터� 블록을� 포함할� 수도� 있습니다.� 이를� 우리는� 표현식이라

고�부릅니다.

Page 101: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 101 -

5. 술어와�조건문

� � 대부분의�리포터�블록은�숫자와�문자열을�나타냅니다.( ,� )

리포터� 블록의� 또다른� 종류인� 술어는� 항상� 참� 또는� 거짓을� 표시합니다.� 술어� 블록은� 육각형� 모양을� 하고� 있

습니다.�

� � 이런� 특별한� 모양을�갖고� 있는� 이유는� 숫자나� 텍스트를� 넣어야�하는� 블록의� 입력� 슬롯에� 술어를� 넣지� 말아

야�하기�때문입니다.

� 스냅은� 여러분이� 저러한� 모습의� 스크립트를� 만다는� 것을� 못하게� 하지는� 않습니다.�

하지만�이와� 같은�스크립트는�제대로�동작하지�않습니다.

보통�아래� 그림처럼�육각형�모양의�입력�슬롯에�술어를�넣어� 사용합니다.

C자형� 조건블럭은� 육각형� 모양의� 입력슬롯에� 참� 값이�

들어갈�때� 안에� 있는�스크립트를�실행합니다.�

만약� 프로젝트를� 작업하고� 있는� 동안� 스크립트에서�

몇몇� 명령블럭들을� 일시적으로� 생략하고� 싶다면� 다음�

그림처럼�사용할�수도� 있습니다.

� � 여러분들은� 추가도구� 가져오기를� 통하여� 조건문을� 가지고� 있는� 리포터블록을� 사용할� 수도� 있습니다.�

� � 참� 또는� 거짓을� 프로그래밍� 언어로� “불린”값이라고� 합니다.� 이는� 불린� 값의� 수학적� 이론을� 개발한� 조지� 부

울이라는� 사람의� 이름에서� 유래했습니다.� 정리하면,� 육각� 모양의� 불럭은� 술어입니다.� 그리고� 이� 술어는� 불린�

값을�갖습니다.

Page 102: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 102 -

6. 변수

움직이기� 블록의� 입력� 슬롯에� 주황색� 타원이� 있습니다.� 이것은� for� 블록

의�주황색�타원을�드래그해서�넣은�것입니다.

주황색� 타원은� 변수입니다.� 변수란� 값을� 어떤� 값을� 나타내는� 하나의� 상

징이라고�생각해도�됩니다.

for� 불록은� 반복하기� 블록처럼� 안에� 품고� 있는� 스크립트들을� 반복적으

로� 실행합니다.� 하지만� 반복하기� 블록과는� 조금� 다릅니다.� 변수� i에� 첫�

번째� 입력� 슬롯의� 값이� 들어가고� 한� 번� 반복할� 때마다� i� 의� 값이� 1씩�

증가합니다.� 그리고� 두� 번째� 입력� 슬롯의� 값과� 같아질때까지만� 반복합

니다.� 그래서� 위� 스크립트에서는� for� 블록안의� 내용을� 200번� 반복합니

다.

위� 예에서� 각각의� 움직이기� 블록은� 점점� 더� 긴� 선을� 그립니다.� 회전을�

하며� 점점� 더� 긴� 선을� 그리므로� 다음과� 같은� 모습의� 그림이� 그려집니

다.� 회전� 각도를� 90으로�바꾸면�사각형�모양을�볼�수�있습니다.

� � 변수� i는� for� 블록에�의해� 생성됩니다.� 그리고� 그것은�블록의� C� 슬롯� 안에서만� 사용할�수� 있습니다.� 만약에�

i라는� 변수� 이름이�마음에�들지� 않는다면�주황색�타원을�클릭하여�바꿀�수�있습니다.�

� � i라는� 변수명은� 변수가� 하는� 일을� 표현하지� 못하므로� 변수의� 이름으로� 적당하지� 않을� 수도� 있습니다.� 오히

려� length� 같은� 이름이� 스크립트의� 목적에� 더� 어울릴� 수도� 있습니다.� 그러나� 전통적으로� for� 블록에� 사용하

는� 변수명를� i라고� 짓습니다.� 왜냐하면� 수학자들은� 정수값을� 표현하는데� I와� n� 사이의� 문자를� 쓰는� 경향이� 있

기� 때문입니다.� 그러나�꼭�저러한�문자만을�강요하지는�않습니다.� 쓰고� 싶은�문자를�써도�됩니다.

가. 전역변수

� � 여러분은� 하나의� 블록� 안에서만� 사용되는� 변수가� 아닌� 여러� 곳에서� 쓰일� 수� 있는� 변수를� 만들수도� 있습니

다.� 변수� 팔레트의�변수�만들기�버튼을�클릭합니다.

Page 103: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 103 -

� � 그러면�변수�이름을�적을�수�있는� 창이� 나타납니다.

변수를�만들� 때는� 2가지� 옵션이�있습니다.� 하나는�모든� 스프라이트에서�

쓸� 수� 있는� 변수를� 만드는� 것이고,� 또� 다른� 하나는� 현재의� 스프라이트

에서만� 사용하는� 변수를� 만드는� 것입니다.� 대부분은� 첫� 번째� 옵션인� 모

든� 스프라이트에서� 쓸� 수� 있는� 변수로� 생성합니다.� 하지만� 어떤� 경우는�

각각의�스프라이트에�같은�이름의�변수를�사용해야�하는�경우도�있습니

다.� 이럴� 때는� 현재의�스프라이에서만�쓰는�변수로�만들어야�합니다.�

� � 여러분이�변수의�이름을� “name”라고� 지었다면�변수�팔레트에서�다음과�같은�모습이�보일�것입니다.

� � 변수를� 하나� 이상� 만들면� 변수� 삭제하기� 버튼이� 나타납니다.� 그리고� 만든� 변수는� 주황색� 타원안에� 변수명

이� 표시됩니다.� 변수� 블록을� 스크립트� 작업� 창으로� 드래그� 하여� 원하는� 곳에서� 사용할� 수� 있습니다.� 변수명�

옆에는�체크박스가�있습니다.� 이� 체크박스를�이용하여�무대�화면에�변수� 값을�표시하거나�숨길�수� 있습니다.

변수에�새로운�값을� 넣기� 위해서는�변수에�저장하기�블록을�이용하면�됩니다.

변수�저장하기�블록의�드롭다운�부분을�클릭하면�변수�만들기를�통해�만들어진�모든�변수를�볼�수�있습니다.�

나. 스크립트�변수

� � 사용자와의� 상호작용이나� 게임� 점수� 같은� 곳에는� 일반적으로� 전역� 변수를� 만들어� 사용합니다.� 그러나� 때때

로� 우리는� 임시적으로,� 또는� 특정한� 스크립트가� 실행될� 동안만� 사용할� 변수가� 필요합니다.� 이럴� 때� 스크립트�

변수를�사용합니다.

� � for� 블록에서처럼� 스크립트� 변수� 블록에� 있는� 주황색� 타원을� 클릭함으로써� 변수명을� 바꿀� 수� 있습니다.� 그

리고�스크립트�변수�블록의�화살표를�클릭함으로써�변수를�추가하거나�삭제할�수� 있습니다.

7. 기타�사항

� � 이� 매뉴얼은�모든�블록을�자세하게�설명하지�않습니다.�

� � 여러분들은� 각� 블록들을� 직접� 다뤄보면서� 배울� 수도� 있고� 블록을� 오른쪽� 마우스로� 클릭하면� 나타나는� 블록�

도움말을� 보고� 배울� 수도� 있습니다.� 또한� 키보드에서� control+f를� 눌러� 검색창을� 통해� 원하는� 블록을� 찾아�

볼� 수� 있습니다.

Page 104: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 104 -

III.� 블록� 만들기

� Snap은� 원래� BYOB라는� 이름을� 가지고� 있었다.� 바로� “나만의� 블록을� 만들어� 보자”는� 의미를� 가진� “Build�

Your� Own� Blocks”의� 약자이다.� 스크래치에� 나만의� 블록을� 만드는� 기능을� 추가한� 것이� Snap의� 시작이었다.�

그렇기� 때문에� 새로운� 블록을� 만드는� 것이야� 말로� 스크래치와� 차별화되는� Snap의� 가장� 중요한� 기능이라고�

할� 수� 있다.

1. 간단한�블록�만들기

� 변수� 팔레트�하단에� “블록� 만들기”라는�버튼이�있다.�

� � � � �

� 이� 버튼을� 클릭하면� 블록의� 이름,� 모양,� 카테고리를� 선택할� 수� 있는� 대화상자가� 나타난다.� 또한� 블록을� 모든�

스트라이프에서� 사용할� 것인지(전역변수)� 또는� 현재� 스프라이트에서만� 사용할� 것인지(지역변수)를� 결정해야한

다.�

� ‘블록� 만들기’� 대화상자에서� 블록� 팔레트� 모양과� 이름을� 설정할� 수� 있다.� 만들고자� 하는� 블록이� 동작과� 관련

된� 속성을� 가지고� 있다면� 동작을� 선택하면� 되고� 그러면� 동작� 카테고리로� 블록이� 분류되어� 들어간다.� 그런데�

만들고자� 하는� 블록이� 어느� 카테고리에도� 속하지� 않는� 것이거나� 두� 가지� 이상의� 속성을� 모두� 포함하고� 있는�

것이라면� ‘기타’를�선택하면�회색블록이�만들어지고�변수�카테고리로�분류된다.� � �

� 블록의� 모양은� 커맨드,� 리포터,� 프레디키트� 세� 가지� 중에서� 선택할� 수� 있다.� 이중� 직소(jigsaw)� 퍼즐� 모양이�

‘커맨드’형� 블록이다.� 이� 블록은� 정의된� 명령을� 실행할� 뿐� 리터값을� 표시하지는� 않는다.� 타원형으로� 생긴� 것이�

‘리포터’형� 블록은� 정의된� 명령을� 수행한� 후에� 발생하는� 리턴값을� 표시한다.� 육각형� 모양의� 블록이� ‘프레디키

트’형� 블록인데�참(true)� 또는�거짓(false)� 두� 가지�값만을�표시한다.� � � �

※� 블록� 만들기� 창을� 실행시키는� 또� 다른� 방법은� 스크립트� 영역에서� 우클릭했을� 때� 나타나

는�제어창에서� “블록� 만들기”를�클릭하여�만들�수도� 있다.

Page 105: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 105 -

가. 사각형�그리기

� � 사각형을� 그리는� ‘사각형’이라는� 블록을� 만들고자� 한다면� 파란색� 동작카테고리를� 선택하고� 블록형태는� ’커맨

드‘형으로� 지정한다.(그리기� 속성이� 있음으로� ’펜‘이나� ’기타‘� 카테고리를� 사용해도� 무방하겠다.)� 이름� 필드에� "

사각형"이라고� 입력하고� [확인]을� 클릭하면� 블록� 편집기가� 실행된다.� 편집기가� 실행되면� 새로운� 형태의� 모자

블록이� 보일� 것이다.� 이� 블록은� “이� 블록이� 클릭되었을� 때� 아래� 명령을� 실행한다.”� 라는� 의미가� 담겨있다.� 이

러한� 모자� 블록을� 내가� 만든� 블록의� ’프로토타입‘이라� 부른다.� 이제� 이� 블록을� 정의하기� 위해서� 그림과� 같이�

모자블록�아래쪽에�블록들을�조립하고� [확인]을�클릭하기만�하면�블록이�완성된다.

� 이제� ‘사각형’블록은� 동작� 카테고리(파란색)에서� 확인할� 수� 있다.� 이� 블록을� 실행하면� 아래와� 같은� 정사각형

이�그려진다.�

Page 106: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 106 -

나. 매개변수가�있는�블록� 만들기

� 사각형을� 그릴� 때� 내가� 원하는� 크기로� 만들고자� 한다면� 사각형의� 크기에� 해당하는� 값을� 변로� 처리해� 주어야

할�것이다.� 이와같이�매개변수가�포함된�블록을�만들기�위해서는�블록�위에서�컨트롤키를�누른�상태에서�마우

스를� 클릭(Ctrl+Click)� 주어거나� 마우스� 우클릭을� 하고� “편집”을� 선택하면� 블록� 편집기가� 열린다.� 모자블록에

서�블록이름�앞뒤에�더하기(+)표시가�있다.� 이중� 오른쪽에�있는� ‘+’를� 클릭하면� ‘입력� 이름�생성’� 창이�열린다.� �

� �

� 이름� 텍스트� 상자에� “크기”라고� 입력한다.� 아래쪽에� ‘제목� 텍스트’� 와� ‘입력� 이름’� 두� 가지� 선택사항이� 있는데�

‘제목� 텍스트’는� 블록이름에� 다른� 단어가� 추가되게� 하는� 기능이� 있다.� ‘입력� 이름’을� 선택하면� 제목� 텍스트에� �

“(� )만큼� 움직이기”� 블록과�같은� 입력� 슬롯이�만들어�진다.� ‘‣’� 모양의� 아이콘을�클릭하면�더욱�많은� 옵션이�나타나는데� 이는� 뒤쪽에서� 자세하게� 다루도록� 하겠다.� 확인을� 클릭하면� 아래와�같이� ‘사각형’이라는�블록이름�뒤

에� ‘크기’라는� 매개변수가�추가된다.

이제�주황색� ‘크기’� 를� 매개변수로�지정하고자�하는�곳으로�드래그�앤�드롭하고�확인을�클릭한다.�

� � �

동작�블록� 팔레트를�확인해�보면� 아래와�같이� 블록의�형태가�바뀌는�것을� 확인할�수� 있다.�

Page 107: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 107 -

2. 재귀

� 새로운� 블록을� 만들� 때� ‘블록� 편집기’가� 실행되자마자� 새로운� 블록이� 블록팔레트에� 나타나기� 때문에� 블록을�

정의할�때� 자기� 자신을�사용하는�재귀적인�블록을�만들� 수� 있다.� �

가. 나무그리기

� �

� 위� 그림과� 같이� 멋진� 나무� 그림을� 그릴� 때� 재귀를� 사용하였다.� 재귀를� 사용할� 때에는� 재귀가� 실행될� 수� 있

는� ‘최소� 실행값(base� case)’을� 정해주어야� 합니다.� 이를� 설정해� 주지� 않으면� 재귀문은� 자기� 자신을� 끊임없이�

호출하여� 무한히� 실행됩니다.� 예를� 들어� 이� 예제에서‘depth=0’인� 경우에는� 조건문을� 만족하지� 못하기� 때문에�

아무것도� 실행되지� 않습니다.� 그런데� 스크립트를� 둘러싸고� 있는� 조건문이� 없다면� ‘depth’에� 어떠한� 값을� 입력

하더라고�재귀문은�실행을�멈추지�않을� 것이다.

� 이제� 재귀문을� 이해하고� 어떻게� 실행되는지� 알아보기� 위해� 스크립트를� 하나하나� 따라가며� 순차적으로� 살펴

보고자� 한다면� 너무나� 복잡해서� 금방� 포기하게� 될� 것이다.� 재귀문을� 조금� 더� 쉽게� 이해하기� 위해서� 이런� 식

으로� 생각해� 보자.� 내가� 위과� 같은� size=100,� depth=6� 인� 나무그림을� 그리기� 위해서� 먼저� 크기(size)� 100

만큼의� 가지를� 그린다.� 그리고� 나머지를� 그리기� 위해� A를� 고용해서� size=70,� depth=5인� 나무를� 그리게� 하

고,� B를� 고용해서� � size=70,� depth=5인� 나무를� 그리게� 한다.� A와� B는� 각각� 크기� 70만큼인� 가지를� 그리고�

나머지�부분을�그리기�위해서� A는� A-1과� A-2을� B는� B-1과� B-2를� 고용한다.� 이런�식으로�각자� 서로� 다른�변

수값을�가지고�가지를�그리는�것이다.�

Page 108: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 108 -

나. 팩토리얼(factorial)� 함수

� 팩토리얼�함수를�나타낼�때에는�아래와�같이� 재귀� 리포터를�사용할�수� 있다.�

‘커맨드’형� 블록과�달리� ‘리포터’형� 블록을�정의하는�스크립트가�조건에�따라� 특정한�값이� 더�이상� 평가되지�않

게� 되면� 실행을� 멈추고� 리턴값을� 출력한다.� 위와� 같이� ‘만약� 아니면(if� else)’� 블록을� 사용할� 경우에는� 조건을�

만족할� 경우(n=0� 일� 때)� 첫� 번째� 출력하기� 블록에� 있는� 값만� 출력되고� 아래에� 있는� 출력하기� 블록은� 실행되

지� 않는다.� n이� 0보다� 클� 경우에는� 최초에� ‘아니면(else)’� 블록� 안에� 있는� 두� 번째� 출력하기가� 실행된다.� 그리

고� n의� 값은� 1씩� 줄어들며� n=0� 일� 때까지� 재귀문이� 실행된다.� 그렇기� 때문에� 여기에서� ‘만약� 아니면(if�

else)’� 블록은�마치� ‘블록�멈추기’� 블록과�같은�역할을�수행한다.

� 여기에�팩토리얼�함수를�더욱�간단하게�표현할�수� 있는�방법이�있다.

� ‘제어’� 카테고리에� � 블록이� 없다면� 를� 클릭하고� ‘추가도구� 가져오기’를�

선택하면�새로운�블록들이�나타난다.

3. 블록�라이브러리

� 프로젝트를� 저장하면� 내가� 만든� 모든� 블록도� 함께� 저장된다.� 하지만� 가끔� 다른� 프로젝트를� 만들� 때� 도움이�

될� 만한� 블록들의� 조합이� 필요할� 수도� 있다.� 이를� 위해� ‘블록� 내보내기’� 기능을� 사용하여� 블록� 라이브러리를�

구성할� 수� 있다.� 파일� 메뉴에서� “블록� 내보내기”를� 선택하고� 생성된� XML� 파일을� 다운로드� 하였다가� 필요할�

때� ‘가져오기’를� 클릭하거나� XML파일을� Snap!으로�드래그�앤� 드롭하여�블록을�가져올�수�있다.� �

Page 109: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 109 -

Ⅳ.� 퍼스트�클래스�리스트

만약�데이터가,

●� 변수의�값

●� 파라미터(매개변수)의�입력

●�파라미터(매개변수)로�전달

●�반환�값으로�사용

●�익명� (이름과�관계없음)

이� 될� 수� 있는�경우� 데이터�형식은�프로그래밍�언어에서�퍼스트�클래스(first� class)이다.

� � 스크래치에서� 숫자와� 텍스트� 문자열은� 퍼스트� 클래스이다.� 당신은� 블록에� 1을� 넣어� 변수에� 숫자를� 넣고� 리

포터를�불러�숫자를�리포트�하거나,� 리스트에�숫자를�넣을�수�있다.

� � 그러나� 스크래치의� 리스트에는�퍼스트�클래스가�없다.� 당신은� "리스트�만들기"버튼을� 사용하여� 리스트를�생

성하며� 리스트에� 이름을� 지정해야� 한다.� 당신은� 블록의� 입력� 슬롯� 속이나� 리스트� 아이템� 내부의� 변수에� 리스

트를� 넣을� 수� 없다-리스트의� 리스트를� 가질� 수� 없기� 때문이다.� 스크래치� 리포터는� 리스트의� 값을� 리포트하지�

않는다.� (당신은�리스트의�축소를�사용하여� 다른� 블록에�텍스트�문자열을� 넣을� 수� 있지만�리스트� 구조를�잃게�

된다;� 입력은�텍스트�문자열이어야�하며�데이터�집합이어서는�안�된다.)

� � 스냅의� 기본� 설계� 원리는� 모든� 데이터가� 퍼스트� 클래스이어야� 한다는� 것이다.� 만약� 그것이� 언어라면,� 우리

는� 완전히� 자유롭게� 그것을� 사용할� 수� 있다.� 우리는� 이� 원리가� 많은� 특별한� 경우의� 도구들을� 사용하는� 것을�

피하게�할� 것이며,� 스냅� 사용자들에�의해�작성될�수�있을� 것이다.

� � 그것이� 퍼스트�클래스가�아닌�개별� 값의� 데이터�형식이라는�점에�유의하라.� 예를� 들어,� 어떤� 리스트가�퍼스

트�클래스라면�다른�것이라�아니라고�생각하지�않아야�한다.� 스냅에서�리스트는�퍼스트�클래스이며�그� 자체이

다.�

1. 리스트�블록

� � 퍼스트� 클래스의� 리스트가�제공하는�핵심적인�요소는� 동시에� 이름을� 부여하지� 않고� 리스트를�만드는� '익명'

리스트를�만들�수�있는� 능력이다.� 리스트�리포터�블록은�그것을�수행한다.

� �변수�팔레트에�나타난다.

리스트의�개체들이�모두�같은� 유형일�필요는�없다.

� �왼쪽�화살표를�누르면�빈�리스트를�만든다.

Page 110: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 110 -

� � 블록의� 오른쪽에� 2개의�좌우� 화살표가�있다.� 이것들을�클릭하면�리스트에� 숫자를�바꿀� 수� 있다.� 즉,� 당신이�

만든�리스트�구성요소들의�수이다.

� � 당신은�이� 블록을�다양한�다른� 블록들에�넣어서�사용할�수� 있다.

� � 스냅은� 스크래치가� 가진� 것과� 같은� "목록� 만들기"버튼이� 없다.� 당신이� 전역� 명명� 리스트가� 필요한� 경우는�

전역�변수를�만들고�설정� 블록을�사용해�변수에�리스트를�넣어야한다.

2. 리스트의�리스트

� � 리스트는� 더� 큰� 리스트의� 구성요소로� 넣을� 수� 있다.� 필요에� 따라,� 우리는� 쉽게� 특별한� 구조를� 만들� 수� 있

다.

� �

� � 우리는� 또한� 필요한� 경우� 구축자(구조의� 예를� 만들어주는� 블록),� 선택자(구조의� 일부를� 끌어내는� 블록)� 그

리고� 변경자(구조의� 내용을� 바꾸는� 블록)을� 정의함으로써� 고전적� 컴퓨터� 과학� 데이터� 구조� 중� 하나인� 리스트

의� 리스트를� 만들� 수� 있다.� 아래는� 우리가� 이진� 트리를� 선택자를� 통해� 만들� 때� 올바른� 데이터� 형식이� 입력되

었는지� 확인하는� 것이다;� 하나의� 선택자는� 구조체의� 내용.� 여기에� 올바른� 데이터� 형식의� 입력을� 확인� 선택기�

이진�트리를�만든다.� 하나의�선택자가�나타나지만�좌우의�자식들은�비슷하다.

Page 111: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 111 -

3. 리스트�프로그래밍의�기능과�명령

� � 프로그램� 내부의� 리스트을� 만들기� 위한� 두� 가지� 방법이� 있다.� 스크래치� 사용자는� 명령� 블록의� 집합에� 따라�

리스트를�수정하는�명령�프로그래밍�스타일을�잘� 알고� 있을�것이다:

� � 예를� 들어,� 여기에서는� 숫자�입력으로�이루어진� 리스트를� 가져오는� 블록이며,� 원래� 리스트에서� 짝수만� 포함

된�새로운�리스트를�보고한다.

Page 112: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 112 -

� � 이� 스크립트에서는� 먼저� 임시� 변수를� 만들고� 빈� 리스트를� 넣은� 뒤,� ...을(를)� (결과)위치에� 추가하기� 블록을�

사용하여� 입력� 리스트의� 항목을� 통과시켜� 결과� 리스트를� 수정한� 후� 한� 번에� 항목� 하나씩을� 추가하고� 마지막

으로� 결과를� 보고한다.� 함수형� 프로그래밍은� 또� 다른� 접근이다.� "현실� 세계"� 프로그래밍은� 병렬� 구조이기� 때

문에� 더욱� 중요해지고� 있다.� 즉,� 실제로� 다른� 프로세서들이� 동시에� 같은� 데이터를� 조작할� 수� 있다는� 것이다.�

이것은�문제와�관련해�변이(변수와�관련된�값을� 바꾸는�것)를�이용하여�만들기�때문에�이�이벤트의�정확한�배

열을� 아는� 것은� 불가능하고,� 따라서� 변이의� 결과는� 프로그래머가� 기대한� 것이� 아닐� 수도� 있다.� 하지만� 병렬�

처리를� 제외하고라도� 함수형� 프로그래밍은,� 특히� 재귀로� 정의된� 데이터� 구조를� 다룰� 때� 때때로� 간단하고� 더�

효과적인�기술이다.� 이것은�리스트의�값을�만들기�위해�명령� 블록이�아닌� 리포터�블록을�사용한다.

� � 함수형� 프로그램에서는� 우리는� 종종� 한� 번에� 하나의� 아이템을� 구축하는� 리스트를� 위해� 재귀를� 사용한다.�

맨� 앞에� 추가하기� 블록은� 하나의� 리스트에� 원래� 리스트의� 값을� 변경하지� 않고� 기존� 목록의� 맨� 앞에� 있는� 하

나의� 항목을� 추가하도록� 한다.� 비어있지� 않은� 리스트는� 첫번째� 항목(1번째� 항목)과� 모든� 나머지(첫� 번째� 항목�

제외하기)를� 분할하여�재귀�호출로�처리된다.

� � 스냅은� 리스트의� 두� 가지� 내부� 표현이� 있는데,� 명령형� 프로그래밍을�위한� 것(동적� 정렬)과� 함수형� 프로그래

밍을� 위한� 다른� 하나(연결된� 리스트)가� 있다.� 각� 표현은� 내장된� 리스트� 블록(명령� 또는� 리포터� 각각)에� 대응

하도록� 한다.� 같은� 프로그램에서� 스타일을� 혼합� 할� 수� 있지만,� 동일한� 목록이� 두� 가지� 방법을� 사용하는� 경우,�

하나의� 표현에서� 또� 다른� 하나의� 표현으로� 반복적으로� 변환되기� 때문에� 프로그램이� 더� 느리게� 실행된다.� (� ()

번째� 항목([]에� 대한)� 블록은� 표현을� 변경하지� 않는다.)� 당신은� 내부� 표현을� 자세하게� 알� 필요는� 없지만� 일관

된�방식으로�각� 목록을�사용하는�것을�아는�것은� 그만한�가치가�있다.

Page 113: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 113 -

4. 고차함수�리스트�작업과�링

리스트에서�짝수를�선택하기�위한�더�쉬운� 방법이�있다:

(변수� 팔레트� 아래에� keep� 블록을� 가지고� 있지� 않은� 경우는� 툴바의� [파일]버튼을� 클릭하여� "추가� 도구� 가져

오기"� 선택한다.)

� � keep� 블록은� 첫� 번째� 입력으로� 프레디키트� 표현을,� 두� 번째� 입력으로� 목록을� 가져온다.� 이것은� 프레디키트

가� true를� 반환하면� 입력� 명부에� 그� 요소를� 포함한� 리스트를� 보고한다.� 프레디키트를� 입력할� 때� 주의할� 점�

두� 가지이다.� 첫째,� 이것은� 그� 주위에� 회색� ring을� 가지고� 있다.� 둘째,� mod� 블록은� 빈� 입력을� 가지고� 있다.�

keep은� 프레디키트가� 평가하기� 전� 빈� 입력� 안에� 한번에�입력� 리스트의� 각각의� 항목을�넣는다.� (빈� 입력은� 초

등학교� 때� 배운� "상자"� 변수의� 표기를� 떠올려� 보아라� :�☐ +� 3� =� 7)� 팔레트에� 표시되는� 회색� 링은� keep� 블록의�일부이다:

� � 링이� 의미하는� 것은� 이� 입력이� 그� 블록에� 의해� 보고된� 값을� 대신한� 블록(반지의� 내부는� 육각형이기� 때문에�

이� 경우�프레디키트�블록)이라는�것이다.� 이것의�차이점은�다음과�같다.

� � � � �

� � 링이� 없는� 블록은� 참� 또는� 거짓을� 보고하는� 것을� 평가하고,� 링이� 있는� 블록은� 블록� 자체를� 보고한다.� 이것

은� keep이� =� 프레디키트의� 각� 리스트� 항목을� 하나씩� 반복해서� 평가하는� 것을� 허가한다.� 하나의� 블록은� 다른�

블록을�입력으로�가지는데�이것을�고차� 블록(또는�상위� 입력으로�다른�블록을�가지고�블록이�상위� 블록� (또는�

상위�순서,� 또는�고차� 함수)라고�한다.

� � 스냅은�리스트에서�동작하는�세�가지� 고차� 블록을�제공한다.

� � 당신은� 이미� keep를� 살펴보고�왔다.� map은� 리포터� 블록과�리스트를�입력으로�가진다.� 이것은�새로운� 리스

트를� 보고하며� 각각의� 항목은� 리포터� 블록이� 보고한� 입력� 리스트에서� 적용되는� 하나의� 항목� 값이다.� 그것은�

한마디이지만,� 단� 하나의�예는� 그� 의미를�명확하게�한다.

Page 114: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 114 -

� � 그런데� 우리는� 연산의� 예를� 사용하여� 왔지만,� 리스트� 항목들은� 어떠한� 유형,� 그리고� 어떠한� 리포터도� 사용

할�수� 있다.� 우리는�어떤� 단어의�복수형을�만들�것이다.

� � 이� 예제에서는� 페이지에� 맞게� 작은� 리스트을� 사용하고� 있지만,� 고차� 블록은� 모든� 크기의� 리스트에서� 작동

한다.

� � map� 블록은�우측� 끝에�화살표를�가지고�있는데�다중�리포터�식과� 동시에�여러� 동일한�길이의�목록을�통해�

매핑을� 가능하게� 하는� 거의� 사용되지� 않는�기능� 때문이다.� 지금은�그것에� 대해� 걱정하지� 않아도� 된다.� 당신은�

식을�드래그하여�화살표가�아닌�리스트�입력� 슬롯에�정확히�넣기만�하면�된다.

� � 세� 번째� 고차� 블록은� combine이다.� 두개의� 입력� 리포터를� 그것의� 처음에� 넣어서� 리스트의� 모든� 항목에서�

한� 가지�결과를�계산한다.� 사실,� 당신이� combine과�사용할�블록은�몇� 개� 밖에� 없다.

� � 이� 블록은� 리스트� 항목의� 합,� 그것들의� 생산물,� 낱말� 하나에서의� 문자열을� 가져와서� 그것들을� 하나의� 문장

(항목들� 사이의� 공백과� 함께)으로� 결합하여� 불리언� 리스트에서� 모든� 항목이� 참� 또는� 어떤� 항목이� 참일� 때� 그

것을�보여준다.

� � Why� +� but� not-?� 이것은� 연합� 함수를� 사용하여� 리스트�항목을� 결합하는� 것에만�관여한다.� 결합한�항목의�

순서(왼쪽에서� 오른쪽� 또는� 오른쪽에서� 왼쪽)에는� 신경� 쓰지� 않는다.� (2+3)+4=2+(3+4)� 이지만� (2-3)-4≠

2-(3-4)이다.

Page 115: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 115 -

V.� 입력� 형식

1. 스크래치�형식�표기법(Scratch’s� Type� Notation)

스크래치� 블록의� 입력에는� 두� 가지� 형식들이� 있다.� 첫� 번째는� 텍스트-숫자� 형식(Text-or-number� type)이고� �

두� 번째는� 숫자(Number� type)� 형식이다.� 전자는� 사각형� 모양의� 상자로,� 후자는� 둥근� 모양의� 상자로� 표시된

다.� :�

� 세� 번째� 스크래치�유형인�블린(Boolean-참/거짓)은�육각형�슬롯으로�특정�제어� 블록으로�사용된다.�

� SNAP의� 유형은� 절차(Procedure),� 리스트(List),� 개체(Object)� 형식을� 포함한� 확장된� 모음이다.� 절차� 형식을�

제외하고�모든�입력� 형식은�블록� 모양을�보고� 어떤� 기능을�하는지�알�수�있도록�되어�있다.�

2. SNAP� 입력�형식�다이얼로그(The� Snap!Input� Type� Dialog)

� 블록� 편집기�입력창에서� "입력�이름(Input� name)"� 오른쪽�화살표를�클릭하면,�

아래처럼�긴� 형태의�입력명�대화창을�볼�수�있다.�

� 제목� 텍스트와� 입력� 이름과� 같은� 기본적인� 선택에� 12가지� 입력� 형식들이� 있으며,� 서로� 다른� 세가지� 카테고

리를� 선택할� 수� 있다.� 아무� 것도� 선택하지� 않으면� 기본� 설정(The� default� type)이� 된다.� 기본� 설정은� 입력�

슬롯이� 어떠한� 형식의� “어떠한”� 변수든지� 받아� 들일� 수� 있다.� 만약에� 크기(size)를� 입력한다면,� 일반적인� 사각

형�모양의�슬롯이�아니라�타원형�모양의� “숫자”� 슬롯을�클릭해야�한다.

Page 116: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 116 -

� 입력� 형식들의� 배치는� 체계적이다.� 아랫쪽의� 두� 사진에서� 알� 수� 있듯이,� 12가지� 슬롯은� 행과� 열에� 따라� 카

테고리로�나눠져�있다.� 이러한�배열을�이해한다면�원하는�형식을�좀�더�쉽게� 찾을� 수� 있을�것이다..�

� 입력� 형식에서� 두� 번째� 행은� 숫자,� 아무타입,� 블리언처럼� 스크래치에� 있는것들로� 되어있다.� (이렇게� 배치한�

까닭은� 열� 배열을� 볼� 때� 첫� 번째보다� 두� 번째� 행에� 있는� 것이� 더� 눈에� 잘띄기� 때문이다.)� 첫� 번째� 행은� 절차

적� 형식� 이외의� 다른� 종류들의� 스냅� 형식들이다.� :� 개체,� 텍스트,� 리스트가� 그것이다.� 마지막� 두� 행은� 절차와�

관련된�형식으로,� 아래에서�좀� 더� 논의하겠다.

� 리스트� 형식은� 첫� 번째� 클래스� 리스트들을(first� class� lists)� 위해� 사용되는데,� 이는� IV� 장에서� 논의하였다.�

입력� 형식들이� 빨깐� 사각형인� 까닭은� 스냅에서� 리스트들을� 스테이지에� 나타낼� 때� 각각의� 요소들이� 빨간� 사각

형�모양이기�때문이다.

객체�형식은�곧� 만들어질�스냅� 4.1에서�첫�번째� 클래스�스프라이트들로�예정되어�있다.

텍스트�형식은�아무타입의�변형�형태로�텍스트를�입력할�때�사용된다..2)

가. 절차적�형식(Procedure� Types)�

� 뒤에서� 절차적� 형식들을� 더� 논의하겠지만� 미리� 설명하자면,� 그들은� 입력� 형식에서� 열의� 체계를� 이해하는� 중

요한� 열쇠이다.� 스크래치처럼� 스냅은� 세� 가지의� 블록� 모양을� 가지고� 있다.� :� 명령(command)를� 위한� 직쏘퍼

즐조각� 모양,� 리포터(reporters)를� 위한� 타원형,� 프레디키트(predicates)를� 위한� 육각형� 모양이� 그것이다.� (프

레디키트란� 항상� 참� 혹은� 거짓을� 리포터하는� 것이다.)� 스냅에서� 이러한� 블록들은� 첫� 번째� 클래스� 데이터(first�

class� data)이다.� ;� 블록에� 대한� 입력은� 커멘드� 형식,� 리포터� 형식,� 또는� 프레디키트� 형식이� 될� 수� 있다.� 어떠

한� 값도� 리포터하지� 못하는� 커멘드� 형식을� 제외하고는� 이러한� 형식들� 각각은� 리포터하는� 종류의� 값을� 나타내

는� 형식에� 포함된다.� 따라서� 타원형의� 리포터는� 아무� 타입과� 관련되고,� 육각형의� 프레디키트는� 불리언(참/거

짓)형식과�관련된다.�

2)2) 스크래치에서 텍스트 형식의 입력을 가지고 있는 모든 블록은 텍스트를 위한 사각형을 높게 보다는 넓게 만드는 기본 값을 가지고 있다. 특별히 텍스트에 대한 것이 아닌 블록들은 숫자 형식이거나 기본값을 갖지 않기 때문에 그러한 사각형들은 넓게 되기 보다는 높게 된다. 처음에 우리는 텍스트가 항상 넓은 입력 슬롯을 갖는 별도의 유형이라고 생각 했다. ; 스크래치에서는 그렇지 않다는 것으로 밝혀졌다. (기본값 텍스트와 좁은 사각형 삭제) 그러나 우리는 어쨌든 그것이 좋은 아이디어라고 생각했기 때문에 텍스트 모양의 상자를 텅 빈 입력 슬롯에도 쓸 수 있도록 허용하였다. (이것이 입력 형식 선택 상자 위로 텍스트가 올라오는 까닭이다.

Page 117: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 117 -

� 네� 번째� 행의� 평가되지� 않은� 절차적� 형식(unevaluated� procedure� type)은� 아래의� VI.� 섹션에� 설명되어� 있

다.�

� � 손가락물결(handwavy)로� 된�하나의�문장은�절차적�형식의�의미들과�두� 행들보다�높이�있는� 리포트값�형식

의� 외관들로� 결합되어� 있다.(물론� 이것은� 커멘드(C-모양)� 입력� 유형에는� 옳지� 않다.� 왜냐하면� 커멘드는� 값을�

보고하지�않기�때문이다.� 그러나�당신은�나중에는�옳다고�생각하게�될� 것이다.)�

나. 풀다운�입력(Pulldown� inputs)

특정� 기본� 블록은� 풀다운� 입력을� 가지고� 있는데� 이는� 아래처럼� ~에� 닿았는가?� 블록에� 들어가는� 입력처럼� 읽

기�전용이다.� :�

� (입력�슬롯은�블록�본체와�같은�색-위� 경우는�파랑색-으로�표시된다.)�

또는� ~도� 방향보기�블록처럼�쓰기가�가능하다.� :� �

(백색� 입력� 슬롯으로�표시된다.)�

사용자가�풀다운�메뉴를�사용하는�대신�임의의�입력을�할� 수� 있음을�의미한다.

사용자� 정의� 블록� 또한� 이러한� 입력을� 할� 수� 있다.� 이것은� 실험적인� 기능이며� 사용자� 간의� 인터페이스를� 변

경할� 수� 있게� 한다.� 풀다운� 입력을� 만들려면,� 긴� 형태의� 입력� 대화� 상자를� 열고� 회색� 영역에서� [control-클릭

/오른쪽�클릭]을� 하면�다음� 메뉴를�볼�수�있다.� :�

Page 118: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 118 -

읽기� 전용� 풀다운� 입력을� 원한다면� 읽기전용(read-only)� 체크박스를� 클릭해라.� 그런� 다음� [control-클릭/오른

쪽�클릭]을� 다시�하고� options…을� 선택해서�다음과�같은� 대화상자를�열어라.� :

적어도� 지금� 당신은� 고정� 옵션만� 볼수� 있을� 것이다.� 예를� 들어,� “지금� 바로� 스테이지의� 왼쪽� 절반에� 있는� 모

든� 스프라이트는”� 커녕� “모든� 스프라이트”도� 아닐�것이다.

다. 변형�입력(Input� variants)

� 이제� 형식들의�아래에�있는� 세� 가지�상호� 배타적인�옵션을�설정해보자.

"단일� 입력"(Single� input)� 옵션:� 스크래치에서� 모든� 입력은� 이� 범주에� 있다.� 블록이� 팔레트에� 나타날� 때� 블

록� 안에는� 하나의� 입력� 슬롯이� 있다.� 만약� 어떠한� 단일� 입력이� 아무타입,� 수,� 혹은� 텍스트� 형식이라면,� 그� 때�

당신은� 팔레트의� 슬롯에� 나타나는� 디폴트� 값을� 기입할� 것이다.� 예컨대� (10)걸음� 이동� 블록의� “10”처럼� 말이

다.� 블록� 편집기의�스크립트�상단에�있는� 프로토타입�블록에서트�값� 10이� 다음과�같이� 보여진다.� :

� "다중� 입력"(Multiple� inputs)� 옵션:� 이전에� 소개� 된� 목록� 블록은� 새로운�목록의� 항목을�지정하는� 입력의�수

를� 허용한다.� 이것을� 허용하기� 위해� 스냅은� 입력� 슬롯들을� 추가하고� 제거하면서� 블록을� 확대� 및� 축소하는� 화

살촉� 표기법(34)을� 도입한다.� 스냅� 사용자가� 만든� 사용자� 정의� 블록� 역시� 그� 기능을� 가진다.� 만약� “다중� 입

력”� 버튼을� 선택하면� 화살촉이� 블록의� 입력� 슬롯� 다음으로� 나타날� 것이다.� 더욱� 혹은� 더� 적은� 슬롯(0만큼� 적

은)이� 사용�될� 수� 있다.� 블록이�실행될�때�입력명을�위한�모든� 슬롯의�모든� 값들은�목록에�수집되고�스크립트�

안에�것과� 같이� 입력�값은� 그� 값들의�목록이�된다.� :�

Page 119: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 119 -

프로토�타입의�오렌지색�입력�슬롯� 이름�상자에�줄임표(...)는� 다중입력을�나타냅니다.

� 세� 번째� 범주,� "업바(Upvar)� ­� 호출자에게� 내부� 변수� 보게� 만들기"는� 입력이� 아니고� 출력의� 일종으로� 사용

자에게� 보여지는� 블록들을� 나타낸다.� 그것은� 입력� 슬롯으로서� 보다는� 블록에� 있는� 오렌지색� 변수� 타원으로서�

나타난다.� 예를� 들면� 다음과� 같다.� 아래� for문의� 프로토� 타입에서� 위쪽� 화살표(↑)가� 있는� 변수� i는� 내부� 변수

를�나타낸다.

변수� i(위� 오른쪽� 블록)는� 위� for문� 블럭으로부터� 커멘트(C-모양)� 슬롯에서� 사용되는� 블록으로� 끌어올� 수� 있

다.� 또한� 오렌지색� 블록� 위의� i를� 클릭함으로써� 사용자는� 호출하는� 스크립트에서� 보여지는� 변수의� 이름을� 변

경할� 수� 있다.� (비록� 이름이� 블록의� 정의� 내에서� 변경되지� 않지만)� 이러한� 종류의� 변수를� upvar� 라고� 짧게�

줄여�부르는데,� 사용자�정의� 블록으로부터�그것을�사용하는�스크립트에�위쪽으로�전달되기�때문이다.

라. 힌트형�프로토타입(Prototype� Hints)

� 우리는� 입력이� 어떤� 종류인지� 상기시킬� 수� 있도록� 프로토타입� 입력� 슬롯에� 나타나는� 세� 가지� 표기법을� 언급

했다.� 다음은�그러한�표기법들의�전체�목록이다.�

=� 기본값(defalult� value)� � � � � � � ...� 다중� 입력� multiple� inputs� ↑� 업바(upvar)

λ� 절차적�형식(procedure� types) ⫶ 목록(list)� � � � � � � � � � � � � � � ?� 블린(Boolean)

마. 제목�텍스트와�기호(Title� Text� and� Symbols)

� 일부� 기초적인� 블록들은� 블록안에� 기호가� 있는� 경우가� 있다.� :� � � � 사용자� 정의(custom)� 블록�

역시� 기호를� 사용할� 수� 있다.� 블록� 편집기에서,� 기호를� 삽입하고� 싶은� 지점에서� 플러스� 기호(+)를� 클릭해보아

라.� 그� 후� 입력� 슬롯� 이름이�될� 텍스트�상자� 아래의�제목� 텍스트�그림을� 클릭하여라.� 대화상자가� 다음과�같이�

변할�것이다.�

Page 120: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 120 -

입력�이름�생성� 상자�오른쪽�끝의�화살표를�누르면�아래의�메뉴를�볼�수�있다.

기호�중�하나를�선택한다면�프로토�타입에서는�문자�형태로�나타내진다.

하지만�실제� 블록에서는�원하는�기호로�표기되어진다.

� 이용가능한�기호들은�거의�스냅아이콘에서�사용되는�것들�중� 하나이다.

만약에�화살표�기호를�노란색의�더� 큰� 모양으로�하고싶다면�그것의�이름을�편집하면�된다.

1.5-255-255-150은� 글자크기를� 1.5배� 만큼� 크게� 하고� 기호의� 색은� 빨강-녹색-파랑의� 값을� 255-255-150로�

나타내라는�뜻이다.(각� 색상값� 0� ~� 255)� 다음은�결과다.� :

Page 121: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 121 -

SW교육 온라인 사이트를 통한 교사 및 학생 연수

1. Koreasw.org - SW교육과 관련한 동영상 및 학습자료 제공

2. 온라인 교육을 통한 학습

� � � � � � � � � -� 교사,� 학생,� 일반일을�대상으로�자신의�관심과�수준에�맞추어�학습� 가능

� � � � � � � � � � -� 자발적인�학습이�가능하며,� 학교에서의� SW교육�시수가�부족한�현실에서�

� � � � � � � � � � � � 플립러닝�학습� 가능

� � � � � � � � � � -� 학습�→�놀이� →� 평가� →� 수료증�형태로�전개되어�학습에�대한�동기� 부여

Page 122: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 122 -

3. 교재 및 예제 자료 제공

4. 창작 활동과 평가 체제

5. 뱃지 및 수료증 제공

Page 123: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 123 -

6. 온라인 교육 사이트 현장 활용팁!

교실에서는 이렇게 해보세요.

교실에서의� SW교육� 학습은� 학교마다,� 교사마다,� 교실마다� 그� 상황이� 다� 다를� 수� 있다.� 아직�

2015개정� 교육과정이� 적용되기� 전이므로� SW교육� 학습은� 연구학교,� 선도학교에서� 주로� 시행이� 되

고� 있다.� 하지만� 시범학교가� 아닌� 경우에도� 학교나� 교사의� 재량에� 따라� SW교육은� 학급� 교육과정�

안에서� 얼마든지� 이루어질� 수� 있다.� 창의적� 체험활동,� 방과후수업,� 동아리� 활동� 등을� 통해� SW학습�

시간을� 확보해서� 운영할� 수� 있다.� 여기에서는� � SW교육� 무료� 온라인� 사이트를� 활용해서� 학습할� 수�

있는�경우를�가정학습과의�병행�여부로�나누어�안내해�보고자�한다.

가.� 가정학습과�병행하지�않는�경우

①� 창의적� 체험활동,� 방과후� 수업,� 동아리� 등의� 시간을� 활용하여� 여러� 강좌� 중� 하나를� 선택하여�

운영한다.

②� 예를� 들어,� 학생들에게� 스크래치를� 알려주고자� 할� 때� 스크래치� 초급을� 선택하여� 14강에� 대한�

학습계획을�학급�교육과정에�맞게�구성한다.(차시별�제공되는�교재�참고)�

③�컴퓨터실에�가서� https://scratch.mit.edu/� 에서�스크래치� 1.4�또는� 2.0을�다운받는다.

④� koreasw.org� 사이트에서�해당강좌를�열고,� 스크래치�창을�동시에�실행시킨다.

⑤�강좌를�보며,� 직접�스크래치�프로그램을�열어�따라해�볼� 수� 있다.

Page 124: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 124 -

※� 이� 활동은� 교사가� 칠판� 스크린에� 강좌를� 열어주고� 따라해� 볼� 수� 있도록� 수업을� 구성할� 수� 있

다.� 하지만� 이� 경우에는� 학생의� 수준에� 따라� 학습� 속도에� 있어� 차이가� 많이� 나므로� 개별� 학습으

로� 진행할� 수� 있도록� 구성하는�것을� 권장한다.� 이해가� 어려운� 학생은� 교사� 또는� 그� 활동을� 완료

한� 친구의� 도움을� 받을� 수� 있도록� 팀티칭으로� 구성할� 수� 있으며,� 학습을� 빨리� 끝낸� 학생의� 경우

에는� 그� 차시에서� 배운� 것을� 토대로� 자신만의� 프로젝트를� 만들어� 볼� 수� 있는� 시간을� 주도록� 한

다.�

⑥�실습�과제�해결하기(실습�해법도�강좌에서�안내가�되므로�교사의�부담이�없음)

⑦�평가하기를�통해�자신의�성취수준�확인하기�

실습하기 평가하기

⑧� 학습정리하기

⑨�자신이�만든�프로젝트는�학급�홈페이지(학급�상황에�맞추어)에�저장하기

※�저장한� 프로젝트를�다른� 친구들과� 함께� 공유하며� 칭찬�또는� 새로운�아이디어를�추가해줄�수� 있

는�답글을�달아줄�수� 있는�분위기를�형성하여�격려해주면�좋다.� � �

⑩�강좌를�다� 들으면� ‘완료’버튼�누르고�나오기�

⑪� 3~4개의�강의를�듣고서,� 학생들이�만든�프로젝트�발표�및� 공유�시간�갖기

⑫� ‘스크래치� 초급’� 강좌를� 다� 들으면,� 온라인상에서� 뱃지를� 받고,� 수료증을� 출력하여� 수여하기(마

이�페이지� -� 나의�강의실� -� 수강�완료한�강좌� ­� 수료증)�

Page 125: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 125 -

�나.� 가정학습과�병행하는�경우

SW교육을� 위한� 학습� 시간을� 학급교육과정에서� 확보하기� 어려운� 경우� 가정학습을� 통해� 학습을� 권

장할�수�있다.

하지만� 앞서� <가정학습과� 병행하지� 않는� 경우>에서� 설명한� 과정은� 학습� 시작� 전에� 미리� 안내가� 되

어야� 한다.� 사이트� 주소를� 알고,� 회원� 가입을� 하고,� 스크래치� 프로그램을� 다운� 받는� 방법을� 익히게�

되면�학생은�과제�형태로�학습을�하게�된다.�

간단한� 학습� 진도표를� 작성하여� 학생� 스스로� 이수한� 강의에� 대해서는� 체크를� 하고,� 교사는� 이에�

대한� 적절한� 보상� 제도를� 마련하여� 학습활동이� 지속적으로� 이루어질� 수� 있도록� 강화시켜� 주면� 좋

다.

한� 달에� 한� 번� 정도는� 학생들이� 만든� 프로젝트를� 발표하는� 시간을� 가져보며� 자신의� 작품에� 대해�

공유할�수� 있는�시간도�만들어�준다.

한�강좌에�대한�모든�수강이�끝나면�수료증을�출력하여�교사가�학생에게�수여해준다.

TIP!

가정학습의�경우,� 교사나� 친구와의�상호작용�없이는�혼자서� 지속적으로�학습하기는�어렵다.� 학습과

정에서� 궁금한� 사항이� 생길� 수도� 있고,� 자신이� 만든� 프로젝트를� 친구들과� 공유하는� 것은� 참으로� 중

요하다.�

이� 때,� 교사는� 학급홈페이지를� 통해� SW교육과� 관련된� 학습방을� 하나� 만들어서� 학생들이�프로젝트�

공유� 및� 궁금하거나� 도움을� 필요로� 하는� 글을� 서로� 올리며� 해결할� 수� 있는� 장을� 마련해주어야� 한

다.�

학생들이� 서로� 소통하고� 공유하는� 장이� SW교육에서� 꼭� 필요한� 이유는� 자신이� 만든� 것을� 뽐내며�

친구들에게� 칭찬받아� 서로� 동기부여가� 되는� 측면도� 있지만,� 친구가� 만든� 프로젝트를� 보며� 자신� 또

한� 아이디어를�얻거나� 새로운� 것을� 배울� 수� 있는� 기회를� 가질� 수� 있기� 때문이다.� 새로운� 것을� 처음

부터� 만들기�힘든� 학생들은� 친구가� 만든�프로젝트를�그대로� 다운받아�요리조리�만져보는�과정을� 통

해� 배우기도� 하며,� 그� 안에서� 많은� 생각을� 하게� 된다.� 이� 때,� 학생들은� 자신의� 창의성을� 풍부하게�

쏟아낸다.�

학교에서는 이렇게 해보세요.

학교에서는� SW교육에� 대한� 확산을� 인증제를� 통해� 이루어낼� 수� 있다.� 많은� 학교에서� 학생들의� 기

본� 소양을� 쌓기� 위해� 독서인증제,� 타자인증제,� 한자인증제,� 줄넘기인증제,� 수영인증제,� 악기� 인증제� 등�

다양한� 인증제를�통해� 교과� 밖에서의� 다양한� 활동을� 격려하며�그에� 관련한�소양능력을�신장시켜�주

고� 있다.� SW교육에서는� 저학년,� 중학년에서� 타자인증제를� 실시하여� 기본능력을� 갖추게� 한다면�

5~6학년� 고학년의� 경우� 온라인� 사이트를� 통한� 디지털� 시대에� 맞는� 컴퓨팅� 사고력을� 기르기� 위한�

기초�학습으로�강좌�수강을�활용할�수� 있다.

Page 126: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 126 -

강좌�선택�→� 강좌�수강� →� 한� 달에� 한� 번� 자신의� 프로젝트�발표(강좌에� 대한� 지속적인� 피드백

을�위해�필요한�과정,� 횟수는�재량)� →�강좌�수강이�끝나면�해당�강좌에�대한�뱃지�받고,� 수료증�

수여�→�강좌를�통해�배운�작품을�하나�만들고�발표하기�→�인증제�통과

Page 127: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

- 127 -

MEMO

Page 128: SW교육을 탐구하는 교사워크숍(Snap!)

2015 SW교육을 탐구하는 교사 워크숍(Ver.프로그래밍)

2015 초등 SW교육 교사연수

발 행 2015년 12월 4일

발행인 한 선 관

발행처 경인교육대학교 미래인재연구소

http://in.re.kr http://computing.or.kr

주 소 인천광역시 계양구 계산동 경인교육대학교

전 화 032-540-1299

팩 스 032-548-0288

인쇄처 교대복사

ISBN

본 교재에 실린 모든 내용의 사용은 를 따릅니다.

인용시 반드시 저작자(경인교대 미래인재연구소)를 표시해 주세요.

<비매품>