자세히 보기

Peter Wayner
Contributing Writer

개발자 언어 따라잡기··· ‘모욕 표현’ 22가지

정장 차림의 관리자는 속 마음을 감춘 채 미소를 띤 얼굴로 "아주 잘하고 있어요. 정말 잘하고 있어요"라고 말할지 모르겠다.

하지만 가끔은 이런 모욕적인 표현은 전달력이 강하다. 일부 ‘모욕(냉담한 반응)’은 코딩과 관련된 실수의 정곡을 찌르며, 이런 ‘좋은’ 모욕적인 표현에는 프로젝트를 발전시킬 수 있는 핵심이 들어있다. 코드의 완성도를 높이 수 있다면 당신의 코드에 대해 ‘무겁다(Heavy)’, ‘너무 지저분하다(Cruffy)’, ‘패턴에 어긋난 경우(Anti-pattern)’가 너무 많다고 모욕적으로 표현하는 것을 감수할 가치가 있다.

모욕적인 표현은 소통 메커니즘 때문에 발생하는 경우도 있다. 일례로 리누스 토발즈는 이메일에 대해 포착하기 힘든 신호(눈으로 교환하는 신호 등)가 숨겨져 있는 때가 많은, 결함 있는 메커니즘이라고 주장했다. 토발즈는 “이메일을 통해서는 사람을 읽기가 정말 힘들다. 나는 사람들이 이메일을 이용할 때 더 솔직하고, 더 개방적인 표현을 사용해야 한다고 생각한다”라고 말했다.

그는 이어 자신이 ‘저주의 문화’를 가지고 있다며, 경각심을 위해 ‘막말’을 하는 경향성이 있다고 인정했다. 그가 바이킹 전사들의 고향인 스칸디나비아 반도 출신이기 때문인지도 모를 일이다.

하여튼 개발자들의 세계에서는 ‘포악한 표현’이 횡행하는 경향이 있으며, 어쨌건 이는 극복해야 할 대상이다. 개발자가 듣고 싶어하지 않지만, 종종 듣게 되는 모욕적인 표현 중 일부를 소개한다. 개발자가 다른 이를 비판할 때 이용하는 표현들이기도 하다.

“코드가 컴파일 되지 않아”(Code doesn’t compile)
‘독’이 숨겨져 있는 표현이다. 어쨌든 개발자의 장치에서는 아무 문제 없이 실행되지만, 다른 사람들의 장치에서는 문제가 발생하는 코드임을 알리는 표현이다. 코드를 실행시키고 싶은 장소에서 시도를 해봤지만 무용지물이었음을 강조하는 것이다.

설치한 라이브러리가 올바르지 않아 이런 문제가 발생할 수 있다. 컴파일러 버전이 다른 것이 이유일 수도 있다. 최적화 도구(Optimizer)의 스위치 세트가 달라서 이런 문제가 발생할 가능성도 있다. 진짜 이유가 뭐든, 이를 아는 사람도 신경 쓰는 사람도 없다. 이렇게 말하는 이가 정작 전하고자 하는 바는 “당신은 프로그래밍을 배울 때 세미콜론 위치에 대한 설명조차 제대로 듣지 못한 것 아닌가?”라는 비난이다.

“무겁다”(Heavy)
코딩과 ‘스토너 록(Stoner Rock)’ 장르가 차별화되는 지점이다. 무슨 이유에서인지, 프로그래밍에서는 ‘가볍다(light)’와 ‘무겁다’라는 표현이 각각 칭찬과 모욕이 됐다. 기타 솔로에 너무 많은 음조를 배치한 것과 비슷한 표현일 수 있겠다.

한편 ‘기능과 특징이 풍부(Feature rick)하다는 것은 칭찬, ‘기능과 특징이 부실(Missing features)’하다는 모욕이다. 그런데 코드를 추가하고 스택을 첨가해야, 즉 무겁게 만들어야 기능과 특징이 풍부해진다. 알아서 걸러 들을 일이다.

“슈트”(Suit)
프로그래밍 세계에서는 말끔한 옷 차림이란 ‘권력’이나 ‘지위’와 그리 관련성이 없다. 컴퓨터를 전혀 모르면서 프로젝트에 끼어들어 관리하는 개념 없는 멍청이만 정장을 입기 때문이다.

일반적으로 소프트웨어를 개발하는 사람들은 훨씬 편안한 복장을 입는다. 기모노와 퀼트 치마를 섞어 놓은 듯한 복장에서 편안함을 느낀다. 젊은 프로그래머라면 헤진 프린트 면 티나 후드를 입을 것이다.

리누스 토발즈는 과거 “누가 내게 전문가처럼 행동하라고 말하면 ‘관심 없다’고 대답한다. 나는 평상복 차림으로 홈 오피스에서 일을 한다. 나는 넥타이를 착용하지 않는다. 아울러 가짜 정중함, 거짓말, 사무실 정치, ‘뒷통수 치기’, ‘수동적인 공격성’도 싫어한다”라고 말한 바 있다.

“안티패턴 투성이” (Full of antipatterns)
‘나쁜 전략’, ‘어리석은 아이디어’, ‘조잡한 생각’이라고 표현할 수 있겠다. 그러나 프로그래머는 권장되지 않는 코드를 만드는 것을 ‘안티패턴(Antipattern)’이라고 표현하는 때가 많다. 사실 코드가 나쁘다고 말하는 것보다 코드에 안티패턴이 가득하다고 말하는 것이 더 공격적이다. 당신의 프로그래밍이 ‘부도덕’적이라고 말하는 뉘앙스이기 때문이다.

“팬보이”(Fanboi)
PC가 세상을 지배하고, 애플이 파산 직전이었던 시기가 있었다. 이때에도 몇몇 충성스러운 사용자들은 계속해서 애플을 찬양하고, 애플 제품의 정교함과 아름다움이 세상을 빛낼 날이 다시 도래할 것이라고 주장했었다. 그리고 PC 지지자들은 이를 ‘팬보이’라고 비꼬았다.

애플은 다시 부활했지만 ‘팬보이’라는 표현은 여전히 칭찬이 아니다. ‘Perl’이나 ‘.Net’ 등 괴상한 원칙이나 아이디어에 집착해 현실을 무시하는 사람들을 일컫는 표현이다.

“느리다”(Slow)
컴퓨터는 빠르다. 속도를 컴퓨터의 토대라고 말할 수도 있다. 무어의 법칙이 탄생하고 몇 십 년이 지난 지금도 모든 사람들은 컴퓨터가 계속 빨라지고 있다고 생각한다.

하지만 슬프게도, 프로그래머는 뭔가를 빨리 전달하지 못할 때가 있다. 하드웨어 디자이너들이 자신의 몫을 충분히 해냈다고 자부한다. 그러면서 더 빨라진 칩의 생명을 빨아먹는 것은 무겁고 비효율적인 코드를 생산하는 소프트웨어 팀이라고 주장한다.

요리에서는 ‘느림’이 더 훌륭한 결과를 위한 미덕일 수 있겠지만 코드 측면에서 느리다는 표현은 ‘실력 있다’의 반대말이다.

“뉴비”(N00b)
신입 사원만큼 무지한 사람이 있을까? 예를 들어, 문자를 끊어 ‘N00b’를 발음할 수도 있다. 참고로, 오픈소스에 무지한 사람을 가리키는 ‘Gnubie’라는 표현도 있다.

“리소스”(Resource)
호불호를 떠나 모든 부서가 ‘사람’에 대해 경제 용어인 ‘자원’이라는 단어를 사용하고 있다. 그리고 ‘자원’이 될 수 있음을 보여줘야 취업할 수 있다.

그러나 프로그래머가 당신을 ‘자원’이라고 부르면 레고 블록의 하나, 기계 부품의 하나로 판단하고 있는 것이다. 코드를 뱉어내는 자동 호출 또는 기능 호출 도구다.

“지저분하다”(Cruffy)
“지저분한(Cruffy)”이란 무슨 의미일까? 대충 버무린, 그래서 때론 다른 프로젝트의 ‘잔해’까지 남겨진 디자인을 의미한다. 미래에 대한 예측이나 정보 없이 조잡하게 기워 맞춘 덩어리라는 말이며, 무용지물이나 다름 없는 조잡한 ‘프랑켄슈타인’을 일컫는다.

