코딩 시간과 코드 품질
시간이 충분하면 좋은 코드를 작성할 수 있지만, 코드 품질 따지느라 개발 기간이 늘어지는 것 보다는 빨리 개발해 서비스를 시작하는 게 중요하다는 주장을 볼 수 있다. 옳은 말이다. 요즘 같이 비즈니스 환경이 급변하는 세상에 속도가 중요한 요소임엔 틀림 없다. 그러나 코딩에 들이는 시간과 코드 품질이 비례한다는 주장에는 동의하지 않는다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
시간이 충분하면 좋은 코드를 작성할 수 있지만, 코드 품질 따지느라 개발 기간이 늘어지는 것 보다는 빨리 개발해 서비스를 시작하는 게 중요하다는 주장을 볼 수 있다. 옳은 말이다. 요즘 같이 비즈니스 환경이 급변하는 세상에 속도가 중요한 요소임엔 틀림 없다. 그러나 코딩에 들이는 시간과 코드 품질이 비례한다는 주장에는 동의하지 않는다.
육면체의 한쪽 구석에서 다른 구석으로 가는 최단 경로 찾기
직육면체를 펼쳐 평면으로 생각하면 문제를 푸는 데 도움이 된다. 평면 위의 한 점에서 다른 점으로 가는 최단 경로는 직선이다. 한쪽 구석 에서 다른 구석 로 가는 경로는 네 가지가 있다.
사각 격자 안에 포함된 사각형 개수 세기
가로 세로 인 격자에서 각 크기의 사각형이 몇 개씩 들어가는지 생각해보자. 크기(가로세로)가 인 사각형은 생각할 것도 없이 개가 들어간다. 크기가 인 사각형은 가로 방향으로는 개, 세로 방향으로는 개가 들어갈 수 있으므로 개수는 이 될 것이다.
모노폴리 게임을 4면체 주사위로 할 때 가장 많이 방문하는 칸은?
이 문제를 수학적으로 푸는 방법이 있는지 모르겠다. 여기서는 문제에 주어진 게임 규칙을 모두 구현한 후, 직접 사면체 주사위를 1백만 번 던져 어느 칸을 가장 많이 방문했는지 세는 방법으로 문제를 풀었다.
상하좌우로 움직여서 좌상단→우하단으로 가는 경로의 합이 최소인 경우는?
이 문제에는 두 가지 복병이 기다리고 있었다. 하나는 A* Search Algorithm 알고리즘이었다. 여러 가지 방법을 생각해 보았지만 A* 알고리즘을 사용하지 않고는 풀 수 없었다. 구글로 검색해보면 A* 알고리즘에 대한 설명을 찾을 수 있지만 이해하기가 쉽지 않았다. 얼마 전 Couresra에서 Algorithms, Part I을 수강한 후에야 A* 알고리즘을 이해할 수 있었다.
맨 왼쪽 열에서 맨 오른쪽 열까지 가는 경로의 합이 최소인 경우는?
시작 위치와 종료 위치가 고정되어 있지 않다. 맨 왼쪽 열의 아무 곳에서 시작해 맨 오른쪽 열의 아무 곳에나 도착하기만 하면 된다. 위/아래/오른쪽 세 방향으로 이동할 수 있다. 왼쪽으로는 이동할 수 없다.
오른쪽과 아래로만 움직이면서 좌상단→우하단으로 가는 경로의 합이 최소인 경우는?
이 문제는 앞에서 풀었던 문제 18과 매우 비슷하다. 행렬을 시계 방향으로 45° 돌려놓고 생각하면 편하다. 문제 18에서는 삼각형 바닥부터 위로 올라가면서 계산하면 됐다. 여기서는 삼각형뿐 아니라 역삼각형도 고려해야 한다는 차이가 있을 뿐이다.
프로그래밍 또는 보안 관련 책을 읽다 보면 종종 '모래상자'란 용어가 나온다. 'sandbox'를 '모래상자'로 번역한 것이다. '모래상자'란 단어를 보면 어떤 그림이 떠오르는가? 'sandbox'를 직역하면 '모래상자'가 맞긴 하지만, 나는 이렇게 번역하는 게 마음에 들지 않는다.
출퇴근 시간이 적을 수록 좋다고 생각했다. 회사와 집이 멀리 떨어져 있으면 출퇴근에 많은 에너지를 쓰게 된다. 몸도 힘들고 시간도 아깝다. 1시간이 넘으면 계속 다니기가 힘들게 느껴졌다. 그래서 가급적 회사 근처에 집을 얻곤 했다.
가족과 함께 외국에 와서 적응하는 것은 생각했던 것보다 어려웠다. 내 한 몸 챙기기도 버거운데 가족 일까지 신경을 써야 해서 힘에 부쳤다. 한국에서 회사를 옮긴 경우에는 새 회사에 적응하는 데 집중할 수 있었지만, 여기서는 나만 적응한다고 되는 게 아니다. 다른 식구들도 새로운 환경에 적응할 수 있도록 도와야 한다.