신입이 알아야 할 지식

50
신신신 신신신 신 신신 프프프프프프프프 프프… .

Upload: paloma-hall

Post on 01-Jan-2016

46 views

Category:

Documents


5 download

DESCRIPTION

프로그래머로써의 기본 …. 신입이 알아야 할 지식. 게임 프로그래머가 되기 위한 동기 ?. 유명 게임들을 즐기며 게임 프로그래머를 꿈꾸어 왔다 ?. 현실. 실제 자기가 생각한 수준의 게임을 개발할 확률은 1% 도 되지 않음 10 개 프로젝트 중 1 개 정도만 오픈 베타를 할까 말까 한 현실 , 그나마 오픈 베타 중 극히 일부만 성공 …. 게다가 월급 밀리는 회사가 상당함 …. 현실. 그래도 꿈이 개발자라고 ?(1). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 신입이  알아야 할 지식

신입이 알아야 할 지식프로그래머로써의 기본… .

Page 2: 신입이  알아야 할 지식

게임 프로그래머가 되기 위한 동기 ?

유명 게임들을 즐기며 게임 프로그래머를 꿈꾸어 왔다 ?

Page 3: 신입이  알아야 할 지식

현실

실제 자기가 생각한 수준의 게임을 개발할 확률은 1% 도 되지 않음

10 개 프로젝트 중 1 개 정도만 오픈 베타를 할까 말까 한 현실 ,

그나마 오픈 베타 중 극히 일부만 성공… . 게다가 월급 밀리는 회사가 상당함… ..

Page 4: 신입이  알아야 할 지식

현실

Page 5: 신입이  알아야 할 지식

그래도 꿈이 개발자라고 ?(1)

게임 업계 , “ 어렵다 어렵다” 하지만 , 솔직히 실력만 있으면 좋은 대우를 받는 곳

업계에 사람은 많지만 , 항상 제대로 된 사람이 드물기 때문에 , 사람이 부족하다며 아우성인 곳

Page 6: 신입이  알아야 할 지식

그래도 꿈이 개발자라고 ?(2)

따라서 열정 , 패기 그리고 가장 중요한 독기가 있다면 크게 성공할 가능성 있다

기존의 상당수 프로그래머는 이미 매너리즘에 빠져 있는 상태 , 창조성과 열정이 필요한 신입의 자리는 항상 존재한다

Page 7: 신입이  알아야 할 지식

기본에 충실 하라

게임 프로그래밍을 하기 위해 DirectX 를 시작 ????

과연 제대로 읽어본 C++ 책이 몇 권이나 되는가 ? Effective C++ 를 읽고 이해할 수준은 되는가 ?

+ - 도 할줄 모르는데 미적분을 할 수 있다고 ? C++ , 알고리즘 , 자료구조 , 운영체제 ,

네트워크 공부는 기본이다

Page 8: 신입이  알아야 할 지식

프로그래밍에 미쳐라

주위를 살펴 보자 , 솔직히 미쳐서 공부하는 사람이 과연 몇이나 있는가 ?

미쳐서 공부하는 사람 치고 , 미래가 보이지 않는 사람은 보지 못했다

Page 9: 신입이  알아야 할 지식

만줄 이상의 프로그램을 작성해보아라 책의 지식을 실제로 적용해보지 않고서는 아는

것이라 할 수 없다

게임이 아니어도 좋다 , 스파케티 코드도 좋다 , 만줄 이상의 코드를 작성해 프로그램을 만들어 보아라

만줄 이상의 코드를 관리 하는 데서 오는 문제점과 해결하려는 노력만으로도 레벨을 높일 수 있다

Page 10: 신입이  알아야 할 지식

알콜코더 블로그에 나온 Q/A (1)

전문대 다니는 24 살 학생에 내년 졸업함 클라이언트 입사 희망 스스로 C++ 기본 개념 즉 포인터 , 클래스 ,

동적 할당 등등 확실하지 않게 익히지 않음 취업박람회에서 알아보니 업계 관계자가

신입은 기본 실력만 있으면 된다고 들음 그렇다면 기본 실력은 무엇인지 궁금

Page 11: 신입이  알아야 할 지식