만약 ‘지저분한’이라는 말을 들었다면, 이런 의미로 받아들이면 된다. 그런데 코드에만 해당되는 말이 아닐 수도 있다. 당신 자신, 그리고 당신의 생각을 가리키는 표현일 수 있다.

“/dev/null”
유닉스 환경에서 ‘null’ 장치는 전송 받은 모든 정보를 잊는 블랙홀이다. 장치 드라이버와 데이터를 처리하는 다른 코드를 테스트 할 때 많이 사용한다. 은유적인 의미는 뭘까? 당신이 쓴 메모는 디스크에 저장하거나, 프린터에서 인쇄할 가치가 없다는 의미다.

“클러지”(Kluge, 뒤엉킨 또는 설계가 나쁜)
주말 동안 ‘곁가지’ 프로젝트를 진행했는데, 이를 세련되게 만들 시간이 부족했다. 그런데 다른 개발자 2,000여 명이 이를 이용하고 있다는 사실을 발견했다. 이런 상황에서 들을 수 있는 표현이 “클러지”다. 세련되지 못한 ‘임시 방편’ 격인 솔루션이 여기에 해당된다. 허점이 많은 결과물이다. 당장 가용한 것들을 덕지 덕지 연결해 즉석에서 만들어낸 것이다. 기껏해야 일시적으로 효과가 있는 픽스로 간주될 것이다.

“비트로트”(Bitrot)
운영 체제와 라이브러리, 기타 시스템이 업데이트 되면, 코드에 문제가 발생하기 시작한다. 버전이 새로워지면서 기능과 특징이 증가한다. 또 다른 파라미터를 적용하고, 때론 가정이 달라진다. 다른 경우도 있다. 프로그래머가 코드의 버그를 수정했다. 기존 코드가 완전히 실패하지는 않는다. 최소한 처음에는 그렇다. 그러나 OS나 라이브러리 호출 실패가 증가하면서 문제가 커지기 시작한다. 자신이 갖고 있는 지식을 새롭게 보강하고, 코드를 개선하지 않으면 오래된 생선처럼 썩기 시작한다. 그리고 사람들은 이를 가혹하게 지적하는 표현이 ‘비트로트’다.

“우둔 입자”(Bogon)
전기는 전자 스트림(Stream of electron)을 따라 이동한다. 빛은 광자를 매개체로 이동한다. 우둔함은 어떨까? ‘우둔함(bogon)’이라는 입자가 ‘우둔한(bogus)’ 행동과 전반적인 ‘우둔함’의 원인인 것은 아닐까? 이런 생각에서 등장한 비하어다. 손가락 끝이나 키보드를 통해 방출되는 ‘우둔함 입자’를 일컫는다. 반대말은 ‘Cluon’이다.

“보조 비트”(Bozo bit)
애플은 초창기에 애플리케이션 파일 헤더에 비트를 추가하는 방법으로 소프트웨어를 복사하지 못하도록 만들려 시도했다. 이런 설정이 되어있는 경우, 운영 체제가 파일 복사를 거부한다. 모든 사람들이 헤더를 편집, 비트를 무력화시키는 방법을 파악하기 전까지 효과가 있었다.

오늘날 애플과 비교되는 것은 누구나 좋아할 것이다. 그러나 새 아키텍처나 기능에 ‘보조 비트’라는 표현이 붙는 것을 좋아할 사람은 없다.

“깨지기 쉬운”(Brittle)
깨지기 쉽고, 필수 복원 기능이 없는 코드를 말한다. 즉 당신이 노동한 결과가 그렇다는 이야기다. 예를 들자면 이렇다. 코드가 성공적으로 컴파일 되고 모든 단위 테스트를 통과한다면 자축할 것이다. 그런데 누군가 인풋을 바꾸거나, 0으로 나누는 것을 포기했다. 그래서 코드가 충돌한다. 결국 코드 개발은 첫 테스트에서 기능하도록 만드는 것 이상이라는 교훈을 터득하게 될 것이다.

“카고 컬트(Cargo cult) 프로그래머”
리차드 파인먼(Richard Feynman)의 유명 우화에 뿌리를 두고 있는 ‘모욕’적인 표현이다. 끈으로 통나무를 묶어 비행기를 닮은 물체를 만들려 했던 고대 부족에 대한 이야기가 담긴 우화다.

