Download presentation
Presentation is loading. Please wait.
1
프로그래머로써의 기본…. 신입이 알아야 할 지식
2
게임 프로그래머가 되기 위한 동기? 유명 게임들을 즐기며 게임 프로그래머를 꿈꾸어 왔다?
유명 게임들을 즐기며 게임 프로그래머를 꿈꾸어 왔다? 개인적으로는 프로그래밍 공부중 , 게임프로그래밍이 어려웠기때문에 도전하기 싶었기 때문 게다가 군대 갔다온 이후 게임은 끊긴 했지만 그전에는 게임 광이었다 예전 , 울티마 온라인에 충격을 받긴 했었음
3
현실 실제 자기가 생각한 수준의 게임을 개발할 확률은 1%도 되지 않음
실제 자기가 생각한 수준의 게임을 개발할 확률은 1%도 되지 않음 10개 프로젝트 중 1개 정도만 오픈 베타를 할까 말까 한 현실 , 그나마 오픈 베타 중 극히 일부만 성공…. 게다가 월급 밀리는 회사가 상당함….. 프로그래머 잡담게시판엔 월급만 제대로 받을수 있으면 그만이라고 말하는 사람들도 이미 태반 그것을 최고의 복지로 취급하는 사람 마저 있다
4
현실
5
그래도 꿈이 개발자라고?(1) 게임 업계 , “어렵다 어렵다” 하지만 , 솔직 히 실력만 있으면 좋은 대우를 받는 곳
게임 업계 , “어렵다 어렵다” 하지만 , 솔직 히 실력만 있으면 좋은 대우를 받는 곳 업계에 사람은 많지만 , 항상 제대로 된 사 람이 드물기 때문에 , 사람이 부족하다며 아 우성인 곳
6
그래도 꿈이 개발자라고?(2) 따라서 열정 , 패기 그리고 가장 중요한 독기가 있다면 크게 성공할 가능성 있다
따라서 열정 , 패기 그리고 가장 중요한 독기가 있다면 크게 성공할 가능성 있다 기존의 상당수 프로그래머는 이미 매너리즘에 빠져 있는 상태 , 창조성과 열정이 필요한 신입의 자리는 항상 존재한다 일이 쉽게 풀리는 일은 거의 없기 때문에 , 열정만으로는 해결이 안된다 뭐라도 "독하다" 라는 말을 듣지 못했다면 , 자신에게 독기가 있는지 확인해보기 바람 독하다는 이야기를 들을 정도면 당신은 무엇이든 해낼수 있는 무엇인가를 가진것이다 참고로 신입이라고 무시했던 수많은 인간들에게 독기를 품고 매일 밤 늦게까지 일으르해 실력을 보여주자 2개월동안 신입을 깔보단 사람들이 머리를 숙이고 들어옴
7
기본에 충실 하라 게임 프로그래밍을 하기 위해 DirectX를 시 작????
과연 제대로 읽어본 C++ 책이 몇 권이나 되 는가? Effective C++를 읽고 이해할 수준은 되는가? + - 도 할줄 모르는데 미적분을 할 수 있다고? C++ , 알고리즘 , 자료구조 , 운영체제 , 네트 워크 공부는 기본이다 다이렉트X가 기본이긴 하지만 , 엔진을 많이 가져다 쓰기에 다이렉트X를 직접 다루는 일은 별로 없다 자체 엔진이라도 신입에게 엔진을 맡기지도 않는다 C++는 잘 쓰기 어렵다 , 엉망으로 쓰는 사람이 태반 만약 전산과를 휴학하고 있는 사람들이 있다면 반드시 졸업할때까지 빡세게 전산과 수업을 공부하도록 하자.
8
프로그래밍에 미쳐라 주위를 살펴 보자 , 솔직히 미쳐서 공부하는 사람이 과연 몇이나 있는가?
주위를 살펴 보자 , 솔직히 미쳐서 공부하는 사람이 과연 몇이나 있는가? 미쳐서 공부하는 사람 치고 , 미래가 보이지 않는 사람은 보지 못했다
9
만줄 이상의 프로그램을 작성해보아라 책의 지식을 실제로 적용해보지 않고서는 아는 것이라 할 수 없다
책의 지식을 실제로 적용해보지 않고서는 아는 것이라 할 수 없다 게임이 아니어도 좋다 , 스파케티 코드도 좋 다 , 만줄 이상의 코드를 작성해 프로그램을 만들어 보아라 만줄 이상의 코드를 관리 하는 데서 오는 문 제점과 해결하려는 노력만으로도 레벨을 높일 수 있다 책의 지식을 실제로 적용해보지 않으면 모르는 것과 같다 버그를 수없이 많이 봐보면 , 알긴 아는데 ,제대로 실천을 안해서 생긴 문제들이 많다 [ 항상 버그를 내놓고 아는 문제라 변명하는 것처럼 한심해보이는것도 없다 ] 만줄이상의 프로그램에 , 코드를 대충 짜서 넣을때 디버깅하기가 쉽지 않음을 알수 있는데 그것을 생각한다면 좀더 코드를 직관적이며 , 중복이 적게 짜게 될것이다 많은 코드를 짜보면서 .. 몸에 배어야 한다 .
10
알콜코더 블로그에 나온 Q/A (1) 전문대 다니는 24살 학생에 내년 졸업함 클라이언트 입사 희망
스스로 C++ 기본 개념 즉 포인터,클래스, 동 적 할당 등등 확실하지 않게 익히지 않음 취업박람회에서 알아보니 업계 관계자가 신 입은 기본 실력만 있으면 된다고 들음 그렇다면 기본 실력은 무엇인지 궁금 C++ 책한권 읽어보고 C++좀 안다고 떠드는 것처럼 못나보이는것도 없다 C++를 10년이상한 프로그래머도 C++에 대해 함부로 떠들수 없을만큼 깊고 어려운분야다 항상 겸손한 자세로 공부해야한다
11
알콜코더 블로그에 나온 Q/A (2) 기술적으로 가장 크게 필요한 것들은 C++, DirectX 3D, Windows API 이 세가 지 (window api는 게임돌아갈 플레폼을 이해하는건 필수) C++ 잘한다고 게임 개발자가 될 수 있는 건 아님 다만 C++은 기본적으로 잘해야 하는 것!!!!! . C++을 할 줄 모르면 그 다음 내용 들은 전혀 이해할 수 없다! 그것도 C++을 좀 할 줄 압니다. 수준이 아니라, C++의 포인터와 메모리 구조, 자료구조, 알고리즘, 객체지향, 디자인 패턴을 전부 활용할 수 있는 수준이 되 어야 함 이건 선택도 아니고, 피해갈 수 있는 내용도 아님, 완벽한 필수 조건임 수학의 더하기/빼기 같은 것임 , 이것을 모르고 그 다음에 나오는 미분, 적분을 할 수 없는 것과 같음 물론 그 후에 DirectX와 3D 그래픽스 프로그래밍을 하면서 Windows API도 같 이 공부해야함 . 이 모든 것들이 C++ 기반이기 때문에 C++을 모른다면 아무것 도 할 수 없다
12
NC 신입 필요 조건
13
그런데 … 왜 기본기인가? 박지성을 보자. 박지성이 원래 발 재간이 좋아 발탁된 선수는 아니다
박지성을 보자. 박지성이 원래 발 재간이 좋아 발탁된 선수는 아니다 그의 광고를 보면... “두 개의 심장…” 즉 엄청난 체력을 강조한다 ….. 즉 엄청 난 기본기다… 어떤 스포츠든 체력 즉 기본 바탕으로 한 플레이에는 당해내지 못한다 예) 2002 월드컵4강 , 히딩크 감독은 한국 대표팀에 부임 후 , 가장 첫 번째 지적 “체력이 약하다… “ “체력” 즉 기본의 부재를 가장 치명적으로 봤다 ,그는 전술 훈련이 아니라 체 력 훈련에만 매진하고도 월드컵4강 기적을 이룬다 그 전까지만 해도 항상 기술이 부족한 한국 축구라 했지만 , 이제는 체력이 부 족한가 아닌가를 따지며 해설이 진행되는 경우가 많다 최고의 인기 스타 이동국, 히딩크에게 게으른 사자 … 로 낙인 찍히며 ,한국 축구 최고의 전성기 시절을 모두 놓친다. 게으르고 변명이 많은 인간에게는 누구에게도 기회를 주고 싶어 하지 않는다 는 걸 명심하자 현실은 C++ 의 쉬운 기본 문법조차 모르는 신입이 대부분 당장 눈에 보이는 DirectX 로 눈에 보이는걸 흉내내는 코드를 배낀것이 전부인 경우가 대부분 지원사항에 STL은 필수라고 적어두어도 , STL 책 한권 읽어보지 않은 사람이 대다수 면접관이 C++ 의 기본 문법만 물어보아도 이미 게임 끝난 경우가 태반이다 프로그래밍은 암기가 아니다 외워서 될게 아니라 이해해야한다 심지어 30번 이상 면접에 들어갔던 , 옆 동료는 아예 신입을 뽑지 말자라고 함 이건 옆 동료뿐 아니라 , 대부분의 업계 면접관들의 고민임 마구 슛을 쏠수 있는 킥 능력이 있다고 해서 감독에게 면접을 보게 되지만 감독은 기초 체력이 있는지 운동장 10바퀴를 뛰라 시키고 대부분 1바퀴도 못돌고 낙오하는게 현실
14
그런데 … 왜 기본기인가? 프로그래밍도 마찬가지
항상 배워야 하는 프로그래머 특성상 기본이 안되 어 있으면 어떤 기술이든 배우는데 한계가 따르고 , 껍데기만 배우게 된다 희한한 꽁수나 남이 모르는 대단한 테크닉 같은 거 에 환상을 품지 말라 기본기가 충실하면 , 조금 지식 먼저 쌓았다고 거드 름 피우는 인간들보다 앞서는 것은 순식간이다 그래서 경력과 실력은 상관관계는 있지만 비례하 진 않는다
15
우물 안 개구리가 되지 말아라 세상에 실력자는 널렸다 , 폐쇄적인 마인드 로 우물 안 개구리처럼 살지 말자
세상에 실력자는 널렸다 , 폐쇄적인 마인드 로 우물 안 개구리처럼 살지 말자 좋은 소스를 많이 보아라 . 오픈 소스 중에 검증되고 좋은 라이브러리가 많다 . 가끔 코딩하다가 문제를 해결했을적에 "난 천재가 아닌가" 라고 생각했다면 틀림없는 잘못된 생각이다 자신이 아무리 천재적인것처럼 생각되도 구글 에 검색만 해보면 당신보다 뛰어난 사람이 지천에 널려 있다는걸 알게 된다 그래서 뭐 하나 만들려한다면 먼저 구글에 검색 부터 해보고 이미 존재하는 라이브러리를 검토해본다음 , 진짜로 만들지 검토한다
16
자신의 환경을 탓하지 말아라 평발이어서 남보다 두 배 더 더 뛰어야 했다는 박지성 ….
평발이어서 남보다 두 배 더 더 뛰어야 했다는 박지성 …. 자신의 나쁜 조건이나 환경 이 나쁜 실력의 변명이 되지 않는다 회사는 자선단체가 아니다 나쁜 환경임에도 불구하고 공부를 많이 더 열심히 했어야 더 인정 받는다 자기 소개서에 불우한 자신의 환경이라든지 , 어려웠던 이야기로 채우는 사람들이나 알바를 하느라 공부를 못했서 공부를 별로 못했다고 이야기하는 사람들을 보게 된다 이러한 이야기를 할때 면접관 생각에 떠 오르는 것은 뭘까? 면접관은 회사에 필요한 사람을 뽑는 곳이지 불우한 이웃을 뽑아 월급 주는 단체가 아니다 자신이 무엇을 했고 , 무엇에 능한지만 이야기 하면 된다. 무능할수 밖에 없었던 불우한 환경이야기는 친구들에게나 하자
17
구루에게 조언을 얻어라 가장 빠르게 배울 수 있는 방법이 , 뛰어난 사람에게 한 수 배우는 것이다.
가장 빠르게 배울 수 있는 방법이 , 뛰어난 사람에게 한 수 배우는 것이다. 구루들은 프로그래머 사이트에서 종종 볼 수 있지만 , 초보자들 Q/A를 해주기 위해 그 곳에 상주 하고 있지 않다는 것을 명심해야 한다 구루들은 남과 교류하거나 재미?를 위해 아님 자신의 의견을 피력하기 위해서만 글을 올린다 단지 초보들에게 봉사하기 위해 답글을 올리지 않는다는걸 명심하자
18
전형적인 어리석은 질문들과 극단적인 답변(1)
Q: X에 관한 자료나 프로그램을 어디서 찾아 볼 수 있나요? A: 여기에다가 질문을 올리느니 그 동안 구글 로 검색해보겠다. 남이 당신 대신 검색해주길 바라다니 한심하네…. 정답이다. 질문해서 원하는 답변을 얻는 것보 다 , 구글로 검색해서 원하는 답변을 찾는 게 훨 씬 효율적이다. 아마도 구글 검색을 이용해 영 문으로 된 적절한 자료를 찾지 못한다면 , 뛰어 난 프로그래머가 되긴 틀렸다고 단언 할 수 있 다
19
전형적인 어리석은 질문들과 극단적인 답변(2)
Q : CreateThread 함수가 무엇을 하나요? A : 이런 질문을 할 정도로 똑똑하다면 MSDN를 읽고 스스로 해답을 찾을 수 있을 겁니다 Q: Printf 와 put 함수 어느 게 성능이 빠를까 요? A: 한번 시간 체크해서 테스트 해보세요. 내 시간을 소비할 필요도 없을 겁니다
20
전형적인 어리석은 질문들과 극단적인 답변(3)
Q: 제 {프로그램, 설정, SQL문}이 동작하지 않아요. A: 이건 질문이 아닙니다. 당신이 진짜로 하 고 싶은 질문이 뭔지 알기 위해 스무고개 놀 이를 하고 싶지 않습니다. 전 다른 할 일이 있습니다. 이런 질문을 보면 전 보통 다음과 같이 행동합니다. 뭔가 더 할 말은 없나요? 그거 안 됐네요. 잘 해결되길 빕니다. 근데 이거 나랑 무슨 상관입니까?
21
전형적인 어리석은 질문들과 극단적인 답변(4)
Q: XXX를 모르겠어요 급해요! A : 급한 건 당신 사정입니다. 그렇다 당신이 급하다고 해서 안면도 없는 사람들에게 호소해봤자다. 저런 성의 없는 질문을 던지는 사람은 제대로 된 프로그래 머라고 보기 힘든 경우가 많다 * 3은 답은 뭔가요? 라고 물어볼봐엔 , 계산기 뚜려보겠다는 말하고 똑같은겁니다 구루는 , 스스로 해결할려고 노력하는 사람이고 해결할수 있는 사람이라 믿음이 생기면 답변을 해준다
22
좋은 질문 나쁜 질문을 비교? 어리석은 질문 : 컴파일 에러가 떴는데 무슨 에러 인지 모르겠어요
어리석은 질문 : 컴파일 에러가 떴는데 무슨 에러 인지 모르겠어요 Smart : 컴파일 에러가 떴습니다 C2065 에러고요 구글 검색해보니 , 선언되지 않은 식별자라 나옵니 다. 그래서 해당되는 심볼의 식별자를 검색해봤는 데 정상적으로 존재하는데도 불구하고 에러가 계 속 발생합니다. 이게 발생할수 있는 경우를 다 조사 해봤는데도 아무리 봐도 잘 모르겠습니다 , 혹시 비 슷한 경우가 있으신 분이 계신가요? - 답변 : 해당 식별자가 Define으로 재정의 되어 있는 지 확인해보십시오 ….
23
소스 관리자를 사용해보아라 비록 업계에 들어가지 않았더라도 소스 관리 자를 통해 소스를 관리해 보아야 한다
비록 업계에 들어가지 않았더라도 소스 관리 자를 통해 소스를 관리해 보아야 한다 심지어 이건 프로그래머 뿐 아니라 기획,그래 픽 디자인 모두에 해당한다 이런 것을 통해 히스토리 추적 및 , 롤백, 충돌, 머지 및 분기에 대해 배울 수 있다 이건 코드 뿐 아니라 모든 데이터를 관리하는 데 대단히 중요한 개념이다
24
입사 지원 전 다시 확인해 볼만한 사항 전산과 출신 학생이라면 먼저 학교에서 배울 수 있는 컴퓨터에 관한 이론과 지식을 마스터 해 졸업 후 지원 C++ 기본서는 마스터는 기본 , C++ 고급 서적을 읽고 이해 할 수 있어야 한다 (적어도 C++(STL 포함)에 관련된 서적 10권정도 읽었는지 확인) DirectX 기본 서적 완독 네트워크 및 소켓에 대한 기본 이해 반드시 공부한것들로 게임을 짜 볼것 이렇게 명백하고 간단한 사항도 만족 시키지 못한다면 , 제발 빠르게 포기하자
25
입사 성공!? 입사 성공? 하지만 여태까지 해왔던 건 시 작에 불과
입사 성공? 하지만 여태까지 해왔던 건 시 작에 불과 여태 고만 고만한 사람들과 경쟁 및 협력을 하여서 자신의 한계를 깨닫지 못함 입사 후부터 선배들과 맞부딪히며 살 떨리 는 본 게임 시작
26
신입 프로그래머의 문제 판타지를 가지고 있음, 게임회사도 회사다 . 회사 가 게임의 판타지 같은 곳으로 생각하면 대단히 곤 란. 게임을 즐기는 것과 만드는 것은 괴리가 크다 . 실제로 하기 싫은 일부터 해야 하는 경우가 대부분 코드만 짜면 생산성이 있는 줄 안다 프로그램만 잘하면 되는 줄 알다 - 커뮤니티 능력 이 매우 낮다 자신이 가진 지식이 대단한 걸로 착각하는 경우가 많다 왜 면접관이 자신을 뽑았는지 생각해보자 당신이 하고 싶은거 시켜주려고? 아니다 회사에서 필요한걸 시켜먹을 가능성이 조금이라도 보였기때문이다 여태 혼자 프로그래밍 한 경우가 대부분 이므로 우물안의 개구리는 피해야한다 자신만의 코딩 스타일을 버리고 , 팀에서 쓰는 코딩방식부터 익히도록 하자
27
신입들의 큰 착각 “이런 거 하려고 들어온 거 아닌데…” – 회사 가 시키려는 것과 당신이 하고 싶은 것이 일 치할 확률은 0.001%에 가깝다 “전 존 카멕처럼 엔진만 개발하고 싶습니다” 당신이 다이렉트X를 얼마나 공부했던간에 , 신입 수준에서 엔진에 대해 뭔가 큰것을 다루게 될것이라 생각한다면 큰 오산이다 , 기본 라이브러리와 엔진급은 모두다 공통적으로 사용하는 코드기때문에 , 신입에게 맡기지 않는다 로직과 UI 부터 마스터를 해라 그리고 나서 계속 공부해 수준을 높인후 건의 하자 하지만 엔진도 엔진이지만 로직을 제대로 못해 콘텐츠가 죽는 경우가 대단히 많다 , 로직이든 엔진이든 설계가 중요하므로 설계를 공부하는데 게을리 하지 말자
28
생산성? 코딩은 잘은 못해도 어느 정도 프로그래밍 을 할 수 있다 생각하는 신입들이 상당수 존 재 . 그들의 생산성은 ?
코딩은 잘은 못해도 어느 정도 프로그래밍 을 할 수 있다 생각하는 신입들이 상당수 존 재 . 그들의 생산성은 ? 한마디로 마이너스…… 그나마 마지 못해 사람이 없어서 신입을 뽑은 경우가 종종 존재 하지만 대다수 팀장이나 , 경력자들의 반응은 그림과 같음 생산성이 0도 아니 마이너스 , 예전 회사 팀장에게 "제가 어떻게 해드리면 만족하실수 있을까요?" 라고 하자 " 제발 내가 다시 코드를 손 대지 않게 코드만 짜면 된다 " 라고 함 한마디로 경력자 조차 생산성이 마이너스인 경우도 태반인것임
29
생산성? (삽질 코드의 폐해) 유지보수가 되어야 할 코드라면 결국 다시 업 어야 하는 경우가 대부분 …
유지보수가 되어야 할 코드라면 결국 다시 업 어야 하는 경우가 대부분 … 짜면 짤수록 설계와 코드 품질은 나빠짐… 가장 큰 문제는 대충 결과물이 나왔다는 이유 로 엎어야 할 코드임에도 경영진이 보기엔 똑 같아 보이므로 … 엎는 게 삽질로 보임…. 한마디로 코드는 나락에 빠지고 , 관련 콘텐츠 는 차후 확장 성이 없는 죽은 코드가 된다
30
생산성? (연봉) 마이너스 생산성으로는 연봉 협상 자체가 불가능하다
회사입장에서는 신입에 연봉에 대해 사실 엄청나게 비싸 게 지불하는 것 물론 능력이 있다면 다음 연봉 테이블은 100%이상 뛸수 있다. 능력이 없어 신입 때 적은 연봉을 받는 게 아니라 , 검증이 안되었기 때문에 적게 받는다는 걸 인지 신입의 연봉에 너무 연연하지 말 것 왜 비싸더라도 신입은 안 뽑고 경력자를 뽑으려는지 상 식적으로 받아들여라 (검증된 것을 쓰는 것이 몇 십 배 싸 다)
31
커뮤니티 - 회사는 학교(학원)가 아니다 신입의 태도의 문제 - 여태 돈을 내고 배워왔고 , 가르쳐 주는 게 의무였던 사람들과 지내옴 회사 선배는 친구나 선생이 아니다 뭔가 알려주면 겸허하게 받아 들이자 만약 알려줬는데 따르지 않으면 당신에게 다음은 없다 업무 시간에는 개인 공부만을 위한 목적으로 회사프로젝 트를 하지 말아라 - 개인공부는 도움이 되겠지만 같이 하 는 동료들은 당신의 공부한 코드로 인해 엄청난 피해를 입는다 , 정 하고 싶다면 물어보고 시작해라 , 혼자 하는 프로젝트가 아니라는 걸 명심할것 선배가 중요한 내용을 뭔가 알려줬는데 , 무시하거나 따르지 않으면 당신에게 다음의 중요한 내용을 알려줄리 없다 고치라고 분명 알려줬는데 고치지 않은 수 많은 고집 불통의 사람들을 보았는데 , 자기 맘대로 할거면 혼자 프로젝트를 하는게 맞다
32
커뮤니티 - MMORPG게임 개발이라면 WOW는 해볼것
게임을 개발하는데 게임을 모르면 다른 사람과 협력이 불가능하다 어떤 훌륭한 시스템을 기획자가 기획했는데 프로그래머가 이해 할 수 없으면 구현 불가. ‘와우’정도는 해봐야 MMORPG의 시스템의 정석을 이해 할수 있다 MMORPG의 기본도 모르는데 기획자와 대화가 될수 없다 명심할 것은 프로그래밍은 기획자의 생각을 컴퓨터로 번역을 하는 역 할이다 예전 엉망인 IT 번역서를 보면 IT를 모르는 단순 영문학생들이 번역 한 경우가 꽤 많았다 (삼각형프레스이던가?) 게임 프로그래밍도 마찬가지…. 게임을 모르고 게임을 프로그래밍하 겠다고??? 그런데 현실은 시궁창…. 금융 시스템 ,회계 시스템 , 재고 관리 등등의 모든 프로그래밍에 있어서 프로그래밍 지식으로만 구축될수 있는건 없다 금융은 금융지식을 알아야 하며 , 회계는 회계지식, 재고관리는 역시 재고관리되는 과정을 알아야 한다 게임쪽에서는 기획과 그래픽을 알아야하는데 각각의 기획자와 디자이너 전문과와 소통하려면 기반 지식은 배워야 한다
33
커뮤니티 - 게임을 모르는 프로그래머의 예 기획자 - “버프 시스템에 이것을 추가 하고 싶은데….”
기획자 - “버프 시스템에 이것을 추가 하고 싶은데….” 프로그래머 – 버프가 뭔가요? 기획자
34
커뮤니티- 타 파트를 이해하라 프로그래머의 생산성도 중요하지만 다른 파트의 생산성도 대단히 중요하다
프로그래머의 생산성도 중요하지만 다른 파트의 생산성도 대단히 중요하다 타 파트의 생산성도 , 프로그래머가 얼마나 자동화 해주냐에 따라 달라질 수 있다 따라서 타 파트의 작업을 이해해야 좋은 툴과 자동 화 시스템을 만들 수 있다 좋은 엔진은 프로그래머에게만 좋은 게 아니라 디 자인, 기획자에게도 많은 기능을 제공해준다
35
커뮤니티 - 협력 게임 개발의 협력은 필수 자기가 편한 대로 엉망으로 하면 다른 사람은 개 고생을 하게 된다
게임 개발의 협력은 필수 자기가 편한 대로 엉망으로 하면 다른 사람은 개 고생을 하게 된다 개 고생한 사람이 협력 할 리 없다 -> 프로젝트는 산으로 협력하지 않을 거면 1인 프로젝트를 하라 , 스마트폰 게임 이 붐이지 않은가?
36
소통하라 대형 게임은 혼자서 만드는 게 아니다 고집 불통 소통하지 않으려면 혼자 게임을 개 발하라
고집 불통 소통하지 않으려면 혼자 게임을 개 발하라 프로그래머가 다른 파트의 상전은 아니다 프로그래머는 일반적으로 창조적인 기질과 합 리적인 사고 때문에 , 일반적인 대중 취향과 다 른 부분이 많다. 어려운 사람이라는 소리는 명예로운 호칭이 아니다 타 분야 사람과 의식적으로 소통하려 노력하자
37
자신이 짠 코드가 최선? 자신이 직접 구현한 것만 고집하는 친구들을 가끔 보인다
자신이 직접 구현한 것만 고집하는 친구들을 가끔 보인다 자기코드가 최선이라 생각하는 건 스스로 우물 안의 개구리라 선언하는 셈 검증된 코드가 최선이다 자신의 코드는 얼마나 검증되었는가? 표준 라이브러리 , Boost는 전 세계적으로 검증 되었다 , 당신 코드는? 기본 라이브러리를 직접 구현하는 경우는 표 준에 없거나 현 프로젝트에는 딱 맞지 않아 커 스터마이징 해서 쓸 때 뿐이다
38
프로그래머의 가장 중요한 덕목? C++ ? directX ? Opengl? 네트워크? 무슨 지식이???????
39
프로그래머의 가장 중요한 덕목? 문제 해결 능력 , 논리적 사고 ,비판적 사고 이건 단순히 지식을 익힌다고 늘지 않는다
항상 왜? 라는 물음을 가짐. 한 줄 코딩을 하지 않고도 문제를 해결하기 도 한다 예전 디자이너가 맥스에서 택스쳐 파일이 중간에 빠지면 다시 정렬해야하는 문제가 있었음 너무 재작업이 많아서 효율적으로 하기 위해선 익스포터를 다시 만들어야 했는데 다시 생각해보니 그냥 중간에 파일이 빠지면 그 칸을 비워둬도 처리할수 있게 만들면 쉽게 처리가능한 문제여서 , 익스포터를 고치지 않고 문제 해결 신입들의 일반적인 문제 해결 방법... “ 하다보니까.... “, “그냥…”.. 스스로 해결한 방법을 설명하지 못한다. 그건 문제를 해결한것이 아니다 문제가 뭔지도 모르는 것
40
논리력 프로그래머는 모든일에 있어서 가장 마지막으로 하는 작업이다
프로그래머는 모든일에 있어서 가장 마지막으로 하는 작업이다 프로그래밍 후 고치는 작업은 매우 비용이 많이 들며 되돌리기 힘든 작업도 있다 따라서 구현전 기획의 모든 내용을 냉철하게 검증해야 하는데 , 이 작업은 그 사람의 논리력에 달려 있다 , 아무 비판없이 기획자가 던져준데로만 구현해서 낭패에 빠지는 프로그래머를 심심치 않게 볼수 있다 기획자가 무엇이든 뚤을수 있는 창을 만들어 달라고 해 놓고 나중에는 무엇이든지 막을수 있는 방패를 만들어 달라는 기획이 심심지 않게 나온다 믿기 힘들겠지만 .... 현실은 그렇다... 물론 이렇게 명백하게 나오진 않고 , 철저하게 검증하지 않으면 적당히 감추어진체 알고....보니 모순된점이 있어서 다시 재 작업하게 되는 것이다 결국 잘못을 누가했던간에 마지막에 독박쓰는건 프로그래머기때문에 논리적이며 비판적인 사고 능력은 반드시 필요하다
41
비판적 사고… 기존의 작업 방식이나 코딩에 대한 태도....
흔히 여태 해왔으니까 라며 그대로 답습하며 작업을 하는 경우가 태반 특히 잘못된 코딩이나 설계를 보고도... "여태 잘 동작해왔으니까..." 라며 잘못된 것을 답습하는 경우가 많다 항상 그렇지만 처음에는 괜찬을지 몰라도, 코드가 커지면 설계단에서 문제가 생기기 마련... 비판없이 그대로 기존 코드를 답습한다면 ... 코드가 굳어져 나중에 변경하기가 힘들다 더욱 문제는 항상 변경사항은 생긴다는것.... 따라서 문제가 커지기전에 습관적으로 복사 붙여넣기 하던 코드를 비판적으로 바라보자
42
비판적 사고(무지한 노가다) 문제점을 바로 잡으려 노력하지 않는다면 열 심히 일은 해도 효율적이지 않다
문제점을 바로 잡으려 노력하지 않는다면 열 심히 일은 해도 효율적이지 않다 제대로 코딩 하거나 , 작업을 자동화 하면 몇 분 안 걸려 끝날 일을 무의식적으로 노가다 코딩 을 하다 보면 ,몇 일을 고생해야 한다 고생해도 결국 , 결과는 그다지 아름답지 않다 . 열심히 했지만 망한 프로젝트는 , 비 효율적으 로 코딩 및 작업한 경우가 한 몫 한다 또한 당연히 노가다로 반복해왔던 작업들도 왜 이렇게 노가다를 해야하는지 고민해봐야 한다 노가다가 많을수록 의욕은 떨어지고 , 단순 반복작업에 지쳐버린다 게다가 마지못해 하기때문에 대충하게 되고 , 버그가 양산되는 경우가 많다 따라서 당연히 노가다해야하는게 아니라 왜 당연히 자동화 하지 않는가?라는 의문을 품는다면 작업은 개선된다 이렇게 똑똑하게 일하지 않는다면 , 열심히 일해도 성과가 나오지 않는 늪에 빠지게 되는것이다. 무의식적으로 기존의 관습을 답습하는지에 대한 냉철한 비판적 사고를 사지지 않으면 자기는 열심히 했는데 , 프로젝트는 망하고 , 욕만 먹기 일수이다 프로그래머는 열심히 한걸 알아주기보단 , 똑똑하게 멋지게 문제를 해결하는데 초점을 맞추어야 한다
43
실패한 문제 해결 플로우 차트 논리적 사고와 비판적 사고가 결여된 프로젝트의 플로우 차트
많은 프로젝트가 이모양 이꼴로 돌아가기에 , 돌이킬수 없게 망가지는 경우가 많이 있다 결국 남탓만 하는 시스템을 볼수 있다 이건 기획,디자인,프로그래머 모두에게 해당된다
44
마지막으로 코딩 시 주의 할 점은? 방어적 프로그래밍 객체지향 공부- 소스의존성 및 모듈화
문제는 기억하느냐가 중요한 것이 아니라 언제 잊어버리느냐다 머리로만 생각하지 말고 그려서 구체화 하 라
45
방어적 프로그래밍 방어적 프로그래밍이란 모듈간의 상호 작용 시 정상적 이지 않는 부분을 예외 처리 하는 것
방어적 프로그래밍이란 모듈간의 상호 작용 시 정상적 이지 않는 부분을 예외 처리 하는 것 흔히 Assert를 이용 함수 안에서는 모든 인자 값을 검사 함수를 호출 하는 쪽에는 리턴 값 및 에러 값 조사 Int getArray(unsigned int index) { return array[index] ; } -> Int getArray(unsigned int index) { assert( index < MAX_ARRAY); return array[index] ; } 내가 짠 함수나 클래스를 쓸 때도 , 어떤 싸이코가 짠 코 드라 가정하고 방어적으로 프로그래밍 한다 , 그 후 결과 를 보면 , 내가 정말 싸이코가 아닌지 의심할 때가 많다. 코딩할때 흔히 제대로 동작하는 값에 대한 경우만 생각한다 그래서 흔히들 배열의 인덱스 검사를 생략하는 경우가 많다 정상적인 인덱스를 넘겨줄거라 가정하는것이다 하지만 현실은 수많은 사람과 코드를 공유하기에 , 코드를 처음 짠 사람이 생각한대로 코드를 쓰지 않는 경우도 많이 발생한다 따라서 잘못된 인덱스 값이 넘어오면 그 즉시 에러를 발생 시켜 알수 잇게 해야하는데 보통 assert를 빼먹거나 꺼버리므로써 잘못된 인덱스 값을 사용해 , 한참 잘못된곳에서 버그를 발생 시키게 된다 , 따라서 원인을 찾기 힘들게 되고 디버깅은 힘들어진다 제대로 예외 처리를 했다면 5분이면 해결될것을 , 항상 정상일거라 가정하는 코드로 인해 하루 온종일 디버깅해야 하는 경우도 많다 심지어 디버깅을 포기하고 , 버그가 발생하지 않기를 기도하는 한심한 모습도 많다 온라인 게임특성상 , 유지보수를 해야하는 코드가 대부분이기때문에 기능추가를 위해 빨리 코딩을 할것을 생각하기보단 디버깅할것을 생각하고 코드를 짜야한다 뭐 귀찬게 그렇게 까지 할 필요가 있냐고 묻는 사람도 있지만 사람은 완벽하지 않기에 항상 실수를 한다는 사실을 인정하면 된다 하물며 당신이 짠 코드가 한달만 지나도 기억이 안나는데 다른 사람들과 같이 코드를 수십만줄 공유해 코드를 짠다고 생각해보자 끔직하다 나 같은 경우 내가 짠 함수나 클래스를 쓸때도 , 어떤 미친 싸이코가 짯다고 가정하고 방어적으로 프로그래밍한다 결과적으로 보면 , 내가 정말 미친 싸이코가 아닌지 의심할때가 많다
46
객체지향 공부 C++ 은 절차지향, 객체지향 , 제네릭 프로그래 밍 ,함수 프로그래밍등등 다양한 프로그래밍 스타일을 지원
객체지향을 배우면 모듈성 및 의존성, 디자인 패턴 등등을 자연스럽게 이해하게 된다 객체지향은 사실 철학이다. 프로그래밍의 큰 획은 다른 학문으로부터 오기 때문에 (디자인 패턴은 건축) 다양한 사고 능력을 길러야 한다 C++이나 자바 C#로 짜야 객체지향적인게 아니다 객체지향 공부를 하게 되면 C언어로도 객체지향 코딩을 할수 있다는걸 알게된다 윈도우 API를 보면 실제적으로 객체지향 적으로 프로그래밍 되어 있다는걸 알게 된다 단지 좀 불편할뿐 윈도우 를보면 객체지향의 핵심인 메세지처리 방식를 사용하였고 win32 api 함수역시 객체의 핸들을 넘기는 방식으로써 객체지향을 C언어로 훌륭히 구현하였다 디자인 패턴이 건축에서 왔다는 사실은 세삼스러운 사실이 아니다 프로그래밍은 수학이라기보단 철학에 가깝기때문에 논리적인 사고와 실용적인 사고를 길러야 한다 , 게다가 프로그래밍은 수학처럼 딱 떨어지지도 않는다
47
문제는 기억하냐가 아니라 언제 잊어버릴 것이냐…
코딩을 함에 있어서 new를 쓰면 delete 반드시 해야 한 다. 하지만 , 이 사실을 코딩 내내 기억할수 있냐는 사실 보단 , delete 하는걸 언제 까먹을까? 라는 사실이 더 현실 적이다 한마디로 실수를 유발하는 코딩 자체를 피해야 한다 문자열을 쓰기 위해 new char[25]를 한 후 delete [] 를 쓰기 보단 아예 delete를 할 필요 없는 string 클래스를 사용하 라는 뜻이다 C++는 어렵지만 , 알면 알수록 코드 자체로 자동화 할 수 있는 기술들이 많다 (boost 를 참고 하라) stl 과 string , boost 라이브러리를 쓰면 메모리 관리는 자동화 시킬수 있다 항상 모든지 검증된 방법으로 관리되는 코드를 짜도록 하자
48
그림을 그려 구체화 하라 머리로만 생각하면 희미하기 때문에 구체적으로 문제를 이미지 하기 어려운 경우가 많다
머리로만 생각하면 희미하기 때문에 구체적으로 문제를 이미지 하기 어려운 경우가 많다 폴리곤을 어떻게 처리할 것인가에 대한 것은 3차원적인 공간을 머리 속에 그려야 하는데 쉽지 않다 머리 속으로만 생각하다가 그냥 까먹기도 일쑤 수학적인 문제의 경우는 모눈 종이 같은 것에 대고 , 해당 그림을 그려가며 생각해본다 계산도 직접 종이에 공식을 적어보고 풀어보자 사람의 머리로는 수많은 점과 삼각형을 다 그려 낼수가없다 뭔가 문제가 있다면 직접 그려보자 어떠한 변화에 그림이 바뀌게 되면 그 그림을 추적해 변화를 관찰하면 깨닭음을 얻는 경우가 많다 예를 들면 그림을 그리다 보면 그림에서 패턴을 찾을수도 있고 공식을 알아내기도 한다 빠찡코 기계가 돌아가는데 회전을 시킨다 생각하면 점점 빨라지다가 등속도로 움직이며 멈출때는 서서이 멈춘다는 사실을 그래프로 그려보면 , 그래프에서 속도와 움직임에 대한 공식을 만들어 낼수 있을것이다 민컴뮤니케이션에서 처음 작업했던 데칼 작업도 그림을 그려 지형의 LOD되는 패턴을 찾아 만들었다
49
마지막으로… 그럴싸 하다 느끼면 실천해 보십시오
50
이걸 다 어떻게 하냐고?
Similar presentations