brunch

You can make anything
by writing

C.S.Lewis

by 스스로 코딩 두셀코 Nov 03. 2017

코딩교육, 어떻게 시작해야 할까? (4) - 알고리즘형

알고리즘




학교에서는 뭘 가르치지?

실제로 도움이 되는 걸 가르치는 걸까?

알고리즘? 문제 해결 능력?


위 자료는 2015년 교육부가 발간한 소프트웨어 교육 운영 지침에 나온 학교급별 교육 목표입니다. 정보윤리와 관련된 '생활과 소프트웨어' 항목이 있고, 그 아래 두 개는 '알고리즘과 프로그래밍', '컴퓨팅과 문제 해결'이 있습니다. 하지만 이 두 가지 항목은 '문제 해결'이라는 측면에서 비슷한 맥락을 갖고 있다는 것을 알 수 있습니다! 이를 통해,


알고리즘은 소프트웨어 교육의 핵심 목표임을 알 수 있습니다.


학교뿐만 아니라 기업에서도 알고리즘은 중요한 역량으로 평가되고 있습니다.


최근 국내 소프트웨어 직군 취업 절차에서 적성검사가 아닌 알고리즘 문제 해결 능력으로 소프트웨어 개발 역량을 평가하는 기업들이 많아지고 있습니다.


대표적인 기업들은 아래와 같습니다.


삼성, 카카오, 넥슨, 현대, 네이버, 엔씨소프트 (왼쪽 상단부터 오른쪽으로)


국내의 대기업뿐만 아니라 소프트웨어 관련 대기업들, 게임 기업들이 있습니다. 물론 구글이나 마이크로소프트, 페이스북과 같은 해외 유명 기업들은 말할 것도 없죠.


또한 기업에서 알고리즘은 소프트웨어 분야의 핵심 평가 요소입니다.





알고리즘이란?


그렇다면 알고리즘이란 무엇이길래 국내외 학교, 기업을 가리지 않고 많이 필요로 하는 것일까요?


알고리즘은 문제를 해결하는 방법을 의미합니다.


다음 문제를 볼까요?


1부터 100까지 더하는 프로그램을 만드시오

이와 같은 문제가 있을 때 문제를 어떻게 해결할 것인지에 대한 다양한 해결방법이 있습니다. 예를 들면,


(1) 하나씩 다 더할 수 있습니다.

1 + 2 = 3
3 + 3 = 6
4 + 6 = 10
...
4950 + 100 = 5050


(2) 공식을 사용할 수 있습니다 N*(N+1)/2

(100*101)/2


(3) 나만의 방법으로 풀 수 있습니다


1. 2부터 100을 모두 1로 만듭니다

2 = 1 + 1
3 = 1 + 1 + 1
...
100 = 1 + 1 + 1 + ... + 1

2. 그다음 1의 개수만큼 곱합니다

1*5050 = 5050


(3)과 같이 '굳이 저렇게 풀어야 할까?'라는 의문이 드는 방법이 있고, 가장 쉽게 생각할 수 있는 (1)과 같은 방법도 있고, 공식을 활용하여 더 빠르게 풀 수 있는 (2)와 같은 방법도 있습니다. 어떻게 풀었든 간에, 여기서 문제를 해결한 (1), (2), (3) 방법 모두 문제를 해결한 알고리즘입니다.


하지만 우리가 알아야 하는 것은 '효율적인' 알고리즘입니다.


당연히 이 중에서 계산도 훨씬 간단하고, 빠른 방법을 선택하는 것이 중요하겠죠? 그래서 소프트웨어 교육 목표에서 보았듯이 학교는 문제 해결방법을 찾아내는 능력을 키우기 위해 알고리즘을 가르치고, 기업은 효율적인 알고리즘이 제품의 품질을 향상시킬 수 때문에 알고리즘 역량을 요구하는 것입니다.


그럼 알고리즘은 어떻게 공부를 해야 하는지 볼까요?





알고리즘형 코딩 교육이란?

- 대상 : 중고등 이상 (중고등학생들 및 컴퓨터 관련 학과 대학생들)
- 선행지식 : 프로그래밍 기초, 프로그래밍 언어, 자료구조
- 준비물 : PC, 알고리즘 문제풀이 웹 사이트 계정
- 목적 : 주어진 실생활 문제를 해석하고 하나 이상의 프로그래밍 언어와 다양한 자료구조, 알고리즘 개념을 통해 해결하기 위함


사실 '스크래치형 블록코딩' 이나 '아두이노형 코딩교육'도 결국에는 어떤 문제를 해결하기 위한 방법을 고민하기 때문에 알고리즘을 배운다고 볼 수 있습니다.



여기서는 최근에 가장 많이 나오는 웹 기반의 알고리즘 학습 방식을 위주로 다루겠습니다.



