알려주는 일이 가장 보람있다고 생각해요 – 두들낙서 2편

알려주는 일이 가장 보람있다고 생각해요 – 두들낙서 2편

Today We Learned #05
인프런이 만난 사람 – 개발자에게 듣다

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

알려주는 일이 가장 보람있다고 생각해요

– 두들낙서 2편



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

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

Q. 멋있다고 생각한 지식공유자/개발자가 있다면 알려주세요

유튜브에 3Blue1Brown이라고 수학 강좌 올리는 분이에요. 칸 아카데미 있잖아요. 거기서 선형대수학이나 미적분 강의를 올리는데요.
 

 

수학이 시각화나 이런 게 중요하잖아요. 그런 걸 그분이 직접 코드를 짜셔서 수학적인 내용들을 시각적인 영상으로 보여주세요. 그런 게 되게 이해가 잘 돼서 좋은 강의인 것 같아요. 강의에 얼굴은 안 나오고 애니메이션만 나와요. 요즘은 거기다 한국어 자막을 다는 분들도 있는 걸로 알고 있어요.

무료 강의인데 퀄리티가 되게 높아요. 저는 예전에 구독자 1000명 때부터 봤었는데 지금은 구독자 수가 100만 명이 넘었어요. 유튜브 추천 영상에 떠서 알았는데 이 분이 되게 다양한 강좌를 만들어요.

허프만코딩이라는 알고리즘이 있는데 그 알고리즘 강의가 있었어요. 그걸 찾다가 본 것 같아요.

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

원래 옛날 컴퓨터 학원이면 워드를 가르쳐주는 데 제가 다니던 곳은 정보올림피아드를 주로 하던 학원이었어요. 정보올림피아드는 알고리즘 대회라고 보시면 되는데요. 주어진 문제를 해결하는 여러 가지 방법이 있잖아요.


그중에서 제일 빠르면서 효율적인 알고리즘을 만드는 대회라고 보시면 될것 같아요. 수학하고 코딩이 중요해요. 예선 대회 필기고사에서는 수학 문제가 30~40% 나오고 나머지는 코딩 문제가 나오는데 그걸 통과하면 본선은 그냥 코딩이에요.

대회는 C 언어만 쓰고 있어요. 사실 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. 프로그램 보고 싶네요.(웃음)

프로그램 짠 것도 가지고 있어요. 근데 돌리려면 되게 오래 걸려요.(웃음) 그게 여러 세대를 거듭해서 최종적으로 나오는 나무를 관찰하는 건데, 세대를 거듭하는 과정이 오래 걸려요.

Q. 외부적으로도 공개해 두었나요?

코드는 C#으로 짰어요. 공개는 안한 상태고 고등학교 때 연구했던 걸로 놔뒀어요. (웃음)

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

이건 식물을 연구를 한 거잖아요. 2학년 때는 동물도 연구해보고 싶어가지고 그냥 초원 생태계 같은 걸 만들어 놓고 거기다 동물들을 풀어 놓고서 진화시키는 프로그램을 만들었어요.

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

아니요. (웃음) 되게 단순화 시켜서 만들었어요. 동물을 삼각형으로 표현하고 초원도 어떤 한 구역에 풀의 양이 얼마나 있나 정도만 구현해서 생태계 내에서 동물의 습성을 관찰하고 싶어서 한 연구에요.


시뮬레이션을 해서 그 생태계에서 가장 잘 살아남는 동물을 관찰해보면 포식자를 피해서 도망 다니는 습성이나, 또 보호색을 띠면서 숨어있다가 다른 동물들이 오면 잡아먹고 이런 습성들을 관찰할 수 있었어요.

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

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

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

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

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

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

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

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

Q. 어떤 햄버거가 제일 맛있어요?

여기는 다 맛있어요. 못 고르겠어요. (웃음)

두들낙서 님이 정성껏 만들었습니다.

우리는 성장 기회의 평등을 추구합니다.

