-
기술적 취향은 기술적 실력과는 별개 개념임
- 소프트웨어 엔지니어의 취향은 프로젝트에 맞는 엔지니어링 가치 선택 능력을 의미함
- 엔지니어마다 가치관이 다르며, 유연성 부족이 나쁜 취향을 불러올 수 있음
- 좋은 취향은 단순한 기술 실력보다 복잡한 맥락에 맞게 가치 우선순위를 조정하는 능력임
- 다양한 경험과 개방적 사고가 소프트웨어 엔지니어링에서 좋은 취향을 기르는 데 도움을 줌
기술적 취향과 실력의 차이
-
기술적 취향은 뛰어난 실력과 반드시 일치하지 않음
- 누구나 요리 실력과 별개로 좋은 음식과 나쁜 음식을 구분할 수 있는 것처럼, 소프트웨어에서도 능력보다 앞서 취향이 형성됨
- 어떤 코드가 "좋아 보이는지" 혹은 "별로인 것처럼 보이는지"에 따라 엔지니어의 취향이 반영됨
- 어떤 설계 결정에 만족을 느끼고, 어떤 문제에 더 신경을 쓰는지는 취향의 일부로 작동함
- 기술적 능력은 반복과 공부로 기를 수 있으나, 좋은 취향은 더 불가사의하게 형성됨
엔지니어링 취향의 지표
- "이 코드가 보기 좋다/나쁘다"라고 느끼는 것
- 일부 설계 결정에 대한 강한 만족감 또는 무덤덤함
- 퇴근 후에도 계속 신경 쓰이는 소프트웨어 문제와 그렇지 않은 문제
실력과 취향의 구분
- "좋아 보이는 코드"가 실제로 더 좋은 코드여야만 할까 의문이 있음
- 예시로 map, filter와 for loop 선호 차이는 엔지니어의 가치관 차이로 설명 가능
- 언어나 컨텍스트에 따라 각각의 장단점이 존재하기 때문에, 어떤 선택이 반드시 더 좋은 것은 아님
- 각 엔지니어가 중요하게 보는 가치가 다르며, 이에 따라 선호가 달라짐
엔지니어링 취향의 정체
- 소프트웨어 엔지니어링의 거의 모든 결정은 트레이드오프임
- 미숙한 엔지니어는 자신의 취향에 지나치게 고집을 부림
-
성숙한 엔지니어는 다양한 관점에서 이점을 파악하고, 현재 상황에 맞는 선택을 중시함
- 중요한 것은 X(기술)와 Y(기술) 중 무엇이 더 좋은가가 아니라, 현재 프로젝트에 X의 장점이 Y보다 더 필요한가의 판단임
엔지니어링 가치의 예시
-
Resiliency: 시스템이 장애나 네트워크 문제에도 잘 동작하는가
-
Speed: 이론적 한계에 가까운 성능을 보이는가, 불필요한 작업이 많은가
-
Readability: 새로운 엔지니어가 빠르게 이해하고 적응할 수 있는가, 함수가 짧고 명확한가
-
Correctness: 잘못된 상태가 모델링되는가, 테스트와 타입, assert 등이 충분한가, 심지어 형식적 검증이 적용되는가
-
Flexibility: 시스템 확장이 쉬운가, 변화가 간단하게 적용되는가
-
Portability: 특정 환경에 종속적인가, 배포 환경 변화가 간단한가
-
Scalability: 10배, 100배 트래픽 증가 시 시스템 확장 또는 자동 스케일링이 가능한가, 병목이 어디에 존재하는가
-
Development speed: 시스템 확장이 얼마나 빠른가, 대부분의 엔지니어가 작업 가능한가
-
그 외에도 elegance, modern-ness, 오픈소스 활용, 유지 비용 등 다양한 가치 존재
-
모든 엔지니어가 각 가치에 같은 수준의 관심을 갖지는 않음
-
본인이 어떤 가치를 가장 높게 평가하는지에 따라 사용하는 언어, 프레임워크, 설계 패턴 등이 달라짐
나쁜 취향의 특징
-
나쁜 취향은 본인이 선호하는 가치가 현재 프로젝트에 적합하지 않을 때 발생함
- 특정 기술, 방법론의 장점을 자신의 프로젝트에 일관되게 밀어붙이는 유연성 부족이 문제임
- 항상 "best practice"만을 내세우는 주장에는 상황 맞춤형 판단 결여가 있음
-
유연성 없는 엔지니어는 특정 프로젝트에서는 잘 맞을 수 있으나, 환경 또는 업무 변화 시 심각한 문제를 야기할 수 있음
좋은 취향의 특성
-
좋은 취향은 문제 상황에 따라 올바른 엔지니어링 가치를 잘 선택하는 능력임
- 단순 기술 능력과 달리, 복잡한 실제 프로젝트 맥락에서만 검증 가능함
- 자신이 동의한 설계 결정이 채택된 프로젝트가 잘 진행되면 본인 취향의 적합성을 가늠할 수 있음
- 다양한 프로젝트 경험, 어느 순간에 새로운 가치에 대한 개방적 태도가 중요한 학습 요소임
-
유연성을 유지하고, 특정 기술이나 방법에 대한 고정관념을 피하는 것이 좋은 취향 형성에 도움을 줌
맺음말
- 좋은 취향은 실력만큼이나 중요하며, 성장 과정에서 다양성과 유연성, 그리고 자기 성찰을 통해 개발 가능함
- 몇몇 사람들은 경험 이상으로 뛰어난 취향을 보이기도 함 (프로그래밍 및 타 분야의 영재 등)