로컬 기반 프로그래밍

기존에 프로그래밍을 하는 방식은 컴퓨터 로컬 공간에 프로그램*을 설치해서 그 안에서 프로그램을 작성하고 실행하는 방식으로 작동했습니다.


*이 프로그램을 IDE라고 부릅니다. IDE는 Integrated Development Environment 의 약자로, '통합 개발 환경'의 의미를 가지고 있습니다. IDE 중에서 가장 많이 사용하는 것은 Visual Studio(주로 윈도우), Xcode(주로 Mac OS X), Eclipse, Intellij 등이 있습니다. IDE 는 어떤 언어로 어떤 프로그램을 개발할 것인지에 따라 다 다르기 때문에, 어떤 IDE 가 제일 좋다!라고 할 수 없습니다.  


사실 이런 프로그램(IDE)들은 교육용보다는 실제 개발자들이 상용화할 수 있는 프로그램을 작성할 때 많이 사용되고 있습니다. 그래서 간단한 코딩을 하고 싶은 입문자의 경우에, 프로그램(IDE)을 설치하다가 절망하고, 새로운 프로젝트를 만들 때 다시 절망하면서, 시작하기도 전에 '코딩은 이렇게 어려운 것인가...' 하며 좌절하는 경우가 많습니다. 입문자라면 아래 사진만 봐도 머리가 지끈지끈하지 않을까요?


안드로이드 앱 개발 IDE 인 Android Studio


웹 기반 프로그래밍

그렇기 때문에 최근에는 따로 프로그램(IDE)을 설치할 필요없이 웹 상에서 코딩을 할 수 있는 서비스들이 많이 나왔습니다. 로컬에서 실행시키던 프로그램을 웹에서 실행시키고, 결과를 확인할 수 있습니다.


웹 기반 프로그래밍 서비스들은 입문자들이 프로그램(IDE) 설치나 환경설정 없이 코딩에만 집중을 할 수 있도록 해줍니다.


구름에듀 : https://edu.goorm.io/


왼쪽 하단에 보면 '실습 내용'이라 하면서 미션을 하나 주고 있죠? 미션을 주고, 이것을 해결하기 위해 오른쪽에 코딩을 하고, 그 결과를 '실행' 버튼을 눌러서 정답인지 아닌지 확인할 수 있습니다!


구름 에듀 홈페이지는 코코넛랩에서 발행하는 학습 콘텐츠들을 테스트할 서비스로 사용할 예정입니다. 사용법은 추후에 올리도록 하겠습니다!


그럼 이런 웹 사이트들에서 제공하고 있는 미션들은 무엇이 있을까요? 다른 말로, 이런 웹 사이트에서는 어떤 문제를 제출할까요?


백준 온라인 저지 홈페이지에서 문제가 아래와 같이 주어졌을 때, 다음 순서로 프로그래밍 할 수 있습니다.



1. 문제를 읽고, 문제에서 요구하는 바가 무엇인지 파악한다.


2. 입력 형식에 따라서 코딩을 한다.


3. 입력값에 따라 올바른 결과값(출력값)이 나오는지 확인하고 제출한다.



백준 온라인 저지 : https://www.acmicpc.net/


알고리즘을 학습하면 다음 세 가지 능력을 키울 수 있습니다.


1. 프로그래밍 언어에 대한 이해 (C, C++, Java, Python 등)


2. 자료구조*와 알고리즘


3. 문제 해결 능력


*자료구조는 알고리즘과 함께 매우 중요한 개념 중 하나로, 데이터를 효율적으로 저장하는 방법을 다루고 있습니다. 추후에 자료구조 매거진에서 다루도록 하겠습니다.


이렇게 알고리즘 역량이 중요해지고 있기 때문에 다양한 알고리즘 문제풀이 사이트들이 나오고 있습니다.



국내

> 백준 온라인 저지 : 백준 알고리즘 사이트는 알고리즘 교육 시장에서 가장 먼저 시장을 점유해서 알고리즘 문제도 가장 많고, 가장 활성화되어있는 사이트입니다. 백준의 온라인 강의도 볼 수 있습니다.


> 삼성 SW expert academy : 삼성 sw expert의 특징은 비주얼 코딩 기능입니다. 기본적인 자료구조와 알고리즘 코드를 실행 순서에 따라 애니메이션과 함께 봄으로써 이해를 돕는다는 장점이 있습니다.


> Codeground : 삼성에서 만든 SCPC 경시대회용 웹 페이지입니다. 그리고 삼성에서 대학생들을 대상으로 진행하는 S/W test를 신청할 수 있습니다.


> 프로그래머스 : 카카오 블라인드 테스트를 포함한 다양한 프로그래밍 대회를 개최하는 것이 특징입니다. 몇 가지 프로그래밍 언어에 대한 강의도 제공하고 있습니다.


