목록으로
이 컨텐츠는 지난 2024년 10월 9일에 있었던 헬로파이 커뮤니티의 컨퍼런스에서 발표한 자료를 정리한 것입니다. 헬로파이는 발표와 나눔, 학습과 성장, 공유와 협력을 목표로 하는 커뮤니티로, 세미나, 스터디, 멘토링으로 활동한다고 합니다. 새롭고 활기차게 시작한 커뮤니티에 많은 관심 바랍니다.
어디에 해당하시나요? 여기에 해당하시는 분 중 이런 생각해보신 분 계신가요?
“이거, 나만 어려워하는 거야?”
물론 다들 답을 아실 겁니다.
그렇지 않습니다. 내가 모르는 건 분명 누군가도 모릅니다. 그 누군가는 한두 명이 아닐 거예요. 여러분이 생각하는 수보다 많을 겁니다. 어떻게 아냐고요?
푸딩캠프가 정식 서비스를 시작하기 전인 2024년 3월, 푸딩캠프는 Python 입문을 주제로 파일럿 강의 프로그램을 기획했습니다.
왜 파일럿 프로그램이냐면 고민이 엄청 많았거든요. 겁도 나고요. 그래서 정식 강의 프로그램을 개시하지 못한 채 고민만 깊어져갔습니다. 하지만 고민만 해서는 그 어떠한 일도 일어나지 않을 것이라는 생각에 파일럿 프로그램을 결정했습니다.
3주짜리 파일럿 프로그램으로 랜딩(landing) 페이지를 만들고, 바로 홍보를 했어요. 고마운 분들이 제 홍보 글을 공유해주신 덕에 제 예상보다 많은 분이 파일럿 프로그램에 참가하셨습니다.
야심찬 행동은 늘 예상 밖 일부터 시작되죠. 제 경우엔 참가자의 직군 구성이었습니다. 제가 기대하고 예상했던 직군 비율은 주니어 개발자가 70%, 비 개발 직군이 30%였습니다.
하지만 실제로는 94 대 6으로 비개발 직군이 압도했어요.
개발 직군을 좀 더 넓게 정의해도 75 대 25였어요. 대상 고객에서 차질이 있어서 컨텐츠를 크게 손보거나 다시 고객군을 구성해야 했지만, 컨텐츠를 크게 손 볼 시간은 없었고, 고객을 만나보지 못한 제가 개발, 비개발을 따질 입장이 아니었어요. 그래서 그대로 진행했습니다.
그렇다고는 해도 과거에 입문자를 대상으로 강의도 해보고, 멘토링도 해봤거든요. 다양한 입문자들이 겪는 역경을 꽤 잘 알고 있어요. 그래서 오리엔테이션에서 소개하며 미리 숙지하기를 강력히 권장했습니다. 어떤 고난과 역경이 있는지 살펴보겠습니다.
코드 에디터를 숙지하는 걸 의외라고 여길 분이 많을 겁니다. 생각보다 많은 분이 무시하는 요소거든요. 이러니 저러니 해도 결국 문서 편집기인데, 편집기에 글자 쓰는 게 뭐 대수라고 말이죠. 하지만 대수입니다. 뭔가를 학습하며 써보지 않아 익숙하지 않은 도구로 실수 없이 빠르게 활용하기란 매우 어렵습니다. 그래서 Visual Studio Code 입문 과정이라는 컨텐츠를 만들었어요.
코드 에디터를 무시해서 겪는 문제 중 생각보다 강도가 센 게 있는데, 바로 자괴감입니다. 정말 사소한 실수 때문에 문제가 발생하는데, 코드 에디터에 익숙하지 않아 그 사소한 실수를 파악하지 못하는 거죠. 어느 정도로 사소한 것이냐면 파일 저장을 하지 않아 강의대로 코드가 작성하지 않는 실수입니다. 근데 자괴감을 가질 이유가 없어요. 현업자도, 경력자도 자신의 손에 익지 않은 에디터를 처음 접하면 어딘가 고장난 사람처럼 삐걱댑니다.
코드 에디터에 익숙해지지 않는 문제보다 더 큰 문제는 끝끝내 코드 에디터 사용이 미숙하다는 걸 인정하지 않는 겁니다. 또는 인정은 하지만 연습을 하지 않기도 하죠. 당장은 미숙하지만 쓰다보면 익숙해질 것이라 생각하는 걸까요? 틀린 생각은 아닙니다. 하지만 당장 학습하며 진도를 따라가야 하는 상황에서는 합리적인 판단은 아닙니다.
인지력을 발휘해 코드 에디터를 더듬 더듬 다루면서 빠르게 진행되는 강의를 듣고 학습하기란 대단히 힘듭니다. 적어도 코드 에디터를 기본적으로 다루는 데엔 손이 자동으로 움직여 의지력을 거의 쓰지 않아야 합니다.
두 번째 난관은 바로 셸입니다. 프로그래밍을 학습하고 코딩하려면 언젠가는 셸에서 작업을 합니다. 까만 화면에 글자만 떠있고, 문법 지키듯이 규칙에 맞춰 명령어를 입력해야 원하는 동작이 이뤄지는 상황이 부담된다는 걸 공감합니다. 입문자 뿐만 아니라 현업자 중에서도 셸을 부담스러워하는 사람 많아요. 부담스러워도 셸을 공부하고 친해지는 게 좋습니다.
셸 공부를 하기 까다롭고 어렵긴 해요. 참가자를 위해 컨텐츠를 찾아봤는데, 프로그래밍 상황에 딱 필요한 만큼만 다루는 셸 학습자료가 생각보다 많지 않더라고요.
그래서 제가 컨텐츠를 만들었어요. 맥OS에서 지셸(zsh, Z Shell) 시작하기 컨텐츠지요. 컨텐츠를 만들어보니 여러모로 모호하긴 하더라고요. 아무리 풍부하게 사례를 다뤄도 온갖 경우의 수가 있다보니 점점 자세하고 깊게 다루게 되고, 그러면 입문 범위를 벗어나요. 결국 개인이 많이 써보는 수밖에 없겠더라고요.
이 화면이 어떤 상황에 관한 걸 보여주는지 아시겠나요? 바로 Python 오류 화면입니다. 부담스럽죠?
입문자가 괴로워하는 대표적인 상황은 바로 에러 메시지를 마주하는 것입니다. 제가 강조하는 것은 에러 메시지를 회피하지 말고 꼼꼼히 읽으라는 것입니다. 알아요. 많은 사람이 오류 상황을 싫어합니다. 저도 반갑진 않아요. 근데 오류는 명백하고, 어쨌든 해결해야 하잖아요?
오류를 해결하는 과정, 즉 디버깅 과정에서 오류 메시지는 아주 중요합니다. 꼭 필요해요. 어떤 경우엔 오류 메시지 없이 오류가 나기도 합니다. 논리적 오류지요. 그런 오류는 해결하기 정말 까다롭습니다. 그런 문제를 해결하다 오류 메시지가 출력되는 문제를 만나면 고맙기까지 합니다. 여러분, 오류 메시지를 나를 괴롭히는 현상이라고 여기지 말고, 내게 문제 상황에 대해 피드백을 주는 존재로 받아들여보세요. 조치를 취했는데 새로운 오류 메시지가 출력되어 짜증난다고요? 그건 그것대로 좋은 겁니다. 현상이 달라졌잖아요! 변화가 있다는 거예요.
불이 나고 있는 걸 아무리 쳐다봐도 소용 없습니다. 불이 난 원인을 파악해야죠. 무서운 오류를 일으켜 컴퓨터 망가지는 건 아닌지 우려된다고요? 거의 모든 경우에 해당 사항 없습니다. Python 버그 같다고요? 거의 모든 경우에 해당 사항 없습니다. 오류를 피드백으로 받아들이고 문제를 이해해보세요.
과제와 퀴즈는 고난이라기 보다는 기피 대상입니다. 여러분, 과제가 주어지거든 꼭 하세요. 과제를 내는 이유는 꼭 알아야 하기 때문에 출제하는 거예요. 복습을 해서라도 익히라는 거죠. 퀴즈도 마찬가지예요. 퀴즈는 피드백도 받으니 얼마나 좋아요. 하지만 공들여 과제와 퀴즈를 푸는 사람은 적습니다. 바쁜 것 알아요. 그래도 출제자보다는 더 공들여 풀어야 하지 않을까요? 출제자만 나날이 더 학습이 될 지경이죠.
가르치는 입장, 코칭하거나 멘토링하는 입장에서 참 난감한 상황은 질문을 잘 하지 않거나 잘하지 않는 거예요. 질문해서 도움을 받지 않고 혼자 고생하다 입문 과정을 포기하거나 몇 분이면 해결될 일을 몇 시간이 걸려 해결하는 경우가 많습니다. 물론 그러면서 성장하기도 하지만 시간을 감안하면 너무 효율이 떨어져요. 가끔 자기만의 방식이 있다고, 자기주도학습을 주장하며 질문을 안 하는 분도 있는데, 자기주도학습은 독학하는 게 아닙니다. 도움을 받아 해결하고나서 그 문제와 상황을 연습하는 게 낫습니다.
질문하는 것도 중요하지만, 어떻게 질문하는지가 실은 더 중요합니다. 무엇무엇이 안 돼요, 같은 질문은 소모성 질문이에요. 대개 질문 한 번으로 문제가 해결되지 않지요. 질문자는 답변자가 공들인 답변을 해주길 바라듯이, 답변자도 질문자가 공들인 질문을 하길 바랍니다. 그런 질문은 답변자가 답변하기 용이하게 하기도 하지만, 질문자 자신이 학습하는 과정이죠.
그런데 입문자는 질문에 공들이는 방법을 모를 가능성이 커요. 그래서 질문 양식을 제공했습니다. 이 질문 양식은 제가 꾸준히 설계하고 다듬어온 것이지요.
별표 표식은 꼭 포함하라는 뜻인데요. 잘 보시면 꽤 깐깐합니다. 이 질문 양식을 설계한 목적이자 의도는 문제 정의하고, 문제와 자신의 상태를 인지하도록 돕는 데 있습니다. 이 양식을 충실히 채우다보면 스스로 문제 해결 방법을 찾기도 하고, 문제와 상황을 이해한 상태일 가능성이 높아서 답변을 받으면 더 깊이 흡수하며 학습 효과를 거둘 겁니다.
지금까지는 제가 예상하며 미리 피해가라고 제시한 고난 상황을 소개했는데요. 이번엔 제 예상을 벗어난 입문자의 고난 상황을 소개해보겠습니다. 몇 가지 안 되긴 해요. 참고로 지금부터 소개하는 사례는 여태껏 제가 강의해온 상황들을 종합한 것이며, 파일럿 프로그램 경험만을 대상으로 삼는 건 아니에요.
제 생각보다 많은 입문자가 겉으로는 입문자라고 하지만, 진짜 속마음은 입문자임을 인정하지 않았어요. 입문자 상태인데 입문자의 마음이 아닌 거죠. 그래도 자기 나름대로 컴퓨터를 활용하며 먹고 사는데, 컴퓨터를 활용하는 코딩도 실은 입문자 대우를 받고 싶지 않은거죠. 더구나 컴퓨터 활용에서 초보자, 입문자라니, 인정하기 어려울만 합니다.
하지만, 우리는 자신이 주로 사용하는 도구에 대해서 능숙한 것이지 사용해보지 않은 것은 당연히 입문자입니다. 그리고 사실 컴퓨터의 기초를 학습하고 활용하는 일이 요즘 시대에는 별로 없습니다. 운영체제의 GUI와 사용자 경험이 매우 고도화되어 컴퓨터 기초를 몰라도 컴퓨터를 활용하는 데 무리가 없기 때문이죠.
예를 들어, 많은 사람이 부담스러워하는 셸(Shell)은 컴퓨터를 활용하는 기초 중에서도 기초입니다. 우리가 컴퓨터를 다루려면 운영체제 커널을 통해야 하는데, 사용자가 커널과 소통하는 계층이자 관문이 바로 셸이거든요.
이 이야기를 이렇게 길게 하는 이유는 바로, 학습자가 자신의 상태를 투명하게 공유하지 않기 때문입니다. 학습자가 무엇을 알고 무엇을 모르는지 알아야 학습자에게 맞는 적절한 도움을 줄 수 있는데요. 자꾸 자신의 상태를 숨기고 문제 자체에만 관심사를 끕니다. 그러면 학습자가 학습하기에 적절한 피드백이 일어나기 어려워요. 짠 입맛을 갖고 있다는 말 한 마디만 하면 간을 조절할텐데, 자꾸 뭔가 맛이 별로라고만 말하는 것과 다를 바 없는 거예요.
근데 이 문제는 오프라인에서 상당 부분 해소되었습니다. 학습자의 상태를 직접 관찰해 상태를 추정하면 대부분 맞더라고요. 온라인에서는 대부분 웹캠을 끄니 제가 학습자의 상태를 파악하기 어려웠던 거죠. 그래서 저는 대부분 멘토링으로 진행되는 커피챗에서는 웹캠을 킬 것을 요구합니다. 그렇지 않으면 커피챗을 마친 후 너무 피곤하더라고요.
지금까지 소개한 입문자의 고난을 두 줄로 요약하면 이렇습니다.
하란대로 안 하기도 하고, 하란대로 못 하기도 합니다. 여러분의 생각과 달리 숙련자들이 대체로 하란대로 잘 따릅니다. 그래서 학습 진도도 빠르고 응용할 여유도 있죠. 겸손함을 말하는 게 아니라, 강사가 하라는 것을 경험을 토대로 빠르게 이해하고 의도를 파악하며, 어떻게 해야하는지 빠르게 파악해 그대로 할 수 있기 때문에 그렇습니다. 학습에 기존 지식이 중요한 이유가 바로 이런 데에 있습니다. 기존 지식과 기억을 활용하는 거죠.
그럼 어떻게 해야 입문자들이 하라는 대로 안 하고, 못하는 자신의 성장 과정을 극복할 수 있을까요?
“이런 걸 하라니. 내가 초보라고 무시하는 거야?” 라 생각이 드는 것을 확실하고 착실히 공을 들여 익히세요. 누군가 네 발 자전거를 주거든 화를 내지 말고 네 발 자전거부터 탑니다. 누군가 어린이 바이엘 교본을 주거든 화를 내지 말고 1장부터 연습해갑니다. 왜냐하면 입문자거든요. 입문자니까 입문 단계부터 착실히 밟아 나아가는 겁니다.
특히 코드 에디터나 셸은 확실히 손에 익힐수록 학습 효율이 오릅니다. 현실 세계에 빗대자면 코드 에디터나 셸은 도로, 수도, 인터넷망과 같은 인프라 역할을 합니다. 인프라가 튼튼할수록 일상에서 더 많은 활동을 안전하고 효율성 있게 합니다.
우리는 성인일 뿐, 입문자입니다. 성인이라고 해도 입문자가 아니진 않죠.
첫 술에 배부르고 싶어하는 분도 많아요. 적당한 욕심은 동기부여가 될지도 모르지만, 과한 욕심은 포기하게 만드는 경우가 많았습니다. 우리는 별의 커비가 아니에요. 남의 능력과 지식을 한 입에 꿀꺽 흡입해 내 능력과 지식으로 발휘할 수 없어요. 숙련가들은 이미 숙련되고 숙달된 것도 끊임없이 연습하고 학습하며 숙련도를 강하고 높게 관리합니다. 우리는 아직 숙련 단계에 이르지 못했어요. 계속 나아가야 해요.
그리고, 학습 단계에서 느끼는 혼란, 불안, 막막함 같은 불편한 기분이 드는 것은 자연스러운 현상입니다. 정보가 뇌 신경망에 제대로 자리잡고, 서로 연결되어 마침내 지식이 되는 그 과정에서 우리는 혼란을 느낍니다. 여러분에게 프로그래밍 재능이 없어서 그런 게 아니라는 거예요. 그 불편한 기분과 감정을 불편하더라도 받아들이고 지식이 자리잡는 데까지 나아가고 버텨내야 합니다. 그러다 어느 순간 아하! 하며 그동안 나를 괴롭혔던 혼란이 걷히면서 이해가 되는 때가 옵니다.
그리고, 질문을 두려워하지 마세요. 대부분 같은 처지예요. 이 사람도 모르는구나, 라는 생각으로 옆사람을 쳐다보면 대개는 맞습니다. 나만 모르는 경우는 흔하지 않아요. 나만 모르는 경우는 대개 딴짓해서 내용을 놓친 경우일 거예요.
컨텐츠 비용은 생각보다 저렴해요. 한 번 제작하면 사용 자체엔 비용이 거의 들지 않으니, 컨텐츠를 이용하는 회를 거듭할수록 더 저렴해지죠. 그럼에도 강의비는 유지되거나 비싸집니다. 왜냐하면 강사를 활용하는 비용 때문이에요. 내 소중한 돈과 시간을 들여 수강한 강의잖아요. 열심히, 골고루, 촘촘하게 질문해서 강사를 괴롭히세요. 환불해주겠다는 말이 나올만큼 질문해서 확실하게 학습해가세요. 그럼 제 값 내고 강의를 듣는 거예요.
그리고, 기왕 질문하는 것, 좋은 질문하는 방법을 고민하고 활용해서, 더 질 좋은 답변을 받으세요. 질이 좋다는 건 내게 맞춤 답변을 받는 겁니다. 좋은 질문과 질 좋은 답변은 그 과정 자체가 학습법이자 성장입니다.
마지막으로 프로그래밍 입문의 목적을 고민해보세요. 프로그래밍 언어를 익히는 것과 컴퓨팅 사고를 익히는 것은 서로 관련되어 있지만, 서로 다른 주제입니다. 컴퓨팅 사고를 하게 되면 프로그래밍 언어에 수월하게 익숙해지긴 하지만, 컴퓨팅 사고를 따로 익히지 않은 채 프로그래밍 언어를 익히고 나서 자연스럽게 컴퓨팅 사고를 익히는 경우도 많습니다.
이 영상은 정확한 지침을 수행하는 도전 과정을 보여줘요. 아이들이 종이에 지침을 적으면 아빠가 지침대로 행동해서 샌드위치를 먹는 거죠. 컴퓨터 알고리즘을 직관적으로 이해할 수 있는 좋은 영상입니다.
가장 유명한 건 역시 스크래치지요.
네이버 커넥트재단이 운영하는 엔트리도 좋습니다. 초등학생이나 중학생 등 대체로 어린 친구들이 많이 활용하는 도구예요. 그래서인지 성인이 이런 도구를 진지하게 학습하는 데 쓰는 경우를 거의 못봤어요. 좋은 도구예요.
일찍부터 프로그래밍을 시작한 이들을 보면 어렸을 적에, 이런 도구가 됐든 무수히 시행착오를 거치든 해서 컴퓨팅 사고와 컴퓨터 기초 활용에 익숙해지고, 조금 자라면 마인크래프트 맵을 만들면서 컴퓨팅 사고가 제대로 자리잡는 경우를 많이 봅니다. 프로그래밍 언어는 문법 위주로 빠르고 가볍게 익혀서 활용해가며 언어에 친숙해지고, 그러면서 언어 이해도도 오르죠.
집중력이 유지되는 시간이 짧은 어린 연령대가 몰입할 수 있게 아기자기하고 귀엽고 친절하게 만들어졌습니다. 그러니 성인이 다루기에 얼마나 쉽고 편안하겠어요.
이제 정리하겠습니다. 입문에 포기하지 않는 금단의 비법은 말이죠.
그럼에도 코치가 필요할지 모릅니다. 그럴 땐 코치를 찾아야 합니다.
이렇게 신뢰와 지지를 받는 코치를 말이죠.
핵심을 관통하는 간결하고 명확한 코칭을 해주는 그런 코치를 말이죠.
바로 푸딩캠프가 여러분의 사수이자 코치가 되어 드립니다.
발표 장표 다운로드 : https://pudding.camp/~/bgnr-scrt-psvrnc
푸딩캠프 뉴스레터를 구독하면 학습과 성장, 기술에 관해 요약된 컨텐츠를 매주 편하게 받아보실 수 있습니다.