(이 게시물은 몇 달 전에 내 목록에 보낸 게시물을 기반으로 합니다. 매주 비슷한 내용을 더 읽으려면 여기에서 가입하세요!)
프로그래밍 흐름을 저장하기 위해 약간의 편리함 사용에서 저는 가장 단순한 추상화가 어떻게 코드베이스 작업을 더 즐겁게 만들 수 있는지에 대해 이야기했습니다.
하지만 나쁜 추상화?
매번 API 참조를 파헤칩니다. 그 방법이 명확하게 이름이 leaderboard
여야 합니다. 실제로 호출됩니다. 리팩토링을 시도하지만 코드의 한 부분은 구조화된 데이터를 전달하고 다른 부분은 원시 텍스트 줄을 제공합니다. 그리고 코드를 만질 때마다 무언가가 깨지고 하루 종일 디버그하려고 노력해야 합니다. position
을 수정했기 때문에 , 그러나 score
를 업데이트하지 않았습니다. 동시에.
그렇다면 나쁜 것과는 거리를 두면서 어떻게 좋은 추상화를 구축할 수 있을까요?
좋은 비유를 사용하여 더 명확한 코드 작성
좋은 추상화는 좋은 은유에서 나옵니다.
은유 이미 머리 속에 있는 개념과 관련시켜 시스템의 어떤 것을 설명합니다. 예:
-
많은 명령줄에서 파이프의 비유를 사용합니다. .
파이프의 한쪽 끝에 데이터를 넣으면 다른 쪽 끝에서 나옵니다. 상상하기 쉽고 사용하기 쉽습니다.
-
동시 프로그래밍에서 잠금 좋은 비유입니다.
잠금이 내부적으로 어떻게 작동하는지 전혀 알지 못하면 리소스가 잠겨 있으면 사용할 수 없다는 것을 알 수 있습니다. 잠금 해제될 때까지 기다려야 합니다.
-
객체 지향 프로그래밍에서 메시지 전달 특정한 정신적 이미지를 촉발함:한 대상이 다른 대상에게 메시지를 전달합니다. 두 번째 개체는 메시지로 작업을 수행하거나 다른 사람에게 전달할 수 있습니다.
아이디어를 얻기 위해 구현에 대해 아무것도 알 필요가 없습니다(이는 프록시 패턴과 같은 것을 훨씬 더 이해하기 쉽게 만듭니다).
좋은 비유는 매우 중요합니다. 좋은 비유에 기반한 추상화를 보면 코드를 이해하기 위해 문서를 읽거나 소스 다이빙을 할 필요가 거의 없습니다. 더 나은 은유를 생각해 낼수록 다른 사람에게 시스템을 더 쉽게 설명할 수 있고 나중에 시스템에서 더 쉽게 작업할 수 있습니다.
좋은 비유는 어떻게 생각해 냈나요?
좋은 은유는 구체적이고 독립적이며 설명하는 것에 대한 생생한 정신적 이미지를 만듭니다. 오해의 여지를 남기지 않고 코드의 동작과 최대한 일치합니다. 누군가가 은유에 대한 이해를 바탕으로 코드에 대해 가정을 한다면 그 가정은 유효해야 합니다.
좋은 은유를 떠올리는 것은 어렵습니다. 올바른 은유를 찾기 전에 종종 몇 가지 새는 은유를 거치게 됩니다. 괜찮습니다! 연습하면 더 쉬워질 것입니다. 하지만 다음은 저에게 도움이 된 절차입니다.
무엇에 대해 생각해 보세요. 방법에 대한 생각 없이 약간의 코드 수행 그것은 그것을 한다. 어떤 이미지가 떠오르나요? 다른 코드는 어떻게 사용합니까? 두 단어로 표현해야 한다면 어떤 단어를 사용하시겠습니까? 적어두세요.
그런 다음 그 이미지에 대해 생각해보십시오. 해당 코드가 작동하는 방식에 적합합니까? 은유를 통해 누출되는 극단적인 경우가 있습니까? 외에 뭔가가 있습니까? 새로운 기여자가 코드를 사용하기 전에 이해해야 하는 은유는 무엇입니까? 은유에 대해 생각할 때 머릿속에 명확한 그림이 있습니까? 아니면 흐릿합니까?
이것은 비유가 코드와 충분히 일치하지 않는다는 표시입니다. 그러나 좋은 은유에 가까울수록 거기에 도달하기 위해 해야 할 도약은 줄어듭니다.
마지막으로 문장에서 사용하십시오. “이 코드는 입니다 (무언가), 왜냐하면...” 기술적 배경이 없는 사람에게 비유를 설명하고 그것이 무엇을 하는지 이해하게 하시겠습니까? 은유를 이해하는 데 필요한 배경 지식이 적을수록 은유가 더 도움이 됩니다.
가까이 있지만 멀지 않은 경우 동의어 사전을 살펴보십시오. 비슷한 단어 사이의 미묘한 차이가 OK 은유와 완전한 은유의 차이를 의미할 수 있습니다.
은유 및 OOP
객체 지향 프로그래밍은 기본적으로 은유를 기반으로 합니다. 그것이 그 힘을 얻는 곳입니다! 잘 설계된 클래스는 다른 클래스에서 구현을 숨길 뿐만 아니라 당신에게도 구현을 숨깁니다. .
훌륭한 비유를 사용하면 클래스 이름에서 개체를 사용하는 방법을 알 수 있어야 합니다. 클래스 이름이 잘 지정되고 마음에 올바른 이미지가 나타나게 하는 경우 클래스를 이해하기 위해 구현에 뛰어들 필요가 없습니다.
이제 마지막으로 작업한 코드의 클래스에 대해 생각해 보시기 바랍니다. 특히 명확한 은유가 있는 것을 생각할 수 있습니까? 어떤 클래스를 상대하기보다 함께 작업하는 것 같나요? 사용 방법을 파악하기 위해 얼마나 자주 검색합니까?
무엇을 알게 되셨는지 듣고 싶습니다. 댓글로 알려주세요.
빠르게 훌륭한 소프트웨어 개발자가 되려면 작성 중인 코드와 수행 중인 프로세스에 대해 의식적으로 생각해야 합니다. 도와드릴 수 있습니다.
Practicing Rails의 32페이지 샘플을 무료로 다운로드하십시오. , 그리고 압도되지 않고 소규모로 이와 같은 아이디어를 시도하는 방법을 배우십시오.