'소프트웨어 아키텍트'라는 직업은 없다
몇몇 컴공 교수님들, 특히 소프트웨어 공학 쪽을 하는 교수님 중에 건축 설계에 비유하여 다음과 같은 주장을 하는 사람들이 있다.
코딩은 안 하고 설계만 하는 사람을 "소프트웨어 아키텍트"라고 한다.
대학까지 나온 우리 전공자들은 나중에 소프트웨어 아키텍트가 되어야 한다.
코딩은 노가다 잡부들이나 하는 일이다.
이런 분들은 실제 산업 현장에서 무슨 일이 벌어지고 있는지 전혀 모르는 것 같다. 최고의 전문가들이 코딩에서 손을 놓고 설계만 한다고? 그건 말도 안 되는 소리다.
소프트웨어의 "설계"
공학에서 완벽한 설계란 무엇인가?
설계에 따라 누가 만들어도 동일한 제품이 나온다면 완벽한 설계라고 할 수 있다.
그럼 소프트웨어에서 완벽한 설계도는 무엇인가?
바로 소스 코드다.
그러면... 공사장 인부들처럼 설계로부터 제품을 만드는 건 누가하지? 컴파일러나 인터프리터가 한다.
그렇다. 소프트웨어는 설계로부터 제품을 구현하는 비용이 제로에 가깝고, 거의 항상 동일한 제품을 보장한다.
결론적으로, 모든 프로그래머는 설계자이다.
"소프트웨어 아키텍트" 라는 직업은 없다.
"프로그래머"만 존재할 뿐이다.
그러니까, 코딩은 안 하고 설계만 한다. 그것도 좆같은 UML로 한다.
이런 말은 다 개소리며 헛소리다.
그런 일을 하는 사람은 없다.
있다고 해도 "그분"들이 생각하는 "그런 일"과는 거리가 먼 일을 하는 사람들이다.
아키텍트
이제 흔히들 말하는 "소프트웨어 아키텍트"라는 말을 다시 정의해보자.
대충 크고 아름다운 프로그램을 만들 수 있는 사람을 소프트웨어 아키텍트라고 한다.
어떻게 하면 흔히들 말하는 "소프트웨어 아키텍트"가 될 수 있을까?
그냥 더 큰 프로그램을 만들고 지속적으로 유지보수하면 된다.
건축에서는..
이 글을 쓰기 위해 건축 설계에 대해서 잘 아는 지인에게 물어 봤다.
(그 분은 자기가 직접 설계하여 지은 집에서 현재 아주 만족하며 살고 계신다. 여러분은 본인이 직접 만든 소프트웨어를 일상적으로 사용하면서 만족하며 살 수 있나?)
소프트웨어의 설계에 여러 단계가 있듯 건축의 설계에도 여러 단계가 있다고 한다.
건축은 보통 [기본 설계 -> 실시 설계 -> 시공 설계(필요한 경우)]
단계를 거치며, 뒤로 갈수록 상세하고 바로 집을 지을 수 있는 정도가 된다고 한다.
프로그래밍에서는 기본 설계가 흔히들 말하는 "설계"고 실시 설계, 시공설계는 소스 코드에 해당한다.
그리고 물어 보았다.
"실시 설계에 대해 잘 모르면서 기본 설계를 할 수 있나요?"
대답은 "NO"다.
절대 불가능하단다. 실시 설계도 모르면서 기본 설계를 할 수 있다는 건 말이 안된다고 한다.
그러니까 소위 나 소공 전문가요 하는 분들은 말도 안되는 헛소리를 하면서 꺼드럭대고 있다는 것이다.
결론
아키텍트 비스므리한 머시기가 되고 싶다면, 실시 설계부터 제대로 하고 기본 설계를 논하라.