모든 프로그램에서 내부 내용을 그림으로 인쇄하여 여러분과 다른 모든 사람들의 삶을 조금 덜 끔찍하게 만들어 보세요. ✨ 스레드 ✨
제가 작성한 거의 모든 프로그램은 어떻게든 내부 상태를 버릴 수 있습니다. 이 스레드에서 꼭 얻어가셨으면 하는 게 있다면, 여러분도 직접 프로그램을 만들어서 사용해 볼 수 있다는 거예요. 복잡할 필요도 없고요!
이런 뜻이 아닙니다. 포인터를 화살표로, NULL을 나타내는 작은 기호 등을 사용한 연결 리스트 스타일의 다이어그램을 본 적이 있을 겁니다. 구현에 대해 이야기할 때는 유용하지만, 공부하는 목적이 아니면 이런 다이어그램을 필요로 하는 경우는 드뭅니다. 출처: Moses Effiong Ekpenyong
연결 리스트의 놀라운 다이어그램을 만든 Brooklyn College의 CISC 3130에 감사드립니다. 🚂🚃🚃 출처: https://t.co/VTw0qbKDXA
추상화 계층으로 올라가면서 ADT의 내용을 보여주는 것이 유용할까요? 아마 아닐 겁니다. 프로그램에 더 의미 있는 것을 그 자체로 보여주는 게 낫습니다. 때로는 단일 자료구조의 내용이 될 수도 있고, 때로는 여러 자료구조 간의 관계가 될 수도 있습니다.
저는 컴파일러 관련 작업을 많이 하지만, 이 아이디어는 다른 곳에도 적용됩니다. 컴파일러에 단계가 있는 이유는 *각 단계 사이에* 서로 다른 데이터가 있기 때문입니다. 그래서 단계들을 제거하는 것이 매우 자연스러워 보입니다. CLI 도구에 플래그만 추가하면 됩니다! 그것만 있으면 됩니다.
이것은 유닉스 셸 초기 단계의 구조입니다. 제 프로그램은 구문 트리와 계층적 심볼 테이블 간의 관계를 보여주는데, 구문 분석 중에 함께 채워집니다. 두 테이블 간의 관계를 볼 수 있기를 바랍니다.
아시겠지만, 저는 어떻게 저장되는지가 아니라 무엇을 담고 있는지 보여드리는 겁니다. 이건 내용일 뿐, 특정 데이터 구조의 구현에 대한 내용은 아닙니다. 프로그램의 다른 부분을 디버깅하는 데 적합한 수준의 추상화입니다.
다른 프로그램의 또 다른 트리입니다. 이건 C와 C++ 컴파일러의 IR입니다. 이 부분 자체를 디버깅하지 않는 한, 구현 세부 사항은 그저 잡음일 뿐입니다.
이런 구조는 커질 수 있습니다! 하지만 확대해서 보더라도 전체적인 모양을 파악하는 것은 디버깅에 도움이 될 수 있습니다. 익숙하다면 사물의 모습을 보면 변화하는 패턴들을 발견할 수 있습니다. 우리 뇌는 그런 데에 능숙하거든요!
프로그램 구조화에 관하여: 데이터 구조를 올바르게 구축하세요. 코드는 그 부수적인 요소입니다. - 코드를 변경하기가 더 쉽습니다. - 데이터 설계는 곳곳에 뿌리내리는 경향이 있습니다. - 그래서 단계(또는 모듈 또는 기타) 내에 포함시키는 것이 중요합니다.
상태 저장 데몬의 경우 IPC를 통해 현재 상태를 쿼리하는 방법을 추가합니다. 프로그램 외부에서 렌더링을 실행하세요!
출력 GraphVIZ, JSON, 간단한 TSV 등 데이터에 가장 자연스럽게 어울리는 형식을 선택하세요. *간단한* 형식으로 인쇄하고 외부 도구를 사용하여 렌더링합니다.
프로그램이 있다고 해서 프로그램이 이 모든 것을 담당해야 하는 건 아닙니다. 프로그램을 나눠서 사용하세요! 여러 언어를 사용하세요. 저는 awk를 사용합니다. 여러분은 자신이 좋아하는 언어를 사용하시면 됩니다.
JSON은 서로 다른 언어를 사용하는 팀 간의 좋은 공통 화폐입니다. 상업적으로 작업하는 경우, JSON을 사회적 접착제로 활용하고, "팀 간 협업" 원칙을 준수하는 엔지니어에게 점수를 매겨보세요.
색맹에도 친화적인 색상을 사용하고, 기능적인 정보 제공용으로만 사용하세요. 저는 Bang Wong의 팔레트를 좋아합니다. https://t.co/XtUlGdalOb
워크플로는 데이터 수집과 시각화 모두에 중요합니다. 방금 만든 것을 확인하기 위해 여러 작업을 해야 하고, 이로 인해 하려는 작업이 중단된다면 아무런 소용이 없습니다. 다음에는 이에 대해 좀 써보도록 하겠습니다. 조심하세요. 읽어주셔서 감사합니다.











