Software Engineering

나쁜 소프트웨어 엔지니어의 특징

habana4 2024. 9. 1. 00:26
반응형

 

자동차 산업은 기술 발전이 매우 빠르게 이루어지는 분야 중 하나로, 특히 제어 소프트웨어의 역할은 날로 중요해지고 있습니다. 차량의 성능, 안전성, 효율성을 좌우하는 중요한 요소가 바로 이 제어 소프트웨어에 달려 있기 때문에, 소프트웨어 엔지니어들의 역량은 그 어떤 분야보다도 중요한 역할을 합니다. 그러나 모든 소프트웨어 엔지니어가 동일한 가치를 발휘하는 것은 아닙니다. 오늘은 제가 자동차 제어 소프트웨어 개발 분야에서 경험한, 소위 ‘나쁜’ 소프트웨어 엔지니어의 특징에 대해 이야기해보겠습니다.

 

지나치게 논쟁적인 태도

자동차 제어 소프트웨어 개발에서는 다양한 팀 간의 협업이 필수적입니다. 특히, 엔진 제어 유닛(ECU)나 차량의 안전 시스템을 다룰 때는 수많은 기술적인 결정이 필요하며, 이러한 과정에서 팀 간의 의견 차이는 자연스러운 일입니다. 그러나 여기서 중요한 것은, 그 의견 차이가 어떻게 처리되는가입니다.

제가 함께 일했던 한 엔지니어는 자신의 의견을 지나치게 고집하며 기술 리드와 끊임없이 논쟁을 벌였습니다. 문제는 단순히 논쟁을 벌인다는 사실이 아니라, 그 논쟁이 비생산적인 방향으로 흘러간다는 데 있었습니다. 그는 자신의 경력을 근거로 논리를 전개했으며, 타당한 기술적 근거보다는 자신의 경험을 앞세워 상대방의 의견을 무시하곤 했습니다. 이로 인해 팀 내의 협업 분위기가 크게 저하되었으며, 그가 맡은 작업의 품질 역시 낮아지는 결과를 초래했습니다.

결국 소프트웨어 개발에 있어 업은 기술적인 논쟁이 아닌, 합리적인 토론과 문제 해결을 중심으로 이루어져야 합니다. 고집스럽고 논쟁적인 태도는 팀의 생산성을 저하시킬 뿐만 아니라, 최종 제품의 품질에도 부정적인 영향을 미칩니다.

 

새로운 기술 스택을 습득하지 못하는 능력 부족 또는 의지 부족

최근 자동차 제어 소프트웨어는 전통적 제어 알고리즘을 비롯하여, 인공지능 기반의 자율주행, 사이버보안, 그리고 기능안전 등 매우 복잡한 기술 스택을 필요로 합니다. 하드웨어와 소프트웨어가 긴밀하게 연동되어야 하며, 실시간으로 차량의 상태를 모니터링하고 제어해야 하기 때문에 소프트웨어 엔지니어는 새로운 기술과 도구를 빠르게 습득하는 능력이 필수적입니다.

제가 겪은 또 다른 문제는 새로운 기술 스택을 익히지 못한 엔지니어들이었습니다. 이들은 중급 및 고급 엔지니어로 채용되었음에도 불구하고, 우리 팀이 사용하는 기술 스택을 이해하는 데 큰 어려움을 겪었습니다. 특히 시니어 엔지니어들은 새로운 기술 스택을 익히지 못하는 것이 아니라, 아예 의지 자체가 부족한 경우를 많이 보았습니다. 그러다 보니 기본적인 기능 구현조차도 오랜 시간이 걸렸고, 결국에는 주니어 엔지니어들보다도 성과가 저조했습니다. 저는 그들을 돕기 위해 많은 시간을 할애했지만, 동일한 질문을 반복적으로 받게 되었습니다. 그들은 끝내 독립적으로 작업을 완료하지 못했고, 결국 팀에서 방출되었습니다. 이와 같은 상황은 자동차 제어 소프트웨어 개발 분야에서 특히 심각합니다. 차량의 소프트웨어는 지속적으로 변화하는 환경에 대응해야 하며, 새로운 기술과 방법론을 신속하게 습득하지 못하는 엔지니어는 프로젝트의 병목을 초래할 수 있습니다.

 

