함수형 인간 2023
<동시성, 병렬, 비동기, 논블럭킹과 컨셉들>이라고 굉장히 포괄적으로 정리된 블로그가 있어 즐겨찾기 해 두었다가 오랜만에 읽었습니다. 그런데 다음 표에서 딱 멈추지 않을 수가 없었습니다.
지난주에 제출할 요즘IT 기고문에서 인용했던 Kent Beck의 표와 구성이 똑같았습니다. 해당 구절에 Kent Beck이 붙인 소제목도 가져옵니다. 자~ 이제 무엇을 비교해 볼까요?
Blocking의 의미가 분명해집니다. '다른 일을 못하고 대기'하는 상황입니다. 호출한 함수가 제어권을 호출된 함수에게 넘기기 때문에 대기가 발생한다 볼 수 있습니다. 처음의 표는 프로그래밍의 호출 관계이지만, 후자는 개발자 사이에서 벌어지는 코드 리뷰입니다. 사람들의 상황에 맞춰서 Blocking 풀이를 해 볼까요? 코드 리뷰를 요청한 사람과 제어권을 넘기지만 완료 여부를 스스로 판단하는 상황을 짝 작업(Pairing)이라고 할 수 있습니다.
협업 대상 둘이 시간을 점유(공유)하며 함께 일을 해내는 과정이군요. 이러한 정의나 짝 작업(Pairing)은 프로그램에 대해서나 사람의 협업에 대해서나 모두 사용할 수 있는 표현입니다.
Blocking 상황 즉, '다른 일을 못하고 대기'하는 상황이지만 호출한 프로그램이 아니라 호출된 프로그램이 완료 여부를 통보하는 것을 Callback이라고 합니다. Blocking 상황에서 비동기 프로그래밍을 적용하는 방법이라 할 수 있습니다.
이를 코드 리뷰 상황에 빗대어 보면 PR(Pull Request)이 됩니다. 북경에 있을 때, CTO 님이 개발 절차에 코드 리뷰를 녹여 넣으려고 PR을 필수적인 단계로 만들었던 장면이 떠 오릅니다.
개발자의 성숙도가 높아지면 반드시 PR을 통해 리뷰를 강제할 필요가 없을 수 있습니다. 이론적으로는 그렇지만, 그런 상황에서 일해본 적이 없긴 합니다. 물론, 코드가 엉망인데 간헐적 리뷰를 할 수 있긴 하죠.
아무튼 이렇게 강제가 없는 상황을 프로그래밍에서도 구현할 수 있습니다. 다만 Blocking이 없어 다른 일을 한다면 이후에 요청한 작업이 끝났을 때 적절한 지점으로 돌아와 다음 지시문을 수행하게 프로그램을 짜는 일은 쉬워 보이지 않습니다. 굉장히 짜임새 있게 작성해야 할 듯한데... 일단, 저는 그렇게 짜 본 일이 없군요. 어렴풋하게 상태를 기반으로 하는 객체 지향 프로그래밍이 도리어 불리하고, 함수형 프로그래밍이 강점을 보이는 영역이 될 듯하다는 생각도 듭니다만, 어디까지나 경험이 없는 추정일 뿐입니다.
즉흥적으로 해 본 일이라 어찌 마무리를 해야 할까요? 표의 와꾸(frame)만 재사용하는 일도 어느 때나 써먹을 수 있는 기능으로 보아 함수형 인간 연재로 편입하기로 합니다. HBR을 읽으면서 눈에 들어온 <사분면 혹은 매트릭스 활용하기>와도 일맥상통하네요.
1. 함수형 인간 재개
3. 함수형 인간 프레임워크
12. 스마트폰과 건강하게 함께 살기
14. ChatGPT 말고 ChatPDF 일상 도구로 사용하기
18. 관성을 제약하고, 목적과 몰입을 동시에 추구하기