상위 1% 개발자의 7가지 습관

상위 1% 소프트웨어 엔지니어의 습관을 참고해서 팀을 이끌어보세요!
Hyuncheol gong's avatar
May 20, 2024
상위 1% 개발자의 7가지 습관
개발자들 사이에서 일반적인 착각 중 하나는 자신이 단순히 코드를 작성하는 존재라고 여기는 것입니다. 그러나 실제로 최고의 소프트웨어 엔지니어(개발자)들은 자신을 단순한 코더가 아닌 문제 해결자로 생각합니다. 이들은 코드를 목적 달성의 수단으로 활용하며, 사용자를 위한 솔루션 설계에 집중합니다. 좋은 코드는 단순히 기능하는 것을 넘어서, 사용자와 다른 개발자 모두가 이해할 수 있어야 합니다.
이번 콘텐츠는 2023년 9월 Engineers Codex에 올라온 "상위 1% 개발자의 7가지 습관"를 참고하여 작성하였습니다. 여기서는 엔지니어가 되기 위해 필요한 핵심 습관들을 설명하며, 코딩이 단순한 기술 작업을 넘어서 창의적이고 전략적인 활동임을 강조합니다. 예를 들어, 코드를 작성할 때는 명확한 문제 인식이 필요하며, 이를 통해 개발자는 창의적인 솔루션을 모색할 수 있는 자유를 갖게 됩니다. 이렇게 해서 생성된 코드는 결국 인간을 위한 것이며, 그 중에서도 특히 직접적으로 그 코드와 상호 작용하는 사람들을 위한 것입니다.
아래 7가지 습관을 통해 상위 1% 소프트웨어 엔지니어로 거듭날 수 있습니다!

Detach from the code itself

상위 1%의 개발자들이 공통적으로 보이는 중요한 습관 중 하나는 코드에 대한 집착을 버리는 것입니다. 이들은 코드를 단순한 텍스트가 아닌, 개선과 변경이 가능한 도구로 간주합니다. 결과적으로 이들은 개선의 가능성을 보았을 때 자신의 코드를 과감히 재작성할 준비가 되어 있으며, 이는 종종 프로젝트에 긍정적인 영향을 미칩니다.
특히, 뛰어난 엔지니어들은 코드 작성을 개인적인 작업으로 여기지 않습니다. 그들에게 코드는 팀이나 사용자에게 가치를 제공하는 수단에 불과하며, 이러한 관점은 그들이 피드백을 적극적으로 수용하고, 필요에 따라 코드를 변경하거나 삭제하는 데 도움을 줍니다. 이는 코드의 완성도보다는 그 코드가 어떤 변화를 가져오는지에 더 큰 관심을 가지게 만듭니다.
이런 태도를 개발하기 위한 방법 중 하나는 장기적인 관점을 가지는 것입니다. 20년 후 대부분의 코드는 기술적 부채가 되거나 더 이상 사용되지 않거나 다시 작성될 것입니다. 이 사실을 받아들이는 것은 개발자로서 스스로를 해방시키고, 더 나은 솔루션을 추구하도록 만듭니다. 따라서, 코드에 대한 감정적인 집착을 줄이고, 더 큰 목표와 팀의 목표를 향해 나아가는 것이 중요합니다. 이것이 바로 상위 1% 개발자가 되는 길입니다.

Use consistent standards

