토요일, 9월 14, 2019

[B급 프로그래머] 9월 2주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: The Magic of the number 37 via @itsamazingpixx)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: How the vast majority of people and organizations think about evidence via @stuartbuck1
EOB

토요일, 9월 07, 2019

[B급 프로그래머] 9월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 내 코드 = 스택오버플로우 + 깃헙 via @programmer_pic)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스:
EOB

토요일, 8월 31, 2019

[B급 프로그래머] 8월 4주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: I do like this. @grightford)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
EOB

토요일, 8월 24, 2019

[B급 프로그래머] 8월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: The greatest trick the devil ever pulled was @awscloud data transfer pricing via @QuinnyPig)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

화요일, 8월 20, 2019

[독서광] 시간은 왜 흘러가는가?

지난 번에 소개드린 시간은 흐르지 않는다에 이어 오늘도 시간에 대한 책을 소개드리겠다. 이번에는 도대체 (사람 관점에서) 시간이란 무엇이고 흘러가는 이유가 무엇인지를 설명하는 '시간은 왜 흘러가는가'이다.

이 책은 크게 짧은 시간을 다루는 '시간들', 긴 시간을 다루는 '날들', 두뇌에서 시간을 처리하는 방법을 다루는 '현재', 마지막으로 나이를 먹을수록 시간이 빨리 간다고 느끼는 이유를 다루는 '시간은 왜 빨리 가는가'로 구성되어 있다. 이 책의 서문에도 나오지만 시간의 세계는 (원래) 복잡하므로 의도한 바를 넘어서 가능하다고 상상한 시간을 훨씬 초과했다는 이야기가 나온다. 거의 500페이지에 이르는 분량에 밀도 높은 텍스트로 인해 시간을 들여서(응?) 읽어야 완독이 가능하므로 심심풀이로 읽기에는 조금 어렵지 않겠느냐는 생각이 든다.

가장 먼저 고개를 내미는 '시간들'에서는 시작하자 마자 협정 세계시(UTC, Coordinated Universal Time)로 혼을 빼놓는다. 컴퓨터 프로그래머라면 시각 동기화의 중요성과 UTC를 사용해야만 하는 이유에 대해 확실하게 이해하고 있어야 하는데 이 책이 정말로 많은 도움이 된다. 이 책을 읽기 전까지 유일한 UTC 시각이 존재한다는 잘못된 지식이 머리 속에 탑재되어 있었는데, 국제 도량형국에 속한 58개 회원국이 제출한 시각으로 합의에 따라 결정된다는 사실을 알고 충격을 받았다. 세계에서 가장 정확한 시계는 여러 데이터를 검토하고 분석한 결과로 나오는 서류 상에만 존재한다. 주기적으로 발간되는 이 서류를 토대로 58개 회원국은 자신의 시계를 나노초 단위로 '조타'해야 하는데, 시계를 정확하게 유지관리하려면 고도의 기술과 엄청난 비용이 들어가므로 예상한 바와 같이 전세계에서 가장 엄격하게 시계를 관리하는 기관은 GPS를 운영하는 미해군관측소다.

다음으로 '날들'에서는 사람의 몸이 하루를 어떻게 인식하는지에 대한 신비를 풀기 시작한다. 시간이 과연 지각 가능한 대상인지 아닌지에 대해 여러 다양한 생물들의 생체리듬을 토대로 생물이 자각하는 시간을 탐험한다. 시간이 무엇인지를 논의할 때 사람마다 이야기가 크게 달라지는 이유 중 하나를 시간에 대한 경험이 여러 가지가 있기 때문이라고 설명하면서 다음과 같은 분류를 제시한다.

  • 지속성(duration): 두 시간이 일어나는 사이에 시간이 얼마나 지났는지를 알아내는 능력, 또는 다음 사건이 언제 일어날지 정확하게 예측하는 능력
  • 시간의 질서(temporal order): 연속적으로 사건이 일어날 때 각각의 시간을 구분하는 능력
  • 시제(tense): 과거, 현재, 미래를 식별할 수 있고, 내일은 어제와는 다른 시간 방향에 놓여있다는 사실을 이해하는 능력
  • 현재성에 대한 감각(feeling of nowness): 바로 지금 우리를 스쳐 지나가는 시간을 느끼는 주관적인 감각

