본문 바로가기

외부 세미나 & 특강/개발

180421 ‘김포프’의 Hello Coding 프로그래밍 토크쇼

반응형

2018년 4월 21일 한빛미디어 사옥에서 진행된 Hello Coding 프로그래밍 토크쇼 진행 내용을 정리한 문서입니다.

무단 복사, 수정 및 배포를 금지합니다.

 


‘김포프’의 Hello Coding 프로그래밍 토크쇼

한빛미디어 신청 공지 : https://bit.ly/2HnwEtO


진행 순서

14:00 - 15:00 프로그래밍을 해야 하는 이유 : 실제 세상은 알고리즘에 의해 돈다

  • 포프가 바라보는 바람직한 코딩 입문 방식

  • 코딩 입문 후 나뉘어지는 프로그래머의 세 방향

15:20 - 16:20 프로그래밍 생생 토크 + 자유로운 질의응답

  • 다른 직업인으로써의 생활코딩

  • 자유로운 질의 응답


발표자 소개

발표자 소개 : 김포프

  • 1990년대 부터 게임개발을 했지만 이제 대체 주력이 뭔지 모르겠는 인간

  • 베스트셀러 안 될 책은 안 쓰는 인간( 예외 : 문학집 )

  • 아주 간단 최근 경력

  • 2016 - : 실리콘 밸리 소재 블록체인 기업 Gluwa Inc의 CTO

  • 2005 - : 렌더링 엔지니어 / 아키텍트( 캡콤, EA, 렐릭, 아이도스 등 )

  • 2016 - 2018 : 캐나다 BCIT 대학 컴퓨터공학과 교수

  • 2014 - 2016 :미국 전자상거래 2위 기업 Staples의 리드 엔지니어

    • 아마존이 90%이상 차지하고 있어서 2위라 해도 영향력이 적음

  • 저자, 번역자, 마이크로소프트 MVP, 유튜브 방송인( 포프TV )등

  • 더 자세한건 링크드인 popekim(링크)

  • 학력

    • 조지아공대 컴퓨터공학과 석사

    • BCIT 컴퓨터공학과 수석졸업

    • 연세대학교 법학과 박사

  • 출시게임 ( 중 일부 )

    • 마인크래프트( 닌텐도스위치, PC, XBOX one )

    • 헤일로5 : 포지( windows 10, dX12 )

 


오늘의 강연 주제

  • 프로그래밍을 해야 하는 이유

  • 바람직한 프로그래밍 입문 방식

  • 입문 후 나뉘는 프로그래머의 세 방향

  • 다른 직업인으로서의 생활코딩


Part 1.


 

세상은 알고리즘에 의해 돈다

 


 

최대공약수

  • 15와 20의 최대공약수?

  • 21과 28의 최대공약수?

  • 123987과 128370의 최대공약수?

  • 유클리드 호제법

    • 영어로 쓰면 ‘유클리드의 알고리즘’

 


 

예를 들어 화장실에 타일을 깔 때 필요한 타일의 수 계산을 할 때..

  • 1. 시작은 36 * 24 크기

  • 2. 시작은 짧은면의 정사각형을 만들어서 끼워 넣는다

    • 24*24를 채워 넣는다

    • 더 이상 24 사이즈가 들어가지 않는다

  • 3. 남은 짧은 크기(12와 24 중 12)를 기준으로 정사각형을 만들어서 채워 넣는다

  • 1 ~ 3 과정 반복 

    • 이 과정이 알고리즘이다


 

일상생활에서의 알고리즘

    • 키 순서대로 줄 세우기

    • 라면 끓이기

    • 자동차 우회전 하기

    • 등 매우 많음

  • 알고리즘의 또 다른 이름

    • 프로세스

    • 매뉴얼

 

실제 시연 : 키 작은 -> 키 큰 순서대로 정렬하기

  • 가장 작은 사람을 가장 앞에 두고 그다음으로 작은 사람을 차례대로 배치
    일반적인 방법

  • 앞뒤 사람을 비교해서 서로 키를 비교하고 서로 자리 교체
    컴퓨터에서 작동하는 방법

  • 다시 두 번째부터 앞뒤로 키 크기 비교&교체

  • 세 번째부터 ...

  • 네 번째부터 ...

  • 반복…

    • 이 과정은 알고리즘!

 

자동차 우회전

  • 우회전 하기 전 신호를 본다, 좌우를 살핀다, 좌우 깜빡이를 켠다 …

    • 단계가 많을 뿐 이것도 알고리즘

 

프로세스, 매뉴얼이라는 명칭도 호칭만 다를 뿐 알고리즘과 같은 용어

  • 어떤 결과를 얻기 위해 반복이 되는 것 = 알고리즘

 


 

알고리즘

  • 알고리즘(프로세스) 만들기

    • 쉽지 않음

    • 천재의 영역이라 불리기도 함

  • 알고리즘 따라하기

    • 누구나 쉽게 따라할 수 있는 반복적인 단계들

    • 따르기만 하면 언제나 안전하고 정확한 결과가 나옴

    • 따르는 데 걸리는 시간은 빠를 수도 느릴 수도 있음

 

알고리즘을 효율적으로 만드는건 쉽지 않다. 하지만 만드는 것은 누구나 할 수 있다.(결과가 나온다)

 

Q. 왜 알고리즘을 공대책에서만 봤을까? 왜 컴퓨터로만 생각 했을까?

  1. 컴퓨터는 단순한 작업을 빠르게 처리하는 기계였기 때문에 알고리즘을 컴퓨터에서만 봤음

 


 

