흔히 C/C++를 공부하면 그 과정에서 컴퓨터의 작동 구조에 대한 이해가 깊어진다고 하는데... 난 이 말이 인과가 뒤집힌 게 아닌가 싶어.


물론 컴퓨터의 작동 구조에 대해 잘 이해하고 있으면 더 좋은 C/C++ 코드를 짤 수 있고, 특히 얘들은 컴구잘알이면 다른 언어보다 얻을 수 있는 이득이 훨씬 많다는 거도 맞다고 생각해.

근데 C/C++도 어디까지나 언어, 그거도 하드웨어를 아주아주 많이 추상화시킨 나름 고급 언어잖아. 포인터 타입이란 게 존재한다고 해서 컴퓨터 메모리가 작동하는 방식을 이해할 수 있다든가... 이런 주장은 난 잘 모르겠어.

오히려 그 과정에서 "변수는 스택, 동적할당은 힙" 같은 오개념을 가르치는 경우도 생긴단 말이지? 사람들이 언어 명세랑 구현체를 헷갈린 게 너무 많이 퍼져버렸는데, 사람들이 이런 오개념을 갖고도 멀쩡히 돌아가는 코드를 짤 수 있다는 게 어떻게 보면 언어가 가진 추상화의 힘이라 해야 하나...


게다가 최근에는 "언어에서 장려하는 코드 스타일"을 열심히 따르면 점점 컴퓨터 구조에 대해서 잘 몰라도 충분히 최적화된 프로그램을 짤 수 있어.

특히 C++를 보면 언어의 핵심 가치부터 zero-cost abstraction (무비용 추상화)랑 pay only for what you use (사용하지 않는 기능으로 인한 오버헤드 제거)고, 그 가치에 충실하게 모던 C++에 들어온 별별 기능이랑 거기서 파생된 코딩 스타일을 잘 활용하기만 해도 컴구잘알이 고전적으로 짠 코드만큼, 또는 더 빠른 코드를 짤 수 있게 설계돼 있어.


물론 이 코드 스타일 자체가 최적화 달인들이 우리 같은 양민들을 위해 알려주는 팁 같은 개념이고, 이런 기능을 구현하는 데는 수많은 최적화잘알들의 노력이 갈려들어갔겠지.

그치만 C++를 쓰는 우리 모두가 그걸 밑바닥부터 다시 짤 수도 있는 능력을 갖출 필요는 없잖아?

이미 잘 만들어진 라이브러리를 활용하는 거도 실력이고, 그런 쓸데없는 데에 들일 노력을 더 고차원적인 프로그램과 알고리즘을 설계하는 데 투자하는 게 훨씬 이득이 아닐까?


내가 은근슬쩍 C를 빼먹었는데, 사실 요즘의 C는 최적화잘알이 일반적인 컴퓨터의 상식이 통하지 않는 곳에서 극한의 최적화를 한다거나, 다른 언어로 짠 라이브러리의 FFI (Foreign Function Interface) 를 구현하는 데에나 쓰이는 언어가 됐다고 생각해.


각설하고, 결국 하고 싶은 말은 C/C++도 고도로 추상화된 프로그래밍 언어란 거야.

컴퓨터의 작동 방식에 대한 거는 그 자체로 따로 공부해야지 언어 공부를 통해서 얻을 수 있는 것도 아닐뿐더러, 그 과정에서 잘못된 개념을 익히게 될 위험성이 더 크다고 생각해.