인프런 최연소 지식공유자, 서울대 컴공신입생 되다! 2편

인프런 최연소 지식공유자, 서울대 컴공신입생 되다! 2편

중학생 때부터 동영상으로 C 언어 강의를 만든 두들낙서 님은 올해 서울대학교 컴퓨터공학과 19학번이 되는데요. 캐릭터처럼 눈이 초롱초롱했던 지식공유자 두들낙서를 직접 만나보았습니다.


Q. 현재 진행 중인 본인의 프로젝트가 있나요?

막 시작해보려는 게 마이티 게임이에요. 인프런에 강의 좋은 거 있으면 추천해주세요!

Q. 멋있다고 생각한 지식공유자/개발자가 있으셨나요?

유튜브에 3Blue1Brown이라고 수학 강좌 올리는 분인데, 칸 아카데미에서 선형대수학이나 미적분 강의를 올려요. 수학은 시각화가 중요한데 이 분은 직접 코드를 짜셔서 수학적인 내용들을 시각적인 영상으로 보여줘요. 그런 게 되게 이해가 잘 돼서 좋은 강의인 것 같아요. 강의에 얼굴은 안 나오고 애니메이션만 나오지만 요즘은 여기에 한국어 자막을 다는 분들도 있는 걸로 알고 있어요.
무료 강의인데 퀄리티가 되게 높아요. 저는 예전에 구독자 1,000명 때부터 봤었는데 지금은 구독자 수가 100만 명이 넘었어요. 유튜브 추천 영상에 떠서 알았는데 이 분이 되게 다양한 강좌를 만들어요. 허프만코딩이라는 알고리즘이 있는데 그 알고리즘 강의가 있었어요. 그걸 찾다가 본 것 같아요.

Q. 학원에서 어떤 걸 알려주나요?

제가 다니던 곳은 정보올림피아드를 주로 하던 학원이었어요. 정보올림피아드는 알고리즘 대회라고 보시면 되는데, 제일 빠르면서 효율적인 알고리즘을 만드는 대회라고 보시면 될 것 같아요. 예선 대회 필기고사에서는 수학 문제가 30~40% 나오고 나머지는 코딩 문제가 나오는데 그걸 통과하면 본선은 그냥 코딩이에요.
대회는 C언어만 쓰고 있어요. 사실 고급 언어이고 이쪽으로 고급 기술이 필요한 게 아니면 C언어를 안 배우는데요. NYPC – 넥슨 청소년 프로그래밍 챌린지라고 넥슨에서 여는 프로그래밍 대회에서는 C언어, C++, 파이썬 같은 언어들도 다 봐주기에 자기가 선택하면 됩니다.

Q. 학원은 초등학생 때부터 다녔나요?

학원엔 처음에 C언어를 배우고 싶어서 갔는데 거기서 정보올림피아드를 나가라고 꼬셨죠. 초등학교 5학년 때부터 갔었지만 그런 대회를 참가한 게 오히려 잘한 것 같아요.
기업에서도 코딩 / 프로그래밍 인력을 데려가려는 이유가 프로그램을 만들 때, 오류를 줄이면서 빠르게 실행되고 효율적인 프로그램을 만들고 싶기 때문이잖아요. 정보올림피아드가 딱 그런 능력을 테스트하는 대회에요.

Q. 앞으로의 어떤 사람이고 싶나요?

저는 잘 알고 있는데 다른 사람들은 잘 모르거나 이럴 때 조금 안타까운 게 있어요. 그걸 잘 알려드리고 싶어서 지식공유를 했고, 다른 사람들이 배우고 싶은 것들을 알려주는 게 가장 보람 있다고 생각해요.
이제 막 C언어를 시작하는 사람이랑 저랑은 아는 게 다르잖아요. 그 분들한테 이해하기 쉽게 가르쳐주는 거예요. 제가 많이 알고 있다고 생각하는 부분이 알고리즘이랑 C언어라서 나중에 C++ 강좌까지 다 끝내면 알고리즘이랑 자료구조 강좌도 만들 생각이 있어요.

Q. 좋아하는 언어는 어떤 거에요?

저는 당연히 C++을 좋아해요. 다른 언어들을 심도 있게 공부하지는 않았지만 C++의 가장 큰 장점이 포인터라고 생각해요. 포인터라는 개념을 다른 언어에서는 거의 다루지 않잖아요. 그런데 C언어와 C++의 개념을 알고 있는 거랑 그렇지 않은 건 진짜 큰 차이라고 생각해요.
C# 같은 경우에도 실제 값을 저장하는 타입들이 있고 reference라는 어떤 메모리 상의 공간을 가리키는 타입들이 있거든요. C#에서는 어떤 것들은 값을 저장하고 어떤 것들은 reference를 저장하는 거다, 라고 머리로만 알고 실제로 그런 개념들이 컴퓨터 상에서 어떻게 구현되는지는 배우지 않거든요. 그래서 reference를 알고 있어도 막상 코딩을 하다가 실수하는 부분들도 있어요.

