00. 고민
Project-X는 소프트웨어 인재를 양성하기 위한 “새로운 교육모델”입니다.
이걸 고민하게 된 이유는, 우리나라 교육시장이
개발자를 길러내는 효과적 교육모델을 갖추지 못했기 때문입니다.
우리나라의 기본교육은 Teacher 가 "강의"를 통해 교육내용을 전달하는 방식으로 이루어집니다.따라서, 훌륭한 Teacher를 양성하는 일이 반드시 선행되어야 합니다.
연구 중심의 교육은 대학이 충분히 감당하지만,
산업현장에서 요구하는 “실무기반 교육훈련”은 그렇지 못합니다.
일반기업들이 많은 전문교육과정을 제공하고 있지만,
IT 전문인력의 양성은 턱없이 부족합니다.
현행 교육시스템 속에서 해결하지 않으면, 부족현상은 가속화될 수 밖에 없죠.
물론 고민은 있습니다.
학교는 공공성을 기준으로 하기 때문입니다.
기업교육과는 목표가 다르죠.
이 글의 청중은 “학교” 같은 교육기관들입니다.
세부적인 접근을 하기 위한 “구분”이 있습니다.
(소프트웨어) 개발자 교육
- 개발자가 되는 교육
- 성인대상, 업무능력 보유
- 직업교육에 가까운 …
소프트웨어 교육
- 초등학생 교육도 해당. 논리교육도 해당.
- 개발자 교육도 포괄.
- 학교 교육에 가까운 …
교육 (제공자 관점)
- “교육공급자”가 뭔가를 가르치려는 행위를 말합니다.
- 강의, 비강의 교육법 등을 모두 폭넓게 말합니다.
학습 (수용자 관점)
- 학생이 뭔가를 배우는 걸 말합니다.
- 의식적으로 무의식적으로 일어나는 배움행위를 통털어 말합니다.
01. 범위
교육실험을 위한 범위를 좁히기 위해, 사용자와 서비스의 범위를 정합니다.
교육대상은, “비전공, 전공자 성인”.
– 즉, 기초지식이 없는 누구라도 배울 수 있어야 한다.
– “성인”이란, 주체적 판단을 할 수 있고, 그에 대한 책임을 질 수 있다는 뜻입니다.
“새로운 교육모델”이란 “교육학” 관점의 용어입니다.
– 미래환경에 도전하는 능동적 인재를 길러내고자 합니다.
– 기존의 Passive Pedagogy(수동적 교육방식)에서 벗어나고자 합니다.
“교육내용”은 작은 범위로 시작합니다.
우리나라 IT기업들이 필요로 하는 실무 기술들입니다.
– 단, “회사의 업무교육”을 하진 않습니다.
– 하드스킬과 소프트스킬을 포함합니다.
– 수준은 “신입생 채용 수준”까지를 목표로 합니다.

02. 교육대상 정의
무엇을 교육해야 할지 정의하기 위해, "개발자"라는 객체에 대해 정의해 봅니다.
(1) 개발자는 어떤 걸 가진 사람인가? (Ability = 목표 = 무엇을 하는 사람인가?)
(2) 개발자는 어떻게 성장하는가? (Sustainable = 지속가능 = 어떻게 해야 존속 가능한가?)
(3) 개발자가 되려면 뭘 해야 하는가? (Build order = 성장 = 아무것도 없는 상황에서 어떻게 가야 하나?)
(4) 교육기관이 할 수 있는 것과 할 수 없는 것이 무엇인가? (Area of education = 우리의 역할)
03. Learning Curve
"교육"은 체계, 순서를 가지고 하고 싶어합니다. 그러나, 현실에서의 "학습"은 순서에 관계없이 일어납니다.
3.1. 전통적 학습곡선
전통적으로는 “학습”도 순서에 맞춰 일어난다고 생각했습니다. (시간축 = 축적된 노력의 양과 일치)

(1) 경험부족 단계
이 단계에서의 성장은 매우 느림.
경험이 없어서 지식을 형성할 수 없음.
(2) 참여단계
기초지식과 습득방법이 숙달됨.
다양한 학습활동이 가능해, 폭발적으로 지식과 경험이 늘어남.
(3) 숙달단계
어느 정도 주변 환경에 익숙해지고 나면, 성장이 둔화됨.
계속 성장하고 싶다면, 새로운 환경으로 바꾸어야 함.
3.2. 현실적인 학습곡선
현실적으로 "학습"은 순서에 관계없이 일어납니다.

우당탕탕 학습곡선 (Bumpy learning curve)
지속적으로 문제 환경에 노출되어, 문제를 풀어가려고 노력하면서 성장하는 시나리오임.
다양한 실패를 경험지식으로 정리하고, 재도전을 통해 극복하게 됨.
"교수자 중심"의 교육환경에선, 구조화된 환경을 선호하며, "구성주의" 학습 환경에선 위 사례처럼 비구조화된 환경을 선호합니다.
04.개발자 성장모형
학습은 우당탕탕 일어나지만,교육을 하려면 "교육 구조"을 정의해야 합니다. "개발자"라는 사람이 어떻게 성장하는지 그려봅니다.

