GN⁺: 소프트웨어 추상화가 문명을 파괴하는가? (2021)
(datagubbe.se)-
Jonathan Blow의 주장 요약
- 세대 간 정보 전달이 희석됨.
- 이론보다 실천이 기술 유지에 더 중요함.
- 소프트웨어가 세상을 운영함.
- 추상화는 저수준 프로그래밍에 대한 무지를 조장함.
- 저수준 지식을 잊으면 중요한 소프트웨어를 유지할 수 없어 문명이 붕괴할 것임.
-
비판 및 반론
- Blow의 주장은 오류와 오해가 많음.
- 정보의 진실성이 중요하며, Blow의 정보는 여러 면에서 잘못됨.
- "Five nines" (99.999% 가동률) 지표는 여전히 사용되고 있음.
- 견고한 소프트웨어는 여전히 존재하며, 기술 발전은 계속되고 있음.
- 추상화가 능력 상실로 이어진다는 주장은 과장됨.
-
기술 발전과 추상화
- 많은 프로그래머들이 메모리 관리와 포인터를 다루지 않으려 함.
- C와 어셈블리 코드를 작성하는 사람들이 여전히 많음.
- Rust와 같은 새로운 언어는 견고성에 중점을 둠.
- 추상화는 새로운 기술을 발전시키는 데 기여함.
-
Facebook의 생산성 논란
- Facebook의 진정한 제품은 광고 전달 플랫폼임.
- 많은 프로그래머들이 광고 시스템을 개선하는 데 기여함.
-
과거와 현재의 비교
- 과거의 소프트웨어 개발 환경과 현재는 크게 다름.
- 현대의 컴퓨터는 과거보다 훨씬 견고함.
- 사용자의 기대치가 높아짐에 따라 소프트웨어 복잡성이 증가함.
-
추상화와 지식 상실
- 추상화는 지식 상실을 가속화할 수 있음.
- 그러나 추상화는 많은 사람들에게 창의성을 발휘할 기회를 제공함.
- 중요한 것은 중요한 시스템을 유지할 수 있는 기술 기반을 유지하는 것임.
-
결론
- Blow의 주장은 일부 타당하지만, 많은 부분에서 과장되고 오해가 있음.
- 소프트웨어 복잡성과 추상화는 해결 가능한 문제임.
- 디지털 세계의 더 큰 문제는 프라이버시와 자유임.
Hacker News 의견
-
나는 Montana State에서 시스템 수업을 가르치며, 학생들이 수업을 시작할 때 파일 시스템이 무엇인지 이해하지 못하는 경우가 많음
- Blow의 의견에 일부 동의하지 않지만, 고등학생부터 기술 학생들을 위한 NAND-to-Tetris 스타일의 교육이 필요하다고 생각함
- Little Man Computer와 간단한 MIPS 에뮬레이터 같은 "구식" 모델을 사용하여 학생들이 기술의 기원을 이해하도록 도움
- 현대의 64비트 아키텍처 책을 보면 웃음이 나옴
- 기술을 근본적으로 연결하는 것은 어려운 문제임
-
당신의 의견에 동의함. Blow의 강연을 보았고 비판이 중요하다고 생각함
- Blow가 "화면에 픽셀을 그릴 수 없다"고 말했을 때는 맞다고 생각함
- 나는 중간 규모 게임 회사의 게임 엔진 프로그래머이며, 그래픽 코드를 작업할 사람을 고용하는 것이 매우 어려워지고 있음
- DX12는 이전 세대(DX11)보다 프로그래머에게 많은 것을 요구하며, Microsoft도 DX12를 배우는 것이 이전 그래픽 API 경험 없이는 매우 어렵다고 인정함
- 이러한 API는 그래픽 카드의 한계를 극복하고 저수준 최적화를 구현하려는 개발자를 위한 것이지만, 이제는 산업 표준이 되어 경험 없는 사람에게는 가르치기 어려움
- 변화가 없다면 고용 풀은 계속 줄어들 것임
-
오래된 웹 개발자가 추상화에 대해 불평하면 React 개발자를 겨냥함
- Python 개발자가 추상화에 대해 불평하면 오래된 웹 개발자를 겨냥함
- C++ 애플리케이션 개발자가 추상화에 대해 불평하면 Python 개발자를 겨냥함
- 펌웨어 개발자가 추상화에 대해 불평하면 애플리케이션 개발자를 겨냥함
- 전기 엔지니어가 추상화에 대해 불평하면 펌웨어 개발자를 겨냥함
- 개인의 지식에 기반하여 "과도한 추상화"의 경계를 설정하고 이후 모든 것을 "문명의 파괴"라고 부르는 것은 독특한 견해임
-
서버에서 JavaScript와 React 같은 것들이 웹을 소프트웨어 개발의 혼란으로 만들었음
- 많은 아이들이 HTML이 브라우저에서 렌더링된다는 것을 모르고 React가 브라우저에서 렌더링되는 것이라고 생각함
- Vercel의 CEO가 React를 개발의 Linux 커널이라고 생각하는 것은 어리석음
-
Blow는 개발에 대해 훌륭한 점을 자주 지적하지만, 종종 핵심을 놓침
- 그는 훌륭한 업적을 이루었고 들을 가치가 있는 아이디어를 가지고 있지만, 때때로 말도 안 되는 소리를 함
- 문명의 붕괴에 대한 이야기는 그런 말도 안 되는 소리 중 하나라고 생각하며, OP가 제공한 반박에 감사함
- Casey Muratori에 대해서는 언급하지 않겠음, 그는 Blow처럼 하려고 하지만 좋은 부분조차 제대로 하지 못함
-
현대 소프트웨어 환경에는 많은 문제가 있으며, 과도한 추상화가 문제라고 생각함
- 그러나 반대 극단도 나쁘며, 사람들은 과거를 지나치게 낭만화함
- 충돌과 재부팅 문제뿐만 아니라, 호환성을 추구한 시스템조차도 불일치 문제를 겪었음
- 가장 신뢰할 수 없는 현대 시스템(Windows 11)에서도 내 컴퓨터는 2010년 이전의 어떤 컴퓨터보다 더 신뢰할 수 있음
- Windows 95용으로 작성된 소프트웨어도 실행할 수 있음
-
모든 단순화가 추상화는 아님. 모든 추상화가 단순화는 아님
- 단순화를 추구하는 것이 보통 추상화를 동기 부여함
- 추상화가 소프트웨어나 문명을 죽인다고 생각하지 않지만, 잘못된 추상화는 유연성과 접근성을 저해함
- 거의 모든 언어에서 구문 설탕을 예로 들 수 있음
- 특정 요소 때문에 실수를 더 많이 하는 것이 아니라 복잡한 문제를 해결하기 위해 도구를 잘 사용하는 것이 어려움
-
잘못된 추상화는 많음. 기술의 "속도의 종교"와 자만심 때문에 첫 시도에서 끝나는 경우가 많음
- 인기 있는 프로젝트의 일부가 되면 다른 사람들이 모방함
- 10-20년 동안 반복되면 거대한 혼란이 발생함
- Jonathan Blow의 강연을 좋아하며 매년 한 번씩 돌아봄
- 그는 논란의 여지가 없는 말을 하지만, 많은 개발자들이 최선을 다하지 않고 있다는 것을 알고 있음
-
저자는 새로운 세대에 속하며, Blow가 말한 것을 이해하지 못함
- Figma가 디자인 세계를 파괴하고 있다고 말하면 젊은 디자이너들은 모든 것이 좋다고 생각함
- 그들은 그 환경에서 자라지 않았기 때문에 문화와 경험의 동등한 것을 배울 가능성이 적음
-
"저수준의 것을 잊으면 문명이 무너질 것"이라는 주장에 반대함
- 저수준 시스템을 사용하여 고수준 프로세스를 모델링하는 데 너무 많은 복잡성이 있음
- 복잡성은 문제이며, 복잡성을 최소화하고 우발적인 복잡성을 피해야 함