공학(工學)
공학(工學, engineering)이란 무엇인가? 공학은 ‘기술적 문제’를 대상으로 하는 학문으로 ‘문제를 발견하고 이에 대한 기술적 해결책을 제시하는 학문’이라고 정의할 수 있다. 여기서 문제란 작게는 자동차 부품일 수도 있고, 크게는 교통 체증 문제나 전 지구적인 기후 변화 문제까지 다양하다. 즉 공학은 인간의 삶의 질을 향상시키기 위하여 과학적 지식과 기술을 이용하여 인간에게 유용한 제품을 만드는 학문이다.
[네이버 지식백과 ― 공학의 개념]
책을 쓰고 개발을 하면서 종종 드는 생각이 있다면, 나는 개발자인가? 엔지니어인가? 이다. 개발자를 지칭하는 표현으로는 개발자, 엔지니어, 프로그래머, 그리고 코더가 있는데, 여기서 개발자와 엔지니어는 본질적으로 무엇이 다른가에 대한 고민해본 결과, 결론부터 이야기하자면 나는 엔지니어보다는 개발자에 가깝다고 판단했다.
개발자와 엔지니어를 나누는 기준은 명확하게 없기도 하고, 요즘에는 채용공고에서도 '개발자' 라는 명칭을 보편적으로 사용하고 있기도 하니까 그냥 내가 머릿속에서 생각하고 분류한 개발자와 엔지니어에 대해 이야기해보고자 한다. 이 글은 오직 내 주관을 이야기하고 있는 것이기 때문에 용어에 대한 쓸 때 없는 논쟁은 할 생각이 없으니 공감이 되지 않는다면 그냥 넘겨도 좋다.
기술과 창조
공학의 정의에도 나와있듯이 공학은 두 가지, 하나는 기술적 해결책 제시, 그리고 나머지 하나는 제품을 만드는 것에 있다. 저 위로 올라가면 기술적 해결책을 제시하여 제품을 만드는 일이므로 결론적으로는 엔지니어든 개발자든 큰 차이가 없어보이겠지만, 바닥에서 생각해보았을 때 나는 이 두 가지 관점에서 개발자와 엔지니어를 나누는 분명한 기준점이 된다고 생각한다. 해결책을 제시하는 사람과 그 기술로 제품을 만드는 사람은 다르다고 생각하기 때문이다. 이전에 내가 개발자의 길에 대해 고민하면서 쓴 개발자를 하기 전에 고민했다면 좋았을 것들에는 다음과 같은 제목이 있다.
기술 자체에 흥미가 있는가?
현실세계에 존재하는 문제를 해결하고 해결책을 제시하는 것이 재미있는가?
이 때는 구분하지 않고 뭉퉁그려 생각했지만, 사실 이 질문은 지금 생각해보면 개발자보다는 엔지니어의 관점에서 고민한 것이라는 느낌이 든다. 같은 공학자일지라도 엔지니어는 기술에 대한 관심과 연마에, 개발자는 기술을 도구삼아 새로운 것을 창조하는 일에 더 많은 관심을 두고 있어서 그 비중에 따라 나뉘는 것이다. 이를테면 새로운 언어를 배울 때 언어의 기능이나 설계방식, 퍼포먼스와 같은 기술적인 측면도 나름 눈여겨 볼 요소지만 그 자체에 집중하기보다는 어떤 제품을 만들 때 이 언어를 사용하면 어떤 점이 좋은지에 관심이 있는 것이다.
스티브 잡스와 스티브 워즈니악
애플 컴퓨터의 창업자인 스티브 잡스와 스티브 워즈니악은 전자공학과 회로설계에 관심이 있었지만 개발자 성향이 짙은 잡스는 창조에, 엔지니어에 가까운 워즈니악은 기술 쪽에 조금더 관심이 있어서 워즈니악은 기술자 및 연구자가 되었고, 잡스는 사업가가 되었다.
개발자와 엔지니어는 집중 대상이 정말 다르다. 2021년 회고―, 성찰과 같은 과거의 글에서 그랬듯이, 나는 여태껏 기술 그 자체나 문제를 해결하는 것에는 그다지 관심이 없어서 '찐' 개발자는 될 수 없나 보다 생각했는데, 정확히는 '찐' 엔지니어가 될 수 없는 것이었고 개발자는 될 수 있는 것이었다. 내가 개발자로서 중시하는 것은 기술보다는 기술을 도구로 써먹어서 유용한 서비스나 제품을 만드는 것이니까. 설령 기술을 연마한다고 해도 무언가를 만들기 위해 필요하니까 익히는 것이지 그 기술 자체에 관심이 있어서 익히는 일은 이전에는 가끔 있었지만 최근에는 그다지 없는 편이다.
작곡가와 피아니스트
엔지니어가 아닌 개발자일지라도 제품을 만들기 위해서는 기술적인 부분을 알아야 하는데, 이는 내가 취미로 음악을 수년간 하면서 느낀 작곡가와 피아니스트라는 두 직업으로 비유해볼 수 있을 것 같다. 두 직업은 음악가라는 하나의 큰 카테고리에 속하지만 하는 일은 분명히 다르다. 피아니스트는 피아노에 대한 기교, 감성, 표현에 중점을 두면서 수백 수천번도 더 반복하며 피아노를 연마하지만, 반면 작곡가는 연주보다는 창조하는 일에 더 관심을 두고 있어서 연주자보다는 악기를 잘 다루지는 못하지만, 연주와는 다른 관점에서 음악을 바라볼 수 있는 시각을 가지고 있다.
많은 이들이 연주자와 작곡가의 역할에 대해서는 명확하게 구분하지만, 공학자라는 카테고리에 속한 엔지니어와 개발자의 경계는 이 시대 들어서 너무나도 모호해진 탓에 혼란만 가중되고 있는 실정이다. 그 모호함이 나를 방황하게 만든 원인이 되었고 개발에 입문하고 10년이 되어서야 조금 이해할 수 있는 수준이 되었다고 볼 수 있다.
개발자와 엔지니어란 작곡가와 피아니스트같은 관계가 아닐까 싶다. 나도 기술을 사용하고 응용할 수 있지만, 기술을 연마하는 일에는 관심이 별로 없다. 신기술이 나와도 잠깐은 관심이 있지만, 대체로 시큰둥하다. 하지만, 그 신기술로 만들어진 무언가가 세상에 영향을 끼치는 일이 발생했을 경우에는 태도가 달라진다. 비트코인이 비록 화폐로서 사용되지는 못했지만, 처음 나왔을 때 블록체인 기술 그 자체보다는 비트코인으로 인해 나타난 암호화폐 생태계와 자본시장의 변화는 내게는 꽤나 흥미롭게 다가오는 주제 중 하나였으니까 말이다.
기업은 개발자가 아닌, 엔지니어를 원한다
최근 많은 기업들이 코딩 테스트를 하는데, 코딩 테스트의 주제는 대체로 알고리즘이다. 간단히 이야기하면 알고리즘은 어떤 문제를 해결하기 위한 것이다. 그리고 내 경험상 면접에서도 어떤 상황이 발생하면 이에 대한 해결방안과 접근법을 물어보는 것이 많았지 정작 "무엇을 만들고 싶어서 개발자가 되었습니까?" 라는 질문을 받아본 적이 단언컨대 단 한 번도 없었다. 생각해보면 기업들은 통상적으로 개발자라는 이름을 달고 채용공고를 내고 있지만, 사실은 개발자가 아니라 엔지니어를 원하는 것이다. 기술적 문제가 발생했을 때 해결책을 제시할 수 있는 엔지니어를 원하고 있다.
하지만 나는 엔지니어의 그것과는 사뭇 거리가 멀다. 대외 활동을 하다 보면 "개발자가 되고 싶은데 어떤 걸 하면 좋을까요?" 라는 질문이 들어오곤 하는데, 그에 대한 대답으로 넌지시 "무엇을 만들고 싶어요?" 와 같은 질문을 던지곤 한다. 이러한 관점은 엔지니어보다는 제품을 창조하는 개발자의 관점에서 바라보고 상대방에게 질문한 것이기 때문에 일반적으로 개발자라고 하면 엔지니어를 떠올리는 사람들에게는 다소 당황스럽게 다가가는 모양이다.
나는 분명 '무엇을 만들고 싶냐' 고 질문했는데, 돌아오는 대답은 프론트엔드/백엔드와 같은 역할에 대한 것이기 때문이다. 개발자를 하고자 하는 학생 중에 뭔가를 만들고 싶어서 개발자를 하고 싶어 하는 친구는 그다지 많이 만나보지 못했다. 그저 "저는 프론트엔드/백엔드 개발자가 되고 싶어요" 이지 "뭔가를 만들고 싶어서 개발자가 되고 싶어요" 라는 대답은 거의 없었다. "그러니까 프론트엔드/백엔드 개발자가 돼서 뭘 만들고 싶어?" 라고 다시 물어보고 싶을 정도다.
개발자를 하려면 꼭 뭔가를 만들고 싶은게 있어야 하는거야?
가만 생각해보면 지금처럼 코딩 교육이 활발하지 않던 과거에 개발을 생전 접하지 않은 초등학생이나 중학생이 개발을 접하게 되는 계기는 그것이 해킹툴이든, 게임 핵이나 매크로가 되었든지간에 그저 뭔가를 만들어보면 재밌지 않을까 싶은 내적동기에 의해 발생하는 경우가 많았던 것 같다. 어쩌면 이러한 접근은 우리가 어릴 때 가지고 있던 동심과 같을 수도 있다. 나이를 먹으면서 현실을 마주하고 생계문제가 겹치다보니 뭔가를 만들어봐야겠다는 개발의 본질에 가까운 내적동기가 점차 사라지는 것이다.
난 그 마음가짐을 치우고싶은 마음은 없다. 여전히 내가 가진 기술로 어떤 서비스나 제품을 만들 수 있을지를 고민한다. 기술을 더 연마하고 숙달해서 더 좋고, 큰 연봉을 주는 기업에 취직해야겠다는 생각은 딱히 없다. 결국 그것도 그저 남의 작품을 위해 내가 대신 일하는 것에 불과하니까 말이다. 대기업에 들어갈 작정이었으면 그에 맞는 전략으로 스프링(Spring)을 하고 코딩테스트를 연습하지 잘 쓰이지도 않는 라라벨(Laravel)을 건드리지는 않았을 것이고 더군다나 한국 개발시장에서 자리가 더 없는 Go 언어에 관심을 가질 일도 없었을 것이다.
기업의 입장에서 나는 그렇게 환영받을만한 인재는 아니다. 일단 기술스택부터 한국 개발시장에서 추구하는 것과는 거리가 상당히 멀고, 엔지니어에 비해 엔지니어링 능력은 그다지 좋지 않은 편이니까. 하지만 작게나마 서비스를 만들어서 사회에 기여하거나 수익을 창출하는 일은 분명 가능하지 않을까? 엔지니어보다는 개발자에 가까운 나로서는 그게 더 근사한 일로 다가온다.