4.1. 교육학습
비교적 표준화 콘텐츠가 있어, 학교 등의 교육기관에서 학습이 가능한 내용입니다.
(1) 컴퓨터이론
- 디스크, 메모리, CPU로 구성된 컴퓨터 구조를 이해하고, 이를 제어하기 위한 기본 원리를 이해한다.
- 네트워크를 이용하기 위한 이론과 기본구조를 이해한다.
- 인터넷 서비스를 만들기 위한 소프트웨어 공학의 기본이론과 구조를 이해한다.
- 다양한 분야가 있으나, 기초분야에 한하여 학습한다.
(2) 개발플랫폼
- 컴퓨터를 제어하고 네트워크를 활용하기 위해 만들어진 현대의 개발 플랫폼을 이해한다.
- 웹 플랫폼, 안드로이드 플랫폼, iOS 플랫폼 등
(3) 개발환경
- 해당 플랫폼을 이용해 소프트웨어를 만들기 위한 개발환경을 구성한다.
- 개발환경이란 개발플랫폼, 단말, 서버 등 포함하여, 배포하면 실행되는 수준까지의 환경을 말한다.
(4) 언어학습
- 실행가능한 프로그램을 만들기 위해 필요한 “프로그래밍 언어”를 학습한다.
- “프로그래밍 언어”의 특성을 이해하고, 상황에 맞춰 적용하기 위한 기본기를 습득한다.
(5) 프로그래밍 학습
- Library, API, function, Module 등 간단한 알고리즘 수준의 기능단위를 개발하거나,
- 기능복잡도가 높지 않은 단순한 형태의 프로그래밍을 할 수 있게 된다.
- 이 과정에서 각 프로그램들이 어떻게 상호작용하며 작동하는지 이해할 수 있게 된다.
(6) 프로젝트 학습
- 업무(Business) 목적을 가진 복잡도의 “프로젝트”를 해볼 수 있게 된다.
- 제한된 일정, 팀원 등을 기반으로 권한과 책임을 이해하게 되고,
- 협업을 기반으로 현장의 문제점을 풀어보는 경험을 하게 된다.
4.2. 실전학습
도메인 지식(업무지식)이 필요하고, 기업마다 달라서 교육기관에서 가르치기엔 어려운 내용입니다. 취업 후 현업 프로젝트를 수행함으로써 역량이 길러지며,단편적 경험 및 도메인 지식은 개발자 커뮤니티를 통해 습득할 수 있습니다.
(7) 프로젝트 학습
- 해당 기업, 산업 도메인의 업무를 반영하는 프로젝트를 하게 된다.
- 기업의 문제를 풀거나, 산업 도메인의 문제를 풀 수 있게 된다.
- 기업이나 특정 단체, 그룹 등이 구체적인 수혜자가 될 수 있다.
- 역시 제한된 일정, 팀원 등을 기반으로 권한과 책임을 이행해야 한다.
(8) 성능, 보안 학습
- 대량 트래픽, 특정 이용패턴에 대응하기 위한, 성능 중심의 개발 및 엔지니어링을 할 수 있게 된다.
- 네트워크 보안, 서버 보안 등의 개념을 이해하고, 여러 대의 서버군을 구성하거나 그런 환경에서 일할 수 있게 된다.
(9) 아키텍쳐 학습
- 비즈니스 특성, 사용자 트래픽 패턴, 기업 업무 등에서 발생되는 현장의 문제점을 발견
- 사업의 영속성을 유지하기 위한 기술적, 비기술적 솔루션을 종합적으로 제시할 수 있다.
- 이에 필요한 소프트웨어 구조와 성능, 보안 등을 보장하는 엔지니어링 구조를 설계할 수 있다.
- 이를 추진하기 위한 협업 프로세스를 설계하고, 이를 통해 문제를 해결할 수 있다.
05.교육프로그램 설계
"실습"위주의 교육프로그램이기 때문에 최대한 "프로젝트 현장"을 반영해 봅니다. "웹프로젝트"사례를 기본으로 정리했습니다. - 교육학습은 "교과과정"으로 수행이 가능합니다. - 그러나, 개인프로젝트 및 해커톤은 자발적인 의지가 없으면 불가능 - 세미나, 커뮤니티 등은 현업과의 스킨쉽 속에서 발생될수록 좋습니다.

5.1.교육학습
- 책을 보거나 강의를 듣거나, 실습을 해봄으로써 습득할 수 있는 경험들.
- 기능 단위를 만들어 보는 낮은 복잡도의 개발경험을 쌓게 됨.
- 교육의 틀이 있어 따라하기 수준에서 학습이 가능함.
5.2.개인프로젝트
- 개발자가 목표를 가지고, 간단한 “제품” 수준을 만들어 보는 과정.
- 목표를 실현하기 위해 다양한 수단을 선택, 사용하게 되며,
- 그 과정 중에 Why, What, How, Who 등을 익히게 됨.
- 즉, 개발을 통해 목적을 실현함으로써 성취감과 동기를 갖게 됨.
5.3.해커톤
- 개발자가 의지, 의도를 실현하기 위해 세부 목표를 세우고,
- 복잡한 수준의 “제품”을 분업, 협업 등을 통해 만들어내는 경험.
- 이 과정에서 일정, 리소스의 제한 속에서 결과를 만들어내는 연습을 하게 됨.
5.4.현장
- 상용화란, 나와 관계없는 제3자가 내가 만든 서버에 들어와서,
자기 데이터를 남기는 행위를 하는 경우를 말함. - 사용량에 따라서 금전적 지출이 대량으로 발생하고,
실패가 법적인 부담으로 오기도 해서 교육영역에서 하긴 어려움.
5.5.세미나, 커뮤니티
- 세미나는 약한 결합형태로 지식과 경험을 교류하는 경우이며,
- 커뮤니티는 조금은 더 강한 결합형태로 지식과 경험을 교류하는 시나리오임.
조금씩 더 Project-X 에 대해 설명해보겠습니다.
(To be continued …)