이전과 이후를 구분하는 네 살이 넘어야 시간이 방향성을 띈다는 '시간의 화살' 개념을 이해할 수 있으므로 시간이 선험적으로 주어지지 않는다는 사실이 무척 놀랍다. 우리가 알고 있는 물리학적인 시간의 개념도 모두 학습에 의해 습득한 셈이다. 생체리듬과 관련해 CPU처럼 중앙의 마스터 클럭이 존재하는지 아니면 세포별로 분산된 클럭이 존재하는지에 대한 논의를 진행하면서 24시간 주기로 동작하는 내부 시계가 있다는 사실을 지적한다. 하지만 내부 시계도 시계이므로 오차가 나므로 '조타'를 위해 햇빛의 노출이 필요하며, 이를 위해 광합성을 위해 가장 처음으로 생체 시계가 만들어졌다고 보는 남조류로부터 진화가 일어나면서 어떻게 고등 생물들의 세포 내부에 클럭이 탑재되었는지를 이론적으로 분석한다. 그러고 나서 지은이가 직접 북극으로 가서 생체 시계가 교란될 때 어떤 현상이 벌어지는지를 설명한다(스포일러: 시간이 흐르지 않는 느낌!).

미시적인 시간에 이어 거시적인 시간을 소개하는 '현재'에서는 시간을 놓고 고민한 철학자들에 대한 이야기로 시작한다. 아우구스티누스와 아리스토텔레스가 제시한 시간이란 마음의 속성이라는 이론에서 출발해 정밀한 시간을 측정하기 위한 세계 제작과 관련된 과학적이고 공학적인 역사를 풀어낸다. 그러고 나서 두뇌가 시간을 자각하기 위해 어떤 과정을 거치는지에 대해 자세하게 설명하기 시작한다. 신경의 느린 전파 속도로 인해 사람들은 항상 80밀리초 과거에 살고 있다는 사실을 언급하면서 두뇌가 이런 간극을 매우기 위해 사용하는 여러 가지 다양한 전략을 소개한다. 그러고 나서 지은이는 직접 놀이 공원에 가서 정말 사고가 날 때 시간이 느리가 가는지를 측정하는 자유낙하 실험을 진행한다. 몸이 자유낙하를 할 때 패닉 상태에 빠져서 편도체가 고해상도로 사건을 녹화하기 때문에 시간이 느리게 흘러가는 것처럼 느껴질 뿐이라는 설명을 보면 (정말 다행히도) 시간에 대한 우리의 인식이 주관적일 뿐이라는 사실을 다시 한 번 깨닫게 만든다.

마지막으로 '시간은 왜 빨리 가는가'에서는 시간이 왜 빠르게 흘러가는지에 대해 집중적으로 파고든다. 사람의 두뇌는 시간을 직접적으로 느끼는 대신 시간이 담고 있는 내용(즉 사건)으로 지각할 뿐이다. 여기서 우리는 시간을 경험하는 대신 시간의 통과를 경험한다는 사실을 무척 중요하다. 뭔가 재미있는 일을 할 때 "시간 가는 줄 몰랐다"라는 표현은 시간의 흐름을 놓쳤다는 사실을 의미하며 현재의 시간을 쫓고 있지 않기 때문에 시간을 의식하지 않을 뿐이다. 계속해서 두뇌가 시간 지각과 시간 사이의 간격을 알아내는 메커니즘에 대해 설명을 하고 가장 마지막 부분에서는 우리 모두가 궁금해하는 나이가 들수록 시간이 빠르게 흐른다고 느껴지는 이유를 설명한다. 철학자 존 로크가 "우리는 과거에 일어났던 사건들을 떠올림으로써 과거의 시간의 길이를 판단하게 된다"고 말한 바와 같이 기억할만한 사건들이 많았던 과거의 시기는 천천히 흘렀고 특별한 사건이 없는 시기는 매우 빨리 흘러간다는 이론을 소개한다. 그리고 시간은 나이가 들수록 더 빨리 흐른다는 사회적인 통념이 실제로는 그렇지 않음에도 불구하고 그렇게 생각하게 만들기 때문이라는 이론도 소개한다.

