PO(Product Owner)는 옵션 A를 진행할지, 옵션 B를 진행할지, 또는 더 나은 결과를 얻으려면 어떤 버전의 화면을 구현해야 하는지 고민하는 경우가 많습니다. 특히 제한된 리소스로 촉박한 마감 시한에 쫓기는 경우 이러한 결정을 내리는 것은 어려운 일일 수 있습니다. 게다가 이러한 결정은 개인적인 판단이나 경쟁사의 접근 방식을 모방하여 이루어지기 때문에 최적의 결과를 얻지 못할 수 있습니다. 다행히도 비교적 적은 노력으로 간단한 실험 환경을 세팅하면 이러한 함정을 피할 수 있습니다. 이 글에서는 이를 달성하는 방법을 설명하고자 합니다.
나는 연차가 많아도 실력은 3~4년 차 정도에 머무는 사람들을 자주 본다. 이런 사람들의 공통적인 특징은 학습하려 하지 않고 변화를 좋아하지 않는다는 것이다. 왜 그렇게 되었을까? 내 나름대로 추정해 보면 성장이 정체되었다고 느꼈을 때 원인을 찾지 못하고(않고), 성장이 멈춘 채 시간이 흘렀을 것이다. 성장하지 못했다는 불안감은 점점 익숙함으로 바뀌고 익숙함은 현실에 안주하게 만든다. 결국 경력이 늘어나도 성장은 멈춰 있게 된 것은 아닐까? 그렇다면 왜 성장이 정체된다고 느낄까? 문제 해결의 핵심은 문제를 정의하는 것이다. 문제를 제대로 정의하지 못하면 시간을 낭비하고 문제가 반복적으로 일어난다. 내가 겪고 옆에서 지켜본 바로는 크게 두 가지 이유가 있다.
지금까지 인류는 좋은 결정을 내리기 위해 많은 노력을 했습니다. 숫자를 발명해 크기에 대해 정밀하게 인식할 수 있게 되었고, 더 나아가 복잡한 세상을 숫자로 표현하기 위한 여러 방법을 찾아냈습니다. 그리고 그 방법들을 모여 ‘통계’라는 이름을 갖게 되었죠. 하지만 인간의 욕심은 끝이 없었고, 인간의 고유한 영역까지 기계에게 맡기고 싶다고 생각했습니다. 인간이 가진 지혜를 기계에 부여해 스스로 결정하도록 할 수 없을까?에서 시작해 만들어진 기술이 바로 ‘기계 학습(Machine Learning)’입니다.
“비동기 통신에 대해 설명해 보세요.” 프론트엔드 개발자 면접에서 자주 받는 질문이다. 개발자라면 비동기 통신과 동기 통신에 대한 개념을 정확하게 알아야 하고, 이를 바탕으로 효율적인 프로그램을 만들어야 하기 때문이다. 특히 자바스크립트는 싱글 스레드로 작동하기 때문에, 효율적인 프로그램을 만들기 위해서는 비동기 처리를 적절하게 사용하는 것이 중요하다. 이번 글에서는 필자가 면접에서 받은 질문을 토대로 비동기 통신, 동기 통신에 대한 개념을 소개한다. 그리고 비슷한 개념을 가진 블로킹과 논블로킹에 대해서도 살펴보고자 한다.
OpenAI에서 일하기 시작한 첫 3년 동안 저는 머신러닝 전문가가 되기를 꿈꿨지만, 목표를 향한 진전을 거의 이루지 못했습니다. 그리고 지난 9개월 동안의 노력 끝에 마침내 머신러닝 전문가로 거듭났습니다. 과정이 쉽지는 않았지만 결코 불가능하지는 않았고, 수학적인 지식을 이미 갖췄거나 배우려는 의지가 있는 유능한 프로그래머라면 누구나 할 수 있는 일이라고 생각합니다. 머신러닝의 기술적인 측면은 독학할 수 있는 온라인 강좌가 많아 크게 문제되지 않았습니다. 오히려 가장 큰 걸림돌은 어떤 분야에 있어 다시 초보자가 되는 것에 대한 불안감이었습니다.