비행기를 닮은 물체를 만들려 한 이유가 뭘까? 하늘에서 방문자들이 날개 달린 기묘한 물체를 타고 값진 물건이 가득한 화물과 함께 자신들을 방문했었기 때문이다. 이에 이와 닮은 물건을 만들면 동일한 일이 일어날 것이라고 생각한 것이다.

소프트웨어 분야에서는 얕은 지식으로 문제를 파악해 시스템을 구축하는 프로그래머를 ‘카고 컬트 프로그래머’라고 부른다.

“아이 캔디”(Eye Candy)
단순 명료한 텍스트로 답을 전달하는 명령줄 코드를 쓰는 사람들이 있다. 반면 춤을 추는 코드, 번쩍이는 버튼, 눈을 사로잡는 색상을 가진 화려한 사용자 인터페이스를 구현하는 사람들도 있다. 때론 비디오나 아름다운 모델을 집어넣기도 한다. 숨은 의도가 뭘까? 상사가 코드를 보는 것이 아니기 때문이다. ‘아이 캔디’는 그럴듯한 외면으로 텅 빈 내면을 감춘다는 의미다.

“해키시”(Hackish)
‘해크(Hack)”는 긍정적인 의미, 부정적인 의미 등 다양한 의미를 갖고 있다. ‘해키시’ 또한 마찬가지이다. 이를 이용해 정말 ‘수완 있는’ 해커조차 인정하는 ‘영리한 책략’을 표현하는 의미일 때가 있다. 반면 진짜 ‘해크’가 되기에는 불충분한 ‘편법’에 머무는 때도 있다.

“맹글러”(Mangler, 난도질 하는 사람)
코드를 ‘맹글(난도질)’한다는 의미는 뭘까? 이는 ‘매니저’라는 용어 대신 사용되는 표현이기도 하다. ‘프로젝트 맹글러’, ‘디비전 맹글러’는 일반 직원들이 관료 체계를 어떻게 생각하는지 보여준다.

물론 매니저들 또한 지나치게 큰 약속을 하고, 이에 크게 못 미치는 결과를 제시하는 사람들에게 붙이는 용어를 갖고 있다. ‘프로그래머’라는 용어다.

“No-op”
아무 일도 하지 않는 사람을 ‘No-op’이라고 부른다. 아무 것도 변경하지 않은 채 CPU를 통과하는 텅 빈 바이너리 명령에 빗댄 표현이다. No-ops는 명령을 보강하고, 디버깅을 돕는다. 일부 프로세서가 16진법 표현으로 No-op 코드를 사용한다.

“랜덤니스”(Randomness)
우수한 알고리즘 가운데 완벽하게 연속된 무작위 수를 이용하는 것들이 있다. 그러나 이는 극히 일부이며 대부분은 그렇게 하지 않는다. ‘랜덤니스’는 ‘혼란이 또 다른 혼란을 초래하는’ 코드에 붙여지는 표현이다. 반대말로는 ‘Knowledgeable’이 있다.

[어떤 말도 하지 않는 것]
모욕보다 더 나쁠 수 있는 것은 ‘무시’다. dl-ciokorea@foundryco.com

Peter Wayner

Peter Wayner is a contributing writer to InfoWorld. He has written extensively about programming languages (including Java, JavaScript, SQL, WebAssembly, and experimental languages), databases (SQL and NoSQL), cloud computing, cloud-native computing, artificial intelligence, open-source software, prompt engineering, programming habits (both good and bad), and countless other topics of keen interest to software developers. Peter also has written for mainstream publications including The New York Times and Wired, and he is the author of more than 20 books, mainly on technology. His work on mimic functions, a camouflaging technique for encoding data so that it takes on the statistical characteristics of other information (an example of steganography), was the basis of his book, Disappearing Cryptography. Peter’s book Free for All covered the cultural, legal, political, and technical roots of the open-source movement. His book Translucent Databases offered practical techniques for scrambling data so that it is inscrutable but still available to make important decisions. This included some of the first homomorphic encryption. In his book Digital Cash, Peter illustrates how techniques like a blockchain can be used establish an efficient digital economy. And in Policing Online Games, Peter lays out the philosophical and mathematical foundations for building a strong, safe, and cheater-free virtual world.

이 저자의 추가 콘텐츠