전체 글 298

[Effective Modern C++] 형식 연역(type deduction)

형식 연역이 일어나는 경우는 다음의 경우입니다. C++98 : template만 존재 C++11 : auto, decltype 추가 C++14 : auto와 decltype를 사용할 수 있는 문맥 확장, decltype(auto) [C++] decltype 과 auto 참고해 주세요. 형식 연역의 범위가 증가한 덕분에 자명하거나 이미 언급된 형식들을 여러 번 일일이 지정해야하는 경우가 크게 줄었습니다. 코드의 한 곳만 수정하면 그 변화가 형식 연역을 통해 다른 장소들로 자동으로 전파됩니다. 그러나 코드의 의미를 추론하기는 좀 더 어려워졌습니다. 컴파일러가 연역하는 형식이 독자가 언뜻 보고 추측하는 것과 다른 경우가 있기 때문입니다. 형식 연역이 일어나는 방식을 확실히 이해해야야 효과적인 프로그래밍을 할 ..

프로그래밍, 귀찮으면 지는 것이다.

오래 전 부터 프로그래밍을 하면서 제가 가장 많이 되새기는 말이 하나 있다. 그것은 바로 '귀찮으면 지는 것이다.' 입니다. Clean Code, Clean Corder, Code Complete, 소프트웨어 장인 등등... 프로그래머의 코딩 정신, 코딩 기법, 직업 정신 등의 중요성을 알려주는 책들을 봐와서 익히 이를 알고 넘칩니다. 그러나, 실제 코딩 작업을 할때 유혹에 빠지기 쉽다. 바로 앞에 지금길이 보이고 아주 달콤 합니다. 이미 구현은 되었고 코드는 잘 돌아 갑니다. 그리고, 이것 말고도 해야할 일이 많습니다. 아.... 고민을 하게 되죠. 분명 이 부분은 구조화가 안되었거나 중복 코드이거나 가독성이 떨어 지거나 의도가 명확히 전달되지 않고나 등등... 수정해야 할 것들이 보입니다. 이때 귀찮..

피, 땀, 픽셀

어느 나라든 게임 개발은 정말이지 힘든 과정인가 봅니다. 저 또한 여러 게임들을 개발하고 서비스 하면서 여러 고난의 과정들을 격어온 경험이 있어서 너무 공감하며 재미 있게 이 책을 읽었네요. 명작을 만든 게임 개발사의 개발팀들이 얼마나 열정적으로 원하는 게임을 만들기 위해 노력하는지 느낄 수 있어서 좋았어요. 책 제목 그대로 피, 땀으로 픽셀 들이 만들어 졌네요. 기억에 남는 내용이 두 가지를 소개하고 싶어요. 첫 번째는 디아블로3의 램덤의 함정이 예요. 핵&슬래시 게임은 주로 랜덤 옵션을 채용하고 있고 더 좋은 옵션이 붙은 아이템을 얻기 위해 같은 던전을 수 없이 반복 플레이를 하게 되지요. 디아블로3 서비스를 하던 도중 개발자는 이 사실을 깨닫게 되었다고 해요. '랜덤은 유저를 귀찮게 하기 위해서 있..

독서 리뷰 2020.08.02

C++, 어떻게 효과적으로 Vector를 사용하는가?

엘리먼트를 마지막에 추가 또는 삭제 할때 더 효과적이다. Vector의 데이터는 연속적으로 관리 되다 따라서 중간에 insert를 하면 데이터는 오른쪽으로 쉬프트된다. reserve() 함수를 이용하여 저장소를 초기화 하라 한번에 하나의 엘리먼트를 여러번 호출 하는 대신에 한번 호출에 여러 엘리번트들을 추가하라. https://thispointer.com/how-to-use-vector-efficiently/ How to use vector efficiently in C++? – thispointer.com We can use vector efficiently by taking care of following points, 1.) Vector will be more efficient if elements..

Overlapped IO, IOCP

Overlapped IO WSASend, WSARecv, GetQueuedCompletionStatus 함수의 인자에 모두 Overlapped 구조체가 넘어 온다. 왜 필요한가? 넌블러킹, 비동기 IO를 처리가기 위한 IO 방법이다. 여러 IO가 중첩 되게 처리 한다고 해서 Overlapped라는 이름을 붙였다. 또 다른 의미로는 작업과 IO가 동시에 진행된다는 의미 장점 넌블럭 IO 버퍼핑 오버 헤드 감소 : OS에 의해사용자가 지정한 버퍼에다 바로 read/write 한다. IOCP(IO Completion Port) 재사용이 가능한 쓰레드 풀 유지 스마트한 워크 쓰레드 관리 커널의 IO 쓰레드에 제어를 위임하여 IO 완료를 통보 받아 생성한 워커 쓰레드에서 로직 처리 즉, 사용자는 IO Comple..