정리: 우리가 살아가는 동안 느끼고 인식하는 시간에 대해 궁금한 분들께 추천드린다. 특히 앞 부분에 나오는 협정 세계시에 대한 내용은 무척 흥미진진하므로 두 번 읽어보시라.

EOB

토요일, 8월 17, 2019

[B급 프로그래머] 8월 2주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: 등산의 비중이 18%나 됐었던것도 놀랍고.. 쇼핑/외식 12.4% -> 5.2%로 감소도 놀랍다.... 음주도 11.6%에서 2.8%로 감소 via @heisland)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: IMAX | Fighter Pilots | Operation Red Flag [1080P]
EOB

화요일, 8월 13, 2019

[독서광] 시간은 흐르지 않는다

한 동안 여러 가지 일로 정신이 없어서 독후감을 쓰지 못했는데, 밀린 숙제를 조금씩 해볼 예정이다. 오늘은 시간과 관련된 책을 소개하겠다. 제목부터 상당히 역설적인 '시간은 흐르지 않는다'이다.

이 책은 크게 현대 물리학이 파악한 시간에 대한 정체를 다루는 1부 <시간 파헤치기>, 시간이 없는 세상은 어떤 모습일지를 설명하는 2부 <시간이 없는 세상>, 1부와 2부에서 전개한 내용을 다시 우리 자신으로 되돌리는 3부 <시간의 원천>으로 구성되어 있다. 중간에 이론적인 내용이 나오지만 복잡한 수식이나 난해한 증명은 없기 때문에 그나마 안도의 안숨을 쉴 수 있지만 원래 시간의 정체가 어렵다보니 100% 이해하기는 어려운 듯이 보인다. 하지만 근대 물리학과 현대 물리학이 우리의 시간 관념을 어떻게 바꿔놓았는지를 알면 이 책에 나오는 이론도 어느 정도는 우리의 삶에 파고들 것 같다는 생각이 들기도 하다.

이 책의 1부는 시간의 특성에 대해 기존 이론을 알기 쉽게 정리하고 있다. 평지에 사는 사람은 산 꼭대기에 사는 사람보다 시간이 더 적으며, 지구의 표면에서는 사물이 자연스럽게 시간이 더 느리게 흐르는 쪽(즉 높은 곳에서 낮은 곳)으로 향한다(중력!). 시간이 유일무이하며 정해진 것이 아니라 공간 속의 모든 지점마다 다른 시간이 적용된다는 사실도 놀랍기만 하다. UTC(세계 협정시)가 있으니까 맞출 수 있지 않습니까? 냉정하게 말해 답은 '아니오'다. "열은 차가운 물체에서 뜨거운 물체로 이동할 수 없다."라는 놀라운 사실을 발견한 물리학자들은 시간에 주목해서 "과거와 미래 사이에 차이가 나타날 때마다 열이 관여한다"는 사실도 파악한다. 여기서 엔트로피라는 개념이 나오고 볼츠만은 엔트로피가 존재하는 이유를 우리가 세상을 희미하게 설명하기 때문이라고 주장했다. 미시적인 관점에서 보면 과거와 미래의 차이와 구분이 없다는 놀라운 결론에 이른다. 그리고 시간이 속도 때문에 늦춰진다는 아인슈타인의 파괴적인 이론이 등장하면서 지금은 아무 의미가 없다는 사실이 밝혀진다. 우주 관점에서는 현재가 없는 시간 구조를 따르며, 공통적인 현재는 존재하지 않는다.

이 책의 2부는 시간이 없는 세상에 대해 논한다. 우리는 흔히 사물로 이뤄진 세상을 그리지만, 사실상 세상은 사건으로 이뤄진다. 세상은 사물들이 아닌 사건들의 총체다. 사물은 시간 속에서 계속 존재하지만 사건은 지속 시간이 한정되어 있다는 특징이 있다. 공통적인 시간도, 변화에 특별히 관여하는 방향도 없는 시간 변수가 없는 세상에서 일어나는 일을 설명하기 위해 양자중력 개념이 도입되는데, 놀랍게도 양자중력은 시간 변수 없이 변량들 간에 성립하는 가능한 관계들로 세상을 설명한다.