대학생분들이 두들낙서 선생님이라고 불러줬어요 – 두들낙서 1편

대학생분들이 두들낙서 선생님이라고 불러줬어요 – 두들낙서 1편

Today We Learned #05
인프런이 만난 사람 – 개발자에게 듣다

인프런 최연소(?) 지식공유자를 만났습니다. 중학교 때부터 C언어 강의를 만든 두들낙서님은 올해 무려 서울대학교 19학번이 되는데요. 아래 캐릭터처럼 총명하고 멋진 두들낙서 님을 직접 만나보았습니다.

대학생분들이 두들낙서 선생님이라고 불러줬어요

인프런 최연소 지식공유자, 서울대 컴공 신입생되다
– 두들낙서 1편

Q. 서울대학교 컴퓨터 공학과에 합격하셨어요. 축하드려요! 과정이 어땠나요?

감사합니다. 최종 발표는 12월에 나왔나 그랬어요. 저는 수시로 갔는데, 면접은 수학문제 물어보고 푸는 시간을 주고 문제를 푼 다음 교수님에게 설명하는 방식으로 진행 됐어요. 두 문제를 풀고 설명하고 다 맞으면 교수님이 추가 문제를 더 내주세요. 저는 문제 풀다가 추가로 두 문제가 나왔는데 첫 문제는 풀었는데 두 번째 문제는 못풀고 나왔어요. (웃음)

Q. 기분이 어땠어요?

기분 좋았죠. 초등학교 때부터 컴퓨터 쪽으로 가고 싶었어요. 프로그래밍을 제가 초등학교 4학년 때 누가 C언어가 있다는 걸 알려줘서, C언어를 배우고 싶었어요.

옛날에 영어 학원을 다녔는데, 학원에 과제하는 컴퓨터가 있었어요. 아는 형이 거기서 과제 안 하고 컴퓨터로 신기한 것들 보여주면서 C언어라는 게 있고, 이걸 배우면 이런 것도 할 수 있다고 했죠. 그때 C언어를 배우고 싶어서 서점에 가서 C언어 책을 사서 봤어요.

Q. 어떤 걸 보여줬어요?

cmd창에 들어가서 shutdown있잖아요. 이건 C언어는 아니지만.(웃음)

그 형이 컴퓨터 학원을 다니는 형이었나 봐요. C언어라는 게 있다고 한 번 배워보라고 해서. 4학년 때는 책으로만 공부했는데요. 책이 불친절해서 제가 직접 프로그램을 짜보고 싶어도 못하다가 나중에 학원을 다니게 됐어요.

그때 학원에서 C언어랑 Visual Studio에서 코드 짜는 걸 배우고, 집에서도 깔아서 해보면서 본격적으로 하게 됐어요. 초등학교 때는 약수, 배수 같은 프로그램 만들고 그런 정도로요.

 


Q. 닉네임이 왜 두들낙서에요?

두들낙서는 초등학교때 지은 건데 별로 의미는 없어요. 처음에 네이버 가입할 때 아이디 뭘로 하지 하다가 두들(Doodle)이 좋아 보여서 두들로 했어요.

두들(Doodle) 뜻이 낙서잖아요. 두 글자 하기는 그래가지고 네 글자로 두들낙서로 했어요. 어릴 때 낙서하는 걸 좋아했는데 지금은 안 해요.

Q. 학교 다닐 땐 어떤 학생이었어요?

학교에서 공부하고 수업도 열심히 듣고 그랬어요. (웃음) 가르쳐주는 걸 좋아해서 애들이 수학 문제 같은 걸 물어보면 알려주고 이런 걸 좋아했어요.

Q. 착한 학생이었네요.ㅎㅎ 어떤 과목이 제일 좋았어요?

가장 좋아하는 과목이 수학인데 만약에 정보(컴퓨터) 같은 과목이 있었다면 정보를 제일 좋아했을 거예요.

Q. 인프런 C/C++ 강의, 어떻게 만들게 된 거예요?

