토요일, 3월 31, 2018

[독서광] 신경끄기의 기술

워낙 빠르게 돌아가는 세상에서 남들의 보조에 맞춰 바쁘게 살아가다보면 내가 도대체 왜 이런 난리를 치고 있는지 의심이 들 때가 있다. 살아오면서 체득한 여러 가지 비법을 동원해(예: 맥주, 해외여행, 친구 만나기 등) 난관에서 벗어나려 하지만 쉽지는 않다. 오늘 소개하는 <신경 끄기의 기술>은 비록 완벽과는 거리가 멀긴하지만 어느 정도 괴로움을 완화하는 해법을 제시하고 있다.

이 책의 주제는 욕심을 버리고 내려놓기다. 더 나은 삶으로 가기 위한 다섯 가지 가치관(내 삶에서 일어나는 모든 일에 책임을 질 것, 내가 옳다는 확신을 버리고 틀릴 가능성을 받아들일 것, 실패를 두려워하지 않을 것, 거절하는 기술을 익힐 것, 내가 언젠가는 죽는다는 사실을 숙고할 것)을 중심으로 저자가 겪은 여러 가지 경험을 어떤 때는 진지하게 어떤 때는 자기를 망가뜨리며 풀어낸다. 어떻게 보면 상당히 심각한 주제인데 유머러스한 내용과 서술 방식으로 긴장을 누그러뜨리고 있다.

본문 중에서 중요하게 생각하고 넘어갈 부분을 하나 정리해본다.

우리는 항상 ‘경험’을 책임지며 살아간다. 그것이 ‘내 잘못’으로 생긴 일이 아니라 할지라도, 이것은 삶의 일부다. 당신의 상황에 책임이 있는 건 다른 누구도 아닌 당신 자신이다. 당신의 불행을 다른 사람 탓으로 돌릴 수도 있겠지만, 불행을 책임질 사람은 오로지 당신뿐이다. 왜냐면 살면서 맞닥뜨리는 사건을 어떻게 바라보고, 어떻게 대응하고, 어떻게 평가할 것인지를 선택하는 건 언제나 당신이기 때문이다. 경험을 평가할 기준을 선택하는 건 언제나 당신이다.

결론: 자신이 불행하다고 느끼거나 만사에 의욕이 없다고 느낄 때 가볍게 읽고 정신차리면 좋은 책

EOB

목요일, 3월 29, 2018

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

(오늘의 짤방: Sprezzatura 스프레차투라: 어려운 일을 쉬워 보이게 함으로써 우아함을 얻는 태연함 via @zittersweet99)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
(보너스: Unbreakable Crypto | Infinite Series)
EOB

토요일, 3월 24, 2018

[B급 프로그래머] 기술부채를 활용하기

소프트웨어 악취를 제거하는 리팩토링: 구조적 설계 문제를 풀어내는 최선의 실천법을 읽어보신 분들께서는 이미 알고 계시겠지만, 기술부채의 무서움은 상상을 초월한다. 하지만 대출도 적절히 잘 활용할 경우 유익한 점이 많듯이 기술부채 역시 잘만 활용하면 개발 생산성을 높일 수 있다. 오늘은 How To Use Technical Debt In Your Favor라는 글을 읽고나서 떠오른 몇 가지 사항을 정리해보겠다.

먼저 소프트웨어 개발 과정에서 핵심은 패턴 찾기라는 사실을 이해해야 한다. 프로그래밍 과정에서 학습이 진행되며 최선의 설계 방식을 이해하기 앞서 여러 해에 걸쳐 프로젝트를 진행해야 하므로 처음부터 기술부채를 쌓지 않고 완벽한 프로그램을 만들기란 사실상 불가능하다. 요구사항은 종종 바뀌기 마련이며 예측하기도 어렵다. 최소로 시작해서 요구사항의 변경에 따라 기존 소프트웨어를 변경해 이를 충족하는 방식으로 만들어 나가야 한다. 점점 더 명확한 도메인 요구사항 패턴을 발견함에 따라 리펙터링이 가능해진다.

하지만 일반적인 조직은 처음부터 완벽한 설계 작업을 진행해야만 한다고 가정한다. 하지만 패턴을 찾을 수 있을만큼 필요한 모든 요구사항을 알기 전까지 뭐가 최적의 설계안인지 알아낼 방법은 없다. 이게 바로 점진적인 개발 과정에서 가장 큰 장애물이다. 여기서 기술부채가 등장한다. 장래 벌어질 요구사항 변경을 모두 수용할 설계안이 없을 경우 리펙터링이 가능한 수준의 패턴을 찾기 전까지 리펙터링을 뒤로 미루면서 전진할 수 있는 수단이 바로 기술부채다.

수확체감의 법칙에 따라 너무 완벽하게 설계안을 구축하려는 시도는 불필요한 시간을 낭비하기 마련이다. 너무 복잡한 설계와 추상화는 역풍을 불러일으키며, 잘못된 추상화보다는 중복이 훨씬 좋다는 사실을 기억해야 한다.