GoF의 디자인 패턴

객체지향 프로그래머의 바이블입니다. 25년 전에 그 시대의 그루들이 모여서 그 들의 경험들을 집대성한 책입니다. 소프트웨어의 개발 그리고 유지보수 어떻게 하면 더 훌륭한 소프트어를 개발 할 수 있는 지를 알려 주는 그 정수들을 담은 책입니다. 어떠한 것에 이름을 명명하기 전에는 무였다가 이름을 부여 받는 순간 부터 유가 됩니다. 객체지향 설계에 생명을 부여한 책이며 후대 개발자들이 널리 통용되는 설계 언어의 기틀을 마련한책... 후대 개발자로서 읽지 않으면 안 되겠죠. 무조건 강추!!! 책이 난해한 면도 있어서 초심자는 한 번 읽어서 이해가 되지 않을 수 있습니다. 그럼 경험을 좀더 쌓은 후 3년이 지나서 읽으면 더 많이 이해할 수 있는 책입니다. [독서 리뷰] - 모던 C++ 디자인 패턴

독서 리뷰 2020.07.13

Windbg 유용한 명령어

.reload symbol과 source 읽어 온다. .ecxr : (exception context record) 예외가 발생한 컨텍스트 레코드를 보여주고 디버거가 해당 내용을 참조하게 하는 명령 k, kb, kn / ~*k, ~*kb 콜 스택 / 모든 쓰레드 콜 스택 ~2 제어는 2번 쓰레드로 변경 ~ 쓰레드 목록 확인 ~. 현재 쓰레드만 확인 ~[숫자]s ~2s 이면 2번 쓰레드로 변경한다 입니다. ?? 표현식 평가 ??GMemoryManager : 전역 변수를 평가 명령어 설명 .sympath 현재 symbol path 로 설정된 경로를 보거나 설정합니다. .sympath+ symbol path 를 기존 설정 뒤에 새로 추가합니다. !sym noisy 설정된 symbol path 에서 symbol..

칸반 개발

1. 활발한 커뮤니케이션을 토대로 개발자. 지속적으로 팀의 동의를 구한다. Knowledge island를 탈출하라. (자신이 알고있는 지식이 전부가 아니다) 2. 한 번에 한개의 일만 처리 하자. 칸반의 핵심으로 한 번에 한개의 일만 처리하도록 합니다. 개발자의 뇌는 하나 손은 두개이고 손가락은 열개이므로 한 번에 하나의 일만 처리해야 합니다. 한 개의 일이 끝나지 않으면 다음 일을 진행하지 않는 것을 규칙으로 합니다. 3. 업무 예측 시간을 정하자 개발완료시간을 정확히 예측하는 것은 개발자들에게 정말 중요한 능력 중에 하나입니다. 예측하는 습관을 들여서 지속적으로 예측 능력을 높여야 합니다. 이런 습관으로 업무의 예측 능력을 높인다면 그 만큼 성공할 확률도 높아집니다. 4. 더 좋은 방법이 있다면 기..

애자일 개발 2020.07.13

칸반 이란?

칸반이란? 칸반은 연속적 흐름 처리 방식입니다. 이슈는 큐에 입력되고, 개발 프로세스의 단계에 따라 “당겨”집니다. 칸반은 칸반 보드로 시각화되고 각각 단계는 열로 표시됩니다. 이슈들은 “수영 레인(Swimlane)”으로 불리는 행으로 나눌 수 있습니다. 이슈들의 우선순위를 나타내기 위해 수영 레인을 이용하기로 결정하고 우선순위가 낮은 이슈들을 아래에 배치합니다. 칸반의 핵심은 Work-In-Process(WIP)가 동시에 개발이 진행 될 수 있는 아이템의 수를 제한하는 것입니다. 작업자는 WIP에 여유가 있을때만 작업을 왼쪽에서 오른쪽으로 당길 수 있습니다. 스크럼이 스프린트에 이용할 수 있는 작업 시간을 제한함으로써 생산성을 제어하는 반면, 칸반은 동시에 처리할 수 있는 이슈의 수를 제한함으로써 생산..

애자일 개발 2020.07.13