친구들한테 가르치는 걸 좋아했으니까 C언어를 알려주고 싶은데 주변에 알려줄 애들이 별로 없잖아요. 그래서 유튜브에 올려봐야겠다, 생각했어요. 중학교 2학년 때 시작했는데 그때 영재고 준비도 했거든요.

네 번째 강의까지 올렸다가 같이 하는 건 안되겠다 싶어서 잠시 접었어요. 영재고 시험 끝나고 시간 남았을 때가 2015년 말쯤인데 그때부터 진짜 좋은 강좌를 만들어야겠다 해서 적극적으로 했어요.

재밌었어요. 장비도 컴퓨터에 마이크만 달면 되니까. 화면 녹화하고 마이크 연결해서요. 그때는 마이크로 안 하고 휴대폰으로 녹음했었어요. 녹음은 휴대폰으로 하고 녹화는 컴퓨터로 해서 합쳤어요.

Q. 친구들 반응은 어땠어요?

처음에는 안 유명해서 별로 반응 없다가 지금은 구독자가 많아지고 그러니까 대단하다는 반응이 있는 것 같아요.

처음에는 그냥 그랬어요. 구독해달라고 하니까 좋아요 눌러주고 댓글 조금 달아준 정도. (웃음) C언어 강좌를 만들었을 땐 그냥 중학생이었잖아요. 누가 들을까 생각도 했었어요.저는 초등학교 때부터 C언어를 했으니까 초딩이 많이 듣겠구나 생각했는데 계속 강좌를 찍고 댓글을 보니까 생각보다 대학생이 많은 거예요.

저보다 나이가 많잖아요. 그런데 대학생분들이 두들낙서 선생님이라고 불러줬어요. (웃음) 대학생분들이 대학교 강좌를 듣다가 어려워서 제 강의를 듣고 도움이 많이 됐다, 이렇게 말씀해 준 것들이 기억에 남아요.

Q. 유튜브 채널을 운영한 게 학교 입학에도 도움이 되었을까요?

자소서에 그런 내용을 쓰긴 했는데 교수님들이 특별히 그런 거에 대해서 신경 쓰진 않으신 것 같아요.

Q. 어떤 언어들을 다루나요?

C언어, C++하고 고등학교 때 게임 만들고 싶어서 C# 공부했었고, Java도 약간 알고 있어요. 이제 인공지능 같은 거 만들려고 파이썬을 공부할 예정에 있어요.

C언어는 초등학교 때부터 했어요. 학원에서는 정보올림피아드를 나가라고 정보올림피아드 공부용으로 C언어 배우고 알고리즘, 자료구조 이런 걸 배웠어요. 그리고 C++은 C언어 확장판 같은 느낌인데, C++의 객체지향은 어떤 건지 궁금해서 조금씩 하다 보니 알게 되었어요.

C#은 게임 만드는 용으로 배우기 시작했어요. C++의 Qt프레임워크 같은, 게임개발을 위한 라이브러리를 살펴보다가, C#으로 만들수 있는 것 중에 xna 프레임워크가 있어요. 그게 초보 개발자들이 만들기에 어렵진 않고 고급 기능들까지 담고 있어서 xna 프레임워크를 쓰려고 C#을 공부했어요.

저는 게임 만들때 꿈이 커서 RPG 비슷한 게임을 만들고 싶었는데, 친구들이랑 같이 만들다가 흐지부지 돼가지고 게임을 실제로 만든 건 따로 없어요.(웃음) 캐릭터 그림 그리고 움직이는 애니메이션 같은 거 만들고 타이틀 화면 있으면 클릭하면 넘어가고 그런 거 있잖아요. 진짜 기본적인 것만 하다가 끝났어요.

Q. 프로그래밍은 어떤 부분에서 매력을 느꼈어요?

무언가 만들고 싶은 게 있으면, 그걸 만들기 위한 수단 중에 하나를 골라서 만들잖아요.

