엔지니어가 생각하는 방식 이해하기

소프트웨어 엔지니어가 코드 조각을 볼 때 스스로에게 묻는 첫 번째 질문은 "그것이 무엇을 하고 있는가?"입니다. 다음 질문은 “왜 그런 일을 하는가?”입니다. 사실 이 둘 사이에는 깊은 연관성이 있습니다. why 된다 다음 추상화 수준에서. 그건, 추상화 경계를 넘어 서로의 거울은 무엇이며 왜 존재합니까? 이를 이해하면 엔지니어가 유지 관리 및 읽기 쉬운 소프트웨어를 작성하는 데 도움이 될 수 있습니다.
위의 원칙을 설명하는 데 예가 도움이 될 것입니다. 우리가 Django 웹앱을 작업 중이고 한동안 로그인하지 않은 사용자에게 우리 웹앱이 얼마나 멋진지 상기시키고 싶다고 가정해 보겠습니다. 다음과 같은 코드가 있다고 가정해 보겠습니다.

def Remember_users_we_are_awesome(): 사용자 = User.objects.filter( last_login__lte=timezone.now() - timedelta(days=7), last_login__gte=timezone.now() - timedelta(days=14) ) 사용자의 경우: message = EmailMessage( subject='이 웹사이트는 정말 멋져요', message='완전히 놓치고 있는 게 있어요', from='from@example.com', to=user.email, ) message.send()

이 코드는 무엇을 하고 있나요? 먼저 데이터베이스 쿼리를 실행합니다. 왜? 어, 결과를 반복해서 이메일 메시지를 구성하는 것 같군요. 이유는 명확하지 않습니다.
무엇과 왜 사이에 명확한 구분이 없고, 왜가 무엇으로 되는 명확한 지점이 없기 때문에 이 코드는 추상화 수준을 혼합했다고 말할 수 있습니다. 대신 이 코드를 보면:

class UserQuerySet(models.QuerySet): def 유휴(): return self.filter( last_login__lte=timezone.now() - timedelta(days=7), last_login__gte=timezone.now() - timedelta(days=14) )

이 코드는 무엇을 하고 있나요? 음, 데이터베이스 쿼리를 실행 중입니다. 왜? 메소드 이름은 유휴 사용자를 확보하기 위해 다음을 알려줍니다. 이제 다음 레벨을 살펴보세요.  

def Remember_users_we_are_awesome(): User.objects.idle()의 u에 대해: send_reminder_email(u)

그 코드는 무엇을 하고 있나요? 유휴 사용자를 나열하고 있습니다. 왜? 그들에게 알림 이메일을 보내기 위해. 어떻게 why 예전의 대답은 이제 – 이전 수준에서는 데이터베이스 쿼리를 보았습니다. 이 수준에서는 유휴 사용자를 볼 수 있습니다. 이것이 우리가 추상화 경계를 넘었다는 것을 알 수 있는 방법입니다. 무엇을 그리고 왜 장소를 바꾸는지 말이죠. 이러한 개념에는 훌륭한 대칭이 있습니다.
이 코드는 재사용 가능성도 더 높습니다. 우리는 개념을 조각했습니다. 유휴, 이는 유휴 사용자를 볼 때마다 사용할 수 있습니다.
이 What/Why 프레임워크를 사용하여 메서드를 작성할 때 각 메서드 이름은 우리에게 알려줄 것입니다. why 방법은 본체에서 작업을 수행하는 것입니다. 그러나 각 메서드는 다른 메서드로 구성되어 있다는 점에 유의하세요. 해당 메소드가 이 규칙을 따른다면 우리는 하위 메소드의 목표를 요약하는 일련의 명령문으로 끝날 것입니다. 이는 자명한 코드베이스로 이어질 것입니다. 개발자는 코드를 읽기 위해 컴퓨터 동작에 대한 정신적 모델을 보유할 필요가 없습니다. 그들은 다음과 같은 의미 있는 정신적 상징을 사용할 수 있습니다. 유휴 위의 개념. 이는 인지 부하가 ​​적다는 것을 의미하며, 이는 코드를 변경하고 새로운 기능을 작성하기 위한 개발 노력을 의미합니다.
이러한 방법의 분리는 다음과 같습니다. Sandi Metz의 5줄 방법 규칙, 여기서는 5줄 이하의 메서드로 제한합니다. 개발자가 각 작업을 캡슐화하고 구성하도록 하는 단축 방법을 사용합니다. 여기에 대한 관찰 why 그러한 짧은 방법이 왜 유용한지에 대한 애니메이션 이론을 제공할 수 있기를 바랍니다.

저자

  • 애덤 매켄지

    CTO로서 Adam은 HPC 및 고객 성공 팀을 관리하는 책임을 맡고 있습니다. Adam은 Boeing에서 경력을 시작하여 787년 동안 XNUMX을 작업하면서 구조 및 소프트웨어 엔지니어링 프로젝트를 관리하고 날개를 설계, 분석 및 최적화했습니다. Adam은 오레곤 주립대학교에서 우등으로 기계공학 학사학위를 취득했습니다.

비슷한 게시물