언어의 추상화 얘기가 나와서 하나 덧붙인다.


언어의 추상화 수준은


1. 문법적 지원


2. 기능적 지원


둘로 나뉜다.


이 두 부류의 지원이 튼실할 수록


코딩이 편해지고 코드가 단순해지는거지


문법적 지원에는 대표적으로 패러다임이 있다.


객체지향, 함수형, 선언형, 기타 븅신같은 것들


패러다임들은 문제를 모델링하는데 도움을 준다.


아주 흔하디 흔한 예로 객체지향은


객체들의 협력 체계를 이용해 문제를 모델링하고


함수형은 데이터가 함수를 거쳐가며


다른 형태로 축약, 변형, 확장되는 것을 모델링하지.


이런 모델링 도구들이 문법적 측면에서 지원된다면


설계를 그대로 코드에 반영하는 것이 가능해진다.


말 그대로 사고하는 대로 코딩할 수 있게 되지.


또 다른 문법적 기능으론 타입 시스템이 있는데,


아주 정적인 타입 시스템을 가진 언어랑,


타입을 서브타입으로 확장하며


유연하게 타입을 모델링할 수 있는 언어,


두 언어 사이에는 표현력의 갭이 있는게 분명하다.


언어의 추상화를 결정짓는 두번째 요소


기능적 지원을 살펴보자


여기엔 정말 많은 것들이 포함된다.


대표적으로 자료구조가 있다.


동적 크기 배열이 언어 표준에 존재하는가


그렇지 않느냐가 정말 큰 차이를 갖는다는 걸


C언어를 하다가 다른 언어를 해본놈은 알 것이다


마찬가지로 기본 지원되는 자료구조는


많으면 많을수록 코드 표현에 도움이 된다.


맵, 리스트, 큐, 스택 등등


이런걸 구현할 필요 없이 그냥 쓸 수 있다는건


일단 생산성에 큰 도움이 되고,


표준 구현이므로 믿음직하지.


이런 표준 구현들을 가져다 쓰는 것만으로


언어에서 요구하는 FM을 따르는 것 같아


심리적인 안정감도 준다.


이 밖에도 동시성 지원, 가비지 콜렉팅 등등.


기능적인 것은 늘어놓으면 한도 끝도 없긴 하다.


이런 것들이 built-in이라는 것은


프로그래머들로 하여금 일관된 코드 스타일을


요구할 수 있고, 그 말인 즉슨 별다른 고민 없이


코딩을 할 수 있다는 뜻이 된다.


별생각없이 코딩할 수 있다는 면에서는,


기능적 지원이 문법적 지원보다


미시적인 생산성에 더 많은 영향을 준다.


이게 요즘의 코드몽키들이


기능적 지원으로 무장한 자바, 파이썬, 노드 등을


선호하는 이유인지도 모르겠다..


하여튼 생각없이 코딩할 수 있다는 건 좋다.


설계에 대한 고민 밖에 다른 잡음으로


골머리를 썩일 일이 없다는 뜻이니까.


요즘 컴퓨터가 발전하면서 코딩하기 참 좋아졌다.


아래 글에서는 추상화는 쓰레기라 하였지만


추상화가 좋은거야 나도 알고 있지


사실 요즘같은 세상에


뭐 아주 대단하게 큰 프로젝트나


심각하게 제약된 프로젝트가 아니면


성능이나 신뢰성이란 단어에 목맬일이 없다.


내맘대로 성능 자원을 헤집고 다녀도


그걸 수용해 줄 만큼 자원이 있다는 것은


아주 편리하고 즐거운 일이다.


하지만 너무들 쉬운것만 찾으려고들 해서


장막의 뒤를 훔쳐보는 즐거움을


모르는 프갤럼들이 많이 있다는게 안타깝다.


이런 언어적 추상화에 절어있기보단


직접 추상화를 쌓아올려가며


자신만의 시스템을 만들어가보는


그런 경험들을 해보았으면 좋겠다.