예를 들어서 내가 게임을 만들고 싶은데 개발 경험이 없고 초보 개발자들을 위한 걸 찾고 싶어요. 저는 여러가지를 찾다가 C#을 사용한 xna 프레임워크를 고른 거고요. 그럼 이제 그걸 사용해서 게임이라는 목표물을 만들어야 되잖아요. 그래서 목표물을 위한 수단으로 언어들을 배우니까 동기부여가 된 것 같아요.

제가 만들어보고 싶은 것 중에 <마이티>라는 카드게임이 있어요. 옛날에 어떤 분이 만든 프로그램인데 서버에 접속해서 하는 방식이거든요. 그런 거 말고 서버는 회사 쪽에서 열어주고 이용 고객들이 방을 파서 이용하는 방식으로 웹게임처럼 만들어보고 싶었어요. 

 

 

웹게임을 만들고 싶으면 웹서버 여는 걸 알아야 되고 자바스크립트를 공부를 해야 해요. 만들고 싶은 하나를 만들기 위한 과정이 언어를 배우는 동기부여가 되는 것 같아요.

Q. 학교에 가면 무엇을 공부하고 싶어요? 기대하는 바가 있나요?

인공지능 쪽에 관심이 많아요. 예전에 국제정보올림피아드 대회에 국가대표를 양성하는 프로그램이 있는데 제가 거기에 들어가게 됐었어요. 거기서 교수님 강의를 듣고 실습도 했는데 인공지능의 기본적인 원리를 배우는 시간이 있었어요.

그때 흥미를 가지고 인공지능을 알아보기 시작했어요. 그리고 대학가서 더 공부해보고 싶어요.

Q. 학교가서 인공지능쪽을 잘 파보면 좋겠네요

제일 배우고 싶은 과목이 인공지능이에요. 판별하는 인공지능 있잖아요. 얼굴인식이나 사물 인식부터 글을 보면 어떤 언어로 되어있는지 알아내는 알고리즘도 있고 실생활을 편하게 해주는 그런 인공지능들을 공부하고 싶어요. 저는 음악 쪽에도 관심이 있거든요. 작곡하는 인공지능 이런 거 있잖아요. 좀 예술적인 분야로 그런 인공지능들을 만들어보고 싶긴 해요. 그냥 재미로.

Q. 드라마 <스카이캐슬> 보셨나요. (웃음)

보다가 말았는데 저도 대충 내용은 알아요. 거기 코디가 나오잖아요. 제일 많이 듣는 질문 중 하나가 저도 코디가 있었냐는 거였는데, 저는 코디 없었어요. (웃음) 저 혼자 힘으로 한 게 90%라 하면 나머지 10%는 대치동 학원에서 좋은 선생님을 만났다는 거?

사실 이런 얘기 하면 조금 그렇긴 한데. 저는 생각보다 공부를 그렇게 열심히 하지는 않았어요. 근데 중학교 때 영재고 대비할 때 되게 열심히 해놨거든요. 그때 수학이랑 과학 배워놨던 게 고등학교 때 도움이 많이 됐죠.

원래 선행이 그렇게 도움이 많이 되는 건 아닌데 학원에서는 탐구 2과목까지는 선행을 해야 한다 해서 빡세게 배웠죠. 영재고는 떨어져서 못 가고 ㅇㅇ고 (일반고) 다녔어요.

Q. 인프런에서 듣고 싶은 강의가 있나요?

제가 웹 서버 얘기도 하고 인공지능 얘기도 했잖아요. tensor flow 강의랑 웹서버 node js 강의 있으면 보고 싶어요. 제가 책을 사서 보고있는데 책을 따라하는 건 별로 안 좋아하고 강의를 듣고 싶거든요.

두들낙서 님이 정성껏 만들었습니다.

우리는 성장 기회의 평등을 추구합니다.

홍정모의 게임 만들기 연습 문제 패키지

홍정모의 게임 만들기 연습 문제 패키지

배우러 가기

1. 게임 프로그래밍 연습 문제 패키지

