안녕하세요, 지식을 통해 여러분과 함께 성장하는 블로그입니다. 오늘은 조금 색다른 주제로, 프로그래밍의 본질과 추상화의 중요성에 대해 이야기해보려고 합니다. 이 주제는 Leslie Lamport가 SCaLE 22x에서 진행한 뛰어난 키노트에서 영감을 받았는데요, 그는 "코딩은 프로그래밍이 아니다"라는 주장을 하며 코딩 이전의 사고 과정의 중요성을 강조했습니다.
알고리즘과 프로그램 그리고 추상화
우리가 흔히 코딩이라고 하면, 컴퓨터 언어를 이용해 문제를 해결하는 과정을 생각하게 됩니다. 하지만 Lamport는 이보다 한 걸음 더 나아가 "알고리즘"에 대한 이해부터 시작해야 한다고 말합니다. 알고리듬은 문제 해결의 추상적 아이디어로, 특정 언어로부터 독립적입니다. 예를 들어, "정수 배열의 최대값 반환" 문제를 생각해볼까요? 이 문제를 풀기 전에 우리는 "모든 원소 이상인 최소 수를 반환"한다는 정확한 정의가 필요합니다. 이러한 정의를 통해 더 명확하고 충실한 알고리즘을 도출할 수 있죠.
프로그램은 상태의 연속
프로그래밍에서 중요한 또 하나의 개념은 "상태"입니다. 프로그램의 실행은 단순한 명령 순서가 아니라, 상태(state)의 흐름입니다. Lamport는 이 개념이 특히 동시성 프로그램에서 올바른 결과를 얻는 데 필수적이라고 설명합니다. 예를 들어, Amazon Web Services가 TLA+라는 도구를 사용하여 설계 결함을 사전에 찾아내는 사례가 있습니다. 이처럼 추상화를 통한 상태 모델링은 프로그램의 안정성과 정확성을 높이는 데 크게 기여합니다.
글쓰기와 사고의 관계
Lamport는 또 추상적 사고를 글로 표현하는 것이 사고를 더 명확하게 해준다고 했습니다. 이는 프로그램의 명확한 명세와 상태 연속 및 불변성을 이해하는 데 기반이 됩니다. 우리의 경험에서도 알 수 있듯이, 아이디어를 글로 쓸 때 많은 개념이 더욱 확고해지고 명확해지는 것을 느낄 수 있습니다.
추상화 능력은 프로그래머의 필수 역량
마지막으로, 프로그래머는 추상화 능력을 길러야 한다는 점을 강조하고 싶습니다. 수학과 물리학, 그리고 다양한 과학 기초에서 기인한 추상화 능력은 프로그램 설계의 초석이 되며, 복잡한 시스템을 더 효율적이고 안정적으로 만드는 데 필수적입니다. 실제로 Lamport는 교육현장에서 수학자들이 프로그래머에게 추상화를 가르칠 수 있다고 언급하기도 했습니다.
프로그래밍을 시작하는 분들께는 코딩의 기술적 요소들에만 집중하기보다, 문제를 해결하기 위한 추상적 사고 과정을 충분히 경험해보기를 권장합니다. 이 과정은 코드의 견고함과 효율성을 높이는 데 큰 도움이 될 것입니다.
자, 앞으로도 코딩에 앞서 사고하기를 소홀히 하지 말고, 또 이를 표현하는 연습도 함께 한다면 많은 도움이 될 것입니다. 다음 글에서도 더 흥미롭고 유익한 내용을 들고 찾아뵙겠습니다. 감사합니다!