로우엔드 개발자들은 C++ 마저도 무거운 언어로 생각하곤 한다. 난 사실 무겁다기 보다는 어려워서 잘 못한다. C에는 4칙연산만 있다면 C++은 미적분까지 있다.
로우엔드 개발자들은 최신(이라고는 하나 이미 30년 이상된) 개발 철학에 약하다. 주로 인본주의적 관점의 철학이다. 즉슨, 유지보수성, 추상화 같은 것들이다. 기계나 컴파일러에게 맡길 일을 사람이 하면 품질이 무너진다. 바로 그것.
요 며칠 알고리즘 같은 것을 보다가 문득 생각이 들었다. 로우엔드 개발자들도 다른 측면에서 인본주의 성향이 있다. 기계가 뺑이치면 될 것을 사람이 어렵게 풀지 말라는 관점이다. 대신 캐시히트, NUMA 구조라든가, 파이프 스톨, 노는 쓰레드, SIMD 최적화, 노는 레지스터에 관심을 갖는다. 이런걸 잘 짜맞춰서 기계의 최대치를 뽑아내보자는 것..
케바케에 한하며 말이 될 때가 있다. 예를 들면 O(N^2)이 O(log(n)) 류 보다 더 빠를때가 있다는 것. 이유는 당연히 캐시와 루프 깬 뺑뺑이 + SIMD 최적화류 때문이다. (O3 빌드면 SIMD 기본빵은 먹는다) 예컨데 희소 행렬을 인덱스를 부여하여 각 요소를 트리 탐색하면 캐시의 혜택을 전혀 볼 수 없다. 간단하지만 반복적인 계산에 있어서 희소 행렬을 소팅해둔 배열에 때려놓고 선형 탐색을 해보면 더 빠른 경우가 있다. 물론 케바케이며 이런 경우는 별로 없다. 하지만 써야 할 곳은 반드시 있다.