코딩 부트캠프에서의 1년 — 교육편

코딩을 시작하는 분들에게 전하고 싶은 이야기들

안녕하세요, 코드스테이츠 교육 엔지니어 윤상호입니다.

코드스테이츠는 개발자로 새로운 커리어를 시작하고 싶은 분들이 바르고 효과적으로 목표를 이룰 수 있도록 돕고 있습니다.

저는 코드스테이츠에서 지난 1년 동안 교육 엔지니어로서 해야 할 역할로 수강생분들에게 코딩을 교육하고 동시에 코드스테이츠에 운영을 위한 도구들을 개발하였습니다.
앞으로 몇 편의 글을 통해서 지난 1년 동안의 경험을 회고하고 나누어보려 합니다.

이번 글에서는 수강생들에게 코딩을 교육하며 이야기 했던 내용 중 막 코딩을 시작하시는 분들에게 도움이 될 만한 것들을 뽑아 이야기해보겠습니다.

왜 코딩을 배워야하나요?

요즘 세상에 코딩 꼭 배워야 한다는데
코딩이 도대체 뭔가요?

오랜만에 만나는 지인들에게 코딩을 가르친다고 이야기하면 대부분은 요즘 세상에
코딩을 꼭 배워야 한다고 들었다며 저에게 ‘코딩이 도대체 뭔데 그렇게 중요하냐?’,
‘배우면 어디에 도움이 되냐?’
등의 질문을 하십니다. (사실 가장 많이 듣는 이야기는
‘너가 회사에 취업했다니!’, ‘너를 받아주는 회사가 있어?’ 등의 이야기입니다.)

요즘은 흔하게 코딩 교육 광고를 볼 수 있고 또 많은 사람이 코딩을 배우기 위해 시간과 비용을 투자합니다. 도대체 코딩을 배우면 무엇이 좋길래 너도나도 코딩을 가르치고 또 배우려 할까요?

교육 엔지니어로서 왜 코딩을 배워야 하는지 질문을 들었을 때 답하는 것은 생각보다
쉽지 않았습니다. 물론 구글에서 Why should learn coding 등의 키워드로 검색하면
셀 수 없이 많은 코딩을 배워야 하는 이유를 찾을 수 있습니다. (검색해보니 약 244,000,000개 의 결과를 얻을 수 있습니다.)

하지만 그 중 썩 마음에 드는 이유를 찾지 못했기도 하고, 코딩을 가르치기 위해서는
왜 코딩을 배워야 하는지 이유쯤은 스스로 설명할 수 있어야 할 것 같아 코딩을 배워야 하는 이유를 생각하기 시작했습니다. 그리고 1년이 지난 지금 제가 생각하는 코딩을
배워야 하는 이유는 다음과 같습니다.

우리의 일상은 문제로 둘러싸여 있습니다. 어떻게 아침에 제시간에 일어날지, 오늘은
어떤 영화를 볼지, 야식으로 무엇을 시켜먹을지 등 우리는 끊임 없이 문제들을 마주하고 해결하며 살아갑니다.

과거에는 하나의 문제를 해결하기 위해서는 하나의 도구를 사용해야 했습니다. 제가
어렸을 때 위의 문제들을 해결하는 방법은 다음과 같았습니다.

알람시계 알람을 듣고 일어나 허겁지겁 학교로 등교합니다.
수업이 끝나면 비디오 대여점으로 가 오늘 볼 영화를 빌립니다.
그리고 집으로 돌아와 상가 전화번호부를 뒤져 치킨 가게 전화번호를 찾아 주문합니다.

우리는 위의 3가지 문제들을 해결하기 위해 알람시계, 비디오 대여점 그리고 전화번호부 총 3가지 도구를 사용하였습니다.

지금은 어떻게 변했을까요?

스마트폰 알람을 듣고 일어나 허겁지겁 회사로 출근합니다.
퇴근 후 지하철에서 스마트폰으로 오늘 볼 영화를 찾습니다.
그리고 집으로 돌아와 스마트폰으로 치킨을 주문합니다.

이번에는 위의 3가지 문제들을 모두 스마트폰을 통해서 해결했습니다. 스마트폰을 작은 컴퓨터라고 볼 수 있으니 컴퓨터를 이용해 3가지 문제를 전부 해결했다고 할 수 있겠죠. 과거에는 하나의 도구를 익혀서 하나의 문제를 해결하는 데 그쳤다면 지금은 컴퓨터라는 도구 하나만으로 여러 문제를 해결할 수 있게 되었습니다.

현재 우리의 생활은 컴퓨터와 밀접한 관계를 맺고 있습니다. 그리고 이 관계는 점점 더
밀접해 지고 있습니다. 앞으로 우리는 더 많은 문제를 컴퓨터를 통해 해결하게 될
것입니다. 하나의 도구를 활용해서 수백 혹은 수천 가지 문제를 해결할 수 있다니!
놀랍지 않으신가요?

지금까지 이야기와 코딩이 무슨 관련이 있을까요? 코딩은 우리가 컴퓨터에 명령을
내리는 방법입니다. 코딩을 통해 컴퓨터라는 도구를 자유롭게 활용할 수 있는 것이죠.

즉, 우리는 코딩을 배움으로써, 컴퓨터라는 도구를 사용해 우리 주변의 다양한 문제들을 해결할 수 있는 능력을 갖출 수 있습니다.

우리 생활은 항상 문제들로 둘러 쌓여있습니다.
그리고 문제를 해결하기 위해 다양한 도구들을 사용합니다.
코딩도 그런 도구 중의 하나입니다.
다만 코딩이 다른 도구들과 다른 점이 있다면 컴퓨터를 사용한다는 것이죠.
코딩은 컴퓨터를 활용해서 우리 주변의 문제들을 해결하는 일입니다.
혹시 요즘 불편하게 느끼는 문제가 있나요? 그 문제를 해결하고 싶지 않나요?
그럼 지금 코딩을 배워보세요.

무작정 코딩부터 하지 않기

책, 강의도 열심히 보았고,
중간중간 나오는 예제 코드들도 모두 따라쳐 보았어요.
이제 나름 이해했다고 생각하고, 혼자 처음부터 코딩해보려 했는데
막상 시작하려니 어디부터 어떻게 해야 할지 모르겠어요

막 코딩을 시작하신 분과 이야기를 나누다 보면 ‘이제 나도 코딩할 수 있겠다는 생각이 드는데 막상 코딩하려고 하면 마음먹은 대로 되지 않는다’ 라는 말을 많이 듣습니다.
왜 코드는 우리의 생각대로 잘 써지지 않을까요?

혹시 글을 써야 하는데 글이 마음 먹은 데로 잘 쓰이지 않았던 경험이 있으신가요?

글을 쓰기 위해선 이야기하고 싶은 주제 그리고 주제를 전달하기 위한 구조와 흐름이 있어야 합니다. 글이 마음먹은 데로 쓰이지 않았던 것은 말하고 싶은 주제, 글의 구조와 흐름이 정해지지 않은 상태에서 무작정 글을 쓰려고 했기 때문입니다.

글을 쓰기에 앞서 개요를 만들면 이러한 문제를 해결할 수 있습니다. 개요를 쓰면서 글의 주제에 대해 깊게 생각하고 전체적인 글의 짜임새를 정리해 글이 뒤죽박죽되거나 의도와 다른 방향으로 향하는 것을 막을 수 있습니다.

갑자기 글쓰기 이야기를 한 건 코딩과 글쓰기는 굉장히 비슷하기 때문입니다. 글쓰기와 코딩은 모두 목표를 이루기 위해 구조와 흐름을 사용한다는 공통점이 있습니다. 글은 단락들을 짜임새 있게 배치해 흐름을 만들고 흐름을 통해서 말하고자 하는 것을 강조합니다. 이와 마찬가지로 코드에서는 함수와 코드 블럭을 상황에 맞게 배치해 코드의 흐름을 만들고 이를 통해서 문제를 해결합니다.