컴퓨터와 알고리즘

  • 컴퓨터는 절차가 잘 정의된 반복작업에 최적화된 기계

  • 사람보다 엄청난 효율을 자랑

  • 컴퓨터의 등장 이후 사람이 손수 해왔던 작업들을 컴퓨터가 대체



여러자리 곱셈 연산의 경우 특정한 규칙을 갖고 실행한다

  • 가장 마지막 자리수 부터 곱셈

  • 컴퓨터는 이 작업을 빠르게 처리할 뿐

 

컴퓨터가 좋아지면 사람의 작업을 대체 할까?

  • 사실도 있고 거짓도 있다

  • 예 : 개표작업

    • 개표를 기계가 대체하면서 개표작업을 하던 사람은 사라졌다

      • 하지만 다른 영역의 직업이 생겨났다

    • 사람의 임금이 컴퓨터의 비용보다 비쌀 때(사람의 임금 > 컴퓨터 비용) 컴퓨터가 사람의 일을 대체하게 된다

    • 컴퓨터가 사람의 일을 대체하면 사람의 삶의 질은 올라간다

 


 

프로그래밍의 일상생활화

  • 컴퓨터는 시간이 흐를수록 빨라진다

    • 어차피 할거면 편하게 하자(효율성 높게 일하자)

  • 회사에서 사람을 짜를 때 ?

    • 내가 작업하는 효율이 좋다면(돈 값을 한다면) 짤리지 않는다

 


 

엑셀 숙련도 테스트

  • a. 나는 엑셀에 값을 입력할 수 있다

  • b. 나는 엑셀에 입력된 값을 순서대로 정렬할 수 있다

  • c. 나는 엑셀의 한 컬럼에 입력된 값들의 총합을 구할 수 있다

  • d. 나는 엑셀에 들어간 값을 차트로 그릴 수 있다

  • e. 나는 엑셀로 3D 도형을 그릴 수 있다

 

  • 하지만 80년대 후반에는??




아래로 갈수록(a → e) 할 수 있다고 하는 응답자의 비율이 점점 줄어든다

옛날에는 고급 능력이었던 것들이 요즘에는 누구나 할 수 있는 것이 됐다

  • 프로그래밍도 지금은 어렵지만 나중에는 누구나 할 수 있는 것이 될 것이다

 


 

엑셀 숙련도

  • 이와 같은 것들이 간단한 형태의 프로그래밍

  • 그러나 엑셀이란 프로그램을 만든 사람이 존재 : 전문 프로그래머

  • 우린 전문 프로그래머가 만들어 준 틀 안에서 프로그래밍을 할 뿐

  • 하지만 전문 프로그래머가 만들어 준 틀이 없다면?



누군가 만들어준게 없다면?

  • 만들어서 해야한다.

  • 만들어 줄 사람이 없다면?

    • 느리게 수작업을 해야한다

  • 만들어서 한다면?

    • 빠르게 작업을 처리하고 놀면 된다

 


 

생활 속의 코딩

  • 사진 싹싹이

  • 빈 MP3 폴더 지우기

  • 유튜브 썸네일 만들기

  • 헬로코딩 삽화 처리



‘사진 싹싹이’

  • 교대를 다니던 지인이 사진 찍는것을 좋아함

    • 이경배 님

  • 한 폴더에 찍은 사진이 수천장이 있었으나 정렬 할 수 없었음

  • 직접 만듬

    • 날짜별 정리 등등..

      • 사진 파일 이름에 일정한 규칙이 있음을 파악하고 이것을 이용함

  • 이 도구가 만들어지기 전에는 수작업으로 정리했다

빈 MP3 폴더 지우기

  • 미디어 몽키(툴 이름)

    • 기본 기능으로 정렬은 가능했음

    • 하지만 빈 폴더를 지워주지는 않음

  • 포프님 본인이 직접 원하는 기능을 만듬

유튜브 썸네일 만들기

  • 포토샵으로 수작업 해서 만든것보다는 빨라서 쓴다

  • 기능이 불편하긴 하지만 나만 쓰면 되는거니까...

헬로코딩 삽화 처리

  • 2도 인쇄 양식

    • 색을 두 번 찍어야 하므로 두 번 인쇄하는 과정을 거침

    • 출판사에서 원하는 것은 Adobe Illustrator를 써서 만들어줘야 함

      • 서로 사용하는 툴과 기준이 다르다

    • 나름대로 만들어서 전달했지만 잘 처리가 안됐다

  • 포토샵에서 스크립트를 만들어서 처리함

    • 이미지의 영역을 추출해서 색상 체크를 통해 원하는 결과물 제작

게임을 만들 때 수백명의 플레이어 캐릭터를 만들 때, 선글라스를 그려넣어야 하는 상황

  • 몸은 수정이 필요 없으므로 캐릭터 위의 얼굴 부분을 제외하고 몸만 만들어 둔다

  • 얼굴 부분의 이미지를 가지고 와서 선글라스를 그려주는 코드를 작성함

    • 전문 프로그래머가 아니라 디자이너 중 한 명이 직접 만듬

 


 

생활 속의 코딩(어릴적 친구들)

  • 포프보다 나았던 프로그래머들

  • 친구1 - 물리학자

  • 친구2 - 증권업체 근무 중



어릴 때 프로그래밍을 잘 못했음

  • 어릴때 같은 반에서 2명이 프로그래밍을 잘 했음

  • 그중 한 명인 S 모씨..

    • 프로그래밍을 매우 잘 했음

    • 컴퓨터 공학과를 가지 않음

      • 경제학과 졸업, 증권업체로 감

    • 알고리즘 트레이딩 하고 있음

  • 다른 한명인 K 모씨..

    • 어릴적 게임을 만들 때 스승같은 존재

    • 물리학과로 감

 


 

가까운 미래의 프로그래밍

  • 모든 사람이 프로그래밍을 배우는 세상

  • 전문 프로그래머가 만든 틀 외의 생활코딩이 가능

  • 프로그래밍을 할 줄 아는 사람은 셋으로 나뉠 것

 

  1. 전문 프로그래머 - 엔지니어급

  2. 전문 프로그래머 - 코드 몽키급

  3. 프로그래밍 할 줄 아는 타 직장인



예전에는 엔지니어급의 사람들이 프로그래밍을 했다(Excel 같은 프로그램 제작)

코드 몽키급 프로그래머는 어떻게 해야 할 것인가..?

  • 두 번째 시간에 이야기 할 주제

졸업 후 전공과 연관 있는 직장에 간 사람의 통계

  • 약 50% 전

 


 


Part 2.


 

올바른 입문법

 

기존의 프로그래밍 입문법이 잘못 되었다고 생각해서 책을 쓰게 됨

베스트셀러 못 만들 책이면 쓰고 싶지 않다

  • 예전부터 이런 류의 책을 쓰고 싶었다

 


 

요렇게

(Hello Coding 책 이미지)

  • 프로그래밍 입문의 정석

  • 뭔말이 더 필요? -_-

  • 이걸로 강연 끝!

 


 

올바른 프로그래밍 입문법

  • 핵심:  컴퓨터가 이해할 수 있는 명령 내리기

  • 어떤 명령? 알.고.리.즘.

  • 언어는 거들 뿐

    • 실수를 줄일 수 있는 언어

    • 도구가 좋은 언어

    • 그냥 강사가 잘 아는 언어는 의미가 없음



프로그래밍 언어는 종교전쟁

  • 언어는 중요하지 않다

  • 프로그래밍의 원리를 이해할 수 있게 공부 하면 된다

 

‘파이선은 입문용 언어로 좋지 않다’고 생각한다

  • ??? : 왜 입문용 언어로 좋은가요?

    • 쉽다

      • 그리고 그 외에는요…?

    • 파이선은 들여쓰기를 탭, 띄어쓰기로 들여넣기 할 때 구분을 한다

      • 초보자는 이것을 파악하지 못한다

      • 눈으로 봤을 때 띄워쓰기, 탭을 어떻게 구분할까??

        • 못한다

    • 파이선은 문제가 있을 때 오류를 보여주지 않는다

      • 불친절한 언어

그렇다면 왜 파이선이 입문용 언어로 사용되고 있을까?

  • 교수님들 본인에게 익숙한 언어라서

    • 교수들이 노력하지 않아서 다른 언어는 사용할 줄 모른다

 

Hello Coding 책을 C#으로 쓴 이유

  • 실수를 줄일 수 있다

    • 들여쓰기로 인한 문제가 없다

    • 코드가 잘못 됐을 때 오류를 보여준다

  • 도구가 좋다

    • 기능을 제안해주기도 한다

      • Visual Studio에서 해당 기능 지원

  • 강사가 잘 아는 언어는 의미가 없음

    • 포프님이 잘 쓰는 언어는 C++

      • 하지만 책은 C# 으로 씀

    • 언어는 거들 뿐..

 


 

논리력 학습법과도 구분할 것

  • 생활 속에서도 가능한 학습

  • 삶은 알고리즘이니까…

 

스크래치가 좋은 언어다?

 

과학상자, 전기회로 만들기..

  • 어릴때는 이해하고 만드는 것이 아니다

  • 그냥 이리저리 꽂다 보면 소리가 나고 움직인다

    • 그냥 이것 자체가 좋을 뿐.

  • 프로그래밍과는 다르다

    • 논리력 학습, 프로세스를 따르는 법을 배우는 것에는 도움이 되기도 한다

 


 

라면 끓이기

  • 다시 생활 알고리즘을 보자

  • 좀더 자잘한 단계로 나눠서

 

(라면 조리법 사진)

  • 물 600ml를 끓인 후 면과 건더기를 넣고 5분간 더 끓입니다.

  • 불을 끄고 물을 5숟가락 정도를 남기고 따라 버립니다

  • 면에 볶음해물스프와 볶음고추조미유를 넣고 중간불로 30초 볶는다



  • 컴퓨터는 생각보다 똑똑하지 않다

    • 물 500ml를 냄비에 넣는다

    • 냄비를 불위에 넣고 끓인다

    • 가끔씩 물이 끓는지 확인한다

    • 물이 끓지 않았으면 3번을 반복

    • 면과 야채건더기를 넣는다

    • 5분 뒤 불을 끄고 물 5숟가락을 남기고 버린다

    • 스프와 조미유를 넣고 30초 동안 볶는다

      • 검정색 글씨 : 단순 명령

      • 빨간색 글씨 : 조건문

      • 파란색 글씨 : 반복



언어능력이 부족한 사람이 프로그래밍도 잘 못한다

  • 언어 능력이 부족하면 다른사람들과 협업이 잘 안된다

 

프로그래밍은 명령, 조건, 반복이 전부다!

  • 효율적인 방법을 위해 복잡한 내용도 있다

    • 하지만 프로그래밍 입문 과정에서는 알 필요 없다

 


 

프로그래밍의 기초

  • Operation: AddNoodle();

  • 조건

if (water.IsBoiling())

{

AddNoodle();

}

  • 반복

while (water.IsBoiling() == false)

{

}



혼자서 쓰는거라면 대충 짜도 된다

동료와 같이 프로그래밍을 효율성을 고려해야 하므로 복잡한 내용을 필요로한다

  • 입문 단계에서는 복잡한 것을 공부할 필요가 없다

 


 

그래서 어떻게 입문하라고요?

  • 많은 사람들이 입문 전에는 세 부류중 어떤 프로그래머가 될 지 모름

  • 농구공 던져 보기 전에 NBA에서 뛴다는 꿈을 꾸나요?

  • 어느 스포츠나 입문 과정은 동일

  • 사실 무엇을 배우던 입문 과정은 동일

  • 유독 프로그래밍 교육에서는 이런 당연한 사실을 무시해 왔음



잘 하려면 계속 연습해봐야한다

학문적으로 접근하지 말고 흥미를 이끌어내야한다

 


 

바로 그 책
(Hello Coding 책 이미지)

  • 포프가 초딩 때 입문한 방법 그대로

  • 따라하며 간단한 코딩을 해 본다

  • 프로그래밍의 기초(조건, 반복)만

    • C# 언어의 모두를 다루지 않음

  • 어? 숫자야구 게임도 만드네?

    • 기초만 써도 숫자야구게임이 나옴

  • 다른 고급 기법과의 관계도 소개

    • 전문 프로그래머를 꿈꾸는 사람의 흥미유발

  • 온라인 문제풀이 및 강의 준비 중(광고)

 


 

입문 후 진로



세 부류

발표자료와 같은 이미지가 아님. 비슷한 모양의 그래프 이미지일 뿐..

 

  • 세로 축 Ability(능력)

  • 가로 축 TIme(시간)

  • 어느 분야든 시작점은 같지만 최후에는 세 부류로 나뉨

    • 시작했다가 흥미를 잃고 포기(가장 아래 그래프. y = 1 의 그래프 모양과 비슷)

    • 시작했다가 어느정도 선에서 멈춤(중간 그래프. y = n 의 그래프 모양과 비슷)

      • 생활코딩 하는 사람

    • 가즈아!(가장 위의 그래프. y = n2 그래프 모양과 비슷)

      • 전문 개발자



  • 요즘 세상은 중간 그래프에 있는데도 괜찮다고 느낌

    • 30대 후반 - 40대 초반에 이것이 잘못된 것을 느낌

      • 이미 늦음..

 




1. 생활코딩 

  • 프로그래머를 업으로 삼지 않음

  • 다른 일을 하면서 필요에 따라 기존의 프로그램을 실행

  • 필요한 프로그램이 없을 경우 간단한 1회성 코딩

    • 예: 헬로코딩 삽화 작업

  • 프로그래밍은 내 직업의 효율을 올릴 수 있는 훌륭한 툴

    • MS Word 없이 보고서를 쓰나요?

  • 굳이 전문 프로그래머가 되지 않아도 충분히 성공 가능

  • 일반 프로그래머보다 덜 불쌍(?)할 수도 있음




부작용 이야기 하나..

  • 전산화가 되면 문서 출력을 덜 할 것이다

    • 현실은 그렇지 않았다

 


 

생활코더가 더 배울 것들

  • 골 밑에서 50% 확률로 슛을 넣을 수 있을 정도의 실력 쌓기

  • 다른 프로그래밍 언어 기본서적 공부

  • 내게 필요한 자잘한프로그램 만들기

    • 사진 싹싹이

    • 빈 폴더 지우기

  • 어차피 나 혼자 쓸 프로그램이니 돌기만 하면 됨

  • 효율성은 뭔 상관?

  • 스트레스가 적다!

 




2. 전문 프로그래머 - 코드몽키급

  • 프로그래머를 업으로 삼음

  • 엔지니어급 프로그래머가 정해준 알고리즘을 프로그래밍 언어로 작성

  • 일반 직장인과 다를 바가 없음

  • 스타벅스의 바리스타 같은 존재

  • 머신러닝이 대체할 거라고 하는 프로그래머 직군이 여기

  • 야근 등의 처우 문제 이야기가 나오는 프로그래머 직군도 여기

  • 하지만 누구나 시작은 여기서 함



‘프로세스만 잘 따라해도 일을 잘 한다’ 는 이야기를 듣는 사람이 여기

  • 스타벅스의 바리스타 같은 존재

    • 매뉴얼대로 만든다

    • 어느정도 맛도 괜찮게 나온다

    • 집에서 커피 믹스를 타먹어도 어느정도 만족하는 맛이 나온다

    • 매뉴얼을 잘 다루는 것은 길어도 1-2달… 교체가능한 부품일 뿐

 


 

시작은 같다

  • 시간이 흐를수록 차이가 많이 난다

 


 

코드몽키가 더 배울 것들

  • 골 밑에서 80% 확률로 슛을 넣을 수 있을 정도의 실력 쌓기

  • 누군가 설계도를 주면 제품을 조립해 줄수 있어야 한다

  • 생활코더가 배운 것들 모두

  • 기초 알고리즘 및 데이터 구조 공부

  • 프로그래밍 실행 속도(CPU에 한정)에 대한 고민

    • 정렬 기능을 실행하는데 3천년이 걸리면 안된다...

  • 협업이 가능한 코딩 스타일(가독성 등)

    • 내가 만든 코드를 다른 사람이 보고 이해를 할 수 있게…

  • 버그 고치는 실력 늘리기

 


 

3. 전문 프로그래머 - 엔지니어 급

  • Top 1% 프로그래머

  • 뜬구름 잡는 요구를 받더라도 제품을 설계 가능

  • 여타 직장인과 매우 다름

  • 자기 삶의 주인이 될 수 있는 위치

  • 생활습관 자체에서 최적화된 알고리즘이 보임

  • 한국에서도 매우 처우가 좋은 프로그래머 직군

  • 머신러닝이 대체하기 어려운 프로그래머 직군




정말 클라이언트가 원하는 것을 파악하고 해결할 줄 아는 능력

  • 커뮤니케이션이 중요함

 


 

누가 대체하기 쉬울까?

  • 조립공장에서 일하는 근로자

    • 일반적인 프로그래머

  • 능력 좋은 프로그래머

    • 영화 ‘매트릭스’의 매트릭스 설계자

 


 

엔지니어가 더 배워야 할 것

  • 골 밑에서 80% 확률로 슛을 넣되 부상을 당하지 않을 실력 쌓기

  • 코드몽키가 배운 것 전부

  • 컴퓨터와 일심동체(하드웨어의 이해)

  • 순수 CPU외에 운영체제, 메모리 작동방식에 따른 성능에 대한 이해

  • Managed 언어 하나와 Unmanaged 언어 하나의 완벽한 이해

  • 생활습관의 엔지니어화 = 일을 즐겨야 한다

  • 인간에 대한 이해

    • 실수가 어려운 설계를 만들 수 있는가?(실수가 적게 발생하도록 만들 수 있는가)

 


 

현재 교육 및 업계의 잘못된 트렌드

  • 모두를 위한 교육

  • 프로그래밍 교육의 하향 평준화

  • 교수진 품질의 저하

  • 다수결이 최고다

  • 눈가리고 아웅하기

  • 밥그릇 지키기

  • 현실을 깨달았을 땐 너무 늦음




예전에는 프로그래밍 과목에서 탈락률이 높았다

  • 하지만 요즘에는 탈락률이 낮다

    • 하향 평준화…

교수진 품질의 저하

  • 잘 하는 사람들은 교수를 하지 않는다

    • 연봉이 훨씬 적은데 뭐하러 교수를 하겠는가?

  • 실제로 개발을 안해본 사람이 교수를 하기도 함


 

그렇다면 엔지니어 공부는 어디서?

 

1. 좋은 대학교

  • 좋은 학교일 수록 취업전문학교화가 덜 되어있음

  • 물론 여전히 수준미달 교수들이 꽤 있음

  • 수업을 들을 때 하드웨어 관련 과목을 많이 들을 것

    • 운영체제

    • C/C++ 언어

    • 컴퓨터 구조

    • 알고리즘 등

  • 실패한 창업을 시도할 좋은 기회

  • 2년제 또는 단기 학원을 나온다면 회사 다닐 동안 더 노력해야 함





학원에서는 하드웨어에 대해서는 가르치지 않는다

  • 실무에서 이 부분에 대해서 보완해야 할 때 모르고 있다면 할 수가 없다

  • 공부를 꼭 해야 한다

실패한 창업을 시도할 좋은 기회

  • 본인이 스스로 무언가를 만들면서 경험을 할 수 있다

2년제 또는 단기 학원을 나온다면 회사다닐동안 보완을 해야..

  • 하드웨어 관련 과목!!

    • 컴퓨터의 작동 원리에 대한 깊은 이해

 


2. 좋은 직장

  • 대충 돌기만 하는 1회성 제품을 만드는 회사는 빨리 떠날 것

  • 외주보다는 자체 제품을 만드는 회사를 선호

  • 정부의 지원 및 수주를 받는 회사도 의심할만 함

  • 야근을 강요하지 않는 회사를 찾을 것

  • 이런 회사에 가지 못하고 모든 회사가 똑같다는 변명을 한다면

    • 평생 코드몽키

    • 다른 업종 가도 똑같은 대우를 받음

    • 허나 이런 거짓말을 하며 자기 위안을 하는 사람이 많다

    • 그로 인해 피해보는 후임자들은 생각치 않은 채



대충 돌기만 하는 1회성 제품을 만드는 곳은 품질을 따지지 않는다

  • 도움이 안된다

내 시간을 챙길 수 있는 회사를 찾아야 한다

  • 자기발전을 위해 시간을 낼 수 있어야 한다

 


 

3. 사이드 프로젝트

  • 회사에서 배우는 것은 한계가 있음

  • 새로운 것을 해볼 기회가 적음

  • 1만 시간 법칙의 문제도

    • 10,000 / 20시간 / 50주 = 10년

  • 사이드 프로젝트를 할 때는 새로운 기술들을 시도해보자

  • 친절하지 않은 많은 기술을 접하며 컴퓨터가 생각하는 방식에 익숙해짐.



포프tv

  • 시작은 작은 것을 목표로 시작했다

  • 꾸준함이 좋은 재료..

 


 

4. 더 나은 교육기관(광고)

  • 현재 열심히 개발 중인 학원

  • 엔지니어를 키우는 엘리트 교육이 목표(학점 80-90% 이상만 졸업 가능)

  • 시작은 온라인, 하지만

  • 멍때리며 따라한 뒤 ‘아~ 난 이제 이거 알아’라는 잘못된 자기만족을 지양

  • 컴퓨터 공학과 수준의 교육(과제, 실습, 기말고사까지 있음)

  • 교양과목을 빼고 1.5-2년 정도가 목표

  • 최신 기술을 이용한 동기 및 승부욕 부여

  • 빨라야 올해 말 공개(Proof of Concept University : https://www.pocu.academy)

    • 홈페이지 접속이 안됨..




영상을 보고 멍때리는 교육 지양

  • Udacity 등 이 문제가 해결된 곳이 있음

실시간 질문 기능

  • 수업을 상시 여는게 아니라 스케줄에 따라 진행

  • 정기적인 시간에 질문/답변 받을 수 있게

과제, 실습 자동 채점

  • 제출을 하면 자동 체크!

  • 코드 스타일, 기능 체크, 카피 체크

    • 기능을 다 돌리고도 0점이 나오기도 함

    • 무제한 제출 가능

  • 처음엔 50%대 점수 → 마지막엔 90%대 점수까지 상승

    • “우리는 빌드봇에게 배웠다!”

기말 시험

  • 웹캠으로 방을 전체 스캔

  • 얼굴 스캔

  • 신분 확인

  • 시험지 프린트

    • 시험지에 응답하는 동안 영상처리로 이상 유무 체크

      • 이상이 있을 경우(컨닝 의심 반응이 있을 경우) 교수가 체크

 

 


 

관련 포프 TV 에피소드들

 


정리

  • 세상은 원래부터 알고리즘에 의해 돈다

  • 컴퓨터는 세상을 빠르고 효율적으로 돌려준다

  • 남이 만든 프로그래밍을 돌리기만 하는 시대는 끝났다

  • 프로그래머가 아니더라도 프로그래밍을 이용할 곳은 많다

  • 프로그래머가 직업이라고 다 편하게 살지 못한다

  • 프로그래머가 직업이라면 컴퓨터와 훌륭한 부부생활을 하자

 


 

Q&A

Q. 프로그래머가 되기 위해 한 구체적인 노력

  • 프로그래머가 되려고 노력했다기 보다는 프로그래밍이 재미있었다

  • 유치원 생 때 우연히 프로그래밍을 배웠다

    • 배운 것으로 쓸데없고 잡다한 것들을 만들었다

  • 어느 친구 : “게임을 만들어보자”

    • 게임이 재미있었고 만들고 싶었다

    • 친구들에게 도움이 되었으면..

      • 그림을 못그리니까 코딩을..

    • 일단 만들자!

      • 만들기 위해 한 다양한 노력들

  • 커서 전문적으로 직장을 가지고 일할 때

    • 남들보다 못한다고 생각했다

    • 가상의 경쟁자를 만들었다

      • 가상의 경쟁자를 이길 수 있도록 목표로 세우고 노력함

        • 예) 6개월 뒤에 선임 개발자 A를 따라잡자

      • 단기적인 성과보다는 장기적인 성과를 목표로 함

        • 무엇이든 꾸준히 하는 습관을 들이자

 

Q. 프로그램을 어떻게 짜야 할 지 모르겠습니다. 어떻게 해야 할까요?

  • 알고리즘의 생활화

    • 생활해서 무엇을 할 때 단계를 나눠서 생각하려는 노력을 한다

  • 친구들과 토이 프로젝트를 만들어서 진행해본다

    • 복잡한 프로젝트일 필요는 없다

      • 예) “똥 피하기 게임을 만들어보자!”

  • 온라인에 질문을 올려도 답변이 달리지 않을 수도 있다

    • 너무 뻔한 질문을 올려서 그럴수도 있다

 

Q. 웹 프로그래머는 해외에서 어느정도 경쟁력이 있나요?

  • 불쌍한 웹 프론트엔드 개발자 영상(링크) 참고

  • 예전에 웹 디자인 하던 사람들이 자바스크립트를 배워서 웹 개발자라고 하는 부류(프론트엔드)

  • 웹 서버쪽을 다루는 부류(백엔드)

  • 프론트엔드를 만드는 사람들은 백엔드를 만들던 사람들이었다

    • 단순 프론트엔드 코딩 기술로는 경쟁력이 없다

  • 캐나다는 연 8만불이상이 안되면 이민이 어렵다

    • 이 이상 연봉을 받을 수 있는 사람이 되어야 한다

  • 모바일프로그래밍

    • 요즘의 웹 프론트엔드와 같은 양상

    • 예전엔 인기 있는 파트였지만 금방 식었다

  • 요즘은 모바일, 웹 작업을 외주를 준다

    • 비용이 싸기 때문

  • 본인이 이 분야에 뛰어들었을 때 경쟁력이 있는가?

    • 경쟁력을 갖출 수 있는 실력이 있어야 한다

 

Q. 프로그래밍을 잘 하려면 수학을 잘 알아야 한다는 이야기를 듣습니다. 수학의 어떤 부분을 잘 알아야 할까요?

  • 수학의 논리적 사고력을 중요하게 본다

  • 필수

    • 증명

    • 명제

  • 대학에 진학 후 이산수학

  • 본인이 어떤 분야로 나가느냐에 따라 조금씩 다르다 

 

  • 통계, 확률 : 통계 분야

  • 삼각법, 도형 등 : 게임 분야

  • 3D, 벡터, 행렬 : 물리 분야

 

Q. 회사에서 음주를 선호하는 분위기가 있는 경우가 있으셨나요?

  • 포프님 회사에서 술 마시는 것은 업무와 분리되어 있다

  • 회사에 따라 키보드로 자부심을 내세우는 곳이 있다

  • 내가 좋아하진 않지만 주위에 맞춰서 묻어갈 것인지, 싫다고 말하고 왕따 분위기를 거치고 원하는대로 지낼지 선택

    • 본인이 싫어하는데 맞출 필요는 없음

    • 상대방 기분이 상하지 않는 선에서 적절히 둘러대기

      • 그럼에도 불구하고 왕따를 시키는 곳은 오래 있을 필요가 없다

Q. Intermediate의 기준이 무엇인지?

  • 포프 TV에서 말하는 Intermediate는 북미 기준

    • 주니어와 시니어의 사이

  • Junior

    • 해야 할 일들을 하나씩 지정해줘야 함

    • 코드를 보고 확인을 해줘야 함

  • Intermediate

    • “라면을 만들거야. 니가 적절히 만들어서 가지고 와”

      • 만들어 온 결과물을 검토를 받는다

    • 완벽하지 않을 수 있지만 자기만의 시스템을 책임지는 사람

  • Senior

    • 프로그램 하나 전체를 디자인 할 수 있다

    • 프로그램 전체를 볼 수 있는 사람

  • 회사에서 일 잘하는 사람은 인터넷 서핑하면서 노는 모습을 봐도 지적을 받지 않는다

    • 지적을 받는다면 일을 못하는 사람인 것

 

Q. 포프님과 술 한잔 하려면 어떤 방법이 있을까요?

 

Q. 프로그래밍 알고리즘을 짤 때 사고력 훈련을 어떻게 해야 할까요?

  • 알고리즘을 직접 만들 필요는 없다

  • Hello Coding 알고리즘’ 책과 같은 쉬운 책을 따라서 공부하는 것도 방법

  • 온라인 커뮤니티

  • 필요한 것은 물어물어 만들면 된다

 

Q. 1) 좋은 코드의 특징 2) 요즘 관심갖고 계신 신기술(블록체인, 머신러닝 등)이 궁금합니다

  • 좋은코드 → 읽기 쉬운 코드

    • 예외처리 코드가 들어가면 읽기가 어려워짐

    • 자바에서는 모든 기능을 함수로 만드는 것을 선호

      • 함수에 버그가 있을 경우 해당 버그를 고쳤을 때 미칠 수 있는 영향에 대한 고민.

    • 자바의 기본 관점 : “누군가 함수를 만들면 해당 함수는 버그가 없다”

      • 잘못된 생각

    • 다른사람이 내 코드를 보더라도 이해가 쉽게 되어야 하도록 짜야 한다

  • 신기술

    • 신기술을 쫓아서 보지는 않는다

    • 요즘 보고 있는건 블록체인의 플랫폼화에 대한 가능성

 

Q. 기초 지식이 부족하다고 생각합니다. ‘기초 지식, 이건 알아야 한다!’ 하는게 있을까요? 추천 부탁드립니다.

 

Q. 게임서버를 공부하고 있습니다. 지인이 말하길 ‘서버를 하려면 C++을 버려야 한다. 자바가 C++ 보다 서버에 최적화 되어있다’라고 합니다. 이 말이 맞는지 궁금합니다

  • 헤일로(HALO)

  • “C++이 자바보다 최소 3배가 빠르다”

  • C++로 짠 코드를 컴파일하면 컴파일 시간이 꽤 걸린다

    • 경우에 따라 1시간 걸리기도 함

      • 컴퓨터가 코드를 최적화 하는 시간

  • 자바는 컴파일 하는 시간이 거의 없음

    • 자바 코드를 실행하면 실시간으로 컴파일 하는 것과 같음

  • 실행전에 최적화 하는것보다 실시간으로 하는게 빠를 수가 있는가? 아니다

    • C++이 더 좋다

  • 자바로 짜는 것보다 C++로 웹서버를 만드는게 더 오래걸린다

    • 지인이 말한 것이 이 부분을 말한듯 하다

    • C++은 메모리를 직접 건드리기 때문

  • 요즘 게임서버는 C#으로 많이 만든다

 

Q. 캐나다 이주 계획을 목표로 하고 있습니다. BCIT를 입학하기 위해 준비해야 할 것들에 대한 팁이 있을까요?

  • 캐나다의 경우 2년제 대학을 졸업하면 3년짜리 워킹비자를 발급해 줌

  • 3년동안 일하는 동안 경력이 쌓이고 영주권 획득이 가능하다

  • ‘시간 절약’이 관건

    • 캐나다에 도착해서 영어 시험을 준비하는 것은 늦다

      • 영어 점수를 미리 따고 입학서까지 미리 받아둘 것

  • 2년 동안 듣는 학점이 128학점(과거엔 140학점)

    • 고등학교 때 공부하는 것을 생각하면 충분히 할 수 있다

  • 학교 다니는 동안 다른 것을 안한다는 생각을 해야 한다

 

Q. 특성화고 졸업 예정자입니다. 회사에서 기획 분야의 능력도 요구하는 곳이 많습니다. 개발을 얼마나 하고 기획 분야로 넘어가는 게 좋을까요?

  • 기획을 하게 되는 분의 대부분

    • 처음엔 게임을 만들고 싶어함

      • 프로그래밍은 어려워

      • 아트는 어려워

      • 기획은 할만할 것 같아!

  • 처음엔 QA로 시작하다가 흐름을 읽을 줄 알게되면 기획으로 넘어가는 경우도 있음

  • 어떤 분야를 가든 좋은 사람들이 많은 곳을 가는 것을 추천

  • 내 생각 : 화성에서 온 프로그래머, 금성에서 온 기획자, 한빛미디어

  • 게임 기획자는 수치를 잘 다룰줄 알아야 한다고 생각한다

 

Q. 실리콘 밸리에서 요즘 각광받고 있는 분야가 어떤 것인지 궁금합니다.

  • 실리콘 밸리는 매출이 올라도 각광받지 못함

  • 투자자들이 원하는 것은 ‘매출’이 아님

  • 성장하고 있음을 보여줘야 함

    • 유저 수, 매출, 재방문 고객 수 등

  • 트렌드를 잘 보려면? ‘구글 트렌드(링크)’를 이용하면 어떨지…

  • 비지니스의 두 분류

    • 벤처비즈니스

      • 돈 받아서 exit 하는 것(고속성장)

    • 꾸준히 돈 버는 것

      • 뉴스 같은 곳에 나오지 않음

 

Q. 마이크로소프트 MVP 활동 계기, 혜택이 궁금합니다

  • 마이크로소프트 MVP

    • 특정 기술 분야에서 커뮤니티에 기여를 많이 하는 사람을 뽑아서 주는 상

    • 기존 MVP의 추천을 받아야 함

    • 작년에 어떤 활동을 했는지 제출 후 검토를 받음

  • 첫 계기

    • 게임 만들 때 컨퍼런스에 3년 연속 발표

    • C++ MVP로 갔다가 개발 MVP로 바뀜

  • 현재는 포프TV 활동으로 MVP 기록 유지 중

  • 혜택

    • 마이크로소프트 소프트웨어 무료 지원

    • Visual Studio Ultimate 무료 지원

    • Azure Credit 지원

    • 마이크로소프트 파트너사 툴 이용 지원

      • JetBrain

 

Q. 특성화고를 다니며 게임 포트폴리오를 3개정도 만들었습니다. 하지만 기업 담당자분들은 아키텍처 등 깊이 있는 지식을 원하시는 것 같습니다. 이런 것들을 공부하는게 좋을까요?

  • 배틀쉽, 3D 비행슈팅게임 …

    • 충분하다

  • 면접을 통과하는 단계

    • 1. 인사부

      • 한 번에 수백장의 이력서가 옴

      • 뭔가를 만들어 본 경험이 있다면 통과율은 충분히 높음

    • 2. 면접

      • 코딩 테스트

        • 정렬 알고리즘 코드를 작성할 수 있는가

        • 문자열을 거꾸로 뒤집을 수 있는가

          • 알고리즘 공부를 했다면 다 할수 있는 것들…

      • 객체지향에 대해서 얼마나 잘 알고 있는가

      • 언어에 대한 깊은 이해

 

Q. 직접 회사를 운영하고 있습니다. 회사 운영을 위한 프로세스, 가이드를 만드는데 이것도 알고리즘의 일환이라고 생각합니다. 이런 가이드를 작성하는 사람이 고려해야 할 우선순위가 궁금합니다.

  • 프로세스가 모든 것을 완성시켜주지는 않는다

  • 시스템을 악용하는 사람이 많아지면 엉망이 된다

  • 글루와(Gluwa)

    • 독재자가 최고다

      • 독재자가 제대로 된 기준을 가진 사람이 있는 사람이라면 올바른 판단을 내릴 수 있다

  • 프로세스는 단순한 것이 좋다

  • 프로세스가 없을 때 실수가 많이 발생할 수 있다면 프로세스를 만드는 것이 좋다

    • 프로세스는 실수를 줄이기 위해 있는 것

  • 프로세스를 악용하는 사람이 있을 때

    • 프로세스를 고칠 것이 아니라 사람대 사람으로 해결 할 것

  • 사장이 나쁜 사람이 될 수록 직원들은 행복함

 

Q. 회사에서 다른 사람들이 기능을 만들어 달라고 할 때 요구사항이 불분명한 경우가 있습니다. 이럴 때 커뮤니케이션 방법이 궁금합니다

  • 사람들은 본인이 원하는 것이 무엇인지 정확히 모른다

  • 본인이 만들어 달라고 한대로 만들어 줬지만 ‘이게 아닌데…’라고 하는 경우도 있다

  • 상대방이 무엇을 원하는지 알아볼게 아니라, 어떤 점이 불편한지 파악하는 것이 우선

    • 이것을 왜 해야 하는가?

      • 예) 파일을 1000번 복사해야하는데 이게 귀찮으신가요?

    • 파악이 끝나면 상대방이 뭐라고 하든 무시하고 일단 나만의 방식대로 만든다

    • 그 결과물을 가지고 상대방에게 보여주고 피드백을 받아서 수정한다

 

Q. 1) 코드몽키에서 엔지니어로 올라갈 때 버그를 많이 찾아야 된다고 하셨는데, 취업 전 디버깅 연습할 수 있는 방법 2)컴퓨터 공학 기초 지식 공부의 우선순위가 궁금합니다

  • 디버깅을 할 때 단순 로그를 찍어서 하는 사람

    • 코드가 길어지면 디버깅을 못한다(잘못된 방법)

  • IDE에서 제공하는 디버깅 기능을 활용하는 사람

    • 중단점을 설정해서 디버깅을 한다

      • 코드가 길어지더라도 문제가 없다

  • 코드의 길이는 문제가 안된다

  • 디자인 패턴

    • 사람들이 많이 쓰는 것들 정형화한 것

    • 일부러 공부 할 필요 없다

  • 기본적인 알고리즘 공부를 해라

    • 예) 문자열 뒤집기

  • 코딩 면접은 기본기에 대해서 묻는다

    • 기본기가 중요!

    • 기본기 없이 화려한 공부만 하는 것은 잘못된 방법

 

Q. 성격이 급해서 기능 개발을 할 때 회사 코딩 스타일을 무시하고 구현 후 회사 스타일에 맞춰서 수정하는 편입니다. 이렇게 개발하는게 맞는 방법인지 궁금합니다

  • 잘못됐다

  • 본인이 잘 만들었고 고치면 된다고 생각한다

    • 코드를 수정하는 과정에서 놓치는 경우가 발생할 수 있다

    • 사람이기에 분명 실수를 하게 된다

      • 이런 실수가 반복되면 문제가 있는 사람이라고 생각하게 된다

  • 처음부터 코딩스타일을 따르는게 어렵다고 생각한다면?

    • 처음엔 습득기간이 길어질 수 있다. 하지만 이게 맞는 길..

  • 이직할 때마다 회사의 코딩스타일이 달라진다

    • 회사 스타일에 맞게 빠르게 적응해야 한다

    • 스타일에 빠르게 적응하는 사람이 일 잘하는 사람이 된다

  • 본인 스타일대로 작업을 하다가 다른사람과 같이 일해야 할 경우가 생길 수 있다

    • 같이 일하는 사람이 이 상황을 해결해줄수는 없다

 

반응형