건설적인 비판을 받아들이지 못함

자동차 제어 소프트웨어 개발에서는 코드의 효율성과 최적화가 매우 중요합니다. 하드웨어의 한계와 실시간 제어 요구사항을 만족시키기 위해, 코드의 품질은 반드시 높아야 하며, 이를 위해 팀원 간의 코드 리뷰와 피드백은 필수적입니다. 하지만, 제가 경험한 한 주니어 엔지니어는 이 과정에서 큰 문제를 보였습니다. 그는 기술 리드로부터 코드의 효율성을 높이기 위해 리팩토링을 제안받았지만, 이를 받아들이지 않았습니다. 오히려 그는 자신의 코드가 수정되어야 한다는 점에 대해 강하게 반발했고, 심지어 프로젝트 관리자와 경영층까지 이 문제에 개입하게 되었습니다. 결국 그는 팀에서 떠나게 되었지만, 그가 남긴 문제는 팀의 사기를 떨어뜨리고 프로젝트 일정에 차질을 빚게 했습니다.

자동차 제어 소프트웨어 개발에서는 코드의 품질이 차량의 안전성과 직결되기 때문에, 건설적인 비판을 받아들이고 지속적으로 개선하는 태도가 필수적입니다. 비판을 수용하지 못하는 엔지니어는 개인의 성장을 저해할 뿐만 아니라, 팀 전체의 성과에도 부정적인 영향을 미칩니다.

 

기술적 능력보다 중요한 협업과 커뮤니케이션

자동차 제어 소프트웨어 개바에서 중요한 점은 협업과 커뮤니케이션 능력입니다. 고도의 기술력을 가지고 있더라도, 팀과의 원활한 협력이 이루어지지 않는다면 그 능력은 무의미해질 수 있습니다. 한 동료가 저에게 “유능하지만 함께 일하기 어려운 사람과 무능하지만 함께 일하기 쉬운 사람 중 누구와 일하고 싶은가?“라는 질문을 한 적이 있습니다. 저는 주저 없이 후자를 선택했습니다. 이유는 간단합니다. 함께 일하기 쉬운 사람과는 하루하루의 업무가 즐겁고, 무엇보다도 그들은 가르침을 통해 성장할 수 있는 잠재력이 있기 때문입니다.

자동차 제어 소프트웨어 개발에서는 팀워크가 핵심입니다. 개별 엔지니어의 기술적 역량도 중요하지만, 그보다 더 중요한 것은 팀 내에서 조화롭게 일할 수 있는 능력입니다. 어려운 사람과는 프로젝트가 지연될 수밖에 없으며, 최종적으로는 제품의 품질에도 악영향을 미칠 수 있습니다.

나쁜 소프트웨어 엔지니어란?

결국, 제가 생각하는 나쁜 소프트웨어 엔지니어란 “도움이 되지 않는 사람”입니다. 기술적으로 미숙할지라도, 가르침을 통해 성장할 수 있는 가능성이 있는 사람은 좋은 엔지니어가 될 수 있습니다. 그러나 팀워크를 저해하고, 건설적인 피드백을 받아들이지 않으며, 기술 스택을 습득하지 못하는 엔지니어는 결국 팀의 생산성과 제품의 품질에 부정적인 영향을 미치게 됩니다. 따라서 엔지니어로서의 역량뿐만 아니라, 팀 내에서 원활하게 협력할 수 있는 능력이 무엇보다 중요합니다. 우리는 모두 끊임없이 배우고, 성장하며, 팀과 함께 나아가야 합니다. 나쁜 엔지니어가 되지 않기 위해서는, 자신을 돌아보고, 팀의 일원으로서 어떻게 기여할 수 있을지 끊임없이 고민해야 할 것입니다.

반응형