상위 1%의 개발자들이 공통적으로 실천하는 또 다른 습관은 일관된 코딩 표준과 스타일을 사용하는 것입니다. 이들은 프로젝트 전체에서 일관성을 유지함으로써 코드의 가독성과 유지 관리성을 크게 향상시키고, 이는 전체 팀의 생산성에 긍정적인 영향을 미칩니다.
일관된 코딩 표준을 사용하는 것은 코드를 더 쉽게 읽고 이해할 수 있게 만들 뿐만 아니라, 새로운 팀원이 프로젝트에 참여했을 때 빠르게 적응할 수 있는 환경을 제공합니다. 이런 방식은 특히 큰 조직에서 중요한데, 예를 들어 메타와 구글과 같은 회사들은 일관된 스타일 가이드를 채택하여 시간이 지나도 코드베이스를 쉽게 읽고 유지할 수 있도록 돕습니다.
구글은 자신들의 스타일 가이드를 오픈소스로 공개하여 널리 사용할 수 있도록 했으며, 메타 역시 C++에 대한 스타일 가이드를 오픈소스 프로젝트에 포함시켰습니다. 이러한 접근 방식은 코드베이스의 일관성을 보장하고, 코드 품질을 유지하는 데 중요한 역할을 합니다.
팀 내에서도 Linter 같은 도구를 사용하여 코드 포맷팅을 자동화하는 것은 큰 이점을 제공합니다. 이는 모든 팀원이 동일한 포맷팅 규칙을 따르도록 강제함으로써 일관성을 더욱 강화하고, 시간을 절약할 수 있게 해줍니다. 따라서, 상위 1%의 개발자가 되기 위한 여정에서 일관된 코드 표준의 중요성은 충분히 강조할 수 없습니다.
notion image

Write simple code

상위 1%의 개발자들은 코드를 최대한 이해하기 쉽게 작성하여, 자신들의 업무 효율과 코드 가독성을 극대화합니다. 이러한 개발자들은 복잡해 보일 수 있는 코드를 처음 보는 사람도 읽고 이해하기 쉬운 코드로 만드는 능력을 가지고 있습니다. 그들의 코드는 깔끔하고 체계적이며 논리적인 구조를 지니고 있습니다.
이들은 심사숙고하여 코드를 작성하며, 필요한 경우에는 그 이유를 코드 내에 잘 문서화합니다. 이런 접근 방식은 코드를 더 이해하기 쉽게 만들고, 유지보수를 용이하게 합니다. 또한, 깔끔한 코드를 작성하기 위해 SOLID 원칙을 적용합니다. 이 원칙들은 객체 지향 프로그래밍에 근거를 두고 있지만, 일반 프로그래밍에도 효과적으로 확장될 수 있습니다:
  • Single Responsibility: 한 클래스는 하나의 기능만을 담당해야 합니다.
  • Open-Closed: 클래스는 확장에는 열려 있어야 하지만, 수정에는 닫혀 있어야 합니다.
  • Liskov Substitution: 하위 클래스는 그것들을 사용하는 코드를 변경하지 않고도 상위 클래스의 위치를 대체할 수 있어야 합니다.
  • Interface Segregation: 사용하지 않는 기능에 대한 의존이 없는, 작은 목적에 맞춰진 인터페이스를 제공해야 합니다.
  • Dependency Inversion: 고수준 모듈은 저수준 모듈에 의존하지 않고, 모두 유연하고 분리된 시스템 설계를 가지고 있어야 합니다.
이 원칙들을 지키면서 코드를 작성하면, 누구나 쉽게 이해하고 확장할 수 있는 유지보수가 용이한 코드베이스를 구축할 수 있습니다. 또한, 효과적인 네이밍 컨벤션을 사용하여 코드 내의 변수와 함수 이름을 명확하고 설명적으로 만드는 것도 중요합니다. 이렇게 함으로써, 코드를 처음 보는 사람도 쉽게 이해할 수 있고, 개발 팀 내에서의 소통이 원활해집니다.

Don’t allow surprises

상위 1% 개발자들은 예기치 않은 결과를 최소화하는 것을 중요하게 여깁니다. 이들은 코드가 항상 예측 가능하고 신뢰할 수 있어야 한다고 믿으며, 이를 위해 적절한 테스팅 프로세스를 따릅니다. 좋은 코드는 사용자나 다른 개발자에게 놀라움을 주지 않아야 하며, 테스트는 이러한 예측 가능성을 강화하는 데 중요한 역할을 합니다.
Good code is predictable.
notion image

