대화는 객체 지향 프로그래밍의 정의에 대한 근본적인 질문으로 시작됩니다. Matz는 Alan Kay가 주장한 메시지 전달 방식의 OOP 개념이 시간이 지나면서 상태를 가진 구조화된 객체라는 의미로 변화했음을 설명합니다. 그는 OOP의 핵심 요소로 ‘정체성(Identity)’을 가장 중요하게 꼽고, ‘동적 바인딩(Dynamic Binding)’을 그 다음으로 중요한 요소로 언급하며, 이러한 관점에서 엘릭서조차도 넓은 의미의 객체 지향 프로그래밍의 일부로 볼 수 있다고 말합니다.
이어지는 논의에서는 상태(State)와 사이드 이펙트(Side Effect)의 중요성이 다루어집니다. Jose는 엘릭서가 데이터 흐름에 중점을 두어 기본적으로 불변성을 지향한다고 설명합니다. Matz는 순수 함수형 프로그래밍 언어조차도 실제 애플리케이션에서는 사이드 이펙트와 상태 변경이 필수적임을 인정하며, 이를 전면적으로 부정하기보다는 통제하고 줄이는 것이 중요하다고 강조합니다. 특히, Rails의 ‘서비스 객체(Service Object)’와 같이 상태가 없는 클래스를 객체로 사용하는 방식에 대해서는 객체 지향 원칙의 ‘오용’으로 비판적인 시각을 드러냅니다.
언어 디자인에 대한 커뮤니티의 영향력도 중요한 주제로 다뤄집니다. Matz는 루비의 다국어 지원이 커뮤니티의 자발적인 기여에서 시작되었음을 언급하며 놀라움을 표합니다. Jose는 엘릭서의 코드 포매터 도입에 대한 초기 저항을 회상하면서도, 결국 커뮤니티의 합의와 필요성에 의해 중요한 도구가 되었음을 인정합니다. 또한, 루비와 같은 언어가 오랜 호환성을 유지하려는 노력과, Rails와 같은 프레임워크가 웹 환경의 급변에 맞춰 빠르게 변화하고 때로는 호환성을 깨는 이유에 대한 흥미로운 대조가 이루어집니다.
언어 창시자로서의 비기술적인 어려움도 솔직하게 공유됩니다. Matz는 루비 개발 초기 혼자 작업하며 중단할까 고민했던 시기를 회상하지만, 공개 후 사용자들의 피드백이 큰 동기 부여가 되었다고 말합니다. Jose는 외부의 기대치를 관리하는 것이 어렵다고 토로하며, 커뮤니티의 문제는 공동의 책임임을 강조합니다. 두 사람 모두 컨퍼런스 후 사회적 에너지가 고갈되는 경험에 공감합니다.
소프트웨어 복잡성에 대한 논의에서는, 복잡성이 외부 세계의 반영이기도 하지만, 우리가 사용하는 도구와 언어가 복잡성을 가중시킬 수도 있다는 점이 지적됩니다. Jose는 웹 개발 분야의 급격한 변화가 복잡성을 증가시키는 주된 요인 중 하나라고 언급하며, 선택한 도구와 아키텍처에서 비롯된 복잡성이 실제 필요한 것인지 재평가해야 한다고 제안합니다.
마지막으로, 미래에 대한 기대감이 공유됩니다. Matz는 JIT 컴파일러의 발전과 AI의 잠재력에 큰 기대를 걸고 있습니다. 그는 AI가 테스트 코드 작성이나 타입 추론과 같이 ‘재미없고 반복적인’ 프로그래밍 작업을 자동화하여 개발자들이 더 창의적이고 본질적인 문제 해결에 집중할 수 있게 할 것이라고 전망합니다. Jose는 러스트(Rust)와 같이 저수준과 고수준 언어의 경계를 허무는 새로운 프로그래밍 언어 패러다임의 등장을 흥미롭게 지켜보고 있다고 말하며, 이러한 혁신이 오랜 문제들에 대한 새로운 해결책을 제시할 것이라고 기대합니다.