교내 다양한 비교과 교육 프로그램을 신청할 수 있는 위인전 사이트에서 "비교과 파이썬 심화 프로그램" 모집 공고를 보았다. "야, 너두 코딩!"이라는 이름의 프로그램이었고, 배우는 내용으로는 "객체 지향 프로그래밍", "스레드(Thread)", "데이터 사이언스"가 주요 내용으로 적혀있었다. 과제를 통해 실습을 하고, 이를 피드백해주는 방식으로 진행한다고 표시되어 있어 이목을 끌었다.
본인의 경우, 고등학교 1학년 때 프로그래밍을 접하고 정말 많은 교내외 프로젝트를 진행했다. 그러기 위해서는 다양한 프로그래밍 언어의 기초를 익히고 이를 실용적으로 사용할 수 있을 정도의 실력을 기르는 것이 필수였다. 고등학교에 입학하기 전까지 프로그래밍의 'ㅍ'자도 모르던 내가 2년간 전국단위 소프트웨어 대회에서 각종 상을 타게 된 계기는 바로 "실습"이다.
본인은 프로그래밍을 하거나 배울 때 가장 중요하다고 생각하는 것이 바로 "응용", "실습"이다. 많은 사람들이 "프로그래밍을 배운다"와 "프로그래밍 언어를 배운다"를 같다고 생각하는데 비슷하면서도 전혀 다르다. 프로그래밍 언어는 단순한 그 언어의 특성과 문법을 익히는 것이며, 프로그래밍을 배우는 것은 알고리즘 실력을 기르는 것이다.
프로그래밍을 배우든, 언어를 배우든 틀에 박힌 강의, 책으로 배우는 것은 효율이 매우 떨어진다. 특히나, 프로그래밍 실력은 특정 수준 이상으로의 발전은 거의 불가능하다. 개인적인 경험, 다른 사람들의 의견을 종합해 보았을 때, 가장 효율적인 방법은 바로 실습이었다.
이번 비교과 프로그램을 신청한 계기도 바로 "실습 위주"라는 설명 때문이었다. 물론, 그동안 많은 대회를 Python을 사용해 진행했음에도 불구하고, 기초부터 문법을 제대로 배워본 적이 없던 언어였기에 이번 기회에 문법과 더불어 고급 문법까지 다루게 될 수 있도록 공부하기 위함이었다. (사실, 일련의 교육을 따라가는 것 보다 다양한 프로젝트 내에서 프로그램을 실제로 해보며 공부하는 것이 더 좋다고 생각하며, 실제로 이러한 방식으로 Python을 익힌 사람이었다.)
실제로 교육 진행도 설명에 써 있던 바와 다름 없이 Zoom을 이용한 3시간 실시간 강의를 수강한 후, 강사님께서 내주신 과제를 개별로 해결한 후 피드백을 통해 스스로 공부를 하는 방식이었다. 가장 마음에 들었던 부분은 실습과 피드백 부분이었다.
교육을 제공해주신 분은 소프트스퀘어드라는 기업의 교육팀장을 맡고 계신 정지운 강사님이셨다. 개인적으로 프로그래밍을 강의나 책을 통해 공부하는 것을 비효율적이라고 생각하고 있었지만, 강사님의 수업은 다소 달랐다. 그동안의 "프로그래밍 강의"라는 것에 대한 선입견을 깨뜨려주었다. 일단, 가장 마음에 들었던 점은 문법에 얽매이지 않는다는 것이었다. 많은 아니 거의 모든 프로그래밍 강의는 문법에 의존한다. 문법을 외우고 어떻게 사용하는지 단편적인 부분만 가르친다. 하지만 강사님께서는 객체지향 프로그래밍이라는 개념 자체에 대해 접근하셨고 전체적인 큰 숲을 이해하도록 도와주셨다. (Python의 문법은 어느 정도 안다고 가정을 하고 진행한 수업이었지만) 클래스 선언과 인스턴스 생성 등 코드의 겉모습에 집중하지 않고 왜 코드가 이렇게 작성되어 있는지 인과관계와 흐름을 파악할 수 있도록 도와주셨다.
커리큘럼은 위와 같았다. 사실, 그동안의 대회와 프로젝트를 통해 기본적인 문법은 알고 있었지만, 본래 객체지향 언어인 Python을 절차지향적으로만 사용하고 있었기 때문에 객체 지향과 같은 고급 문법을 배우고 싶었다. 또한, 위에서 언급했듯이 실습을 통해 언어를 익히는 것을 선호하기 때문에 객체 지향 이론 학습 → 설계를 바탕으로 콘솔 기반 게임 제작(실습) → Thread를 추가한 실습으로 구성된 강의의 커리큘럼이 매우 마음에 들었다. 실제로 이론을 바탕으로 실습 위주 수업을 진행하는 강의들이 거의 없다 보니 이번 비교과 수업을 통해 객체지향과 Thread를 확실히 알고갈수 있겠다는 확신이 들었다.
1주차.
다양한 종류의 프로그래밍 스타일 중 가장 어렵다고 알려진 프로그래밍 방식이기도 한 객체지향에 대해 여러 번 공부하기 위해 시도해봤지만 항상 모든 강의에서는 "클래스는 붕어빵 틀, 객체는 붕어빵"이라는 글만 반복되고 본질을 알려주진 못했었다.
정지운 강사님께서는 명쾌한 설명으로 객체지향을 설명해주셨고, 인스턴스(객체)와 클래스, 상속, 부모, 자식 등 모든 개념을 간단하게 정리해주셨다. 서로의 관계를 이해하며 공부하기 훨씬 빠르고 전체적인 그림이 이해가 되었다. 이후 과제로는 객체지향을 이해할 수 있는 몇 가지의 문제들이 주어졌다.
문제는 풀이하는 사람에게 이해시키고자 하는 내용이 분명했고, 문제를 통해 확실하게 배운 것을 복습할 수 있었따. 수요일에 수업을 진행하고 이후 약 5일간 스스로 프로그래밍을 해본 후 월요일에 진행되는 멘토링에서 질의응답을 통해 궁금한 점들을 물어볼 수 있도록 하였다.
과제를 제출한 후 위와 같이 (매주) 피드백을 주셨다. 모든 수강생에게 튜터를 배정해 코드를 확실하게 봐주신다고 하셨는데 운이 좋게도 강사님께서 튜터를 맡아주셨다. 솔직히 피드백 내용을 보고 조금 놀랐다. 학교 전공 수업을 포함해 어느 수업을 들어도 맞는 코드에 대해 수정사항을 내어주는 피드백은 드물었는데, 9, 10번에서 지적을 해주셨던 내용은 코드를 한 줄, 한 줄 뜯어서 보셨다는 것이기 때문이다. 덕분에 생각지도 못했던 부분을 더욱 효율적으로 고칠 수 있게 되었다. 분명 다른 수업이었으면 모르고 넘어갔을 부분이었을 것이다.
2주차~3주차
지난주 배웠던 객체지향 개념을 활용해 실제 게임을 설계하고 만드는 수업이었다. 2주차에는 게임 설계와 객체지향을 활용한 코딩, 3주차에는 Thread를 추가하여 게임을 업그레이드 하는 수업이었다. Thread는 컴퓨터공학 학부생이라면 모를 수 없는 용어이다. 구현도 어렵지 않지만 이론 수업에서 가르치는 경우는 매우 드물다. 전공 수업 뿐만 아니라 인터넷 강의를 찾아봐도 쉽지 않다. 대부분 코딩을 배우는 콘솔 기반 프로그래밍에서는 쓸 일이 거의 없기 때문이다. 하지만 안드로이드 앱, 아두이노 기기 리딩 프로그램 등을 제작할 때 Thread를 모른다면 거의 진행할 수 없는 수준이다. 모든 프로그램은 Main Thread에서 돌아가며, 부가 기능들을 Sub Thread를 이용해 돌려야 하는 일이 99%로 있다. Thread를 가르쳐 주셨다는 것은 실전 위주로 교육을 하는 소프트스퀘어드만의 철학이 담겼던 수업이 아니었나라는 생각이 든다. 물론, 실전을 하기 위해선 Thread는 필수 기술이며 다만 가르치는 곳이 없었을 뿐이다.
2, 3주차 수업을 통해서는 그동안 쓴적은 많았지만 실제로 배워본 적은 없었던 Thread를 배우고, 실제로 회사에서 한 프로그램을 만들 때 어떠한 기준과 절차로 만드는지 알 수 있었던 수업이었다.
이 때 몸이 안좋아서 과제를 조금 늦게, 간단하게 제출하였는데 제출 기한을 하루 넘겼음에도 피드백을 정성껏 해주셔서 정말 감사했다.
4주차.
4주차에는 Kaggle 사이트에서 입문용이라고 불리우는 타이타닉 예제를 이용해 데이터 분석을 시작하는 과정과 시각을 배웠다. 본인의 경우 객체지향과 Thread에 더욱 관심을 갖고 있었지만, 수업 때 설문조사를 보니 이번 차시의 내용인 데이터분석에 관심을 갖고 지원하신 분들도 꽤 계신 듯 했다. Python을 이용해 기술적으로 분석하는 것 보다는 실전에서 사용하듯 데이터를 크게 보는 통찰력과 분석에 기초가 되는 아이디어를 구축하는 방법에 대해 가르쳐주셨다.
Python을 이용해 기술적으로 데이터를 다루는 것보다는 데이터를 어떻게 바라보아야 하는지 넓게 보는 시각과 통찰력, 데이터를 다루는 데에도 아이디어가 중요하다는 것을 깨닫는 소중한 수업이었다.
이번 비교과 "아, 너두 코딩!"에서 배운 내용은 먼저 정말 많은 것을 배울 수 있는 아주 좋은 기회였다. 방학 내내 대회 참가로 안드로이드 앱 코딩만 하던 내게 정말 무언가를 얻어갈 수 있었던 가치 있는 시간이었다. 특히나 프로그래머는 필수로 알아야 하지만 혼자서는 배우기 어려운 객체지향 개념과 실전에서는 무조건 쓰이지만 아무도 가르쳐주지 않는 Thread, 데이터를 다룰 때의 통찰력과 아이디어를 배우며 컴퓨터공학부 학부생으로의 가치가 한 단계 업그레이드 되었다는 생각이 들었다.
혹시라도 다음 겨울방학에도 같은 프로그램이 진행된다면 주변에 프로그래밍을 배우고 싶어 하는 친구들에게 적극 추천하고 싶다. 이처럼 객체지향 뿐만 아니라 프로그램 전체에 대한 감을 빠르게 잡아주는 수업이 없었기 때문이다.
교육을 담당해주신 정지운 강사님은 소프트스퀘어드 소속이시다. 소프트스퀘어드는 외주연계 코딩 교육 기업이라고 한다. 아마 코딩을 배워보고 또 어려움을 느껴보신 분들이 많기에 이러한 방향으로 코딩 교육의 컨셉을 정한 듯 하다. 사실, 이것이 가장 빠르고 확실한 방법이다. 아무리 언어의 문법을 배워도 실제로 돈을 벌어다 주고, 현실에서 쓰이는 것은 응용 프로그래밍이기 때문이며, 생각보다 응용 프로그래밍에는 많고 복잡한 문법이 쓰이지 않는 경우가 대다수이기 때문이다. 아마 소프트스퀘어드는 이러한 사실을 잘 알고 있기에 실전에 강하도록 프로그래밍을 가르치고, 이를 이용해 실제 외주까지 이어지며 실전을 경험하게 해주는 것 같다.
강사님의 강의에도 이러한 철학이 잘 묻어나 있었다. 실전에서 쓰일 정말 필요한 강의 내용과 이론을 실전에서 사용하도록 유도하는 예제들과 과제를 통해 배운 이론을 순식간에 나의 것으로 만들수 있도록 하였다.
마지막 시간에 소프트스퀘어드에 대해 설명해주셨다. 강사님께서는 광고이니 들을 사람만 남으라고 말하셨지만 난 지금까지 이러한 퀄리티의 강의와 과제, 정성이 담긴 피드백을 남겨주신 분이 교육을 담당하고 계신 기업에 대해 궁금했다. 소프트스퀘어드는 기수제로, 자신이 원하는 분야에 지원하게 되면 오프라인 교육을 통해 수업에서처럼 실전 위주의 수업과 실습을 병행한다고 한다. 4주동안 경험해본 바로는 수업의 퀄리티와 수업 진행 후 얻을 경험과 실력에 대해서는 더욱 의심할 여지가 없을 것 같다. 3년 개발을 해본 경험으로서 자신있게 말할 수 있다. 꼭 소프트스퀘어드의 수업이 아니더라도 프로젝트(혹은 토이 프로젝트)와 연계해 실전 응용 프로그래밍을 통해 코딩실력을 기르는 것이 가장 빠르고 가장 효율적이다. 혹시 자신의 대학 혹은 학교에 위와 같은 비교과 프로그램이 개설된다면 무조건 수강하는 것을 추천한다. 물론 Python 기초 지식을 갖고 있어야 하지만 Python 문법은 하루면 익힐 수 있기 때문에 무료로 엄청난 실력을 얻어갈 수 있는 기회가 될 것이다.
혹은 빠르게 코딩실력을 업그레이드할 수단을 찾고 있다면 소프트스퀘어드를 추천한다. 위에서 언급했듯 "실전 실습"이 가장 효율적인 방법임을 3년간의 경험을 통해 알아냈기 때문이며, 4주동안 소프트스퀘어드 방식의 교육을 받아 보았기 때문이다. 실전으로 프로젝트를 진행하게 된다면 프로그래밍 실력이 늘지 않을 수 없다. 비싼 돈 내어가며 학원에서 문법에 매달리는 것은 정말 돈낭비다. 가장 효율적인 방법을 찾아 단기간에 스스로의 노력이 가장 중요한 기술이기 때문이다. 본인도 방학 쯤 알바를 통해 여유 자금이 생긴다면 소프트스퀘어드에 투자해 실전 감각을 최상으로 끌어올려보고 싶다.
해당 포스팅은 <소프트스퀘어드>에서 제공한 비교과 수업 내에서 개최한 "수강후기공모전" 참가작임을 알려드립니다.