테스트의 중요성

우수한 자동화된 테스트는 코드를 변경할 때 발생할 수 있는 문제를 미리 발견하고 수정하는 데 도움이 됩니다. 이러한 테스트를 통해 팀은 기존의 코드를 손상시킬 염려 없이 자신 있게 변경할 수 있습니다. 테스트 유형은 다음과 같이 다양합니다:
  • 단위 테스트(Unit Tests): 개별 컴포넌트나 격리된 함수를 테스트하여 각 기능이 올바르게 작동하는지 확인합니다.
  • 통합 테스트(Integration Tests): 여러 컴포넌트가 서로 올바르게 상호작용하는지 검증합니다.
  • 엔드투엔드 테스트(End-to-End Tests): 사용자의 관점에서 시스템의 전체 기능을 검증합니다.
테스트는 가능한 한 간단해야 하며, 실패할 경우 그 원인을 쉽게 파악할 수 있어야 합니다. 또한, 모든 것을 테스트할 필요는 없습니다. 예를 들어, 엔드투엔드 테스트의 수행 비용이 프로그램의 실제 이점을 상회한다면, 이는 신중하게 문서화되고 모니터링되어야 하며, 적절한 담당자에게 필요한 조치가 취해져야 합니다.
테스트가 구현의 세부 사항에 너무 집중하는 것도 피해야 합니다. 예를 들어, 프론트엔드 코드에서 CSS 선택기를 직접 테스트하기보다는 데이터 속성이나 스크린샷을 통해 UI의 일관성을 확인하는 방법이 더 바람직할 수 있습니다.
이와 같은 접근 방식을 통해, 상위 1%의 개발자들은 코드의 품질을 유지하고, 예상치 못한 문제에 신속하게 대응할 수 있는 견고한 개발 환경을 조성합니다. 이는 전체 팀의 작업 효율을 크게 향상시키는 데 기여합니다.

Communicate often

상위 1%의 개발자들은 소통을 자주하고, 팀원들과 긴밀히 협력하는 것을 중요하게 여깁니다. 이들은 혼자서 모든 문제를 해결하려고 하지 않고, 다른 사람의 의견과 피드백을 적극적으로 받아들입니다. 이러한 개발자들은 자신의 코드와 설계를 끊임없이 검토받음으로써 더 나은 결과물을 만들어냅니다.

소통의 중요성과 소통 방법

  • 리뷰 및 피드백: 최고의 엔지니어들은 프로젝트 초기부터 동료들과 자주 의사소통하며, 정기적인 리뷰를 통해 프로젝트의 방향성을 재확인합니다. 이를 통해 개발 초기에 잠재적 문제를 발견하고 수정할 수 있습니다.
  • 팀 내 협력 강화 팀원들과의 빈번한 소통은 프로젝트가 원활하게 진행되는 데 필수적입니다. 상호작용을 통해 각자의 강점을 활용하고, 서로의 약점을 보완할 수 있습니다. 또한 다양한 배경을 가진 팀원들과의 소통은 종종 프로젝트에 새로운 시각을 제공합니다. 이는 코드를 더 효율적이고 효과적으로 만드는 데 도움이 됩니다.
  • 문서화와 공유: 작업 관련 문서를 정기적으로 업데이트하고, 이를 팀원들과 공유함으로써 프로젝트에 대한 이해를 돕습니다.
이러한 습관은 개발자 개인뿐만 아니라 팀 전체의 생산성을 향상시키는 데 크게 기여하며, 프로젝트의 성공 확률을 높이는 결정적인 요소가 됩니다. 상위 1%의 개발자가 되고자 한다면, 효과적인 소통과 협력을 통해 다양한 시각과 아이디어를 수용하는 것이 중요합니다.
notion image

Code fast,, and slow

상위 1%의 개발자들은 프로젝트를 빠르게 완성하는 동시에 코딩은 신중하게 처리하는 능력을 가지고 있습니다. 이들은 프로젝트의 전체적인 진행을 신속하게 도모하지만, 각 코드 라인을 작성할 때는 고도의 주의와 정밀성을 요구합니다. 이것이 바로 빠르고도 느린 코딩(Code fast,, and slow)의 원리입니다.
  • 철저한 계획과 세심한 실행: 효율적인 개발은 철저한 계획과 세부 사항에 대한 꼼꼼한 주의에서 시작됩니다. 이 접근 방식은 초기 단계에서 시간을 더 투자하게 만들지만, 장기적으로는 오류를 줄이고 전체 프로젝트의 효율성을 높여줍니다.
  • 표준과 원칙의 활용: 일관된 코딩 표준과 엄격한 테스트 원칙을 적용함으로써, 개발자는 코드의 안정성을 보장하고, 유지 관리를 용이하게 만들 수 있습니다. 이는 프로젝트 전체의 지연을 방지하고, 수정이 필요한 부분을 적시에 파악할 수 있게 도와줍니다.
  • 자주 소통하며 진행상황 확인: 정기적인 소통과 피드백은 프로젝트를 적절한 방향으로 이끌고, 잠재적인 문제를 사전에 예방하는 데 중요합니다. 이는 개발자가 중간에 잘못된 방향으로 가지 않도록 보호하는 안전망 역할을 합니다.
상위 1%의 개발자가 되기 위해서는 빠르게 전진하되, 필요할 때는 신중하게 느리게 진행하는 능력을 개발하는 것이 중요합니다. 이러한 방법은 장기적으로 보다 효과적이고 지속 가능한 개발을 가능하게 만듭니다.
notion image

Don’t follow rules blindly

상위 1% 개발자가 되기 위한 마지막 습관은 규칙과 원칙을 맹목적으로 따르지 않는 것입니다. 개발 과정에서 '규칙'과 '원칙'은 도움이 되는 가이드라인이지만, 모든 상황에 완벽하게 맞는 것은 아닙니다. 때로는 기준을 벗어나는 코드를 작성해야 할 때가 있으며, 이러한 경우 코드가 특정 방식으로 작성된 이유를 문서화하는 것이 중요합니다. 이렇게 함으로써 미래의 개발자들이 동일한 결론에 더 빠르고 효율적으로 도달할 수 있도록 도울 수 있습니다.

깊은 도메인 지식을 갖추기

성공적인 개발자들은 종종 하나 이상의 분야에서 깊은 전문 지식을 갖추고 있습니다. 이는 프론트엔드 인프라, 분산 시스템, 또는 사용자 인터페이스 디자인과 같은 특정 영역일 수 있습니다. 이러한 전문성은 해당 분야에서 최고가 될 수 있는 기반을 마련하고, 전체적인 프로젝트의 성공에 기여합니다.

자신을 효과적으로 마케팅하기

탁월한 개발자들은 자신의 업무를 적극적으로 알리고, 자신의 전문성과 가치를 팀원들과 공유합니다. 이는 적절한 마케팅과 영향력 있는 프로젝트를 통해 이루어집니다. 자신의 업무가 눈에 띄도록 하고, 팀 내에서의 자신의 위치를 강화함으로써 더 많은 프로젝트와 기회를 유치할 수 있습니다.
이러한 접근 방식은 소프트웨어 개발의 복잡성과 불확실성을 관리하고, 동시에 지속적인 학습과 개발을 통해 개발자로서 성장하는 데 필수적입니다. 규칙을 유연하게 적용하고 전문성을 갖추며, 자신을 효과적으로 마케팅함으로써, 개발자는 경력에서 더 큰 성공을 달성할 수 있습니다.
Share article
Subscribe to our newsletter

More articles

See more posts
RSSPowered by inblog