인간 활동으로서의 소프트웨어 엔지니어링

인간은 추상하는 동물이다. 눈앞의 나무 한 그루에 ‘나무’라는 이름을 붙인다. 여러 나무들을 묶어 ‘숲’이라는 범주를 만든다. 이 숲이 사라지는 현상에 ‘환경 파괴’라는 이름을 붙인다. 구체에서 출발해 점점 더 높은 층위의 개념을 쌓아올린다. 인간 정신의 토대가 여기에 있다.

감각과 경험을 언어라는 기호로 옮기고 수백만 명의 이해관계를 ‘정의’나 ‘자유’ 같은 추상적 개념 아래 조율한다. 문화, 정치, 법, 철학… 인간이 만든 거의 모든 체계는 추상의 레이어를 쌓아올려 만들어졌다. 추상화는 인간이 세상을 이해하고 세상과 상호작용하는 핵심 방식이다.

그런 의미에서 소프트웨어 엔지니어링은 처음부터 인간적인 활동이었다. 다만 우리가 그것을 깨닫는 데 시간이 좀 걸렸을 뿐이다.


소프트웨어는 어떻게 공학에서 멀어졌는가

초기의 소프트웨어는 분명히 공학이었다. 전기 신호의 흐름을 제어하고 반도체의 물리적 특성을 이해한 뒤 0과 1의 조합으로 기계에게 명령을 내리는 일. 프로그래머는 전자공학자에 가까웠고, 코드는 회로의 연장선이었다.

그리고 그 위에 추상화의 레이어가 쌓이기 시작했다.

기계어 위에 어셈블리가, 어셈블리 위에 고급 언어가, 고급 언어 위에 프레임워크가 올라왔다. 이전에 쌓아올린 하위 레이어의 복잡성을 감추고 더 인간적인 언어로 더 복잡한 시스템을 만들 수 있게 되었다. 반세기 동안 소프트웨어는 끊임없이 하드웨어로부터 멀어졌고 인간의 사고방식에 가까워지는 방향으로 진화해왔다.

그리고 지금 AI가 이 추상화의 최전선에 서 있다. “사용자가 로그인하면 대시보드로 이동시켜줘”라는 문장이 곧 프로그램이 된다. 소프트웨어를 만드는 일이 ‘어떻게 구현할 것인가’에서 ‘무엇을, 왜 만들 것인가’로 옮겨가고 있다. ‘어떻게’는 공학의 질문이지만, ‘무엇을’과 ‘왜’는 인문학의 질문이다.


과묵한 재료, 말을 걸어오는 재료

리처드 세넷은 『장인(The Craftsman)』에서 장인의 핵심 역량을 재료와의 대화라고 말한다. 목수는 나무결을 읽으며 대패질의 방향을 바꾸고, 도공은 흙의 저항을 느끼며 형태를 수정한다. 재료가 먼저 말을 걸어오고 장인은 그 신호를 감각으로 읽어내며 응답한다. 이 순환 속에서 사유가 일어난다. 이 사유의 밀도가 장인을 비로소 장인으로 만든다.

반면 소프트웨어는 나무나 흙에 비하면 훨씬 과묵한 재료다.

물론 코드에도 감각은 있다. 코드 스멜이라는 표현 자체가 그걸 증명한다. 숙련된 개발자는 나쁜 코드를 보면 냄새를 맡듯 알아챈다. 나무의 결은 아니어도 코드베이스의 컨벤션을 읽으며 그 결에 맞춰 새 코드를 짠다.

하지만 그 감각은 나뭇결이 손끝에 걸리는 감각과는 다른 종류다. 수년간의 추상적 훈련을 거친 뒤에야 겨우 생겨나는 감각. 몸보다는 머리에 가깝다. 몸으로 느끼고 즉각적으로 판단하는 인간 본래의 인식과 소프트웨어를 다루는 방식 사이에는 처음부터 상당한 간극이 있었다.

세넷의 장인론을 소프트웨어에 그대로 적용하기 어려운 이유가 여기에 있다. 나무는 초보자의 손에도 자신의 결을 드러내지만, 코드는 오랜 훈련을 거친 사람에게만 겨우 읽히기 시작하는 재료다. 소프트웨어 장인은 처음부터 불리했다.


과묵한 재료에 목소리를 부여하는 도구

여기서 AI의 역할을 다시 생각해보자.

만약 AI가 단순히 코드를 대신 써주는 도구라면, 세넷이 경계한 사유를 대체하는 자동화와 다를 게 없다. 하지만 AI가 하는 일을 조금 다른 각도에서 보면 어떨까. 과묵한 재료의 입을 열어주는 역할이라면?

