Vernor Vinge의 소설 "A Deepness in the Sky"에서 인류는 아직 빛의 속도를 넘어서는 기술 없이 별들 사이에 퍼져 있음. 우주선은 매우 오래되었고 다양한 시스템과 문명의 기술이 혼합되어 있음.
컴퓨터 시스템이 오랜 시간 동안 진화하여 대부분의 코드를 아무도 제대로 알지 못함. 사람들은 그저 코드를 사용하고 그 위에 새로운 것을 구축함.
한 캐릭터는 오랫동안 여행하고 스테이시스 상태에 있어서 아마도 가장 나이 많은 인간 중 하나임. 그는 과거의 시스템 엔지니어로, 그 시대의 작동 원리와 취약점을 알고 있어서 미래에 다른 사람들이 그 위에 여러 층을 쌓고 정확히 무엇을 하고 있는지 모를 때 이를 활용할 수 있는 큰 이점을 가짐.
Vernor는 중요한 포인트를 가지고 있다고 생각함.
npm의 대부분의 라이브러리는 불필요하게 많은 기능을 가지고 있음. 저자들은 좋은 설계를 모르고, 모든 라이브러리가 모든 것을 하려고 함.
예를 들어, 문자열 인코딩 변환 라이브러리가 파일을 로드하고, 저장하고, 인터넷을 통해 다운로드하고, 커맨드 라인 도구를 제공하는 등의 기능을 모두 포함함. 라이브러리는 단 하나의 기능만 수행해야 함.
Rust에서도 상황이 나아지지 않은 것 같음. Rust 문서를 편집하려고 하면 약 1000개의 크레이트를 설치해야 함.
문제는 언어가 아니라, 누구나 라이브러리를 게시할 수 있고 실제로 그렇게 함. "일을 끝내고 싶어하는" 사람들은 가장 많은 기능을 가진 라이브러리를 선택하고, 라이브러리 외부에서 해결할 수 있는 몇 줄의 코드를 작성하는 것을 귀찮아하여 더 많은 기능을 요구함.
이 문제를 어떻게 해결해야 할지 모르겠음. 하나의 아이디어는 "저 의존성"을 지향하는 그룹을 시작하는 것이며, 라이브러리에 그 배지를 달고자 하는 사람들을 격려하고, 사람들이 라이브러리를 선택할 때 그 배지를 찾도록 유도하는 것임.
안투안 드 생텍쥐페리의 "Terre des Hommes"에서, 현대 비행기를 보고, 매년 진화하는 선을 따라가며, 인간이 만드는 모든 것에 대해 생각해본 적이 있는지 물음.
모든 산업 노력, 계산, 설계 및 청사진에 대한 밤샘 작업이 결국 단순함의 궁극적 원칙을 지닌 물건을 만드는 데 집중됨.
가구의 곡선, 배의 킬, 비행기의 동체를 점차 인간의 가슴이나 어깨의 기본 순수한 곡선과 같이 만들기 위해서는 여러 세대의 장인들이 실험해야 함.
완벽함은 더 이상 추가할 것이 없을 때가 아니라, 더 이상 제거할 것이 없을 때 달성된다고 함.
현재 우리가 사용하는 코드의 양이 엄청나게 많음. 예를 들어, 차고 문을 여는 데 5천만 줄 이상의 활성 코드가 필요할 수 있음.
이렇게 많은 코드를 실행하고 있지만, 대부분의 코드는 심도 있는 리뷰를 받지 못했을 가능성이 높음.
이런 상황에서도 npm 의존성을 설치하는 일상으로 돌아감.
소프트웨어가 위험하다고 여겨져서 사람들은 직접 실행하지 말고 "서비스로서의 X" 제공자나 "클라우드"에 맡기라고 조언받음.
이는 마치 자동차가 불에 잘 타기 때문에 전문가와 전문 소방관이 동행하는 전문가에게 운전을 맡기라는 상황과 비교됨.
소프트웨어가 더 간결해지지 않는 이유는 시간, 기술, 고액의 인력이 필요하기 때문임.
독립 개발자로서, 지난해 node.js를 배운 사람이 node.js, 컨테이너, 다양한 AWS 호스팅 DB 서비스, 람다 서비스, 객체 스토리지, 클라우드플레어, yaml, react, vite 등을 결합하여 하루 만에 취약한 웹앱을 만들 수 있음.
빠르고, 유지보수 비용이 적게 드는 소프트웨어는 이윤을 남기며 작성하기 어려움.
과거에는 시스템 제공 훅을 표준화하여 모든 개발자가 인터페이스 등에 사용하고, 개발자의 주요 업무는 프로그램 로직을 코딩하는 것이었음.
이러한 시스템 호출은 코드가 변경되어도 동일한 작업을 이행하고, 새로운 소프트웨어에 더 많은 기능을 제공하면서 오래된 코드가 문제 없이 컴파일되고 실행될 수 있도록 함.
이 꿈은 빠르게 무너졌고(예: DLL 문제), 많은 패키지 관리가 올바른 라이브러리를 사용할 수 있도록 하는 데 초점을 맞춤.
이제 많은 경험이 축적되었지만, 이 꿈이 실현 가능한지, 아니면 현재의 혼란스러운 상황에서 빠르고, 간결하며, 안정적이고, 보안이 강화된 소프트웨어를 향해 나아가고 있는지에 대한 질문이 제기됨.
Rust에 대한 의견으로, Rust가 C++에 비해 줄 당 취약점이 70% 적다고 해도, Rust에서 수백 개의 패키지를 끌어오고 코드 줄 수가 10배 더 많다면, 절대적인 취약점 수는 더 많아질 수 있음.
20년 전 소프트웨어가 오늘날과 같을 것이라고 알았다면 프로그래머가 되기를 선택하지 않았을 것임. 모든 것이 거대하고, 하드웨어와 소프트웨어가 끝없는 경쟁을 벌이고 있으며, 상황이 더 나아지거나 쉬워지거나 단순해지지 않음.
링크를 클릭하자마자 CTA 배너, Google 광고, 쿠키 배너가 나타남. 쿠키 배너를 닫자마자 또 다른 Google 광고가 나타나고, 스크롤을 내리면 따라다님. 기사를 읽는 동안 적어도 세 개 이상의 광고를 더 봄.
Hacker News 의견
Vernor Vinge의 소설 "A Deepness in the Sky"에서 인류는 아직 빛의 속도를 넘어서는 기술 없이 별들 사이에 퍼져 있음. 우주선은 매우 오래되었고 다양한 시스템과 문명의 기술이 혼합되어 있음.
npm의 대부분의 라이브러리는 불필요하게 많은 기능을 가지고 있음. 저자들은 좋은 설계를 모르고, 모든 라이브러리가 모든 것을 하려고 함.
안투안 드 생텍쥐페리의 "Terre des Hommes"에서, 현대 비행기를 보고, 매년 진화하는 선을 따라가며, 인간이 만드는 모든 것에 대해 생각해본 적이 있는지 물음.
현재 우리가 사용하는 코드의 양이 엄청나게 많음. 예를 들어, 차고 문을 여는 데 5천만 줄 이상의 활성 코드가 필요할 수 있음.
소프트웨어가 위험하다고 여겨져서 사람들은 직접 실행하지 말고 "서비스로서의 X" 제공자나 "클라우드"에 맡기라고 조언받음.
소프트웨어가 더 간결해지지 않는 이유는 시간, 기술, 고액의 인력이 필요하기 때문임.
과거에는 시스템 제공 훅을 표준화하여 모든 개발자가 인터페이스 등에 사용하고, 개발자의 주요 업무는 프로그램 로직을 코딩하는 것이었음.
Rust에 대한 의견으로, Rust가 C++에 비해 줄 당 취약점이 70% 적다고 해도, Rust에서 수백 개의 패키지를 끌어오고 코드 줄 수가 10배 더 많다면, 절대적인 취약점 수는 더 많아질 수 있음.
20년 전 소프트웨어가 오늘날과 같을 것이라고 알았다면 프로그래머가 되기를 선택하지 않았을 것임. 모든 것이 거대하고, 하드웨어와 소프트웨어가 끝없는 경쟁을 벌이고 있으며, 상황이 더 나아지거나 쉬워지거나 단순해지지 않음.
링크를 클릭하자마자 CTA 배너, Google 광고, 쿠키 배너가 나타남. 쿠키 배너를 닫자마자 또 다른 Google 광고가 나타나고, 스크롤을 내리면 따라다님. 기사를 읽는 동안 적어도 세 개 이상의 광고를 더 봄.