토요일, 1월 28, 2017

[B급 프로그래머] 1월 4주 소식

(오늘의 짤방: Toru Iwatani shows his original drafts for Pac-Man. via @HistoryInPix)
  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 빅데이터/인공지능 소식
  5. 기타 읽을거리
마무리
신년 맞이 보너스 via @JeffreyLuke
EOB

토요일, 1월 21, 2017

[독서광] 레시피보다 중요한 100가지 요리 비결

2017년도 새해를 기념해서 첫 책을 소개해드리겠다. 놀랍게도 오늘은 '요리책'이 아닌 '요리책'이다. '레시피보다 중요한 100가지 요리 비결'이라는 제목이 붙은 이 책은 요리를 잘 하기 위한 기본기를 소개한다는 면에서 상당히 특이하다. 일반적인 요리책은 조리법에 집중을 하기 때문에 재료나 준비 과정에 있어 필요한 각종 지식은 건너 뛰기 마련이다. 하지만 사소하다면 사소하다고 볼 수 있는 이런 배경 지식이 요리의 완성도를 극대화하기 때문에 이 책에서 제시하는 여러 가지 팁을 허투루 취급해서는 곤란하다는 생각이다.

주제는 크게 야채/과일, 육류, 해산물, 계란(!), 밥/빵/면류에 대한 비결, 밑준비, 요리 준비, 간, 조리 도구 식재료 선택/저장/보관에 대한 비결로 나뉘어진다. 다음에 소개하는 몇 가지 비법에 대한 제목만 봐도 도움이 될 것이다.

  • 감자를 통째로 익힐 때에는 찬물에서부터 넣어서 삶는다
  • 고기를 익히거나 가열하기 전에 칼집을 넣는다
  • 햄버그스테이크는 센 불에서 시작하여 약 불에서 익힌다
  • 흰 살 생선은 단시간에, 붉은 살 생선은 시간을 들여 조린다
  • 계란 지단을 부칠 때에는 기름을 부은 뒤 팬을 한 번 닦아낸다
  • 샌드위치를 만들 때에는 빵 한쪽 면에 버터를 바른다
  • 파스타를 삶는 시간은 표준보다 약간 짧게
  • 양파를 자를 때 눈물이 나지 않게 하는 방법
  • 토막을 낸 고기나 생선은 물에 씻지 않는다
  • 샌드위치에 넣을 야채는 키친타월로 수분을 제거한다
  • 고기와 야채는 센 불에 빨리 볶아낸다
  • 만두를 팬에 구울 때에는 기름을 넣기 전에 물부터 넣는다
  • 볶는 요리의 재료는 팬 크기의 절반 이하로 한다

"조림 요리는 만든 뒤에 식혀 두는 시간을 갖는다"에 나오는 설명을 가져와봤다. 이 책 본문이 어떤 방식으로 서술되었는지 감이 올 것이다.

조림은 대체로 끓어오른 뒤 4~5분 정도가 되면 양념을 넣어 간을 맞춥니다. 그런데 ‘조림은 한 번 식혀 두고 난 후에 맛이 속까지 잘 배어든다’라는 말을 들어보신 적이 있을 거예요. 이것은 조림이 끓고 잇을 때에는 재료의 내부에서 수분이 증발하고, 온도가 내려가면 외부보다 내부의 압력이 낮아지기 때문입니다. 그러면 수분이 빠져나간 만큼 국물을 빨아들이기 때문에 빨리 맛이 배어드는 것이지요. 따라서 무 등의 야채를 두툼하게 썰어서 조리할 때 맛을 잘 스며들게 하고 싶으면 조린 뒤에 일단 불을 꺼서 잠시 그대로 식혀 두도록 합니다.

결론: 집에서 요리를 하는 과정에서 뭔가 부족함을 느끼는 분들께 적극 추천!

EOB

토요일, 1월 14, 2017

[B급 프로그래머] 1월 2주 소식

(오늘의 짤방: "When a noob or junior is given root access." via @leafriend)
  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 빅데이터/인공지능 소식
  5. 기타 읽을거리

마지막 마무리

EOB

토요일, 1월 07, 2017

[일상다반사] 좋은 질문을 하려면?

