3P by neo 4달전 | favorite | 댓글 1개

2024년을 위한 간결한 소프트웨어에 대한 호소

  • 소프트웨어의 부피가 커지는 현상, 즉 '블로트(bloat)'는 여전히 소프트웨어의 가장 큰 취약점임.
  • 간결한 소프트웨어를 개발하는 것은 사용자 경험을 향상시키고, 보안 위험을 줄이며, 시스템의 효율성을 높이는 데 중요함.
  • 개발자들은 더 적은 코드로 더 많은 기능을 제공하는 방향으로 소프트웨어를 설계해야 함.

GN⁺의 의견

  • 소프트웨어의 '블로트' 현상은 시스템의 성능 저하와 보안 취약점을 초래할 수 있어, 개발자들은 코드 최적화와 효율적인 설계에 집중해야 함.
  • 사용자들은 더 빠르고 안전한 소프트웨어 경험을 원하기 때문에, 간결한 소프트웨어는 시장에서 경쟁력을 갖출 수 있음.
  • 이 기사는 개발자들에게 현재의 소프트웨어 개발 트렌드를 재고하고, 더 나은 소프트웨어를 만들기 위한 동기를 부여하는 데 도움이 될 수 있음.
Hacker News 의견
  • 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 광고가 나타나고, 스크롤을 내리면 따라다님. 기사를 읽는 동안 적어도 세 개 이상의 광고를 더 봄.

    • 이런 상황에서 해당 내용을 진지하게 받아들이기 어려움.