기술을 배우고 나눠요 - www.inflearn.com
– 두들낙서 2편
막 시작을 해보려는 게 마이티 게임이에요. 인프런에 강의 좋은 거 있으면 추천해주세요.
유튜브에 3Blue1Brown이라고 수학 강좌 올리는 분이에요. 칸 아카데미 있잖아요. 거기서 선형대수학이나 미적분 강의를 올리는데요.
수학이 시각화나 이런 게 중요하잖아요. 그런 걸 그분이 직접 코드를 짜셔서 수학적인 내용들을 시각적인 영상으로 보여주세요. 그런 게 되게 이해가 잘 돼서 좋은 강의인 것 같아요. 강의에 얼굴은 안 나오고 애니메이션만 나와요. 요즘은 거기다 한국어 자막을 다는 분들도 있는 걸로 알고 있어요.
무료 강의인데 퀄리티가 되게 높아요. 저는 예전에 구독자 1000명 때부터 봤었는데 지금은 구독자 수가 100만 명이 넘었어요. 유튜브 추천 영상에 떠서 알았는데 이 분이 되게 다양한 강좌를 만들어요.
허프만코딩이라는 알고리즘이 있는데 그 알고리즘 강의가 있었어요. 그걸 찾다가 본 것 같아요.
원래 옛날 컴퓨터 학원이면 워드를 가르쳐주는 데 제가 다니던 곳은 정보올림피아드를 주로 하던 학원이었어요. 정보올림피아드는 알고리즘 대회라고 보시면 되는데요. 주어진 문제를 해결하는 여러 가지 방법이 있잖아요.
그중에서 제일 빠르면서 효율적인 알고리즘을 만드는 대회라고 보시면 될것 같아요.
수학하고 코딩이 중요해요. 예선 대회 필기고사에서는 수학 문제가 30~40% 나오고 나머지는 코딩 문제가 나오는데 그걸 통과하면 본선은 그냥 코딩이에요.
대회는 C 언어만 쓰고 있어요. 사실 C 언어가 그렇게 실용적인 언어는 아니잖아요. 고급 언어이고 이쪽으로 고급 기술이 필요한 게 아니면 C언어를 안 배우는데요. NYPC – 넥슨 청소년 프로그래밍 챌린지라고 넥슨에서 여는 프로그래밍 대회에서는 C언어, C++, 파이썬 같은 언어들도 다 봐줘요. 자기가 선택하면 돼요. 거기도 문제 형식은 올림피아드랑 비슷해요.
학원엔 처음에 C언어를 배우고 싶어서 갔는데 거기서 정보 올림피아드를 나가라고 꼬셨죠. 초등학교 5학년 때부터 갔었어요. 오히려 잘 된 것 같아요. 그런 대회에 참가한 게요.
다른 기업들에서도 코딩 / 프로그래밍 인력을 데려가려는 이유가 프로그램을 만들 때, 오류를 줄이면서 빠르게 실행되고 효율적인 프로그램을 만드는 사람들을 데려가고자 하는 거잖아요. 정보올림피아드가 딱 그런 능력을 테스트하는 대회에요.
제가 지식공유를 하는 이유는 뭔가 저만 알기에는 미안한 그런 게 있어요. 저는 잘 알고 있는데 다른 사람들은 잘 모르거나 이럴 때 조금 안타까운 게 있어요. 그리고 다른 사람들이 배우고 싶은 것들을 알려주는 게 가장 보람 있다고 생각해요.제가 알고 있는 게 있으면 다른 사람들도 이해하기 쉽게 설명해주면서 다른 사람들한테도 무언가 도움이 되는.
저는 그냥 단순히 지식을 얘기하는 거예요. 이제 막 C언어를 시작하는 사람이랑 저랑은 아는 게 다르잖아요. 그 분들한테 이해하기 쉽게 가르쳐주는 거예요. 제가 많이 알고 있다고 생각하는 부분이 알고리즘이랑 C언어라서 나중에 C++ 강좌까지 다 끝내면 알고리즘이랑 자료구조 강좌도 만들 생각이 있어요.
저는 C++이죠, 당연히. 다른 언어들을 심도 있게 공부하지는 않았지만. C++의 가장 큰 장점이 포인터라고 생각해요. 포인터라는 개념을 다른 언어에서는 거의 다루지 않잖아요. 그런데 C언어와 C++의 개념을 알고 있는 거랑 그렇지 않은 건 진짜 큰 차이라고 생각해요.
C# 같은 경우에도 실제 값을 저장하는 타입들이 있고 reference라는 어떤 메모리상의 공간을 가리키는 타입들이 있거든요. C#에서는 어떤 것들은 값을 저장하고 어떤 것들은 reference를 저장하는 거다,라고 머리로만 알고, 실제로 그런 개념들이 컴퓨터 상에서 어떻게 구현되는지는 배우지 않거든요. 그래서 reference를 알고 있어도 막상 코딩을 하다가 실수하는 부분들도 있어요.
포인터라는 개념을 실질적으로 배울 수 있다는 게 가장 매력적인 거 같아요. 다른 언어들은 포인터를 안 써도 되니까 귀찮은 게 없잖아요. C 언어는 포인터를 하면 귀찮아지는데 다른 언어들은 그런 게 없어요. 그런데 C언어를 공부하면 포인터를 이해하게 되니까 그걸 이해하고 나서 다른 언어를 배우면 그 안에 숨겨진 원리들을 알 수 있어요.
저는 포인터를 사용하는 게 마음이 편해요. 안에 감춰져있으면 코드를 짜놓았을 때 다른 언어들은 어떤 식으로 작동할지 완벽하게 아는 게 어렵거든요. 그런데 C++은 아예 포인터라는 게 명시되어있고 이 포인터가 어디를 가리키고, 메모리를 할당했다가, 지웠다가 이런 코드 자체를 눈으로 볼 수 있으니까 코드를 살펴보기만 해도 어떤 식으로 메모리를 할당하는지 눈으로 다 볼 수 있어요. 그래서 마음이 편해요, 다 보이니까.
저는 연구하는 걸 좋아해요. 공부를 좋아하진 않는데 궁금하거나 꽂히는 게 있으면 파고들어요. 고등학교 때 유전 알고리즘이라고 그게 다윈의 진화론 있잖아요. 그걸 모방해서 컴퓨터적으로 구현했어요. 다윈 진화론이 환경에 제일 적합한 개체들이 살아남는다는 진화 이론이잖아요.
그걸 바탕으로 컴퓨터에서 어떤 조건에 맞는 가장 적합한 형태를 찾는 알고리즘이 있어요. 그 알고리즘을 이용해서 위도, 기후별로 나무 모양들이 다 다르잖아요.그래서 위도별로 태양빛을 가장 효율적으로 받는 나무 모양이 어떤지 연구했었어요.
정밀한 연구는 아니잖아요. 그냥 재미로 한 건데. 거기서 발견할 수 있었던 건 고위도 지방의 침엽수들 있잖아요. 보통 침엽수들이 겨울에 추울 때 잎이 얼지 말라고 그렇게 발달했다고 들었는데,
유전 알고리즘을 사용해서 알아보니까 실제로 햇빛과도 관련이 있다는 걸 발견했어요.
침엽수 모양 자체가 고위도에서 햇빛 받기가 적합하다는 걸요. 정확한 연구는 아니라서 우연의 일치로 그런 건지 확실하지 않지만 실험 결과로는 그렇게 나왔어요. 교내 과학탐구대회가 있는데 거기 발표해서 은상을 탔어요.
프로그램 짠 것도 가지고 있어요. 근데 돌리려면 되게 오래 걸려요.(웃음) 그게 여러 세대를 거듭해서 최종적으로 나오는 나무를 관찰하는 건데, 세대를 거듭하는 과정이 오래 걸려요.
코드는 C#으로 짰어요. 공개는 안한 상태고 고등학교 때 연구했던 걸로 놔뒀어요. (웃음)
이건 식물을 연구를 한 거잖아요. 2학년 때는 동물도 연구해보고 싶어가지고 그냥 초원 생태계 같은 걸 만들어 놓고 거기다 동물들을 풀어 놓고서 진화시키는 프로그램을 만들었어요.
아니요. (웃음) 되게 단순화 시켜서 만들었어요. 동물을 삼각형으로 표현하고 초원도 어떤 한 구역에 풀의 양이 얼마나 있나 정도만 구현해서 생태계 내에서 동물의 습성을 관찰하고 싶어서 한 연구에요.
시뮬레이션을 해서 그 생태계에서 가장 잘 살아남는 동물을 관찰해보면 포식자를 피해서 도망 다니는 습성이나, 또 보호색을 띠면서 숨어있다가 다른 동물들이 오면 잡아먹고 이런 습성들을 관찰할 수 있었어요.
유전 알고리즘이랑 인공 신경망을 연결해서 신경망에 입력되는 정보들, 예를 들어 주변에 어떤 색깔의 물체가 있고 그런 정보들을 받아들여서 어떤 행동을 할지 결정하는 인공 신경망을 만드는 거에요.
예를 들어서 잡아먹는다, 풀을 뜯어 먹는다, 이런 식으로 행동을 결정해서 그 결정들은 동물들이 알아서 하도록 내버려 두고 그것들을 진화를 시키는 거죠. 인공신경망도 간단한 신경망이어서 다 제가 코드를 짰어요.
연구는 방학 동안 해서 시간이 있었어요. 원래는 학원도 다녀야 하는데 그거 한다고 숙제도 안 하고. (웃음)
저쪽으로 가면 담소 사골 순댓국이란 집이 있는데 사골 육개장이 맛있어요. 여기랑 수제 햄버거집. 코엑스 쪽에 있어요. 브루클린 더 버거존이라는 집이에요. 제가 수제 햄버거를 되게 좋아하는데 여기가 제일 맛있었어요.
여기는 다 맛있어요. 못 고르겠어요. (웃음)