줄리아 에반스가 작성한 How to ask good questions라는 글을 읽다보니 독자 여러분께 소개하고픈 생각이 들어 본문 내용을 정리해봤다. 개발자로서 훌륭하게 성장하려면 질문을 잘해야 한다는 에반스의 의견에 적극 동의하는데, 비단 개발뿐만 아니라 사람들과 함께 뭔가를 해내기 위한 필수 조건이라는 생각이다.

우선 좋은 질문이 무엇일까? 대답하기 쉬운 질문이다. 당연한 듯이 들리겠지만, 어떻게 질문하느냐에 따라 완전히 상황이 바뀌기 때문에 그렇게 쉽지는 않다. 대답하기 쉬운 질문을 하기 위한 방법은 다음과 같다.

  1. 무엇을 아는지 언급하라. 지금까지 주제에 대해 연구한 바를 언급한 다음에 "제가 이해한 내용이 맞습니까?"라고 물어보자(B급 프로그래머 생각: 어떤 경우에는 질문을 위해 여러 가지 복잡한 사안을 정리하다가 답을 스스로 구하는 경우도 많다. :)).
  2. 정답이 사실인 질문을 하라. '어떻게'가 들어가면 경우의 수가 너무 많아져서 곤란하므로, 문제 범위를 좁혀서 참인지 거짓인지를 알 수 있는 질문 형태로 만드는 편이 시간을 절약할 수 있다(B급 프로그래머 생각: 조금 구체적인 질문이 좋다. 너무 범위가 넓으면 어디서부터 답을 해줘야할지 대답하는 사람도 당황스럽다).
  3. 이해하지 못하는 사실에 대해서도 기꺼이 말하라. 설명을 듣는 도중에 잘 모르는 용어나 개념이 나오면 추가로 질문을 해야 한다. 이렇게 해야 질문자의 지식 범위를 대답자가 갸늠할 수 있다.
  4. 이해하지 못하는 용어를 확인하라. X가 이런저런 내용이 맞습니까? 이런 식으로 질문하면 나중에 대답할 때 용어 이해 수준을 고려해 진행할 수 있다.
  5. 질문하기 전에 연구를 해보자. 구글 등을 검색하기 전에 무작정 질문을 던지지 마라(B급 프로그래머 생각: 대부분 구글 검색으로 해결되는 경우가 많다는 사실을 기억하자. 구글에 안 나오면 아주 어렵거나 너무 당연해서 질문이 안 나오거나 둘 중 하나일 가능성이 높다).
  6. 누구에게 질문할지를 생각하라. 적절한 질문자를 대상으로, 질문자가 대답하기 편한 시간에 맞춰, 적절한 분량의 질문을 하자.
  7. 명백하지 않음을 보여주는 질문을 하라. 고급 질문은 숨겨진 가정을 잘 드러내는 특성이 있다. 숨겨진 정보를 공유하는 방식은 상당히 효과가 있다(B급 프로그래머 생각: 아주 뻔한 질문이지만 완전히 어려운 사안으로 바뀌는 경우가 있다. 예를 들어, 엔디안을 예로 들면 x86-64 아키텍처에서는 너무나 명백한 사안이 ARM 아키텍처에서는 고민 거리를 던져준다).

훌륭한 질문이 엄청난 기여를 하는 경우도 있다. 질문하는 행위 자체에 너무 겁먹지 말자!

EOB

월요일, 1월 02, 2017

[B급 프로그래머] 코딩 실력을 개선하기 위한 확실한 방법: 코드 읽기

프로그래머라면 누구나 자신의 코딩 실력을 개선하고 싶어한다. 코딩 실력을 개선하기 위한 아주 손쉬운 방법은 없지만 노력하면 성공 가능한 방법은 존재한다. 오늘은 One Sure-Fire Way to Improve Your Coding에 나온 몇 가지 코드 읽기와 관련된 힌트를 정리해드리겠다.

코딩을 잘하려면 많이 작성해보면 된다. 이는 거의 확실한 진리지만 함정이 하나 있다. 엉터리로 코드 수 만 줄을 작성해봐야 소용이 없으며, 오히려 제대로 된 코드 수 천 줄을 작성하는 편이 훨씬 바람직하다. 제대로 된 코드를 만들려면? 답은 간단하다. 남이 만든 제대로 된 코드를 많이 읽어보면 된다. 그러면 코드를 읽기 위한 힌트가 없을까? 제로드 산토는 다음과 같은 방법을 제시한다(추가로 괄호 안에 B급 프로그래머의 경험을 추가했으므로 참고하기 바란다).

  • 무엇을 읽을까?
    1. 여러분이 의존하는 코드를 읽어라: 이미 사용 중인 라이브러리나 플러그인으로 시작하자. 예로 워드프레스 플러그인, 루비 젬, jQuery 플러그인을 고려해보자.
    2. 감명 깊은 소프트웨어 코드를 읽어라: 오픈소스 프로젝트 중에서 아키텍처가 잘 잡혀 있고 문서화가 잘 된 코드부터 시작하면 된다(B급 프로그래머: 스프링 소스 코드 일부를 읽어보고 사용자(개발자!)를 배려하는 치밀함에 정말 놀란 적이 있다.
    3. 존경하는 사람이 만든 소프트웨어 코드를 읽어라: 오픈소스를 이끄는 사람 중에서 존경하는 개발자가 있다면 거기서 출발하자(B급 프로그래머: 클린코드에서 작성한 로버트 C. 마틴이 작성한 코드 사례를 추천한다).
    4. 실제 다룰 수 있는 코드를 읽어라: 처음부터 너무 욕심내어 대규모 프로젝트를 구성하는 코드를 읽으면 혼란에 빠진다. 전체 논리를 한 번에 머리에 넣을 수 있는 작은 프로젝트부터 읽어보자(B급 프로그래머: 되도록 초기 버전을 권장한다. 버전이 올라갈수록 복잡도는 기하급수적으로 증가하기 때문이다. 피보탈에서 만든 Cloud Foundry도 초기 버전은 정말 읽고 이해할만 했다. 이 코드 덕분에 루비 실전 기술을 몇 가지 배웠다.).
  • 어떻게 읽을까?
    1. 큰 그림을 보자: 개별 단위 함수부터 파고드는 대신 웹 사이트, 튜토리얼, 문서, 코드 이외 다른 참고 자료부터 살펴보자. 프로젝트 구조 파악이 우선이다. 코드 계층 구조를 파악하고 어떤 코드가 어떤 코드를 import 하는지, namespace는 어떻게 명명되어 있는지를 살펴보자(B급 프로그래머: 코드 내부에서 함수는 헤더 파일에 대한 교차 참조를 걸어주는 여러 가지 도구를 사용하면 시간을 절약할 수 있다).
    2. 찾아낸 사실을 문서로 만들자: 코드 읽기는 수동적인 활동이 아니다. 찾아낸 사실을 문서로 만들고 프로그램 흐름에 맞춰 가정과 결론을 나중에 찾아볼 수 있게 주석으로 달아놓자.
    3. 테스트를 사용하라 루크!: 아마도 테스트 코드가 프로젝트 내에 포함되어 있을 것이다. 테스트는 출발점으로 아주 좋다. 코드가 어떻게 동작하고 어떤 가정을 내포하는지를 설명하기 때문이다. 실제로 코드 읽기에 앞서 테스트를 돌려서 환경이 제대로 구성되어 있는지 확인할 필요가 있다(B급 프로그래머: 테스트에 앞서 일단 빌드부터 성공해야 한다. 컴파일 언어에 대한 환경 구성이 확실히 어렵긴 하지만 스크립트 언어인 경우에도 의존성 맞추느라 고생할 가능성이 상당히 높다. 충격에 대비하라!).
    4. 실행하고, 변경하고, 다시 실행하자: 일단 모든 것을 분해했다 다시 조립하면서 이해도를 높이자. 정말 멋진 기능을 하나 추가해서 테스트가 통과하는지 살펴보자. 다양한 코드 상태를 확인할 수 있게 로그 수준을 높여보자(B급 프로그래머: 이 과정에서 디버거를 사용해 흥미로운 부분에 중단점을 걸어 내부 상태를 파악하기도 한다).
  • 어디서 시작할까? 깃허브와 같은 공개 소스코드 저장소에서 출발하자. git clone 만으로 손쉽게 코드를 복제해서 시작할 수 있다.
EOB