brunch

You can make anything
by writing

C.S.Lewis

by 박재성 Apr 07. 2021

아들과 함께 프로그래밍 4

아들과 함께 프로그래밍한 이전 이야기가 궁금하다면 아들과 함께 프로그래밍하기아들과 함께 프로그래밍 2, 아들과 함께 프로그래밍 3 에서 볼 수 있다. 이 글은 프로그래머이면서 교육자로 살고 있는 한 명의 아빠가 아들과 함께 프로그래밍을 하면서 느낀 점을 기록하고 있는 글이다. 나와 아들의 추억을 남기기 위해 기록으로 남기고 있다.

아들과 함께 프로그래밍 3 글에서 언급했듯이 아들은 이펙티브 코틀린(Effective Kotlin) with TDD, Refactoring, Clean Code 교육 과정을 수강했다. 코틀린 과정을 들으며 코틀린 문법뿐만 아니라 TDD, 클린코드, OOP를 연습하는 계기가 되었다. 아무래도 앞선 단계에서 파이썬을 통해 프로그래밍한 경험이 있다 보니 코틀린을 익히는데 큰 어려움이 없었다. 파이썬으로 프로그래밍할 때는 프로그래밍의 즐거움을 느끼는 것에 집중했다. 프로그래밍에 대한 즐거움을 느꼈다는 생각이 들어 다음 단계로 코드 품질과 테스트에 대한 경험을 전하고 싶어 이 과정을 수강하도록 했는데 결과는 만족스러웠다.


아들과 함께하는 1:1 코드 리뷰

코틀린 과정을 수강한 후 다음 단계의 경험은 코틀린 기반으로 웹 애플리케이션 개발 경험을 하는 것이 좋겠다고 결정했다. 기술은 코틀린 + 스프링 + JPA로 구성했다. 이미 ATDD와 함께 클린 API로 가는 길 과정에서 사용하는 좋은 미션도 있기 때문에 이 미션을 자바에서 코틀린 기반으로 변경해 진행하는 것을 목표로 했다. 코틀린 + 스프링 + JPA 기반으로 개발한다고 관련 책을 읽는 방식이 아닌 뼈대 코드를 주고 github의 이슈를 통해 미션을 부여하고, 리뷰 요청을 보내면 내가 1:1로 코드 리뷰하는 방식으로 진행했다.

이미 ATDD 과정에서 미션 요구사항을 잘 정리해 둔 상태였기 때문에 특별히 많은 시간을 투자하지 않아도 위와 같이 양질의 이슈를 생성할 수 있었다. ATDD 과정의 미션을 사용하도록 허락해준 팀원 류성현에게 감사의 말을 전한다.

미션을 ATDD 과정에서 가져온 만큼 코틀린 + 스프링 + JPA에 대한 학습 외에도 자연스럽게 ATDD 기반으로 개발하는 습관을 들이도록 했다. 앞의 코틀린 과정에서 TDD 경험을 했기 때문에 초반에 다소 힘들어했지만 빠르게 적응해 나갈 수 있었다.

9월에 시작한 지하철 노선도 미션을 12월까지 시간 나는 틈틈이 아들의 속도에 맞춰 진행했다. 앞선 프로그래밍 경험이 있었다고 해서 아들이 프로그래밍에 완전히 몰입한 것은 아니다. 학교를 다니고, 남는 대부분의 시간을 게임에 쓰는 것은 비슷했다. 한 가지 다른 점이라면 게임이 지루해질 즈음에 틈틈이 이 미션을 진행했다는 것이다. 일단 한번 몰입하면 상당히 오랜 시간을 미션을 구현하는데 집중한다는 점이었다. 리뷰 요청이 너무 뜸하면 한 번씩은 상황 체크를 통해 미션을 지속할 수 있도록 해야 했다. 약간의 조급함은 있었지만 다른 사람들에 비해 빨리 시작한 만큼 시간적인 여유를 가지고 기다리기로 했다. 재촉하지 않기로 했다.