이 책의 3부는 다시 사람의 영역으로 시간을 가져온다. 이 세상의 기본 동역학에서 모든 변수가 동등하다면 도대체 인간이 '시간'으로 부르는 것의 정체는 무엇일까? 시간과 평형 관계의 관계를 해석하는 방식은 시간을 절대적이고 객관적으로 보면서 시간이 에너지로, 에너지가 거시적 상태를 정의하는 방법과 반대로 거시적 상태가 에너지를 보존하면서 에너지가 시간을 생성하는 혼합으로 해석하는 방법이 있다. 즉, 하나의 거시적인 상태(볼츠만이 주장한 상세한 세부 사항을 무시하면서 세상을 희미하게 설명하는)가 하나의 시간을 결정한다고 본다. 과거와 미래의 전반적인 차이는 세상의 엔트로피가 과거에 낮았다는 사실에 전적으로 기인하는 데 이유가 무엇일까? 엔트로피는 주관적인 양이 아니라 속도처럼 상대적인 양이며, 세상의 엔트로피는 세상에서 우리가 속한 부분과 상호 작용하는 변수들의 영향을 받는다. 따라서, 우리가 세상과 상호 작용하면서 세상을 바라볼 때 거시적인 변수들의 수가 너무 적기 때문에 극적인 희미함이 발생하며 따라서 우주의 엔트로피가 (우리 입장에서는) 낮게 보이는 것이다. 세상을 돌아가게 만드는 것은 에너지원이 아니라 낮은 엔트로피의 근원이며, 낮은 엔트로피가 없으면 세상은 열평형 상태에서 잠들 것이다. 낮은 엔트로피가 없으면 시간도 흐르지 않고 아무 일도 벌어지지 않는다. 다행히도 지구 근처에 있는 태양은 따뜻한 광자를 지구로 보내고, 지구는 차가운 광자들을 방출하면서 엔트로피를 낮추는 효과가 발생한다(뜨거운 광자 하나의 배열 수가 차가운 광자 열 개의 배열 수보다 작기 때문).

이 책의 3부 중반을 넘어가면서 정말 저자가 하고 싶은 시간의 본성과 관련해 자아 형성에 관련된 세 가지 이야기가 전개된다.

  1. 세상은 우리의 생존에 필수적인 풍부한 상관관계를 통해 우리 모두 각각에 반영된다.
  2. 우리는 세상을 성찰하면서 그것들을 실제들로 조직화한다. 세상을 생각할 때 우리는 한결같고 안정적인 연속된 방식으로 최선을 다해 세상을 그룹화하고 분류한다. 세상과의 상호작용이 더 잘 이뤄지도록 하기 위함이다. 우리의 신경 체계도 감각적 자극을 받고 계속해서 정보를 정교화하면서 행위를 만들어내는데, 신경망들은 지속적으로 자신을 수정하면서 유입된 정보의 흐름을 (가능한 최대로) 예측하는 유연한 동역학계를 형성한다.
  3. 우리의 자아를 세우는 세 번째 요소는 기억이며, 시간의 흐름 속에서 우리를 형성한 프로세스는 도처에 깔려 있고, 기억은 이 프로세스들은 함께 단단히 한다. 이런 의미에서 우리는 시간 속에 존재한다. 우리 자신의 이해는 시간에 대한 생각과 같다. 넓은 의미에서 뇌는 과거의 기억을 수집해 지속적으로 미래를 예측하는 데 사용하는 메커니즘이다.

이 책의 3부에서 가장 정신이 들게 만드는 부분은 불교에서 말하는 고(苦)이다. 우리가 고통스러운 이유는 뭔가를 갖게 되고 여기 집착했다가 잃어버리기 때문이다. 고통은 과거/미래가 아니라 우리의 기억과 예측 속에 있다. 시간은 고통이다.

정리: 2019년 여름를 시원하게 만들어주는 책이다. 강력 추천!

EOB

토요일, 8월 10, 2019

[B급 프로그래머] 8월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: Law of projects taking a long time via @eigenbom)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

월요일, 8월 05, 2019

[B급 프로그래머] 7월 5주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: 전세계 도시의 삶의 질과 물가 그래프(서울을 기준으로) via @shinhh)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
EOB

금요일, 8월 02, 2019

[B급 프로그래머] 7월 5주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: The power of FreeBSD #FreeBSD #Netflix #BSDCan via @danieliszl)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

토요일, 7월 27, 2019

[B급 프로그래머] 7월 4주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: 치과 종이컵 via @minor0304)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
오늘의 보너스: How to deploy machine learning models into production
EOB

금요일, 7월 26, 2019

[B급 프로그래머] 7월 4주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: O(1)에 직업 찾기 @mzp)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: 소프트웨어 개발의 다섯 단계 via @summerlight00

토요일, 7월 20, 2019

[B급 프로그래머] 7월 3주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: Trust the process: 계획 수립 잘했다면 그거 믿고 최대한 빨리 밀고 나가기. 당장은 뭐 나오는거 없어보이지만 계획을 믿고 추진. 그래야 나중에 그게 망해도 배우는게 있음. via @zedoring)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
(오늘의 보너스 #1: 기계학습의 시대가 된지 꽤 됬는데 나는 이 시대가 곧 끝나지 않을까 생각하고 있다. 기계학습이 망한다 뭐 이런게 아니라 인터넷, 스마트폰의 시대가 간 것처럼 새로운 붐이 오지 않을까라고 생각하고 있다. via @zedoring)
(오늘의 보너스 #2: 지금 트위터하는 당신 - 거북목을 교정 할 시간입니다 via @1689hae)
EOB

토요일, 7월 13, 2019

[B급 프로그래머] C에 대해서 잘 아시나요?

C는 상당히 까다로운 프로그래밍 언어다. 특히 언어 명세 과정에서 몇 가지 어두운 구석이 존재하기 때문에 깜짝 놀랄만한 결과를 실행 시점에서 얻고 대략 난감할 수도 있다. 먼저 So you think you know C?에 들어가서 문제를 풀어보자. 스포일러 방지를 위해 문제를 풀고 나서 스크롤 하시라!

























문제를 다 푸시고 [See the score] 버튼을 누르면 채점표와 함께 아래에 해설이 나오는데 몇 가지 추가 설명을 드리겠다.

  1. 1번. 이 문제는 포인터를 조금만 알고 계시면 바로 맞출 수 있다. 32비트와 64비트에 따라 포인트 크기가 달라지므로 미정의가 된다.
  2. 2번. C에서는 아키텍처에 따라 타입마다 정해진 크기가 다를 수 있고, 형 변환 과정에서 어떻게 될지 모르므로 미정의가 된다.
  3. 3번. 이 문제는 너무 잘 알아도 틀리는 문제다. ' '가 십진수 32이며, 여기에 13을 곱하면 256을 넘어가므로 오버플로우가 발생할 것으로 예상해서 답을 -96으로 적고 싶지만... char 타입 크기를 정확하게 모른다는 문제가 있다. 따라서 미정의가 된다.
  4. 4번. 이 문제는 상당힌 트릭을 발휘하고 있어서 맞추는 분들이 적을 것이다. 하지만 컴파일러는 답을 알고 있다.













    여기서 최신 gcc 컴파일러에서는 자체 비교는 항상 참이라는 경고가 나오는데(결국 어떻게 해도 참이 될 것이다), 구식 컴파일러는 int 크기로 인해 이해할 수 없는 상황을 맞이할 수 있다.
  5. 5번. 이 문제는 워낙 유명해서 아마 많은 분들께서 맞추셨을 것이다.














    여기서 시퀀스 포인트는 모든 식의 평가가 완료되는 지점이며, 시퀀스 포인트 사이에서 식의 값은 한 번만 수정될 수 있다. 이 문제는 시퀀스 포인트 사이에서 여러 차례 식의 값이 변경되므로 컴파일러 입장에서는 미정의가 된다.

그렇다고 C 프로그래밍이 몹쓸 언어라는 말은 아니다. 여러 가지 제약 사항을 알고, 플랫폼마다 차이가 난다는 사실을 이해하고 있으면 대부분 큰 문제없이 함정을 피할 수 있을 것이다.

EOB