요구사항 변경에 따라 코드를 고쳐야 하면, 설계 역시 개선되어야 한다. 요구사항이 어느 정도 안정화되고 나면 기술부채를 해소하는 작업에 들어가야 한다. 이 때 변경이 일어날 부분과 일어나지 않은 부분을 나눠 변경이 일어날 부분에 대해 집중적으로 기술부채를 줄이고 나머지 부분은 부채로 남겨 둔다(변경이 일어나지 않는데 굳이 개선해야 하는 이유는 없다). 이런 전략은 훌륭해 보이지만, 팀원들의 기술과 규율이 동일한 수준에 맞춰져 있어야만 가능하다. 만일 팀원들의 기술적인 격차가 너무 커지면 이면에 숨겨진 의도를 파악해 기술부채와 관련된 올바른 결정을 따르기가 무척 어려울 것이다.

작업 단계 끝에 너무 많은 기술부채를 남겨놓아 미래에 패턴을 발견하더라도 이를 수용하기 어렵게 만드는 실수를 흔히 볼 수 있다. 기술부채가 너무 많으면 어느 누구도 바로잡기 위해 수정할 시간과 의지를 내기 어렵다. 클린 코드의 중요성을 간과해서는 안 된다.

리펙터링과 관련한 내용으로 마무리한다: 리펙터링은 이미 알고 있는 과거의 산물을 대상으로 해야지 알지 못하는 미래의 변경에 적용해서는 안 된다. 리펙터링은 오래된 코드를 새로운 요구사항에 맞춰 적응하게 만드는 과정이지 더도 덜도 아니다.

EOB

목요일, 3월 22, 2018

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

(오늘의 짤방: 즐거운 OOP via @if1live)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
(보너스: Compiling C to printable x86, to make an executable research paper via @dev_philly)
EOB

토요일, 3월 17, 2018

[독서광] 신뢰받는 조직의 안전경영

아주 오래 전에 [독서광] Managing the Unexpected라는 책을 소개해드린 적이 있었는데, 얼마 전에 한국어 번역서가 나왔다는 사실을 알게되었기에 독자 여러분들께 소개드린다.

최근에 온리 더 브레이브라는 실화를 바탕으로 하는 영화를 봤는데, 자연재해에 맞서 싸우는 산림 소방관들의 이야기를 잘 그려냈다. 그런데, 불현듯 예전에 읽은 'Managing the Unexpected'가 떠올랐다. 이 책 1장에서 다룬 내용이 바로 세로 그란데의 화재를 다루는 내용이었고 고신뢰조직(HRO)의 대표적인 예가 산림 소방서이므로 자연스래 연상된 것 같다.

이 책은 위험한 상황이나 환경에서 사람 목숨이 왔다갔다하는 조직뿐만 아니라 일반적인 조직에서도 성과를 높이기 위해 응용 가능한 여러 가지 훌륭한 아이디어와 구체적인 절차를 기술하고 있기 때문에 회복탄력성 관점에서 주의 깊게 살펴보면 여러 가지 교훈을 얻을 것이다. 이 책 처음에 나오는 가슴 뜨끔한 문구를 읽어보면 마음 가짐이 달라질지도...

위기를 다룰 수 있는 능력은 그 위기가 발생하기 이전에 개발되어 있던 구조들에 크게 의존합니다. 사건이란 어느 면에서 보면 잔인한 평가와 같습니다. 미리 준비되어 있지 않은 것들은 모두 삽시간에 복잡하고 거대한 문제로 빨려 들어갑니다. 거기에서 모든 약점들이 서로 앞을 다투어 드러나는 것입니다.

결론: 출간한지 10년이 넘었지만 여전히 유효한 내용을 담고 있으므로 강력하게 추천한다.

보너스: 컬럼비아 호의 사고 사례를 아주 잘 설명하고 있는 Columbia's Last Flight도 참고로 읽어보면 더욱 좋겠다.

EOB

화요일, 3월 13, 2018

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

(오늘의 짤방: 개발자의 생산성 from http://www.monkeyuser.com/2016/developer-productivity/)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
EOB

토요일, 3월 10, 2018

[독서광] 블록체인 무엇인가?

우연히 블록체인 관련 서적 추천평을 요청 받아서 출간에 앞서 미리 읽어봤는데, 게으름으로 인해 이제 독후감을 정리해본다. 오늘 소개해드릴 책은 아마존에서 높은 판매 순위를 자랑하는 Blockchain Basics: A Non-Technical Introduction in 25 Steps 의 번역서인 블록체인 무엇인가다.

이 책은 원서 제목이 잘 나타내듯이 기술과 관련이 없는 분들을 위해 수학 공식과 코드를 동원하지 않고 블록체인을 설명하는 목적으로 만들어졌다. 물론 그렇다고 해서 인문학적이거나 비즈니스적으로 접근하지는 않으며 실제 블록체인의 동작 원리를 설명하고 있다. 직접 작성한 추천평을 보시면 이해가 가시리라...

▶ 블록체인이란 큰 덩어리를 조각내 소화시켜 주는 책!
많은 사람들이 블록체인을 이해할 때 높은 진입장벽을 느낀다. 블록체인은 여러 기술들이 적재적소에 융합된 것이기 때문이다. 하지만 이 책이라면 단계적이고 효과적으로 블록체인을 배울 수 있다. 일단, 블록체인의 장벽인 여러 기술을 조각들로 분리한다. 그런 다음 이 조각들을 수학, 코딩 같은 어려운 설명 없이 각개격파해 나간다. 손쉽게 조각들을 알아가다 보면 종국에는 블록체인이라는 큰 퍼즐을 완성할 수 있게 된다.

이 책의 구조는 조금 독특한데 소프트웨어 공학 원리를 풀어서 설명하는 1부, 소유권을 중심으로 블록체인의 필요성을 확인하는 2부, 실제 블록체인이 동작하는 원리를 개별 구성 요소로 쪼개어 소개하는 3부, 블록체인의 한계를 다루는 4부, 블록체인의 미래를 다루는 5부로 나눠진다. 이렇게 설명하면 각각 따로노는 듯이 보이지만 실제 책을 읽어보면 유기적으로 잘 연결되어 있기 때문에 상당히 인상 깊게 다가온다. 물론 현업 블록체인 개발자 관점에서는 심심하다고 느껴질지도 모르겠다.

본문에 나오는 몇 가지 해시 관련 실험이 가능하게 원서 홈 페이지에서 제공하는 부록이 존재한다. 다음 링크를 따라 들어가서 직접 해시 함수로 장난을 치다보면 본문 내용이 더욱 잘 와닿을 것이다.

결론: 컴퓨터 비전공자나 보안/암호 쪽 지식이 부족한 초보 개발자가 블록체인을 이해하고 싶을 경우 이 책이 출발점으로서 많은 도움을 줄 것이다.

보너스: 이 책에서 한단계 더 깊히 들어가고 싶으면 MSDN에 소개된 Blockchain - Blockchain Fundamentals를 적극 추천한다.

EOB

수요일, 3월 07, 2018

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

(오늘의 짤방: The reality of scaling via @InfoQ)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
(보너스: Memory segmentation cheat sheet via @404death)
EOB

토요일, 3월 03, 2018

[B급 프로그래머] 더 이상 초보 개발자가 아니라는 사실을 언제 알게 되나요?

(WHY WE NEED FAITH, PATIENCE AND DILIGENCE에서 가져온 좋은 글)

오늘은 Quora를 읽다가 발견한 When do I know I'm not a beginner anymore?라는 질문에 대한 대답 중에 좋은 내용이 있어 여기에 소개하겠다.

질문: 더 이상 초보 개발자가 아니라는 사실을 언제 알게 되나요?

답:

  • 프로그래밍 작업을 해야할 때, 소스코드 타이핑에 앞서 본능적으로 생각하고 다이어그램을 그린다.
  • 다른 사람에게 도움을 요청하지 않고 독자적으로 작업해 프로젝트를 완료할 수 있다.
  • 사용하는 프로그래밍 언어가 제2의 천성으로 자리잡아, 언어 구문 세부 사항이 아닌 문제 자체에 전적으로 집중한다.
  • 경험 없는 타인에게 코드 동작 방법을 설명하면, 실제로 다른 사람들이 이해한다. (아인슈타인: 쉽게 설명할 수 없으면 충분히 이해하지 못한 증거다.)
  • 남들이 도움을 요청할 때 (엉뚱한 곳으로 안내하는 대신) 올바른 길로 이끌고 있음을 확신한다.
  • 지금 당장은 없지만 필요한 정보를 찾는 장소를 안다.
  • 심지어 선택한 프로그래밍 언어가 모든 세부 사항을 감추더라도 CPU 동작 방식과 메모리 관리 방식을 확실히 이해한다.
  • 개발 도구가 생성하는 경고와 오류를 이해하고 직접 만든 코드를 디버깅 할 수 있다.
  • 자료구조와 알고리즘을 이해하고 직면한 문제를 풀기 위해 올바르게 선택할 수 있다.
  • 코드를 효율적으로 테스트할 수 있는 의지와 능력이 있다.
  • 다른 사람의 코드를 검토해 건설적인 피드백을 제공할 수 있다.
  • "바퀴를 다시 발명하는" 사고방식을 극복하고 삶을 편하게 만들어줄 라이브러리와 프레임워크를 포용할 수 있다.
  • 당신의 코드를 이어받을 사람을 진심으로 생각해서 가독성, 유지보수성, 이식성이 높은 코드를 개발한다.
  • 얼마나 많은 언어를 아느냐가 아닌 얼마나 기본적인 개념을 제대로 이해하고 새로운 언어를 쉽게 학습해 이런 개념을 적용하는 사실이 중요함을 깨닫는다.
  • 학습과 기량 연마 과정이 결코 끝나지 않는다는 사실을 인정하고 포용한다.
  • 실제로 코드를 만들어 싶어하며, 심지어 (상사, 선생님 등) 어느 누구도 코드를 작성하라고 말하지 않더라도 프로그래밍과 뭔가를 만드는 작업에 대한 열정을 길러왔다.

결론: 성실성, 참을성, 겸손함이 아주 중요하다.

EOB