조슈아 블로크: Java 플랫폼의 양심
"Java 프로그래밍 언어는 5.0 버전에서 도입된 변경 사항으로 인해 복잡성 예산을 모두 소진했다." 이 문장은 놀랍다. 무엇보다도 그 말을 한 사람이 누구인지 때문이다. 조슈아 블로크는 Sun Microsystems에서 수년간 문제의 추가 기능을 설계하는 데 보냈고, 그가 형성하는 데 도움을 준 JDK 5.0 릴리스는 언어 역사상 가장 야심 찬 확장이었다. 그러고 나서 그는 세상에 이제 충분하다고 말했다. 자신이 개인적으로 확장한 시스템을 감시하고, 기능이 아닌 예산으로 생각하려는 그 본능이 한 줄에 그를 모두 담고 있다.
사우샘프턴, 컬럼비아, 피츠버그
블로크는 1961년 8월 28일 뉴욕 사우샘프턴에서 태어났다. 컬럼비아 대학교 공학 및 응용 과학 대학에서 컴퓨터 과학 학사 학위를 받았고, 이후 카네기 멜런 대학교에서 박사 학위를 받았다(1990년 완료). 그의 논문 "추상 데이터 객체 복제를 위한 실용적 접근 방식"은 ACM 우수 박사 학위 논문상 후보에 올랐다.
이 제목은 두 번 읽을 가치가 있다. 대학원생 시절에도 블로크의 작업에서 핵심 단어는 실용적이었다. 그는 분산 시스템의 이론적 문제로서 복제를 공격한 것이 아니라, 엔지니어가 추상 데이터 객체에 대해 실제로 배포할 수 있는 버전을 추구했다. 그는 남은 경력을 증명 가능한 정확성과 현업 프로그래머가 신뢰하고 사용할 수 있는 것 사이의 좁고 유행을 타지 않는 틈새에서 보냈다.
Sun과 컬렉션 프레임워크
Transarc에서 수석 시스템 설계자로 근무한 후, 블로크는 Sun Microsystems에 입사하여 Distinguished Engineer가 되었으며, Java를 Java답게 만드는 여러 요소의 설계와 구현을 주도했다. Java 컬렉션 프레임워크는 그중 가장 큰 것이다. 리스트, 세트, 맵, 그리고 그것들을 조작하는 알고리즘 등, 그 이후의 모든 Java 프로그램이 구축된 기반이다. 그는 또한 java.math 패키지와 언어의 어설션 메커니즘을 주도했으며, JDK 5.0의 주요 개선 사항을 추진했다.
이것은 독특한 저작 활동이다. 컬렉션 라이브러리는 애플리케이션이 아니라 어휘이다. 블로크의 이름을 들어본 적 없는 수백만 명의 프로그래머가 그가 선택한 명사와 동사 안에서 직장 생활을 하며, 그들의 사고방식은 그의 인터페이스 형태에 의해 제약받는다. 그가 잘못했다면 나쁜 프로그램이 만들어진 것이 아니라, 프로그램을 작성하기 위한 나쁜 언어가 영구적으로 만들어졌을 것이다.
Effective Java
2001년에 그는 Effective Java를 출판했고, 프로그래밍 언어에 관한 책으로서는 드물게 커뮤니티의 도덕적 권위가 되었다. 번호가 매겨진 독립적인 항목들로 구성되어 각 항목이 규칙을 제시하고 실제 실패 모드를 바탕으로 논증하는 이 책은 2001년 졸트 어워드를 수상했다. 2008년 제2판은 읽기 어렵게 만들지 않으면서 57개 항목에서 78개로 늘어났고, 2017년에는 제3판이 나왔다.
그는 공동 저자들과 함께 두 권의 책을 더 썼다. 2005년 닐 개프터와 함께 쓴 Java Puzzlers는 언어의 함정들을 모은 선집으로, 사양상으로는 올바르게 동작하지만 직관적으로는 미친 듯이 동작하는 코드들을 진단 연습으로 제시한다. 2006년의 Java Concurrency in Practice는 더그 리를 포함한 5명의 공동 저자와 함께 썼으며, 플랫폼이 사용자에게 요구하는 가장 어려운 과제에 대한 표준 참고서가 되었다.
Google과 API 설계
블로크는 2004년 6월부터 2012년 8월까지 Google의 수석 Java 아키텍트였다. 그곳에서 그의 핵심 관심사는 대중적인 논쟁으로 결정화되었다. 2006년 컨퍼런스 논문 "좋은 API를 설계하는 방법과 그 중요성"은 API가 재협상할 수 없는 계약이라는 이유로 인터페이스 설계를 취향의 문제가 아닌 위험이 따르는 규율로 다룬다. 그는 그 좌절감을 구체적으로 설명했다. Google에서 그는 특정 클래스가 인터페이스가 아닌 구체적인 타입으로 선언되었기 때문에 대체 구현을 제공할 수 없었는데, 이는 수년 전 다른 누군가가 내린 결정이었으며, 그가 말했듯이 "평범한 개발자들이 매일 느끼는" 제한의 일종이다.
그의 조언에는 일관된 풍미가 있다. 자신의 판단에 대한 겸손함이다. 자신을 반복하지 말 것. 특히 동시성에 대해서는 직접 작성하기보다 확립된 라이브러리를 찾을 것. 조기 최적화에 대한 일반적인 경고가 다른 사람들에게는 적용되지 않는다는 느낌을 경계할 것. "조기 최적화에 대한 일반적인 경고는 자신에게는 적용되지 않는다고 느끼기 쉽다. 왜냐하면 자신만은 어떤 코드가 시간적으로 중요한지 알기 때문이다." 그리고 The Elements of Style을 읽을 것. "좋은 프로그래밍과 좋은 글쓰기는 모두 표현의 명확성과 경제성에 관한 것이기 때문이다."
조슈아가 천재라고 불리는 이유
문제의 능력은 단순한 발명이 아니라 더 희귀한 것이다. 소프트웨어를 그것을 사용해야 할 낯선 사람의 입장에서 바라보고, 자신의 능력이 아닌 그 낯선 사람의 실수를 위해 설계하는 능력이다. 블로크의 틀에서 API는 동의하지도 않았고 수정할 수도 없는 사람들에게 강요되는 언어이며, 따라서 설계는 수십 년 앞을 내다보고 대규모 오용을 예측하는 연습이 된다. 컬렉션 프레임워크가 그 증거이다. 현업 프로그래머의 엄청난 비율이 사용하는 어휘이며, 거의 변경되지 않고 살아남을 만큼 올바르다. 두 번째 요소는 체계화이다. Effective Java는 이전에는 소수의 플랫폼 엔지니어 머릿속에만 있던 암묵적인 전문 지식을 가져와 전송 가능하고 논쟁 가능한 규칙으로 바꾸었다.
반론도 언급할 가치가 있다. 블로크는 새로운 컴퓨터 과학을 만들어낸 것은 아니다. 그의 논문은 우수 논문상 후보에 올랐지만 수상하지는 못했다. 그의 가장 유명한 작업은 베스트 프랙티스 모음집이며, 이는 발견이라기보다는 큐레이션과 판단이다. 기록된 영예는 출판상이나 잡지 목록이지, 해당 분야의 주요 연구상이 아니며, 여기서 참조한 어떤 출처도 그를 천재라고 부르는 기록은 없다. 컬렉션 프레임워크는 그가 주도한 대규모 팀의 노력이지, 단독 작품이 아니다. 공정한 평결은 블로크가 엔지니어링 판단력의 최고 실무자이자 교사라는 것이다. 이는 소프트웨어에서 새로움보다 더 중요하면서도 훨씬 적게 인정받는 규율이다.
유산
그는 Sun을 떠난 후에도 언어를 계속 형성해 나갔으며, 클로저에 대한 접근 방식으로 자동 리소스 관리 블록과 간결한 인스턴스 생성 식을 공동 제안했다. ARM 블록은 JDK 7에 포함되었다. 2004년 12월 Java Developer's Journal은 그를 세계에서 가장 중요한 소프트웨어 인물 40인 중 한 명으로 선정했다. 그 후 카네기 멜런 대학교로 돌아와 소프트웨어 및 사회 시스템 학과의 실무 교수로 재직 중이다. 그 직함은 그의 경력을 요약한 것처럼 읽힌다. 왜냐하면 실무가 항상 그의 목적이었기 때문이다.
작업의 척도는 그 영향력이 귀속되지 않는다는 점에 있다. 오늘날 어딘가에서 블로크의 글을 한 줄도 읽어본 적 없는 프로그래머가 구체적인 클래스 대신 인터페이스에 손을 뻗거나, 동시성 기본 요소를 직접 작성하기를 거부할 것이다. 동료가 책의 번호가 매겨진 항목에서 읽은 내용을 그들에게 말해주었기 때문이다.