C++의 객체지향  프로그래밍이 실제로 적용되는 사례들을 게임을 만들면서 즐겁게 공부하실 수 있습니다.남이 이미 만들어진 틀에서 부분적인 사용법만 배운다면 실력은 늘지 않고 계속 헤매이며 시간만 낭비하게 됩니다. 본 강의는 객체지향적인 프로그램을 스스로 만들어가면서 원리를 터득하실 수 있도록 도와드립니다.  여기저기서 유용한 팁들이 톡톡 튀어나옵니다. 그리고 무엇보다 게임 만들기는 재미있습니다!

2.  도움이 되는 분들

  • 기초적인 C++ 문법을 공부하신 후에 뭔가 만들어보고싶은 초보 프로그래머들
  • 간단한 게임을 만들면서 프로그래밍 연습을 하고 싶은 초보자들
  • 게임 프로그래밍이나 컴퓨터 그래픽스를 공부할 예정인 초보자들

3. 학습 목표

  • 게임을 만들면서 C++ 객체지향을 실제로 어떻게 사용하는지 배울 수 있습니다.
  • 스스로 게임을 ‘프로그래밍’ 해보실 수 있습니다.
  • 게임과 같은 ‘실시간 상호작용 어플리케이션’의 구조를 배울 수 있습니다.

4. 강좌 특징

  • 화려하거나 멋진 게임을 만드는 것이 아닙니다. 그래픽스나 관련된 수학을 공부하는 것도 아닙니다.
  • 미리 만들어진 게임을 완성해나가는 것도 아닙니다.
  • 최소한의 예제 코드로부터 객체 지향 프로그래밍을 연습하면서 게임을 만들어갑니다.
  • ‘내가 만들고 싶은 것을’ 만드는 데 필요한 기본 기술을 공부합니다.
  • 내가 만들고 싶은 게임을 만드는 자유를 느껴보세요!

5. 게임 갤러리 (더 많은 작품들)

6. 참고 사항

  • C++ 프로그래밍 연습을 목적으로 합니다. 유니티나 언리얼 등의 게임엔진은 다루지 않습니다.
  • 영상으로 제시된 샘플 게임들은 학생들이 스스로 디자인하고 프로그래밍해서 만든 게임들입니다. 게임 만드는 방법을 직접적으로 알려드리는 강의가 아니니 오해 없으시길 바랍니다.
  • 상속, 다형성, 가상 함수 등의 문법적인 측면을 이해하신 분들이 실제 적용 사례가 궁금하시다면 강력히 추천합니다. 따배씨++ 기준으로는 12장입니다.
  • 다른 학생들의 더 많은 작품들은 유튜브에서 보실 수 있습니다.
  • 윈도우즈, Visual Studio 2017 Community 버전 이상을 권장하며 다른 OS에서의 작동은 확인하지 않았습니다.
  • 1장의 기본적인 내용으로  간단한 게임을 직접 만들어본 후에 2장의 디자인 패턴을 공부하시면 훨씬 효율적입니다.
  • 초보자들의 빠른 이해를 돕기 위해 내부적으로 고전적 OpenGL을 사용합니다. 향후 개설될 컴퓨터 그래픽스 전문 강의에서는 현대적 OpenGL을 사용합니다.
  • 유튜브에 공개되지 않았던 강의들이 추가될 예정입니다.

7. 예제 코드 실행 방법

  • Github에 있는 예제 코드 clone하기(20.2, 20.3 참고) 또는 링크 클릭으로 다운로드
  • Vcpkg를 이용해서 opengl, glew, glfw3 설치(20.4 참고)
  • 비쥬얼 스튜디어 2017에서 Lecture1/Lecture1.sln 솔루션을 실행
    * 사운드 라이브러리 FMOD는 바로 사용하실 수 있게 설정해뒀습니다.  혹시 외부 라이브러리를 직접 설치하는 방법을 공부하고 싶으시다면  따배씨++ 20.6 참고하세요.
  • 예제 코드 Github 링크 -> 깃헙 보수중입니다. 질문에 깃헙 아이디 적어주시면 collaborator로 등록해드립니다.
  • 챕터별 연습 문제 목록 링크