자연어로 의도를 설명하면 AI가 그것을 코드로 번역하고 그 코드가 어떻게 작동하는지 다시 자연어로 설명해준다. 시스템의 구조를 시각화하고 “이 설계에는 이런 취약점이 있다”고 알려준다. 코드라는 비물질적 재료가 비로소 피드백을 돌려주기 시작한다.

현미경을 떠올려보자. 현미경은 ‘보는 행위’를 대체하지 않았다. 볼 수 없었던 것을 볼 수 있게 만들어 과학자의 사유를 더 깊은 곳으로 밀어 넣었다. AI 역시 코드라는 과묵한 재료에 일종의 촉각을 만들어줄 수 있다. 재료가 더 많은 말을 걸어오기 시작한다.

이런 관점에서 추상화의 역사는 인간이 재료로부터 멀어진 역사가 아니다. 오히려 더 높은 곳에서 재료와 대화할 수 있게 된 역사다. 기계어를 쓰던 시절의 프로그래머가 트랜지스터와 대화했다면 지금의 프로그래머는 비즈니스 로직, 사용자 경험, 시스템 설계라는 훨씬 인간적인 재료와 대화한다.


흔들리는 장인의 조건

오랫동안 소프트웨어 세계에서 장인의 조건은 분명했다.

낮은 레벨로 내려가는 일. 커널을 이해하고, 메모리를 직접 관리하고, 하드웨어에 밀착해서 코드를 쓰는 일. 추상화의 편의를 거부하고 재료 그 자체와 씨름하는 사람이 진짜 개발자라는 믿음. 세넷 역시 리눅스 개발자들을 장인의 모델로 제시했다. 가장 낮은 층위에서 가장 날것의 재료와 대화하는 사람들.

그런데 이 조건이 흔들리고 있다. 수십 년간 자신의 정체성을 낮은 층위의 숙련 위에 세워온 개발자들에게 이것은 단순한 기술 트렌드의 변화가 아니다. 자기 존재의 근거가 흔들리는 일이다. 내가 십수 년간 갈고닦은 이 능력과 감각이 더 이상 장인의 조건이 아니라면 나는 무엇인가.

장인의 방향이 역전되고 있다. 재료에 내려가는 게 아니라 더 높은 추상 위에서 자기만의 구조를 짓는 쪽으로. 세넷의 결론이 아니라 세넷의 프레임을 빌려 도달한 결론이다. 방향은 반대지만 태도는 같다. 주어진 데 안주하지 않고 자기 손으로 다시 짓는다는 점에서.


남의 추상을 거부하는 것

그렇다면 이 시대 소프트웨어 장인이 선택하는 비효율은 무엇인가. 남이 만들어놓은 추상을 그대로 받아들이지 않는 데 있다.

추상화란 복잡한 것을 단순하게 포장하는 행위다. 프레임워크는 수만 줄의 코드를 몇 줄로 압축하고 AI는 자연어 한 문장을 완성된 프로그램으로 변환한다. 굉장히 편리하지만 이 포장 안에는 누군가의 판단이 들어 있다. 무엇을 드러내고 무엇을 감출지, 어떤 구조가 ‘올바른’ 구조인지 등에 대한 선택. 남의 추상을 쓴다는 건 그 판단을 통째로 빌려쓰는 일이다.

효율적인 사람은 이 포장을 그대로 쓴다. 작동하니까. 빠르니까. 장인은 포장을 뜯어본다. 이 프레임워크는 왜 이런 구조를 강제하는가. AI가 생성한 이 설계는 어떤 전제 위에 서 있는가. 그 전제가 내 문제에도 유효한가. 고민은 속도를 느려지게 만들지만 자기 자신의 추상을 더 견고하게 만든다.


우리는 일을 통해 무엇이 되고 싶은가

결국 세넷의 질문은 이것이다. 우리는 일을 통해 무엇이 되고 싶은가.

효율이 답할 수 없는 이 질문 앞에서 비효율을 선택한 사람들의 태도가 하나의 답이 된다. 장인은 결과가 아니라 과정 속에서 자신을 만들어간다. 추상화의 레이어가 아무리 높아져도, 도구가 아무리 똑똑해져도, 이 원칙은 변하지 않는다.

달라지는 건 과정의 형태이지 과정의 가치가 아니다.

나무를 깎든, 코드를 쓰든, AI에게 질문을 던지든 그 안에서 자기 자신을 걸고 사유하는 사람이 장인이다. 그리고 그 사유는 효율의 관점에서 보면 언제나 불필요하게 느리다.

하지만 그 느림이 장인의 길을 걷는 사람들에게는 가장 빠른 길이다.


리처드 세넷, 『장인: 현대문명이 잃어버린 생각하는 손』(The Craftsman, 2008)