포인터라는 개념을 실질적으로 배울 수 있다는 게 가장 매력적인 거 같아요. 다른 언어들은 포인터를 안 써도 되니까 귀찮은 게 없잖아요. C언어는 포인터를 하면 귀찮아지는데 다른 언어들은 그런 게 없어요. 그런데 C언어를 공부하면 포인터를 이해하게 되니까 그걸 이해하고 나서 다른 언어를 배우면 그 안에 숨겨진 원리들을 알 수 있어요. 저는 포인터를 사용하는 게 마음이 편해요. 안에 감춰져있으면 코드를 짜놓았을 때 다른 언어들은 어떤 식으로 작동할지 완벽하게 아는 게 어렵거든요. 그런데 C++은 아예 포인터라는 게 명시되어있고 이 포인터가 어디를 가리키고, 메모리를 할당했다가, 지웠다가 이런 코드 자체를 눈으로 볼 수 있으니까 코드를 살펴보기만 해도 어떤 식으로 메모리를 할당하는지 눈으로 다 볼 수 있어요. 그래서 마음이 편해요, 다 보이니까.

Q. 본인만의 포트폴리오 같은 게 있는지, 있다면 어떤 것들인지 궁금해요.

저는 연구하는 걸 좋아해요. 공부를 좋아하진 않는데 궁금하거나 꽂히는 게 있으면 파고들어요. 고등학교 때 유전 알고리즘이라고 그게 다윈의 진화론을 모방해서 컴퓨터적으로 구현했어요. 다윈 진화론이 환경에 제일 적합한 개체들이 살아남는다는 진화 이론이잖아요. 그걸 바탕으로 컴퓨터에서 어떤 조건에 가장 적합한 형태를 찾는 알고리즘이 있어요. 그 알고리즘을 이용해서 위도, 기후별로 나무 모양들이 다 다르잖아요. 그래서 위도별로 태양빛을 가장 효율적으로 받는 나무 모양이 어떤지 연구했었어요.
보통 침엽수들이 겨울에 추울 때 잎이 얼지 말라고 뾰족하게 발달했다고 들었는데, 정밀한 연구는 아니지만 유전 알고리즘을 사용해서 알아보니까 실제로 햇빛과도 관련이 있다는 걸 발견했어요. 침엽수 모양 자체가 고위도에서 햇빛 받기가 적합하다는 걸요. 정확한 연구는 아니라서 우연의 일치로 그런 건지 확실하지 않지만 실험 결과로는 그렇게 나왔어요. 교내 과학탐구대회가 있는데 거기 발표해서 은상을 탔어요.

Q. 프로그램 보고 싶네요!

프로그램 짠 것도 가지고 있어요. 근데 돌리려면 되게 오래 걸려요. 그게 여러 세대를 거듭해서 최종적으로 나오는 나무를 관찰하는 건데, 세대를 거듭하는 과정이 오래 걸려요.
코드는 C#으로 짰고, 고등학교 때 연구했던 걸로 비공개로 놔뒀어요.

Q. 다른 연구는 어떤 걸 해봤나요?

위에서 말한 내용은 식물 연구였는데, 2학년 때는 동물도 연구해보고 싶어가지고 그냥 초원 생태계를 만들어두고 거기다 동물들을 풀어놓고 진화시키는 프로그램을 만들었어요.

Q. 그럼 게임처럼 동물들이 돌아다니고 그러나요?

아니요, 되게 단순화시켜서 만들었어요. 동물을 삼각형으로 표현하고 초원도 어떤 한 구역에 풀의 양이 얼마나 있나 정도만 구현해서 생태계 내에서 동물의 습성을 관찰하고 싶어서 한 연구에요. 시뮬레이션을 해서 그 생태계에서 가장 잘 살아남는 동물을 관찰해보면 포식자를 피해서 도망다니는 습성이나, 또 보호색을 띠면서 숨어있다가 다른 동물들이 오면 잡아먹고 이런 습성들을 관찰할 수 있었어요.

Q. 어떻게 구현한 건가요?

유전 알고리즘이랑 인공 신경망을 연결해서 신경망에 입력되는 정보들, 예를 들어 주변에 어떤 색깔의 물체가 있는지와 같은 정보들을 받아들여서 어떤 행동을 할지 결정하는 인공 신경망을 만드는 거예요.

Q. 인공신경망은 코드로 만든 건가요?

예를 들어서 잡아먹는다, 풀을 뜯어먹는다, 이런 식으로 행동을 결정해서 그 결정들은 동물들이 알아서 하도록 내버려두고 그것들을 진화시키는 거죠. 인공신경망도 간단한 신경망이어서 다 제가 코드를 짰어요.

Q. 그걸 학교 다니면서 언제 다 한 거예요?

연구는 방학 동안 해서 시간이 있었어요. 원래는 학원도 다녀야 하는데 그거 한다고 숙제도 안 했습니다.

Q. 두들낙서님 주요 활동 반경 내 맛집 알려주세요 (인프런 공식 질문 ㅎㅎ)

담소 사골 순댓국이란 집이 있는데 사골 육개장이 맛있어요. 코엑스 쪽에 있는 브루클린 더 버거존이라는 수제 햄버거집 정말 맛있습니다. 제가 햄버거를 되게 좋아하는데 여기가 제일 맛있었어요.