코딩이 마음대로 되지 않았던 이유도 글이 잘 쓰이지 않았던 이유와 같습니다. 코드의 목표, 전체적인 흐름과 구조를 정하지 않고 코딩을 했기 때문입니다. 글쓰기의 개요처럼 코딩하기 전에도 코드로 무엇을 할 것인지, 완성 된 코드는 어떠한 흐름과 구조를 가지게 될지 계획하는 단계가 꼭 필요합니다.

다음의 단계를 거쳐 코드의 구조를 계획할 수 있습니다.

  1. 코드를 통해서 무엇을 해야 하는지 파악합니다.
    처음은 작성할 코드의 목표를 설정합니다. 코드로 해결하려는 문제, 얻고 싶은 결과는 무엇인지 명확하게 설정합니다.
  2. 코드의 구조를 계획합니다.
    코드의 목표가 정해졌다면 이제 본격적으로 코드의 구조를 계획합니다.
  3. 계획을 점검합니다.
    계획이 완성되었다면 전체적인 짜임새를 확인합니다. 오류가 있는 부분은 없는지 흐름에서 벗어난 부분은 없는지 확인합니다.
  4. 계획을 바탕으로 코딩을 시작합니다.
    코드로 무엇을 할 것인지, 코드의 구조, 흐름이 머릿속에 정리되었다면 이제 계획을 바탕으로 본격적으로 코딩을 시작합니다.

코딩을 시작하기 전에 계획을 세우는 것은 생각보다 쉽지 않을 것입니다. 처음에는 많은 시간이 걸릴 것이고 귀찮게 느껴질 수도 있습니다. 간단한 문제들은 계획 없이 코딩 하더라도 해결할 수 있습니다. 하지만 계획을 세우는 습관이 없다면 어렵고 복잡한 문제를 만나는 순간 한계에 도달하게 될 것입니다. 코딩 학습 과정에서 다루는 문제가 아닌 현실의 문제는 간단하지 않습니다. 현실의 문제들을 해결하려면 사전에 탄탄한 계획을 세우고 계획을 따라 코딩하는 것이 필수입니다.

어디서부터 어떻게 코딩을 시작해야 할지 모르겠다면
코딩을 시작하기 전 코드를 어떻게 짤지 계획부터 세워보세요
계획을 세우면서 복잡한 생각이 정리되고, 무엇을 해야 할지 알 수 있을 거에요

코딩 과정 한눈에 보기

위에서는 코딩을 시작하기 전 계획에 관해 이야기했다면 이번에는 코딩 과정 전체가 어떻게 진행되는지 단계를 나누어 살펴보도록 하겠습니다.

저는 주로 3가지 단계로 나누어 코딩의 과정을 설명합니다.

3단계로 나누어 본 코딩 과정

계획하기

첫 단계는 코드를 통해 무엇을 어떻게 할 것인지 계획하는 단계입니다. 앞에서 이야기한 것 처럼 이 단계에서는 해결해야 하는 문제가 무엇인지 정확히 이해하고 문제를 해결하기 위해서는 어떤 과정이 필요할지 계획을 세워 글로 적어봅니다.

코딩하기

두 번째 단계는 첫 단계에서 만든 계획을 바탕으로 코딩하는 단계입니다. 컴퓨터는 사람의 언어를 이해할 수 없으므로 우리의 생각을 컴퓨터가 이해할 수 있도록 번역주는 단계라고 이야기할 수도 있습니다. 이 단계가 많은 사람이 코딩하면 떠올리는 키보드로 괴상한 문자(😅)들을 타이핑하는 단계입니다.

결과 확인하기

