임베디드 월드 2021로 가는 길에서: 에피소드 2
제 관심은 복잡성과 이를 줄이려는 일반적인 필요에 있습니다. 이 프레젠테이션을 통해 지난 수십 년간 이 복잡성 문제가 어떻게 해결되어 왔는지를 설명하고 현재에 이르게 된 과정을 상기시키며, 단순화를 지원하지만 잘 알려지지 않은 일부 기술을 소개하려 합니다.
지난 달에 말씀드렸듯이 저는 반은 은퇴한 상태라 기술에 대한 흥미를 추구할 시간이 많아졌습니다. 최근에 한 고객의 내장형 개발 도구에 익숙해지면서 잊혀진 C 프로그래밍 언어 구문을 몇 개를 찾아야 해서 Brian Kernighan과 Dennis Ritchie(K&R)의 "The C Programming Language "를 집어 들었습니다. 저는 이 텍스트의 원본 버전과 2판을 모두 가지고 있습니다.
출처: Wikipedia (https://en.wikipedia.org/wiki/The C Programming Language)
이 책의 서문, 서론, 1장을 다시 읽게 되었는데 이 모두는 제가 이 언어를 처음 배울 당시의 기억을 되살려 주었습니다. 저는 1970년대 후반에 어셈블리 언어 프로그래머로 활동하기 시작했는데, 제 생각을 더 높은 수준의 개념으로 전환하는 것이 어려웠던 것이 기억납니다. 어셈블리 언어 프로그래밍은 제 HP-67 프로그래밍 가능 계산기를 프로그래밍하는 것과 같았습니다. 올바른 결과를 얻기 위해 기계의 레지스터와 단계를 직접 처리했습니다. 어셈블리 언어 프로그래머로서 어셈블리 언어를 작성하는 것은 지루했지만 단순했습니다. 당시에는 그 작업이 지닌 유일한 장점이 CPU로 전환할 수 있다는 것이었기 때문에 더 높은 수준이 정말 그만한 가치가 있는지 고민했던 기억이 납니다.
제 어셈블리 언어 프로그램은 오하이오 주 신시내티에 있는 Baldwin Piano와 Organ Company에서 제작한 전자 악기에 내장된 9개의 마이크로 프로세서 중 하나에서 사용되었습니다. Baldwin은 전자 오르간을 발명했으며 최첨단 기술에 전념했습니다. 음악가가 연주하고 있는 코드를 해독하면서 동시에 그에 해당하는 음악 리듬을 생성하려는 작업은 실시간 제약이 너무 컸습니다. 예측 가능한 연주인지가 성공을 좌우했으며, 복잡성을 줄이는 것은 별로 관련이 없었습니다.
어쨋든, 각 K&R 텍스트의 1장은 튜토리얼입니다. 만족스럽게도 텍스트에 표시된 대로 Linux 시스템에 예제를 입력하고 해당 예제를 컴파일하고 실행하기 위한 축어적 명령을 실행하면 모든 것이 설명된 대로 정확하게 작동했습니다. 정말 대단했습니다. 이 텍스트는 1978년에 처음 출판되었고, 제 Linux 컴퓨터는 2020년 10월 7일에 출시된 최신 버전의 Linux(즉, 5.8.14)를 실행 중인데, 여기에서 제 간단한 C 프로그램이 여전히 작동합니다. 훌륭합니다! “깨지지 않았다면 고치지 마라”는 격언이 틀린 말이 아닙니다.
이 경험을 바탕으로 제 C++ 책의 소개 섹션을 다시 읽어 보기로 했습니다. 1991년에 출판한 Bjarne Stroustrup의 "The C++ Programming Language, 2판"입니다. 이 C 및 C++ 책은 모두 해당 언어의 제작자가 작성했습니다. 저는 발명가들의 생각에 대해 읽어보는 것을 좋아합니다. 후속 저자가 쓴 책은 저자가 생각한 바를 알 수 있는 이점이 있는 동시에 더욱 명확한 설명이 담겨 있는 경우도 있지만, 개념을 배우는 데 실제로 필요한 것 이상의 내용이 포함될 수도 있습니다.
출처: https://stroustrup.com/2nd.html
Stroustrup은 C++를 사용하여 자신의 목표(모든 컴퓨터 과학자의 목표이기도 함)를 이끈 일련의 기술을 단 10 페이지로 설명합니다. 그 전략은 컴퓨터 프로그램으로 해결할 수 있는 실생활 문제를 모델링하는 것과 관련된 복잡성을 가장 근본적으로 줄이는 것이었습니다.
그는 절차적 프로그래밍으로 시작하여 모듈식 프로그래밍, 데이터 추상화, 마지막으로 객체 지향 프로그래밍으로 작업하게 된다고 설명했습니다. 복습하자면, Stroustrup의 절차적 프로그래밍은 다음과 같습니다.
Stroustrup에 따르면 모듈식 프로그램은 다음과 같습니다.
여기에 복잡성을 줄이기 위한 아주 작은 요소가 있는데, 모듈에서 데이터를 숨기는 것입니다. 이는 시스템 단순화의 핵심 속성으로, 여기에서 캡슐화 개념이 시작됩니다.
Stroustrup은 다음을 통해 데이터 추상화 패러다임을 만들어 갑니다.
Stroustrup에 따르면 데이터 추상화에 문제가 없는 것은 아닙니다. 그는 추상화를 새로운 용도에 적용하려면 정의를 수정해야 한다고 설명합니다. 그런데 일단 정의가 수정되는 경우, 이전에 정의했던 것에서의 재사용은 불가능해집니다. 이를 통해 그는 객체 지향 프로그래밍의 개념을 알게 되었습니다.
이제 계층의 개념을 알게 되었으며 이는 복잡성을 줄이기 위한 핵심 개념입니다.
제가 이 블로그에 쓰는 내용은 임베디드 월드 기조 연설을 준비하기 위해 제가 현재 연구하는 내용과는 다릅니다. 제 기술을 계속 실현해가는 과정 중, 이 블로그에서는 제 생각을 형성해 온 개념들에 대해 설명하고 있습니다. 다음 에피소드에서 더 많은 내용을 공유하도록 하겠습니다.

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum