새소식

반응형
Python/정보

시니어 개발자들은 이런거 안한대요. (개발자 물경력 방지)

  • -
반응형

시니어 개발자는 이런거 안한대요 text img generated by AI

주니어 개발자에서 멈춰 있을수만은 없다! 연차는 쌓이는데 자신의 실력도 쌓여야겠죠? 시니어 개발자들은 어떻게 하는지 탐구해봅시다.

모든 시니어 개발자도 처음에는 기초적인 코딩 실력과 컴퓨터 과학 지식을 가진 주니어 개발자였습니다. 시간이 지나면서 설계 패턴, 아키텍처 원칙, 고급 프로그래밍 개념, 도메인 지식을 익히며 성장하고, 제품의 큰 그림을 이해하는 시니어 개발자로 발전하게 됩니다.

 


⚙️ 과도한 아키텍처 설계 (Overengineering the Project Architecture)

화가가 그림으로 자신의 능력을 표현하듯, 개발자는 코드로 실력을 드러냅니다. 잘 설계된 아키텍처는 단순성효율성을 강조해야 합니다. 기술력을 과시하기 위해 불필요하게 복잡한 구조를 도입하면 오히려 팀에 부담이 됩니다.

❌ 불필요한 마이크로서비스 사용

# 작은 프로젝트에 불필요한 마이크로서비스 구조
class UserService:
    def create_user(self, data):
        pass

class ProductService:
    def add_product(self, product):
        pass

# ✅ 간단한 모놀리식 구조로 개선
class App:
    def create_user(self, data):
        pass

    def add_product(self, product):
        pass

시니어 개발자는 단순하면서도 확장 가능하고 유지 보수가 쉬운 아키텍처를 선호합니다.

반응형

🧩 "완벽한" 코드를 작성하려는 과도한 집착 (Overengineering the Codebase)

설계 패턴은 코드의 유지 보수성을 높이지만, 완벽함을 추구하는 것은 오히려 복잡성을 초래할 수 있습니다. 완벽한 코드는 존재하지 않으며, 현재 요구 사항에 충분히 좋은 코드가 가장 이상적입니다.

❌ 과도하게 설계된 코드

from abc import ABC, abstractmethod

class UnitConverter(ABC):
    @abstractmethod
    def convert(self, value):
        pass

class FahrenheitToCelsiusConverter(UnitConverter):
    def convert(self, fahrenheit):
        return (fahrenheit - 32) * 5 / 9

converter = FahrenheitToCelsiusConverter()
print(converter.convert(250))  # 121.11

✅ 간단한 코드

def f2c(fahrenheit):
    return (fahrenheit - 32) * 5 / 9

print(f2c(250))  # 121.11

시니어 개발자는 유지 보수성과 가독성을 고려하여 불필요한 복잡성을 피합니다.


🏗️ 기술 부채를 무시하는 태도 (Ignoring Growing Technical Debt)

기술 부채는 단기적인 개발 속도를 위해 장기적인 유지 보수성을 희생할 때 발생합니다. 이를 방치하면 제품의 수명이 단축됩니다.

❌ 기술 부채가 있는 코드

user_data = fetch_data()
if user_data != None and len(user_data) > 0:
    process(user_data)

✅ 리팩토링 후 개선된 코드

def is_valid_data(data):
    return data is not None and len(data) > 0

user_data = fetch_data()
if is_valid_data(user_data):
    process(user_data)

시니어 개발자는 지속적으로 코드 리팩토링과 리뷰를 통해 기술 부채를 관리합니다.


📝 나쁜 코드를 주석으로 숨기기 (Using Comments to Hide Bad Code)

주석은 코드의 가독성을 높이지만, 잘못된 코드를 정당화하는 용도로 사용해서는 안 됩니다.

❌ 나쁜 예

# 이니셜 포함 이름 생성
fullname = input("Fullname: ")
p = fullname.strip().split(" ")
name = "".join([n[0].upper() + "." if i < len(p) - 1 else " " + p[-1].title() for i, n in enumerate(p)])
print(name)

✅ 개선된 코드

def format_name_with_initials(fullname):
    parts = fullname.strip().split(" ")
    initials = ".".join([part[0].upper() for part in parts[:-1]])
    return f"{initials}. {parts[-1].title()}"

fullname = input("Fullname: ")
print(format_name_with_initials(fullname))

시니어 개발자는 주석 없이도 이해할 수 있는 깔끔한 코드를 작성합니다.


⏳ 구식 기술에 집착하기 (Sticking to Old-fashioned Technologies)

레거시 기술에 대한 경험은 가치가 있지만, 구식 도구에만 의존하면 성장에 한계가 있습니다. 최신 기술을 학습하고 적용하는 것이 중요합니다.

❌ 구식 jQuery

$('#button').on('click', function() {
    alert('Clicked!');
});

✅ 최신 JavaScript

const button = document.getElementById('button');
button.addEventListener('click', () => alert('Clicked!'));

시니어 개발자는 새로운 기술 트렌드를 따라가며 역량을 확장합니다.


✅ 소프트웨어 테스트를 소홀히 하기 (Not Prioritizing Software Testing)

테스트는 신뢰할 수 있는 소프트웨어를 개발하는 핵심 요소입니다. 시니어 개발자는 개발 초기부터 테스트를 통합합니다.

🧪 Python 단위 테스트 예제

import unittest

def add(a, b):
    return a + b

class TestAddFunction(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)

if __name__ == '__main__':
    unittest.main()

테스트를 통해 코드의 안정성을 보장하고 버그를 줄일 수 있습니다.


📏 표준 및 일반적인 관행 무시하기 (Avoiding Standard and General Practices)

프로그래밍 언어나 프레임워크에는 일관성을 위한 표준 관행이 존재합니다. 이를 무시하면 협업이 어려워집니다.

❌ 비표준 React 이벤트 처리

useEffect(() => {
    buttonRef.current.addEventListener('click', handleClick);
    return () => buttonRef.current.removeEventListener('click', handleClick);
}, []);

✅ 권장 방식

return <button onClick={handleClick}>Click Me</button>;

시니어 개발자는 협업과 유지 보수를 고려하여 표준 관행을 따릅니다.


🚀 하드웨어 성능을 믿고 성능 최적화를 소홀히 하기 (Ignoring Performance Factors Because of Modern Hardware)

현대 하드웨어의 성능이 높아도 비효율적인 코드는 여전히 성능 저하의 원인이 될 수 있습니다.

❌ 비효율적인 코드

result = []
for i in range(1000000):
    result.append(i * 2)

✅ 최적화된 코드

result = [i * 2 for i in range(1000000)]

시니어 개발자는 하드웨어 성능에 의존하지 않고, 효율적인 코드를 작성합니다.


이러한 흔한 실수를 피함으로써 시니어 개발자는 자신의 전문성을 유지하고, 협업 환경을 개선하며, 고품질의 소프트웨어 제품을 개발할 수 있습니다. 💡

 

 

 

 

같이보면 좋은글

[Python/Clean Code Series(클린코드)] - [Python/Clean Code Series(클린코드)] 12가지 프로덕션급 Python 클린 코드 스타일

 

[Python/Clean Code Series(클린코드)] 12가지 프로덕션급 Python 클린 코드 스타일

왜 클린 코드가 중요한가요?클린 코드는 단순히 "잘 보이는 코드"를 넘어, 협업의 효율성을 높이고 유지보수를 쉽게 만들어줍니다. 가독성이 높은 코드는 버그를 줄이고, 코드 리뷰 시간을 단축

intelloper.tistory.com

[Javascript/Clean Code Series(클린코드)] - [TypeScript] 프론트엔드 개발자를 위한 SOLID 원칙. (feat.타입스크립트)

 

[TypeScript] 프론트엔드 개발자를 위한 SOLID 원칙. (feat.타입스크립트)

S.O.L.I.D 원칙 타입스크립트 코드 예제로 이해하기깨끗하고 유지보수하기 쉬운 코드를 작성하는 것은 단순히 동작하는 코드를 작성하는 것만큼 중요합니다.S.O.L.I.D 원칙은 시간이 지나도 쉽게 조

intelloper.tistory.com

[Python/정보] - 시니어 파이썬 개발자로 나아가기위한 10가지 개념

 

시니어 파이썬 개발자로 나아가기위한 10가지 개념

AI 웹앱 개발자로서 Python은 이제 너무 중요한 언어인것 같습니다.  주력 언어로 Javascript와 Python은 계속 이어질것 같고 Python을 좀 더 딥하게 이해하고 숙달하기 위해 중요 개념들을 정리해봅니다

intelloper.tistory.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.