세 번째 단계는 문제가 잘 해결됐는지 확인하는 단계입니다. 코드를 컴퓨터에서 실행해 문제가 잘 해결되었는지 확인합니다. 문제가 제대로 해결되지 않았다면 이전 과정(1단계 혹은 2단계)으로 돌아가 잘못된 점이 없는지 살펴봅니다.

그럼, 간단한 문제를 풀어보며 위의 3단계에 대해 조금 더 자세히 살펴봅시다.

1부터 10 까지 정수 중 모든 홀수의 합을 구해보세요

첫 번째 계획하기 단계입니다.

- 문제에서 주어진 값 : 1 ~ 10까지의 정수
- 만들어야 하는 결과 : 문제에서 주어진 수 중 홀수인 수들의 총합

- 해결 과정
1. 숫자들의 합을 저장할 수 있는 공간을 만듭니다.
2. 1부터 10까지의 정수들을 순서대로 살펴봅니다.
3. 숫자가 홀수인지 아닌지를 확인합니다.
(숫자를 2로 나누었을 때 나머지가 1이면 홀수, 0 이면 짝수라는 사실을 활용합니다.)
4. 홀수이면 합을 저장하는 공간에 숫자를 더합니다. 홀수가 아니라면 다음 숫자로 넘어갑니다.
5. 2~4번 과정의 반복이 끝나고 1번에서 만든 공간을 확인해보면 숫자들의 합을 확인할 수 있습니다.

문제가 무엇인지 어떠한 과정으로 코드를 짤지 계획을 세워보았습니다.

계획을 세우는 중 문제의 해결 방법이 도저히 떠오르지 않는다면 다른 사람의 해결 방법을 참고해도 괜찮습니다. 단 그 사람이 왜 이런 해결 방법을 사용했는지 이유를 꼭 생각해보아야 합니다. 아무것도 없는 상태에서 새로운 것은 나올 수 없습니다. 다양한 해결 방법을 많이 접해보아야만 새로운 해결 방법을 만들 수 있습니다. 처음 코딩을 시작하셨다면 다른 사람의 해결 방법을 보는 것을 불편하게 생각하지 마시고 다양한 해결 방법을 보고 문제에 많이 적용해보시기 바랍니다.

두 번째 단계입니다. 위의 계획을 바탕으로 코드를 작성해보겠습니다.
(코드는 Javascript 라는 프로그래밍 언어를 사용해 작성했습니다.)

https://cdn-images-1.medium.com/max/1600/1*L6aRlO2fe0JajuM11XpcWw.png
계획을 바탕으로 코드 작성하기

코딩을 하다 모르는 것 있다면 검색을 통해 도움을 얻습니다. 주로 도움을 얻는 곳으로는 프로그래밍 언어의 공식 사용 문서(Javascript의 경우 MDN) 나 많은 사람들이 인터넷에 올린 참고 자료들을 통해 도움을 얻을 수 있습니다.

처음에는 계획을 코드로 빠르게 표현하지 못하는 것이 당연합니다. 코딩을 많이 할 수록 문법과 특정한 패턴에 익숙해 질 것이고 코드를 쓰는 속도도 점점 빨라질 것입니다.

자 이제 마지막 세 번째 단계입니다. 코드를 실제로 컴퓨터에 실행시켜 볼까요?

https://cdn-images-1.medium.com/max/1600/1*L-O5lYdRyMh860K9Kayxwg.png
코드의 실행 결과

실행 결과 25라는 숫자를 얻었습니다. 실제로 1부터 10까지 정수 중 홀수의 합은 25
(1 + 3 + 5 + 7 + 9 = 25)가 맞으니 정확히 문제를 해결했나 봅니다.

예시에서는 원하는 결과를 얻었지만 코딩을 하다 보면 잘못된 결과를 얻게 되는 경우도 있을 것입니다.

만약, 잘못된 결과를 얻었다면 우선 코드를 살펴봅니다. 처음 코딩을 학습하시는 분들은 오타 나 문법 오류로 인해 문제가 발생하는 경우가 대부분입니다. 코드를 다시 한번 살펴보며 실수나 계획가는 다른 부분이 있는지 확인합니다.

