본문 바로가기
Book/Pragmatic Programmer

간단한 현실 점검 (연습문제 16)

by 라바킴 2022. 3. 27.

 다음 ‘불가능한’ 것들 중 무엇이 실제로 일어날 수 있는가?

 

  1. 한 달이 28일보다 적은 것.
  2. 시스템 콜의 오류 메시지: 현재 디렉터리에 접근할 수 없음.
  3. C++에서, a = 2; b = 3; 하지만 (a + b)는 5가 아님.
  4. 내각의 합이 180도가 아닌 삼각형.
  5. 1분이 60초가 아님.
  6. (a + 1) <= a

 


[ 내 답변 ]

일어날 수 있음은 O, 없는 일은 X라고 한다면

  1. X
    - 2월도 최소 28일까지 이니 이건 불가능하다고 생각하긴 한다.
    - 하지만 한 달이라는 개념은 어디까지나 인간의 약속 아닐까. 누군가 한달의 개념을 바꾼다면? 하지만 억지같긴 해서 우선 X라고는 하는데 시험이었다면 O 라고 했을 것 같다.
    - 근데 '일' 단위는 지구의 자전이고 '년' 단위는 지구의 공전인데 '월' 단위는 뭐에서 기반한 걸까. 구글링해도 잘 안나오네;
  2. O
    - 이건 뭐 권한 문제일 수도 있고 여러가지 원인이 있는 흔한 에러
  3. O
    - a,b에 대한 정의가 뭔지에 대한 정보가 너무 없는것 같다. 상수인 경우 새로 할당도 안되니.
    - 근데 이런 연습문제가 아니라 실제 실무에서 맞닥뜨렸다면 너무 자연스럽게 X 라고 대답했을 지도
  4. X
    - 삼각형의 정의 자체에 내각의 합에 대한 것은 없지만 관련 공식으로 너무 명확하게 배우니 맞지 않을까
  5. O
    - 윤초라는 개념이 있다. 예전에 한번 61초까지 세진 적이 있다.
  6. O
    - 내가 이거 비슷한거 때문에 고생한적이 있어서 자신있게 O다. +1 때문에 overflow가 일어날 수도, a 값때문에 underflow 가 발생하여 해당 자료형의 최소값/최대값으로 회귀될 수도 있다.

 


 

[ 정답 ]

더보기

전부 O

  1. 1752년 9월은 30일이 아니라 19일밖에 없댄다. 그레고리 교황의 달력 개혁의 일환으로 달력의 날짜를 맞추기 위해 이렇게 만들었다고 한다.
  2. 그 흔한 이유가 맞다. 다른 프로세스가 디렉터리를 지웠을 수도 있고, 디렉터리를 읽을 권한이 없을 수도 있다. 드라이브가 마운트되지 않았을 수도 있고, 그 밖에 여러가지 문제가 있을 수 있다.
  3. a,b에 대한 타입을 명시하지 않은 것이 함정. 연산자 오버
    로딩 때문에 +, =, !=가 예상과는 다르게 동작할 수 있다. 또 a와 b가 동일한 변수를 가리키고 있을 수도 있다. 그럴 경우 두 번째 할당문이 첫 번째 할당문에서 저장한 값을 덮어쓸 것이다. 또한 프로그램에 동시성이 있는데 이에 대한 고려가 되지 않아서 a의 값이 덧셈이 수행되기 직전에 바뀌었을 수도 있다.
  4. 비유클리드 기하학에서 삼각형 내각의 합은 180°가 아닐 수 있다. 구 표면에 그려진 삼각형을 생각해 보라.
  5. 윤초가 예외 케이스가 맞다.
  6. 언어에 따라 overflow가 발생하여 a+1가 음수가 될 수 있다고 한다.

 

[ 후기 ]

  • 나름 연습문제라고 신경쓰고 풀긴 했지만 정말 예상을 빗나가는 답변도 있었다. (구에 그린 삼각형이라니 이건 생각못했네)
  • 나름 눈치 껏 잘 푼 문제들이지만 해설에 기술해둔 예외 케이스를 보면 더 다양한 상황들이 있는 것 같다. 물론 내가 좀 더 심오한 생각을 한 것도 있지만 부족한 생각도 많았다. 나라는 사람이 개발이든 일상이든 보다 명확히 상황을 진단할 수 있는 사람으면 좋겠다.
  • 물론 내가 태어나고 죽을 때까지 99% 겪을일 없는 상황이지만 그만큼 자기자신의 판단을 과신하지 말고 검증하는 습관을 들이라는 작가의 메시지겠지?

 

[ 참고 문헌 ]

 

  • 비유클리드기하학
    https://terms.naver.com/entry.naver?docId=1106243&cid=40942&categoryId=32223
유클리드기하학에서는 삼각형의 내각의 합은 2직각이 되나 쌍곡선기하학에서는 그보다 작게 되며, 타원기하학에서는 그보다 커진다.

 

  • 윤초
    https://terms.naver.com/entry.naver?docId=3581001&cid=58941&categoryId=58960
1967년부터 사용한 원자시는 세슘-133 원자의 진동수(91억 9263만 1770번)를 1초로 정의한다. 이에 따르면 하루는 정확히 8만 6400초다. 하지만 시간이 지날수록 실제 천문현상과 차이가 발생한다. 예를 들어 태양이 남중에 위치해도 원자시로는 정오가 아닐 수 있다.

그래서 현재 우리는 세계시와 원자시를 합쳐 보완한 세계협정시를 사용하고 있다. 원자시와 동일한 1초를 사용해 8만6400초를 하루로 정의하고, 대신 실제 하루 길이를 반영하는 세계시와 비교해 보정한다. 두 시간이 0.9초 이상 차이가 나면 원자시에 1초를 더하거나 빼는 윤초 제도를 사용해 일치시키는 것이다. 원래 시간이라면 59초에서 0초로 넘어가지만, 윤초가 추가되면 59초 이후 60초(양(+)의 윤초)가 되거나 58초 다음 0초(음(-)의 윤초)가 된다. 1972년부터 시행해 현재까지 총 26초의 윤초가 추가됐다. 2017년 1월에 추가된 윤초는 27번째다. 지금까지 음의 윤초가 실시된 적은 없다.

 

 

'Book > Pragmatic Programmer' 카테고리의 다른 글

제 7장 코딩하는 동안  (0) 2022.04.02
제 6장 동시성  (0) 2022.03.29
제 5장 구부러지거나 부러지거나  (0) 2022.03.26
제 4장 실용주의 편집증  (0) 2022.03.26
제 3장 기본 도구  (0) 2022.03.24

댓글