C++로 코딩할 때 STL을 즐겨 사용했습니다.
대학교에서는 왜 이런 걸 가르쳐주지 않았을까?
학생 때 고생 고생해서 만든 동적 배열, 링크드 리스트, 맵 같은 것들이 여기 다 있었네.
내가 만든 것보다 훨씬 좋은 걸.

제가 만든 라이브러리들은 압축해서 컴퓨터 안의 깊은 창고 속에 집어넣었습니다.
그것들은 이후로 한 번도 햇빛을 보지 못했습니다. 저는 STL과만 놀게 되었거든요.

STL은 어려웠지만 배워나가는 기쁨이 있었습니다.
어? 자료구조만 있는 게 아니라 알고리즘까지 일반화를 해두었잖아?
이런 라이브러리를 만들 수 있다니. 나는 어떤 세계에 살았던 것인가.

STL은 C++ 자체였고 STL을 모르고서는 C++로 코딩한다라고 말하기 힘든 것이었습니다.
친해질수록 STL은 제 코딩 생활을 편하게 만들어주었습니다.

어느 날 나이가 저보다 10살쯤 많은 선배님이 말했습니다.

“네가 짜는 코드는 너무 보기 어려워. 그 템플릿 같은 거 좀 안 쓰면 안 되겠니?”
“네? 무슨 템플릿이요?”

너무 보기 어렵다고? 난 템플릿 잘 안 쓰는데.
뭘 말씀하시려는 건지 어느 정도 알고 있었습니다.

ruby 코드로 배열의 각 숫자에 10을 곱하는 프로그램을 짜려면 이렇게 합니다.

[1, 2, 3, 4, 5].map { |i| i * 10 }

C++로 짜면 이렇게 합니다.

int a[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++)
{
    a[i] *= 10;
}

루비 코드가 훨씬 간단하지만 C++ 코드도 보기 좋습니다.
어쩌면 훨씬 직관적인 것 같기도 합니다.
루비 코드는 짧긴 하지만 그렇게 쉬운 코드는 아니거든요.

STL을 이용해서 루비처럼 짤 수도 있습니다.
루비처럼 예쁘지는 않지만요.

std::vector<int> v = { 1, 2, 3, 4, 5 };
std::transform(v.begin(), v.end(), v.begin(),
                [](int i) { return i * 10; });

저는 이런 방식으로 STL을 사용해 코드를 짜는 걸 즐겨했습니다.

STL을 처음 보는 사람에게 이 코드는 당혹스러운 느낌으로 다가온다는 것을 저도 알고 있었습니다.
그냥 편하게 for 루프로 짜지 왜 저런 짓을 하지?

저는 STL을 쓰며 이런 생각들을 했던 것 같습니다.

나 따위 프로그래머가 직접 인덱스를 조작한다고?
분명히 실수할 텐데?

나 따위 프로그래머가 감히 직접 new, delete 를 한다고?
실수하면 엄청 고생할 텐데?

나 따위 프로그래머가 직접 라이브러리를 만들어 쓴다고?
STL을 만드는 사람들보다 잘 만들 수 없을 텐데?

게다가 코드를 재사용하는데도 탁월한 걸.

코드 보기가 어렵다라… 그래 그럴 수도 있지.
그런데 그렇다면 다시 옛날 방식으로 돌아가야 하나?
모두가 이해할 수 있는 프로그램을 만들기 위해서?
아니 가만, 근데 이 프로그램이 그렇게 어려운 정도인가?

저는 동의할 수 없었습니다.
언어에 엄연히 존재하는 기능을 조금 보기 어렵다고 안 쓰기로 하면 팀 전체가 하향평준화되는 거잖아.

이제 C++로 더 이상 프로그램을 짜지 않지만 다시 C++ 프로그래밍을 해야 하는 날이 온다면 또 STL을 열심히 사용하겠습니다.
람다도 열심히 쓰고 새로 생긴 C++ 문법과 라이브러리도 알아볼 것 같습니다. 어디 좋은 거 생긴 거 없나 하고.
몸에 좋다는 건 다 먹어야지 하는 마음으로.
코딩할 때 날 편하게 도와주는 것은 다 배우고 싶어.
몸에 좋은 게 입에 쓴 건 당연한 거 아냐?

한 편으로 저는 이제 그 선배님의 마음을 어느 정도 이해합니다.
나이를 먹고 결혼을 하고 아이를 갖고 하면서 공부한다는 것이 점점 부담스러워지는 것을 저도 느끼거든요.

음…
하지만 아무리 그래도 프로 프로그래머라면 STL 정도는 배워야 하지 않을까요?