> 구름 EDU : LG전자, NHN, 라인 등의 기출문제들을 모의고사 형태로 제공하는 웹사이트로 알고리즘 문제를 제공하고 있고, 스크래치, 아두이노 등 다양한 유료/무료 콘텐츠를 제공하고 있습니다.


현재 백준 온라인 저지를 제외한 다른 웹 사이트들은 베타 버전입니다.


해외

> 구글 코드잼

> 페이스북 해커컵

> 탑코더

> codecademy : 웹 기반으로 커리큘럼에 따라 프로그래밍 언어에 대한 학습을 할 수 있는 웹사이트입니다.

> hacker rank



이외에도 알고리즘을 어느 정도 공부했다 싶거나 경시대회에 출전해서 내 위치를 확인해보고 싶다면 다양한 대회들에 참여할 수 있습니다. 기존에는 정보올림피아드 대회 위주로 운영이 되었지만, 최근에 알고리즘의 중요성이 커지면서 대기업, 대학교 등에서 여러 알고리즘 경시대회를 주최하고 있습니다.



알고리즘 경시대회





이렇게 알고리즘은 학교, 기업에서 꼭 갖추어야 할 능력으로 자리 잡고 있습니다.


하지만 우리나라 교육산업 특성상 이런 알고리즘 위주의 교육에만 치우치지 않을까 걱정입니다. 알고리즘은 매우 중요한 개념이지만, 현장에서 요구하는 인재는 알고리즘'만' 잘 하는 인재가 아니라 다양한  IT 역량을 가진 사람일지도 모릅니다


예를 들어, 웹 서비스를 하는 회사에서는 알고리즘만 잘 하는 것이 중요한 것이 아니라, 웹 서비스에 대한 구조도 알아야 하고, 웹 프로그래밍에 대한 지식도 있어야 할 것입니다.


결국 소프트웨어 교육은 한 분야만 공부하면 되는 것이 아닙니다.

알고리즘과 같은 필수 과목의 기본기를 탄탄히 하고, 본인이 관심 있는 분야에 대해서 꾸준히 찾아보고, 다양한 프로젝트를 통해 경험을 쌓아야 소프트웨어 분야 실력자가 될 수 있습니다.




맺음말


이렇게 총 4회에 걸쳐 "코딩교육을 어떻게 시작할지"에 대해 알아보았습니다.


정리하자면,


유아/초등 단계에서는 프로그래밍 언어에 대한 지식 없이 블록코딩으로 프로그램을 만들며 창의성과 코딩에 대한 흥미를 키울 수 있는 스크래치형 코딩 교육, 초/중등 단계에서는 기초적인 프로그래밍을 하면서 동시에 하드웨어에 대한 지식을 공부할 수 있는 아두이노 교육, 중/고등 단계에서는 프로그래밍 언어에 대한 공부와 자료구조, 알고리즘을 통해 공부를 하면서 자신을 성장시킬 수 있습니다.


다시 한번 말하지만, 여기서 다룬 내용이 코딩교육의 모든 것은 아닙니다.


코딩교육이라고 부르는 것은 모든 컴퓨터 과학 분야를 다룰 수 있는 용어도 아닙니다. (코딩교육이라고 부르는 것에 대한 용어 정리도 필요하죠) 컴퓨터 과학 분야는 매우 다양하기 때문에 모든 것을 다루기란 쉽지 않습니다. 웹 페이지 개발, 안드로이드 앱 개발, 서버 개발, 임베디드 소프트웨어, 서버 유지 보수, 인공지능, 빅데이터, 패턴인식, 헬스케어 등 분야는 많고, 한 분야에 대해서 배워야 하는 것도 무궁무진합니다.


참고로, 웹 페이지 개발에 대해서는 '생활코딩'에서 좋은 자료를 통해 학습을 하실 수 있습니다. '생활코딩'도 비영리 목적으로 소프트웨어 교육 확산에 기여하는 큰 커뮤니티입니다!


코딩교육이라고 하는데, 도대체 본인이 아직 뭘 해야 할지 모르겠다, 뭘 가르쳐야 될지 모르겠다 했을 때, 다른 사람들은 어떻게 공부하고 있나 궁금하시다면!


지금까지 말한 커리큘럼이 최근에 가장 주목을 많이 받고 있고, 공부를 해도 4차 산업 혁명에 대비하여 살아가는 사람이면 알면 좋을 교육이기 때문에 권장합니다.


이상으로 코딩교육에 대한 연재는 마치고, 다른 매거진에서 찾아뵙도록 하겠습니다.


감사합니다. :)



매거진의 이전글 코딩교육, 어떻게 시작해야할까? (3) - 아두이노형
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari