Post

http://scienceon.hani.co.kr/66101



Post

좋은 사수는 어떤 사람인가요? 라는 질문을 받은 적이 있어서 이렇게 개인적인 생각을 끄적여 봅니다.

인터넷 상에도 좋은 사수분들이 많이 계십니다.

그런 분들에게 뭔가 배우실려면
1. 질문을 잘해야 합니다. 질문을 잘 하기 위해서는 스스로도 뭔가 많이 알고 고민하고 찾아봐야 합니다.
2. 문장력이 좋아야 합니다. 제대로 질문을 하기 위해서는 문장력이 좋아야 합니다.
3. 영어를 잘하게 되면 그루급의 개발자들과 소통할 수 있습니다. 애플 포럼에서는 WWDC에서나 보는 애플 엔지니어가 막 대답해주고 그럽니다.
(에플 엔지니어 옆에는 에플마크가 있죠. 실제로 보면 풍기는 포스가 남다릅니다.)

그래서 저는 회사를 고르실 때 사수가 누구냐에 그렇게 우선순위를 두지 않습니다.
iOS개발의 최고의 사수는 애플문서입니다.

"사수"란 것은 "나보다 현업에 조금 일찍 들어온" 개발자라고 생각합니다.
꼭 같은 회사 같은 조직에 있을 필요가 없죠.

"좋은 사수"란 칭호는 스스로 만드는 것이 아니라 주변에서 "주는" 칭호겠지요.
좋은 사수란 부사수와 함께 같이 공부하고 같이 의견을 나누고 같이 발전한다는 오픈 마인드를 가진 개발자라고 생각합니다.
부사수에게 "틀렸어!" 라고 말하기 보다는 "이건 이렇게 하는 것이 좋지 않을까?" 라고 의견을 말하는 사수.
부사수에게 "업무지시" 를 하는 사수보다는 "공동된 목표를 향해 함께 개발을 한다" 라는 마인드를 가진 사수.
정도인 것 같습니다.

내공이 높은 사람은 아무말 없어도 옆에만 있어도 그 포스가 느껴집니다.
그리고 왠지 모를 듯한 존경의 마음이 스스로 가지게 되더군요.
저는 그런분 한번 만나서 2년정도 같이 일한적이 있었네요.
파트가 달라서 개발에 관련된 직접적인 지도를 받은 건 없습니다만 그냥 점심시간에 밥먹으면서 퇴근 후에 저녁먹으면서 이런저런 개발에 관련된 이야기를 즐겁게 하고 개발이 정말 재미있구나 라고 생각하게 되었네요.
개발에 재미를 느끼면 업무효율도 자연스레 오르게 됩니다. 하지 말라는 야근도 하고....
실력을 갖춘 그리고 순수하게 개발을  즐기고 열정적인 눈빛을 가진, 그리고 즐겁게 개발 이야기를 나눌 수 있는 사람이라면 저는 "최고의 사수"라고 생각합니다.

부사수를 혹독하게 굴려야 한다는 철학을 가진 분들도 많이 봅니다.
아님 하나에서 열까지 모두 가르쳐 줘야 한다는 분들도 많구요.
그렇게 하면 부사수 애들이 빨리 성장해서 실무에 바로 투입하게 될 수 있게 됩니다.
그러면 당장은 사수도 좋고 부사수도 좋아라 합니다.
그런데 이렇게 큰 부사수분들은 나중에 빠르게 한계에 봉착하게 됩니다.
스스로 문제를 해결할 수 있는 능력이 현저하게 낮을 뿐더러 근본적으로 개발에 대한 재미를 느끼지 못하지 못하게 되지요.
이런 사수가 나쁘다고 말하는 것은 절대 아닙니다.
비용과 효율을 최대로 생각해야 하는 조직에서는 이런분들이 오히려 중요합니다.

다만 거시적 장기적 입장에서는 개인적인면으로는 그리 좋은 사수가 아닙니다.
스스로 문제를 생각해주게 하고 정말 힘들어 할 때는 정답보다는 약간의 가이드와 힌트로써 도와주고 결과적으로 함께 개발을 즐기게 하는 사수가 최고의 사수라고 생각합니다.



Post


' 개발 > 개발자유머' 카테고리의 다른 글

현대 소프트웨어 개발  (0) 2017.05.21
개발자와 클라이언트의 테스트  (0) 2017.05.21
송하나 커스텀 PC  (0) 2017.04.27
한국인이 원하는 겜  (0) 2017.04.26
개발자의 필수 아이탬  (0) 2017.04.26

Post




http://dogfeet.github.io/articles/2012/progit.html


Post

원본: http://sijinjoseph.com/programmer-competency-matrix/


출력용: http://www.idallen.com/programmer_competency_matrix.html




Post

3주_IT서비스 사업에 임하는 경영진의 준비(박준성교수,KAIST) [ 제작:무비라이크.010-2695-9910 ] from J Producer on Vimeo.


Post



이 슬라이드 내용 중에 공감하지 못하는건

'영어'....

프로그래머가 코드로 이야기 한다니.... 

그건 오픈소스 커뮤니티에서도 이름을 날릴 수 있는 특급 개발자에 한정된 이야기고,

적당한 고급 개발자 까지라면 미국에서 일하기 위해선 영어는 필수입니다.

인도 개발자들 머리좋고 실력좋고 영어도 잘하고 인건비도 내국인에 비해서 저렴합니다.

그래고 인도내에서도 IT 개발자 집중 양성 코스도 있구요.

영어못하는 한국인 개발자를 고용할 이유가 없습니다.


Post


출처: http://www.allofsoftware.net/2013/07/blog-post_31.html



공짜 점심이 개발자를 행복하게 할까?



이글은 제가 씨넷코리아에 게재한 칼럼입니다. 새로 시작하는 씨넷코리아에 많은 관심 바랍니다.


최근에 국내 유수의 소프트웨어 회사들의 구조조정 회오리를 보면 착찹한 생각이 든다. 척박한 우리나라 소프트웨어 환경에서 참신한 개발문화를 도입하고 새로운 모습을 보여주려고 했던 회사들이어서 더욱 안타깝다.

필자는 이런 현상의 결과와 겉모습만 말고 다른 시각에서 좀 더 근본적인 원인을 살펴보고자 한다.

3D 취급을 받고 있는 국내 소프트웨어 개발자들은 잘나가는 실리콘밸리의 소프트웨어 회사들과 높은 연봉을 받는 소프트웨어 개발자들이 부럽지 않을 수 없다. 종종 그런 회사들의 끝내주는 개발 환경이 부러움을 사곤 한다.

공짜 점심, 자유 출퇴근 제도, 공짜 커피, 편안한 사무실, 환상적인 휴게실/오락실/수영장, 선택 가능한 재택근무 등이 그것이다. 물론 회사마다 다르기는 하다.

우리도 개발자들에게 이런 공짜 점심 등의 혜택과 환경을 제공하면 개발자가 행복해질까? 회사는 더욱 성과를 낼 수 있을까? 뛰어난 개발자들이 모여들까? 


단순히 겉모습만 따라 하는 것은 단기적으로 효과가 있을지 모르지만 장기적이고 근본적으로는 해결책이 아니다.

여기서 우리는 착각하는 것이 있다. 그들이 제공하는 끝내주는 개발환경은 공짜가 아니다. 개발자가 예뻐서 주는 것이 아니다. 그들의 환경, 개발 문화, 개발 프로세스에 맞게 가장 성과를 잘 낼 수 있는 환경을 제공하고 있는 것이다. 

사무실 주변에 식당이 널려 있는 우리나라와는 다르게 실리콘밸리에서는 차를 타고 점심을 먹으러 가거나 샌드위치를 사다 먹어야 한다. 매번 차를 타고 점심을 먹으러 가는 것은 엄청난 시간 낭비이기 때문에 회사에서 공짜 점심을 제공하는 것이 회사에 더 이익이다. 실리콘밸리 회사들은 공유의 문화를 기반으로 수많은 리뷰가 있고 얼굴을 보지 않고도 효율적으로 일할 수 있는 프로세스와 시스템이 갖춰져 있다. 재택근무와 자유 출퇴근을 통해서 뛰어난 개발자를 효율적으로 활용할 수 있다. 이런 끝내주는 환경은 개발문화와 프로세스가 맞물려 나온 결과물이지 목적은 아니다. 

우리나라에서는 환경은 전혀 그렇지 않은데 그 결과나 겉모습만 따라 하면 회사가 잘 되기는커녕 자칫 악화를 초래할 수도 있다.

내가 생각하는 개발자가 진정으로 행복하게 일할 수 있는 환경은 좀 다르다. 개발자가 합리적으로 일할 수 있는 환경이 행복한 개발자가 될 수 있는 환경이라고 생각한다.

합리적인 커뮤니케이션이 가능하고, 개발자의 기술적인 의견이 존중되고, 적절한 개발 일정이 믿어지고 보장되며, 필요한 적절한 리소스가 제공되며, 빈번한 요구사항 변경으로 수많은 야근과 아키텍처가 산으로 가는 일이 없고, 개발자의 노력에 대한 적절한 보상이 이루어지고, 개발자 경력이 보장되는 환경이다. 물론 개발자도 그렇게 할 수 있는 역량이 있어야 한다.

좋은 복지 조건은 뛰어난 개발자를 유치하는데 도움이 되지만 아무리 뛰어난 개발자가 있다고 하더라도 비합리적인 환경에서 일한다면 효율적으로 개발이 되지 않을뿐더러 회사가 어려워 지면 좋은 복지가 오히려 회사의 발목을 잡는다.

나는 공짜 점심을 주는 것보다 경영진이 소프트웨어에 대해 좀더 이해를 하고 아무 때나 함부로 요구사항을 바꾸지 않고 합리적인 개발일정이 받아들여지면 좋겠다. 나는 공짜 커피보다 더 빠른 PC와 개발에 꼭 필요한 기반시스템에 투자를 해줬으면 좋겠다. 그것이 개발자인 나를 더 행복하게 만든다.

실리콘밸리 회사를 따라 가려면 겉모습보다는 그들의 개발 문화를 먼저 따라 하자. 공짜 점심은 약간의 돈만 있으면 쉽게 제공할 수 있지만 개발 문화를 따라 하는 것은 그보다 10배 100배 더 어렵다. 결실을 보는데 시간도 훨씬 오래 걸린다. 개발 문화를 따라 하는 방법은 책을 보고 배우기 어렵기 때문에 제대로 하더라도 5년, 10년 이상 걸릴 일이다. 그들이 50~60년 걸쳐서 쌓아온 문화를 단시간에 따라 잡기는 어렵다.

많은 회사들이 중요한 개발 문화 중 하나인 공유 문화를 따라 하려고 했지만 대부분은 겉모습 흉내만 내다가 정착에 실패를 했다. 또한 문화의 핵심은 모른 채 겉으로 드러나는 기법들만 쫓다가 회의에 빠져들기도 한다. 이렇게 실패한 경우에는 시도하지 아니한 만 못한 경우도 많다. 이도 저도 아니고 어중간해서 더 혼란스럽게 된다.

나름대로 깨어 있다는 개발자들도 의욕은 넘치지만 자수성가로 성장한 탓에 동료들을 이끌어서 효율적인 개발문화를 정착시키기에 한계를 느끼고 좌절하기 일쑤다.

제발 겉멋들어서 겉모습과 기법만 따라 하지 말고 진짜로 개발자가 행복해 할 수 있는 환경을 만들어 보자. 그것이 처음에는 힘들고 더 오래 걸리더라도 제대로 될 길일 것이다.

가끔 왜 두루뭉술하게 얘기를 하고 구체적인 방법을 알려 주지 않냐고 하는 사람들이 있다. 이런 짧은 글로는 방법을 구체적으로 알려주는 것은 불가능하다. 태권도를 글로 알려줄 수 없듯이 개발문화도 실전 경험을 많이 한 선배들의 코칭을 받아 직접 몸으로 부딪혀 보고 경험해 봐야 하는 것이다.


Post


Post

출처: http://www.androidpub.com/2048035



안녕하세요? 비니아빠 바야바입니다.

일단 조회수를 위해 제목만 거창하게 달아봤습니다. 죽여주세요.

오늘은 제가 만든 온라인 게임들은 어떻게 만들어졌는지 진짜 간단하게 소개해보려고 합니다.

2G->3G->LTE
 거치면서 모바일 네트워크 성능은 점점  진화하고 있고,

앞으로 모바일 온라인 게임이 마켓의 트렌드가 자리잡을 날도 머지 않았기 때문입니다.


1.
 게임 서버 

알까기 온라인의 초창기 시절에는 집에서 개인PC 한대를 서버 전용으로 돌렸습니다.

동접이 늘어나서 향후에는 17만원 상당의 서버 호스팅 서비스를 이용했구요.

알까기, 장기, 오목, 탱크가디언까지 4 온라인 게임을 1대의 서버에서 모두 실행했습니다.

최근에 개발한 치킨팝 온라인은 KT 클라우드 서비스를 이용하고 있는데 성능은 괜찮습니다만,

KT
측의 클라우드 서비스가 죽어서 2 정도 서비스가 중단되는 사태가 있었습니다.


게임 서버는 윈도우 서버를 사용했고, Visual C/C++ 이용해 서버당 동접 3천명을 처리하도록 개발했습니다.

알까기는 최대 1700명을 기록했고, 장기가 900, 오목이 250, 탱크는 150 수준을 기록했습니다.


게임 서버의 스레드는 이벤트 방식으로 원스레드 방식을 썼습니다.

Z9
별이라는 MMORPG 개발할 당시에는 멀티스레드를 사용했습니다만, 제가 만든 게임들은 모두  게임였기 때문에 

필요성이 느껴지지 않아서 그냥 원스레드로 개발했고, 성능에도 아무런 문제가 없었습니다.


2.
 데이터 베이스 

게임의 DB 윈도우 서버라서 MS-SQL 썼습니다.

다만 서버 호스팅 비용보다 MS-SQL 임대 비용이  비싼 관계로,  6,900원짜리 DB호스팅을 이용했습니다.

그럭저럭 사용할 만한 수준은 됐습니다만, 역시 전용 DB 없으니 속도상 느린 것은 어쩔  없더군요.

DB
호스팅을  후에, 게임 서버와 ODBC 연결하여 쿼리를 날렸습니다.

MySQL
  편하신 분들은 MySQL 쓰셔도 아무런 문제가 없습니다.



3.
 소켓과 프로토콜 

온라인 게임을 만들려면 서버에서 TCP 소켓을 열고 패킷을 주고 받아야 합니다.

제가 자바를 할줄 몰라서 그렇긴 합니다만, 자바로도 충분히 게임 서버를 만들  있을걸로 생각됩니다.

게임 서버에서 TCP 소켓을 열고, 패킷을 주고받을 프로토콜이 완성되면 

안드로이드 클라이언트에서 서버와의 통신을 위한 스레드를 하나 만듭니다.

게임이 돌아가는 동안에도 네트워크와 계속 통신하면서 데이터를 보내고 받아오고 해야 하기 때문입니다.

socket.setSoTimeout( 60000 );
socket.setTcpNoDelay( true );

저는 클라이언트의 소켓 옵션을 2가지 지정했습니다.

모바일의 네트워크 상태는 아직 불안정하기 때문에 setSoTimeout 시간을 60 정도 지정해주었고,

setTcpNoDelay
 true 셋팅해서 패킷을  기다리지 않고 곧바로 보내도록 지정했습니다.


서버에서 오는 패킷을 받기 위해 10000 바이트의 버퍼를 만들어서 데이터를 쌓았습니다.

쌓여진 데이터의 선두부터 체크해서 1개의 패킷이 구성될  있을 만큼 데이터가 쌓였으면 패킷을 처리하고 

다음 패킷의 크기만큼 쌓일때까지 계속 스레드를 돕니다.


여기서 중요한건 통신 스레드에 Sleep 어느정도 걸어줘야 한다는 겁니다.

안그러면 폰에 따라 게임의 속도에도 영향을 주게 됩니다.  같은 경우는 Thread.sleep( 100 ); 해줬습니다.


4.
 데이터 구조 

저는 서버와 주고 받은 모든 값을 byte 배열로 처리했습니다.

패킷에 char, short, int 등의 데이터를 byte 단위로 쉬프트 연산해서 1바이트씩 쪼개서 배열에 차례대로 넣고,

문자열을 보내야  경우에도 문자열을 byte 데이터로 바꾸어서 전체 길이 만큼 배열에 추가시켰습니다.

서버에서 보내지는 데이터도 당연히 byte 배열이고, 배열 내용에서 다시 char, short, int, 문자열 등을 추출합니다.

한가지 기억해두셔야  것은 안드로이드가 사용하는 문자열은 UTF-8이고, 윈도우 서버에서 사용하는 문자열은 

아스키 코드라는 점이죠. 그래서 서버에서 받은 문자열을 사용하려면 코드 변환을 해줘야 합니다.

반대로 서버에서 클라이언트로 문자열을 보내려면 역시 반대로 코드 변환을 해줘야 하고요.



5.
 온라인 게임 제작시 주의할  

안드로이드의 네트워크 기능은 아직 불완전 합니다.

3G
 WIFI  켜져 있을 경우, WIFI 꺼지고 3G 잡히던가 하면 서버와의 접속은 여지없이 끊어집니다.

여러가지 해결책이 있겠습니다만, 일정 시간마다 클라이언트가 서버로 라이브 패킷을 보내도록 해서 

일정 시간 이상 피드백이 없으면 네트워크 상태가 고르지 못한 것으로 간주하고 연결을 끊어버리거나,

게임 화면을 그대로 유지하면서 접속만 다시 시도하는 방법 등이 있겠습니다.

온라인 게임은 유저끼리 승패를 겨루는 경우가 많기 때문에 이런 처리가 없으면 상대방이 연결이 끊어졌을때,

다른 한쪽은 하염없이 계속 기다리고 있어야 하는 불상사가 생깁니다.

연결이 끊어지면 끊어졌다라는 신호라도 서버로 바로 보내주면 좋으련만, 안드로이드는 그런 친절함은 없어 보입니다.



이상입니다.

 

온라인 게임 개발에 대해 궁금하셨던 분들에게 약간이나마 도움이 되셨길 바랍니다.


▲ top