알콜코더 블로그에 나온 Q/A (2)

기술적으로 가장 크게 필요한 것들은 C++, DirectX 3D, Windows API 이 세가지 (window api는 게임돌아갈 플레폼을 이해하는건 필수 )

C++ 잘한다고 게임 개발자가 될 수 있는 건 아님 다만 C++은 기본적으로 잘해야 하는 것!!!!! . C++을 할 줄 모르면 그 다음

내용들은 전혀 이해할 수 없다 !

그것도 C++을 좀 할 줄 압니다 . 수준이 아니라 , C++의 포인터와 메모리 구조 , 자료구조 , 알고리즘 , 객체지향 , 디자인 패턴을 전부 활용할 수 있는 수준이 되어야 함

이건 선택도 아니고 , 피해갈 수 있는 내용도 아님 , 완벽한 필수 조건임 수학의 더하기 /빼기 같은 것임 , 이것을 모르고 그 다음에 나오는 미분 , 적분을 할 수 없는 것과 같음

물론 그 후에 DirectX와 3D 그래픽스 프로그래밍을 하면서 Windows API도 같이 공부해야함 . 이 모든 것들이 C++ 기반이기 때문에 C++을 모른다면 아무것도 할 수 없다

Page 12: 신입이  알아야 할 지식

NC 신입 필요 조건

Page 13: 신입이  알아야 할 지식

그런데 … 왜 기본기인가 ?

박지성을 보자 . 박지성이 원래 발 재간이 좋아 발탁된 선수는 아니다 그의 광고를 보면 ... “두 개의 심장…” 즉 엄청난 체력을 강조한다 … .. 즉 엄청난

기본기다… 어떤 스포츠든 체력 즉 기본 바탕으로 한 플레이에는 당해내지 못한다

예 ) 2002 월드컵4강 , 히딩크 감독은 한국 대표팀에 부임 후 , 가장 첫 번째 지적 “

체력이 약하다… “ “체력” 즉 기본의 부재를 가장 치명적으로 봤다 ,그는 전술 훈련이 아니라 체력 훈련에만 매진하고도 월드컵4강 기적을 이룬다

그 전까지만 해도 항상 기술이 부족한 한국 축구라 했지만 , 이제는 체력이 부족한가 아닌가를 따지며 해설이 진행되는 경우가 많다

최고의 인기 스타 이동국 , 히딩크에게 게으른 사자 … 로 낙인 찍히며 ,한국 축구 최고의 전성기 시절을 모두 놓친다 .

게으르고 변명이 많은 인간에게는 누구에게도 기회를 주고 싶어 하지 않는다는 걸 명심하자

Page 14: 신입이  알아야 할 지식

그런데 … 왜 기본기인가 ?

프로그래밍도 마찬가지 항상 배워야 하는 프로그래머 특성상 기본이 안되어

있으면 어떤 기술이든 배우는데 한계가 따르고 , 껍데기만 배우게 된다

희한한 꽁수나 남이 모르는 대단한 테크닉 같은 거에 환상을 품지 말라

기본기가 충실하면 , 조금 지식 먼저 쌓았다고 거드름 피우는 인간들보다 앞서는 것은 순식간이다

그래서 경력과 실력은 상관관계는 있지만 비례하진 않는다

Page 15: 신입이  알아야 할 지식

우물 안 개구리가 되지 말아라

세상에 실력자는 널렸다 , 폐쇄적인 마인드로 우물 안 개구리처럼 살지 말자

좋은 소스를 많이 보아라 . 오픈 소스 중에 검증되고 좋은 라이브러리가 많다 .

Page 16: 신입이  알아야 할 지식

자신의 환경을 탓하지 말아라

평발이어서 남보다 두 배 더 더 뛰어야 했다는박지성 … .

자신의 나쁜 조건이나 환경이 나쁜 실력의 변명이 되지 않는다

회사는 자선단체가 아니다

나쁜 환경임에도 불구하고 공부를 많이 더 열심히 했어야 더 인정 받는다

Page 17: 신입이  알아야 할 지식

구루에게 조언을 얻어라

가장 빠르게 배울 수 있는 방법이 , 뛰어난 사람에게 한 수 배우는 것이다 .

구루들은 프로그래머 사이트에서 종종 볼 수 있지만 , 초보자들 Q/A 를 해주기 위해 그곳에 상주 하고 있지 않다는 것을 명심해야 한다

Page 18: 신입이  알아야 할 지식

전형적인 어리석은 질문들과 극단적인 답변 (1) Q: X 에 관한 자료나 프로그램을 어디서 찾아 볼 수

있나요 ? A: 여기에다가 질문을 올리느니 그 동안 구글로 검색해보겠다 . 남이 당신 대신 검색해주길 바라다니 한심하네… .

- 정답이다 . 질문해서 원하는 답변을 얻는 것보다 , 구글로 검색해서 원하는 답변을 찾는 게 훨씬 효율적이다 . 아마도 구글 검색을 이용해 영문으로 된 적절한 자료를 찾지 못한다면 , 뛰어난 프로그래머가 되긴 틀렸다고 단언 할 수 있다

Page 19: 신입이  알아야 할 지식

전형적인 어리석은 질문들과 극단적인 답변 (2) Q : CreateThread 함수가 무엇을 하나요 ? A : 이런 질문을 할 정도로 똑똑하다면

MSDN 를 읽고 스스로 해답을 찾을 수 있을 겁니다

Q: Printf 와 put 함수 어느 게 성능이 빠를까요 ?

A: 한번 시간 체크해서 테스트 해보세요 . 내시간을 소비할 필요도 없을 겁니다

Page 20: 신입이  알아야 할 지식

전형적인 어리석은 질문들과 극단적인 답변 (3) Q: 제 { 프로그램 , 설정 , SQL 문 } 이

동작하지 않아요 . A: 이건 질문이 아닙니다 . 당신이 진짜로 하고 싶은 질문이 뭔지 알기 위해 스무고개 놀이를 하고 싶지 않습니다 . 전 다른 할 일이 있습니다 . 이런 질문을 보면 전 보통 다음과 같이 행동합니다 .

뭔가 더 할 말은 없나요 ? 그거 안 됐네요 . 잘 해결되길 빕니다 . 근데 이거 나랑 무슨 상관입니까 ?

Page 21: 신입이  알아야 할 지식

전형적인 어리석은 질문들과 극단적인 답변 (4) Q: XXX 를 모르겠어요 급해요 ! A : 급한 건 당신 사정입니다 .- 그렇다 당신이 급하다고 해서 안면도 없는

사람들에게 호소해봤자다 . 저런 성의 없는 질문을 던지는 사람은 제대로 된 프로그래머라고 보기 힘든 경우가 많다

Page 22: 신입이  알아야 할 지식

좋은 질문 나쁜 질문을 비교 ?

어리석은 질문 : 컴파일 에러가 떴는데 무슨 에러인지 모르겠어요

Smart : 컴파일 에러가 떴습니다 C2065 에러고요 구글 검색해보니 , 선언되지 않은 식별자라 나옵니다 . 그래서 해당되는 심볼의 식별자를 검색해봤는데 정상적으로 존재하는데도 불구하고 에러가 계속 발생합니다 . 이게 발생할수 있는 경우를 다 조사해봤는데도 아무리 봐도 잘 모르겠습니다 , 혹시 비슷한 경우가 있으신 분이 계신가요 ?

- 답변 : 해당 식별자가 Define 으로 재정의 되어 있는지 확인해보십시오 … .

Page 23: 신입이  알아야 할 지식

소스 관리자를 사용해보아라

비록 업계에 들어가지 않았더라도 소스 관리자를 통해 소스를 관리해 보아야 한다

심지어 이건 프로그래머 뿐 아니라 기획 , 그래픽 디자인 모두에 해당한다

이런 것을 통해 히스토리 추적 및 , 롤백 , 충돌 , 머지 및 분기에 대해 배울 수 있다

이건 코드 뿐 아니라 모든 데이터를 관리하는데 대단히 중요한 개념이다

Page 24: 신입이  알아야 할 지식

입사 지원 전 다시 확인해 볼만한 사항 전산과 출신 학생이라면 먼저 학교에서 배울 수 있는 컴퓨터에 관한 이론과 지식을 마스터 해 졸업 후 지원

C++ 기본서는 마스터는 기본 , C++ 고급 서적을 읽고 이해 할 수 있어야 한다 ( 적어도 C++(STL포함 ) 에 관련된 서적 10 권정도 읽었는지 확인 )

DirectX 기본 서적 완독 네트워크 및 소켓에 대한 기본 이해 반드시 공부한것들로 게임을 짜 볼것 이렇게 명백하고 간단한 사항도 만족 시키지

못한다면 , 제발 빠르게 포기하자

Page 25: 신입이  알아야 할 지식

입사 성공 !?

입사 성공 ? 하지만 여태까지 해왔던 건 시작에 불과

여태 고만 고만한 사람들과 경쟁 및 협력을 하여서 자신의 한계를 깨닫지 못함

입사 후부터 선배들과 맞부딪히며 살 떨리는 본 게임 시작

Page 26: 신입이  알아야 할 지식

신입 프로그래머의 문제

판타지를 가지고 있음 , 게임회사도 회사다 . 회사가 게임의 판타지 같은 곳으로 생각하면 대단히 곤란 .

게임을 즐기는 것과 만드는 것은 괴리가 크다 . 실제로 하기 싫은 일부터 해야 하는 경우가 대부분 코드만 짜면 생산성이 있는 줄 안다

프로그램만 잘하면 되는 줄 알다 - 커뮤니티 능력이 매우 낮다

자신이 가진 지식이 대단한 걸로 착각하는 경우가 많다

Page 27: 신입이  알아야 할 지식

신입들의 큰 착각

“이런 거 하려고 들어온 거 아닌데…” – 회사가 시키려는 것과 당신이 하고 싶은 것이 일치할 확률은 0.001% 에 가깝다

“전 존 카멕처럼 엔진만 개발하고 싶습니다”

Page 28: 신입이  알아야 할 지식

생산성 ?

코딩은 잘은 못해도 어느 정도 프로그래밍을 할 수 있다 생각하는 신입들이 상당수 존재 .

그들의 생산성은 ?

한마디로 마이너스……

Page 29: 신입이  알아야 할 지식

생산성 ? (삽질 코드의 폐해 )

유지보수가 되어야 할 코드라면 결국 다시 업어야 하는 경우가 대부분 …

짜면 짤수록 설계와 코드 품질은 나빠짐…

가장 큰 문제는 대충 결과물이 나왔다는 이유로 엎어야 할 코드임에도 경영진이 보기엔 똑같아 보이므로 … 엎는 게 삽질로 보임… .

한마디로 코드는 나락에 빠지고 , 관련 콘텐츠는 차후 확장 성이 없는 죽은 코드가 된다

Page 30: 신입이  알아야 할 지식

생산성 ? ( 연봉 )

마이너스 생산성으로는 연봉 협상 자체가 불가능하다

회사입장에서는 신입에 연봉에 대해 사실 엄청나게 비싸게 지불하는 것

물론 능력이 있다면 다음 연봉 테이블은 100% 이상 뛸수 있다 .

능력이 없어 신입 때 적은 연봉을 받는 게 아니라 , 검증이 안되었기 때문에 적게 받는다는 걸 인지

신입의 연봉에 너무 연연하지 말 것 왜 비싸더라도 신입은 안 뽑고 경력자를 뽑으려는지 상식적으로

받아들여라 (검증된 것을 쓰는 것이 몇 십 배 싸다 )

Page 31: 신입이  알아야 할 지식

커뮤니티 - 회사는 학교 ( 학원 )가 아니다 신입의 태도의 문제 - 여태 돈을 내고 배워왔고 ,

가르쳐주는 게 의무였던 사람들과 지내옴 회사 선배는 친구나 선생이 아니다 뭔가 알려주면 겸허하게 받아 들이자 만약 알려줬는데 따르지 않으면 당신에게 다음은 없다 업무 시간에는 개인 공부만을 위한 목적으로

회사프로젝트를 하지 말아라 - 개인공부는 도움이 되겠지만 같이 하는 동료들은 당신의 공부한 코드로 인해 엄청난 피해를 입는다 , 정 하고 싶다면 물어보고 시작해라 , 혼자 하는 프로젝트가 아니라는 걸 명심할것

Page 32: 신입이  알아야 할 지식

커뮤니티 - MMORPG 게임 개발이라면 WOW 는 해볼것 게임을 개발하는데 게임을 모르면 다른 사람과 협력이 불가능하다

어떤 훌륭한 시스템을 기획자가 기획했는데 프로그래머가 이해 할 수 없으면 구현 불가 .

‘와우’정도는 해봐야 MMORPG 의 시스템의 정석을 이해 할수 있다 MMORPG 의 기본도 모르는데 기획자와 대화가 될수 없다

명심할 것은 프로그래밍은 기획자의 생각을 컴퓨터로 번역을 하는 역할이다

예전 엉망인 IT 번역서를 보면 IT를 모르는 단순 영문학생들이 번역한 경우가 꽤 많았다 (삼각형프레스이던가?)

게임 프로그래밍도 마찬가지… . 게임을 모르고 게임을 프로그래밍하겠다고??? 그런데 현실은 시궁창… .

Page 33: 신입이  알아야 할 지식

커뮤니티 - 게임을 모르는 프로그래머의 예 기획자 - “버프 시스템에 이것을 추가 하고 싶은데… .”

프로그래머 – 버프가 뭔가요 ?

기획자 ---------

Page 34: 신입이  알아야 할 지식

커뮤니티 - 타 파트를 이해하라

프로그래머의 생산성도 중요하지만 다른 파트의 생산성도 대단히 중요하다

타 파트의 생산성도 , 프로그래머가 얼마나 자동화 해주냐에 따라 달라질 수 있다

따라서 타 파트의 작업을 이해해야 좋은 툴과 자동화 시스템을 만들 수 있다

좋은 엔진은 프로그래머에게만 좋은 게 아니라 디자인 , 기획자에게도 많은 기능을 제공해준다

Page 35: 신입이  알아야 할 지식

커뮤니티 - 협력

게임 개발의 협력은 필수 자기가 편한 대로 엉망으로 하면 다른 사람은 개 고생을 하게

된다 개 고생한 사람이 협력 할 리 없다 -> 프로젝트는 산으로

협력하지 않을 거면 1 인 프로젝트를 하라 , 스마트폰 게임이 붐이지 않은가 ?

Page 36: 신입이  알아야 할 지식

소통하라

대형 게임은 혼자서 만드는 게 아니다 고집 불통 소통하지 않으려면 혼자 게임을

개발하라 프로그래머가 다른 파트의 상전은 아니다 프로그래머는 일반적으로 창조적인 기질과 합리적인 사고 때문에 , 일반적인 대중 취향과 다른 부분이 많다 .

어려운 사람이라는 소리는 명예로운 호칭이 아니다

타 분야 사람과 의식적으로 소통하려 노력하자

Page 37: 신입이  알아야 할 지식

자신이 짠 코드가 최선 ?

자신이 직접 구현한 것만 고집하는 친구들을 가끔 보인다

자기코드가 최선이라 생각하는 건 스스로 우물 안의 개구리라 선언하는 셈

검증된 코드가 최선이다 자신의 코드는 얼마나 검증되었는가 ? 표준 라이브러리 , Boost 는 전 세계적으로 검증되었다 , 당신 코드는 ?

기본 라이브러리를 직접 구현하는 경우는 표준에 없거나 현 프로젝트에는 딱 맞지 않아 커스터마이징 해서 쓸 때 뿐이다

Page 38: 신입이  알아야 할 지식

프로그래머의 가장 중요한 덕목 ?

C++ ? directX ? Opengl? 네트워크 ?

무슨 지식이 ???????

Page 39: 신입이  알아야 할 지식

프로그래머의 가장 중요한 덕목 ?

문제 해결 능력 , 논리적 사고 ,비판적 사고

이건 단순히 지식을 익힌다고 늘지 않는다

항상 왜 ? 라는 물음을 가짐 .

한 줄 코딩을 하지 않고도 문제를 해결하기도 한다

Page 40: 신입이  알아야 할 지식

논리력

Page 41: 신입이  알아야 할 지식

비판적 사고…

Page 42: 신입이  알아야 할 지식

비판적 사고 ( 무지한 노가다 )

문제점을 바로 잡으려 노력하지 않는다면 열심히 일은 해도 효율적이지 않다

제대로 코딩 하거나 , 작업을 자동화 하면 몇 분 안 걸려 끝날 일을 무의식적으로 노가다 코딩을 하다 보면 , 몇 일을 고생해야 한다

고생해도 결국 , 결과는 그다지 아름답지 않다 . 열심히 했지만 망한 프로젝트는 , 비 효율적으로 코딩 및 작업한 경우가 한 몫 한다

Page 43: 신입이  알아야 할 지식

실패한 문제 해결 플로우 차트

Page 44: 신입이  알아야 할 지식

마지막으로 코딩 시 주의 할 점은 ?

방어적 프로그래밍 객체지향 공부 - 소스의존성 및 모듈화 문제는 기억하느냐가 중요한 것이 아니라

언제 잊어버리느냐다 머리로만 생각하지 말고 그려서 구체화 하라

Page 45: 신입이  알아야 할 지식

방어적 프로그래밍

방어적 프로그래밍이란 모듈간의 상호 작용 시 정상적이지 않는 부분을 예외 처리 하는 것

흔히 Assert 를 이용 함수 안에서는 모든 인자 값을 검사 함수를 호출 하는 쪽에는 리턴 값 및 에러 값 조사

Int getArray(unsigned int index) { return array[index] ; } -> Int getArray(unsigned int index) { assert( index <

MAX_ARRAY); return array[index] ; }

내가 짠 함수나 클래스를 쓸 때도 , 어떤 싸이코가 짠 코드라 가정하고 방어적으로 프로그래밍 한다 , 그 후 결과를 보면 , 내가 정말 싸이코가 아닌지 의심할 때가 많다 .

Page 46: 신입이  알아야 할 지식

객체지향 공부

C++ 은 절차지향 , 객체지향 , 제네릭 프로그래밍 , 함수 프로그래밍등등 다양한 프로그래밍 스타일을 지원

C++ 책에는 잘 나오지 않은 객체지향 자체를 공부하자

객체지향을 배우면 모듈성 및 의존성 , 디자인패턴 등등을 자연스럽게 이해하게 된다

객체지향은 사실 철학이다 . 프로그래밍의 큰 획은 다른 학문으로부터 오기 때문에 ( 디자인 패턴은 건축 ) 다양한 사고 능력을 길러야 한다

Page 47: 신입이  알아야 할 지식

문제는 기억하냐가 아니라 언제 잊어버릴 것이냐… 코딩을 함에 있어서 new 를 쓰면 delete 반드시 해야

한다 . 하지만 , 이 사실을 코딩 내내 기억할수 있냐는 사실보단 , delete 하는걸 언제 까먹을까 ? 라는 사실이 더 현실적이다

한마디로 실수를 유발하는 코딩 자체를 피해야 한다

문자열을 쓰기 위해 new char[25] 를 한 후 delete [] 를 쓰기보단 아예 delete 를 할 필요 없는 string 클래스를 사용하라는 뜻이다

C++ 는 어렵지만 , 알면 알수록 코드 자체로 자동화 할 수 있는 기술들이 많다 (boost 를 참고 하라 )

Page 48: 신입이  알아야 할 지식

그림을 그려 구체화 하라

머리로만 생각하면 희미하기 때문에 구체적으로 문제를 이미지 하기 어려운 경우가 많다

폴리곤을 어떻게 처리할 것인가에 대한 것은 3차원적인 공간을 머리 속에 그려야 하는데 쉽지 않다

머리 속으로만 생각하다가 그냥 까먹기도 일쑤

수학적인 문제의 경우는 모눈 종이 같은 것에 대고 , 해당 그림을 그려가며 생각해본다

계산도 직접 종이에 공식을 적어보고 풀어보자

Page 49: 신입이  알아야 할 지식

마지막으로…

Page 50: 신입이  알아야 할 지식

이걸 다 어떻게 하냐고 ?