8. 연관된 강좌

따라하며 배우는 C++
뛰어난 프로그래밍 실력을 갖추고 싶은 왕초보들을 위한 강의!
최근 취업 인터뷰에 자주 등장하는 모던 C++의 중요 개념들을 다루고 있어요 🙂

9. 지식공유자 소개

홍정모

2008 ~ 현재 동국대학교 컴퓨터공학과 교수
2005 ~ 2007 스탠포드 대학교 연구원
2002 ~ 2005 고려대학교 컴퓨터공학과 전산학 박사
1996 ~ 2002 KAIST 기계공학과 학사, 석사

유튜브 채널 링크
블로그 링크

배우러 가기

자료구조 강좌 – C로 배우는 자료구조 및 여러가지 예제 실습

자료구조 강좌 – C로 배우는 자료구조 및 여러가지 예제 실습

자료구조 강좌 소개

부경대학교 IT융합응용공학과 권오흠 교수님의 자료구조 강좌 입니다.
C언어를 사용하며, 좋은 소프트웨어를 설계하는데 필수 소양인 자료구조 능력을 갖출 수 있는 좋은 강좌입니다. 자료구조 개념과 이론들을 먼저 학습하고, 학습한 개념들로 전화번호부, 미로, 계산기 예제들에 적용하여 응용력을 키울 수 있는 강좌입니다.

자료구조 강좌가 도움되는 분들

좋은 프로그래머가 되고 싶은 개발자
자료구조 이해가 잘 안되는 컴퓨터공학과 학생
컴퓨터 공학 소양이 부족한 개발자
규모있는 소프트웨어를 개발하고 싶은 분
개발자가 되고 싶은 분
C언어에 대한 경험이 있는 분

강좌 특징

사용언어 : C
참고서적 : C언어로 쉽게 풀어쓴 자료구조 (천인국 등, 생능출판), K. N. King, C Programming: A Modern Approach, 2nd Ed., Norton. ,C로 배우는 쉬운 자료구조(한빛아카데미)
추천 선수 지식 : C언어

자료구조 강좌 커리큘럼

섹션 1. C언어에서의 포인터, 배열, 그리고 포인터 연산
C언어 기초 문법 리뷰 – 포인터, 배열, 그리고 포인터연산 바로보기
섹션 2. 동적 메모리 할당
동적 메모리 할당 바로보기
동적 메모리 할당 2 바로보기
섹션 3. 문자열
문자열
섹션 4. 연습문제. 1
연습문제 1
연습문제 1 (2)
섹션 5. 연습문제 2
연습문제 2
섹션 6. 전화번호부 v1.0
전화번호부 v1.0 (1) 바로보기
전화번호부 v1.0 (2)
섹션 7. 전화번호부 v2.0
전화번호부 v2.0
섹션 8. 전화번호부 v3.0
전화번호부 v3.0 (1) – 배열 재할당, 라인단위 입력과 문자열 tokenizing
전화번호부 v3.0 (2)
전화번호부 v3.0 (3)
섹션 9. 전화번호부 v4.0
전화번호부 v4.0 – 더 많은 항목 추가하기, 구조체(structure) 바로보기
섹션 10. 전화번호부 v5.0
전화번호부 v5.0 (1) – 구조체에 대한 포인터, 동적 메모리 할당
전화번호부 v5.0 (2)
섹션 11. 연결리스트 – 개념과 기본 동작들
연결리스트 – 개념과 기본 동작들 (1) 바로보기
연결리스트 – 개념과 기본 동작들 (2)
연결리스트 – 개념과 기본 동작들 (3)
연결리스트 – 개념과 기본 동작들 (4)
연결리스트 – 개념과 기본 동작들 (5)
섹션 12. 연결리스트 – 다항식
연결리스트 – 다항식 (1) 바로보기
연결리스트 – 다항식 (2)
연결리스트 – 다항식 (3)
섹션 13. 이중연결리스트
이중연결리스트 바로보기
섹션 14. MP3 관리 프로그램 (Music Library Program) 만들어 보기
Music Library Program (1) – 준비하기 바로보기
Music Library Program (2)
Music Library Program (3) – 구현하기 시작
Music Library Program – (4)
Music Library Program – (5)
Music Library Program – (6)
Music Library Program – (7)
Music Library Program – (8)
Music Library Program – (9)
Music Library Program – (10) 마무리
섹션 15. 스택(Stack) 개념과 구현
스택(Stack) 개념과 구현 (1) 바로보기
스택(Stack) 개념과 구현 (2) – 구현
스택(Stack) 개념과 구현 (3)
섹션 16. 스택의 응용 – 후위표기식
스택의 응용 – 후위표기식 (1) 바로보기
스택의 응용 – 후위표기식 (2)
스택의 응용 – 후위표기식 (3)
스택의 응용 – 후위표기식 (4)
섹션 17. 스택의 응용 – 미로찾기
미로찾기 문제 바로보기
섹션 18. 큐의 개념과 구현 및 응용
큐의 개념과 구현 (1) 바로보기
큐의 개념과 구현 (2)
큐의 개념과 응용 (미로찾기)
섹션 19. 시간복잡도와 점근적 분석
시간복잡도와 점근적 분석 (1) 바로보기
시간복잡도와 점근적 분석 (2)
시간복잡도와 점근적 분석 (3) – 정렬
섹션 20. 시간복잡도의 관점에서 코드 리뷰
시간복잡도 분석 예 (1)
시간복잡도 분석 예 (2)

어셈블리어 무료 강좌

어셈블리어 무료 강좌

어셈블리어 배우기

1. 강좌 소개

‘어셈블리어 배우기’ 강좌는 유투브 스무디 TV 채널에서 강의하는 어셈블리어 강좌 입니다.

쉽지 않은 어셈블리어를 명령어, 문법마다 개념적으로 쉽게 설명하면서도 자세하게 이해시켜 줍니다. 또한 대부분 예제를 통해 어떻게 사용되는지에 대한 모습을 보여주기 때문에 학생 입장에서 이해하기 쉽습니다.

2. 도움되는 분들

  • C언어를 학습하신 분(최소 포인터 까지)
  • 어셈블리어를 배우고 싶으신 분
  • 컴퓨터공학 전공자

3. 강좌 특징

  • 다루는 기술 :  어셈블리어
  • 강좌 수준 : 중급

4.강좌 교육과정

오리엔테이션
어셈블리어 1. 시작해봅시다.
배우기 시작
어셈블리어 2. 명령어 mov
어셈블리어 3. 범용 레지스터
어셈블리어 4. 메모리
어셈블리어 5. 메모리 주소와 접근
어셈블리어 6. 메모리 크기 지정
어셈블리어 7. 리틀 엔디안, 빅 엔디안
00:29:00
어셈블리어 8. 점프 jmp
00:16:00
어셈블리어 9. JMP 계속해서
00:07:00
어셈블리어 10. 증감 명령어 inc, dec
00:07:00
어셈블리어 11. add, sub
00:16:00
어셈블리어 12. 레지스터로 주소지정
00:14:00
어셈블리어 13. 메모리 주소 지정 방식
00:21:00
어셈블리어 14. 조건분기명령어 JZ (JE) 상태레지스터 ZF
00:14:00
어셈블리어 15. 조건분기명령어 JNE JA JB 상태레지스터 CF
00:15:00
어셈블리어 16. JA JB에 N과 E 붙이기
00:13:00
어셈블리어 17. 조건분기명령어 JG JL 상태레지스터 SF OF
00:32:00
어셈블리어 18. JA JB에 N과 E붙이기 조건분기명령어 JO JS
00:09:00
어셈블리어 19. 상태레지스터 PF AF
00:15:00
어셈블리어 20. adc, sbb
00:22:00
어셈블리어 21. 스택, push, pop 레지스터 esp
00:17:00
어셈블리어 22. mul
00:22:00
어셈블리어 23. div
00:21:00
어셈블리어 24. imul, idiv
00:36:00
어셈블리어 25. stc, slc, std, cld, sti, cli
00:04:00
어셈블리어 26. 비트연산
00:11:00
어셈블리어 27. test
00:09:00
어셈블리어 28. 비트쉬프트연산
00:25:00
어셈블리어 29. 반복문 jecxz, loop
00:18:00
어셈블리어 30. rotate
00:39:00
어셈블리어 31. not, neg
00:05:00
어셈블리어 32. call, ret
00:27:00
어셈블리 33. 함수의 FRAME 과 FRAME POINTER 그리고 PROLOGUE와 EPILOGUE
00:49:00
어셈블리어 34. xchg
00:14:00
어셈블리어 35. 함수의 인자 전달
00:29:00
어셈블리어 36. C언어 함수 호출 방식으로 인자 넘기기
00:23:00
어셈블리어 37. 레지스터를 통해 인자전달
00:16:00
어셈블리어 38. STD 함수 호출 방식으로 인자 넘기기
00:15:00
어셈블리어 39. pushad, popad, pushfd, popfd, lahf, sahf
00:15:00
어셈블리어 40. cbw, cwd, cwde, cdq
00:24:00
어셈블리어 41. 보수(COMPLEMENT)
00:10:00
어셈블리어 42. lea
00:19:00
어셈블리어 43. movsx, movzx
00:12:00
어셈블리어 44. 리턴값을 전달하는 방법
00:13:00
어셈블리어 45. enter, leave
00:10:00
어셈블리어 46. enter와 중첩된 함수호출
00:28:00
어셈블리어 47. 문자, 문자셋, 문자열
00:11:00
어셈블리어 48. movs, movsb, movsw, movsd
00:29:00
어셈블리어 49. 상태레지스터 DF
00:11:00
어셈블리어 50. rep 접두사
00:14:00
어셈블리어 51. stos, lods
00:32:00
어셈블리어 52. cmps, repe, repne
00:44:00
어셈블리어 53. scas
00:26:00
어셈블리어 54. 2진수 실수 표현법
00:45:00
어셈블리어 55. 부동소수점
00:33:00
어셈블리어 56. FPU란? 그리고 finit, fld
00:36:00
어셈블리어 57. fst, fstp, FPU에서 POP과 PUSH
00:17:00
어셈블리어 58. fld ST(i), fst ST(i), fstp ST(i)
00:13:00
어셈블리어 59. fnop
00:02:00
어셈블리어 60. fadd, +INF
00:25:00
어셈블리어 61. +INF, -INF, NaN
00:12:00
어셈블리어 62. faddp
00:09:00
어셈블리어 63. fild
00:19:00
어셈블리어 64. fiadd
00:06:00
어셈블리어 65. fsub, fsubp, fisub
00:17:00
어셈블리어 66. fmul, fmulp, fimul
00:12:00
어셈블리어 67. fld1, fldz, fldpi, fldl2e, fldl2t, fldlg2, fldln2
00:07:00
어셈블리어 68. fdiv, fdivp, fidiv
00:13:00
어셈블리어 69. fprem1
00:07:00
어셈블리어 70. fcomp, FST와 fpu의 condition flag
00:22:00
어셈블리어 71. fdecstp, fincstp, 그리고 stack-top pointer
00:21:00
어셈블리어 72. fcom, fstsw, sahf 그리고 점프하기
00:16:00
어셈블리어 75. fcom, fcomp, fcompp
00:25:00
어셈블리어 76. fcomi, fcomip, fucomi, fucomip
00:11:00
어셈블리어 77. ftst
00:07:00
어셈블리어 78. fabs, fchs, fsqrt
00:14:00

 https://www.inflearn.com/course/어셈블리어-배우기/
code001