재촉하지 않고 기다렸더니 기대하지도 않았던 경험을 할 수 있었다. 지하철 노선도 미션을 보면 최단 거리를 구현하는 기능이 있다. 이 미션이 알고리즘보다는 웹 애플리케이션을 구현하는 미션이다 보니 최단 거리를 직접 구현하지 않고 이미 구현되어 있는 라이브러리를 제공한다. 그런데 아들이 이미 구현되어 있는 라이브러리를 사용하면 미션이 재미없어 직접 구현할 계획이란다. 큰 기대는 하지 않고 그렇게 하라고, 재미있는 경험이 될 거라고 호응만 해줬다. 며칠을 끙끙 대더니 예상보다 빠르게 구현했다고 한다. 학교 가면 공부도 재미없으니 수업 시간에 연습장에다 최단 거리 구하는 알고리즘 설계하는데 시간을 쓰고, 집에 와서 구현하는 방식으로 진행했다고 한다. PR(Pull Request)를 보니 구현을 성공했을 때의 즐거움이 나에게도 느껴지는 듯했다.

이 단계에서 끝낼 수도 있지만 이런 좋은 학습 기회를 놓칠 내가 아니지. 구현한 코드를 보니 전체 경로를 탐색하는 방식으로 구현하고 있었다. "선배들이 개발해 놓은 성능이 더 좋은 다익스트라 알고리즘이 있는데 한번 구현해 보지 않을래?"라고 제안했더니 도전해 본단다. 다익스트라 알고리즘 문서 하나 던져주고 기다렸더니 며칠 지나지 않아 구현에 성공했다.

기대하지도 않았던 경험까지 하면서 아들과 즐겁게 미션을 마무리할 수 있었다. 내가 아들을 위해 투자한 시간은 미션을 설계하고, 다음 단계로 구현할 이슈를 생성하고, 리뷰 요청이 오면 피드백하는 것이 전부였다. 하지만 아들은 조금씩 성장하고 있었다. 다음 단계를 시작할 때가 왔다.


미션 끝. 방학. 개발자로서 시작

2021년 1월. 계획했던 모든 미션이 끝났다. 방학이다. 새로운 도전을 할 때가 왔다. 


아들에게 코틀린을 가르치려고 계획했을 때의 목표가 NEXTSTEP 플랫폼 개발에 참여시키는 것이었다. 개발할 이슈는 많은데 교육에 대부분의 시간을 투자하느라 NEXTSTEP 플랫폼 개발은 항상 우선순위에서 밀리는 실정이다. 이 문제도 해결하면서 아들의 경험도 쌓을 수 있는 좋은 기회라 생각했다. 아들이 NEXTSTEP 플랫폼 개발을 하며 받는 대가는 월급 50만 원이다. 아들은 상당히 큰돈이라며 좋아했지만 옆에 있던 딸은 노예 계약이란다. 역시 대학물 몇 년 먹었다고 세상 물정을 좀 안다. 맞다. 요즘 같이 개발자가 귀한 세상에 50만 원이면 거저 먹는 거다.


그렇게 아들과의 계약을 맺고, 2021년 1월부터 NEXTSTEP 플랫폼 개발 업무를 시작했다. 직원으로 채용한 만큼 내가 쓰던 중고 노트북도 선물로 주고, 27인치 모니터도 하나 사줬다. 정말 한 명의 개발자로 채용한 느낌이 들도록 했다.

대부분의 회사나 팀이 그렇듯 신입 사원이 입사를 하면 가장 먼저 시키는 일 중의 하나가 관리 툴이다. 나 또한 필요하지만 시간적인 여유가 없어 미루고 있던 관리 툴 기능이 많았기 때문에 자연스럽게 관리 툴 기능부터 업무로 배정했다. 방학 중이라 일주일에 한, 두 개의 이슈를 해결하는 것을 목표로 했다.


현업 개발자들이 리뷰할 생각을 하니 엄청 긴장하면서 첫 번째로 구현한 기능에 대한 리뷰 요청을 보냈다. 역시나 첫 번째 경험은 누구에게나 두렵고 긴장되는 순간이다.

NEXTSTEP 플랫폼 개발에서 아들은 내 계정인 javajigi를 사용하고 있다.
우리 팀은 모두 닉네임을 쓰고 있는데 아들의 닉네임은 레드(red)이다.

아무리 생각해도 해결 방법을 찾지 못했을 때 남긴 리뷰다. 정말 신입사원으로 입사하면 피드백에 대해 이런 피드백 남길 수 있으려나?

선배 개발자의 영어 공부에 대한 조언이다. 이런 조언이 학교 선생님, 부모가 하는 조언에 비해 10배, 100배의 더 큰 위력을 발휘한다. 필요에 의한 공부의 필요성을 가슴으로 느끼는 순간이지 않을까?


방학 2개월 동안 내 예상보다 많은 기능을 구현했다. 기능 구현 속도가 빨라 내가 다음 업무를 배정하는데 어려움을 느끼는 순간도 있었다.

아들이 NEXTSTEP 플랫폼 개발을 하며 가장 달라진 점은 할당된 기능 구현을 완료하기 전까지는 게임을 하지 않았다. 기능 구현을 완료하면 무엇인가 끝냈다는 느낌이 들어 머리를 식히기 위해 게임을 하는 식으로 바뀌었다. 과거 게임이나 유튜브 동영상 보다가 잠자기 직전에 학교 숙제를 하는 모습과는 확연히 다른 모습을 보였다.


나와의 관계에서도 달라진 점이 있다. 플랫폼 개발을 시작하며 나와 프로그래밍 관련 수다를 떠는 시간이 점점 더 많아지고 있다. 고3 아들과 30분에서 1시간씩 대화를 나누며 즐거움을 공유할 수 있다는 것. 그 자체만으로 엄청난 즐거운 경험이다.


개학. 고3. 학교에서 프로그래밍 학습하기

그렇게 2개월의 방학이 끝나고 아들의 고3 생활이 시작되었다. 고3이고, 학교에서 대부분의 시간을 보내고 있지만 아직도 아들은 NEXTSTEP 플랫폼 개발을 병행하고 있다. 학교를 자퇴하는 것도 고려해봤지만 아들이 싫단다. 학교 공부는 정말 재미없고 싫은데 친구들과 어울리는 것이 좋다면서 자퇴는 하지 않겠다는 아들 녀석. 어떻게 하면 학교 생활을 좀 더 재미있게 할 수 있을까 고민하다 학교에서는 프로그래밍 관련 책을 읽기로 했다. 학교 공부는 정말 하기 싫어하니 조금은 덜 싫은 프로그래밍 관련 책을 읽게 만든다면 이 또한 프로그래밍 역량을 키우는데 의미 있다고 생각했다.


프로그래밍 관련해 지금 시점에 가장 궁금한 부분이 뭐냐고 아들에게 물었다. 컴퓨터의 동작 원리가 궁금하단다. 그렇게 해서 추천한 책이 CODE다.

3월 월급날인 25일까지 읽는 것을 목표로 했다. 책을 읽는 것도 업무의 한 부분으로 인정해주기로 했다. 단, 25일까지 읽지 못할 경우 월급 또한 같이 밀리기로 했다.


그렇게 아들은 학교 자습 시간마다 책을 읽고 있다. 오히려 책을 읽는 것이 학교 시간도 의미 있게 쓸 수 있어 즐기는 눈치다.


3월에 CODE 책을 끝까지 읽었다. 전체 내용을 모두 이해한 것은 아니지만 궁금한 부분이 많이 해소됐다며 좋아하는 아들을 보니 다행이라는 생각이 든다.


CODE 다음으로 읽을 책을 고민하다 일단 시작한 것 좀 더 깊이 있는 경험을 하는 것이 의미 있겠다는 생각이 들었다. 이렇게 결정한 책이 밑바닥부터 만드는 컴퓨팅 시스템 책이다. CODE가 이론적인 내용을 담고 있다면 밑바닥부터 만드는 컴퓨팅 시스템 책은 컴퓨터를 직접 만들어보며 컴퓨터의 동작원리를 이해하는 방식이다. 이론적인 내용보다 무엇인가를 구현할 부분이 많기 때문에 학교도 나가고 NEXTSTEP 플랫폼 개발도 병행해야 하는 아들에게 추천하기 꺼려졌지만 일단 추천해 보기로 했다. 


1장을 읽고 난 후 실습 환경을 구축하면서 아들이 아쉬움을 토로한다. 


아들: 아이패드에 실습환경을 구축할 수 있다면 학교에서도 구현할 수 있어 좋을 텐데.

나: 실습 환경이 그리 복잡하지 않은데 가능하지 않을까?

아들: 아쉽게도 맥북에서만 되네. 학교에 맥북을 들고 가면 눈치 보이는데, 패드는 동영상을 듣기 위해서 가져가도 되거든

나: 아쉽네. 학교에서도 할 수 있으면 정말 좋을 텐데...


대화를 마친 후 방안에 들어가더니 몇 시간 후에 나오더니 한 마디 한다. "아빠. 학교에서도 구현할 수 있게 됐어."라면서 아이패드에 떠있는 IntelliJ 화면을 보여준다. 정말이다. 아이패드에서 IntelliJ까지 가능하다니... 해결 방법은 아이패드에서 맥북으로 원격으로 접속한 것이다. 원격으로 접속하기 위해 소프트웨어까지 구매했단다. 그렇게 아들은 학교에서도 집에 있는 맥북에 원격으로 접속해 밑바닥부터 만드는 컴퓨팅 시스템 책의 실습을 진행하고 있다. 어제는 2장의 마지막 미션인 ALU(Arithmetic logic unit)를 구현하고 있단다. 고3의 경우 수시와 정시 지원으로 학생들이 나뉘면서 학교 수업의 절반 정도가 자습으로 진행한단다. 그 자습 시간을 활용해 미션을 구현하고 있기 때문에 학습에 투자할 수 있는 시간이 충분하다고 한다. 그렇게 아들은 고3의 학교생활을 즐기며 다니고 있다.


선생님들이 자습 시간에 아이패드로 무엇인가를 열심히 하고 있는 아들의 모습을 보며 무엇을 하고 있는지 물어보신다고 한다.


아들: 컴퓨터에 대한 지식이 약간 있는 분들에게 설명하기는 쉬운데 그렇지 않은 분들에게 설명하기가 너무 어려워

나: 아이패드로 프로그래밍 공부하고 있다고 하면 되지?

아들: 아이패드 사면 프로그래밍할 수 있다고 그분들이 오해할 수도 있잖아. 백만 원 넘는 돈을 투자해야 하는데. 그래서 번거롭지만 원격으로 접속해 집에 있는 노트북으로 프로그래밍하는 과정을 모두 설명하느라 좀 힘들어.

나: 앞으로 살면서 일일이 설명해야 하는 일들이 많을 거야. 네가 대학을 가지 않으면 사회 나가서 "왜 대학을 가지 않았느냐?"는 질문을 수백 번도 더 받을 거야. 사회 시스템과 다른 삶을 살려면 어쩔 수 없는 숙명이야.

아들: 뭐 괜찮아. 나는 지금처럼 다르게 사는 것이 더 좋으니까 그 정도 수고는 감수할 수 있어.


내가 모르는 사이에 아들은 또 한 뼘쯤 성장해 있었다. 아이들은 부모가 생각하는 것보다 더 빠르게 잘 성장하고 있다. 부모들은 단지 아이들이 마음껏 꿈꾸고 도전할 수 있는 환경을 만드는 것에만 집중하면 된다. 그 길이 부모와 아이들 모두의 행복을 위한 지름길이다. 


다섯 번째 이야기를 쓸 때 아들은 또 얼마나 성장해 있을까?

그 날이 기다려진다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari