프로그래밍 학습은 순차 실행에서 추상화와 고차 함수로 사고의 폭이 넓어지는 과정이다

프로그래밍을 처음 배울 때는 문법이 가장 커 보인다. 세미콜론을 어디에 붙이는지, 반복문을 어떻게 쓰는지, 함수는 어떻게 정의하는지가 전부처럼 느껴진다. 하지만 시간이 지나면 진짜 차이는 문법량보다 어느 수준에서 문제를 보느냐에서 생긴다.
고전 교재들이 반복해서 강조하는 것도 이 점이다. 프로그래밍 학습은 명령어를 외우는 과정이 아니라, 점점 더 높은 추상 수준에서 문제를 표현하는 과정에 가깝다.
순차 실행: 컴퓨터가 한 줄씩 읽는다는 사실을 이해한다
가장 처음에는 위에서 아래로 실행된다는 감각이 중요하다. 변수 대입, 입력, 출력, 순서가 왜 중요한지 알게 되는 단계다. 이 단계는 단순해 보이지만, 나중에 디버깅의 기본이 된다.
분기와 반복: 같은 코드를 다르게, 여러 번 실행한다
조건문과 반복문을 배우면 프로그램이 조금씩 반응하기 시작한다. 여기서부터는 단순한 순서 나열이 아니라, 상태와 조건을 다루는 사고가 필요해진다.
함수와 자료구조: 문제를 잘게 나누고 묶는 법을 배운다
함수는 긴 코드를 여러 작은 작업으로 나누게 해 주고, 자료구조는 많은 값을 하나의 구조로 다루게 해 준다. 이 단계에 오면 코드는 몇 줄 작성에서 어떻게 조직할 것인가의 문제로 넘어간다.
추상화: 공통점을 뽑아내며 더 큰 문제를 다룬다
여기서부터 프로그래밍이 달라진다. 여러 함수의 공통 패턴을 묶고, 세부 구현을 감춘 인터페이스를 만들며, 문제를 더 높은 수준에서 표현하기 시작한다. 추상화가 없으면 코드는 늘어나지만 사고는 넓어지지 않는다.
고차 함수: 함수를 값처럼 다루며 조합의 힘을 배운다
고차 함수는 함수를 인자로 받거나 반환하는 함수다. 이 개념은 처음에는 어렵지만, 배우고 나면 반복 패턴을 훨씬 짧고 강하게 표현할 수 있게 된다. 중요한 것은 문법보다 관점이다. 코드를 직접 나열하는 대신, 행동의 틀을 먼저 만들고 그 안에 함수를 넣는 사고가 가능해진다.
마치며
프로그래밍의 성장은 단순한 난이도 상승이 아니다. 순차 실행에서 시작해, 조건과 반복을 배우고, 함수를 나누고, 추상화를 익히고, 고차 함수로 조합의 힘을 이해하는 과정이다.
그래서 어느 단계에서 막히는지는 자연스러운 일이다. 막혔다는 뜻은 대개 더 높은 수준의 사고로 넘어가는 중이라는 뜻이기도 하다.