코드에서 잘못된 부분을 찾지 못했다면 애초에 계획 자체에 문제가 있을 확률이 높습니다. 계획에서 잘못된 부분이나 미처 생각하지 못한 문제가 있는지 확인하고 문제가 발견된다면 계획을 수정하고 이에 맞게 코드도 수정합니다. 그리고 다시 한 번 코드를 실행해 수정한 코드가 올바르게 작동하는지 확인합니다. 또 잘못된 결과를 얻는다면 올바른 결과가 나올 때까지 계속해서 위의 과정을 반복합니다.

지금까지 코딩으로 문제를 해결하는 과정에 관해 살펴보았습니다. 대부분의 코딩은 위의 과정처럼 이루어집니다. 위의 과정을 따라 코딩하는 것에 도전해보세요.

문제를 마주하는 태도

문제없는 세상에서 편안하게 살고 싶어요

문제라는 단어를 들었을 때 무슨 생각이 떠오르시나요? 우리 대부분은 문제라는 단어에 부정적인 이미지를 가지고 있는 것 같습니다. 그래서 문제에 놓이게 되면 최대한 빠르게 문제에서 벗어나고 싶어 합니다. 또 문제가 생길 수 있는 상황을 최대한 피하려고 합니다.

우리는 빨리빨리 문제를 해결해버리고 싶어하지만 원래 문제를 해결하는 과정은 쉽지 않습니다.

현실의 문제는 시험과는 다릅니다. 시험에는 정해진 범위와 답이 있지만, 현실의 문제는 해결하는 데 무엇이 필요한지 정답이 무엇인지 아무도 알지 못합니다. 그러므로 우리는 쉽게 해결 방안을 찾을 수 없고 찾더라도 이것이 정말 정답인지 아닌지 계속 고민해야 합니다. 정답이라고 생각했던 것이 실제로는 정답이 아닐 수도 있고 문제 해결 과정 중 예상하지 못한 또 다른 문제가 생길 수 있습니다.

그런데 왜 우리는 복잡한 문제와 씨름해야 할까요? 문제에서부터 멀어져 편안한 생활을 선택할 수도 있습니다. 하지만 우리를 성장시키는 것은 편안함이 아닙니다. 우리를 성장시키는 것은 문제를 해결하는데 쏟았던 노력과 경험입니다. 계속해서 문제에 도전해야만 우리는 성장할 수 있습니다.

코딩을 하게되면 우리는 끊임 없이 문제를 만나게 됩니다. 하나의 문제를 해결하면 다음 문제가 기다리고 있고 해결했다고 생각한 문제에서 예상하지 못한 다른 문제가 튀어나올 수 있습니다.

매일 쉽게 해결되지 않는 문제들이 계속해서 생기는 것에 질려 코딩을 포기할 수 있습니다. 하지만 계속해서 문제들에 도전하기 때문에 그만큼 많은 성장의 기회를 얻을 수 있습니다. 코딩은 다른 어떤 일들보다 빠르게 우리를 성장시킬 수 있습니다.

가끔 우리는 문제라는 단어를 너무 미워하고 있는 것 아니냐는 생각을 합니다.
문제는 항상 우리 옆에 있으면서 우리가 발전할 수 있도록 도와주는 존재인데 말이죠.
이제는 우리가 먼저 문제에게 다가가 보면 어떨까요!

지금까지 제가 코딩을 처음 배우는 분들에게 꼭 해드리고 싶은 이야기들을 정리해보았습니다. 물론 제 이야기가 수강생분들 모두에게 도움이 되지는 못했습니다. 하지만 몇몇 분들이 저의 이야기를 통해 원하는 목표를 이루는 것을 보며 많은 뿌듯함을 느꼈습니다.

이 글이 코딩을 시작하는 분들이 자신의 목표를 이루는 데 조금이나마 도움이 되길 바랍니다.

--

--