▲GN⁺ 2024-01-15 | parent | ★ favorite | on: 배열 언어로 사고하기(github.com/razetime)Hacker News 의견 배열 언어의 유용성과 이해 가능성에 대해 여러 사람들이 의문을 제기하고 있음. 배열 언어는 모든 문제에 적합하지 않음. 많은 유형의 문제에 대해 놀라울 정도로 유능함. 배열 언어 사용자들은 대체로 매우 똑똑함. 배열 언어의 작동 방식을 배우는 것은 큰 도전임. 배열 언어에서 "절차적" 코드를 작성하는 것은 매우 나쁜 일임. 암시적 프로그래밍(tacit programming)의 이해는 정신을 확장시키는 멋진 경험임. 동사 연쇄(verb trains)를 내면화할 때의 경험. 배열 기반 언어가 모든 차원의 배열을 다루는 방식의 이해. "under"의 작동 방식 이해. 함수 지수(function exponents) 작동 방식 이해. 배열 언어의 놀라운 측면이 많으며, 위의 목록은 그중 일부에 불과함. Aaron Hsu가 병렬 APL 컴파일러를 개발하는 과정을 보며 배열 언어의 실제 잠재력을 확신하게 됨. APL 코드의 "의미 밀도(semantic density)"에 대한 논의. 배열 프로그래밍에 대해 들어본 적이 없고 소개를 원한다면 "The Array Cast" 추천. 70년대에 APL/APL2를 발견하고 반했지만, 함수를 구성하는 능력에 더 매력을 느낌. Haskell은 순수하고 타입화되어 있어 APL보다 더 재미있고 강력함. APL의 "사고의 도구로서의 표기법"은 과도한 간결함을 정당화하는 논리로 보임. 배열 언어 사용에서 가장 중요한 깨달음: 동사는 알고리즘임. 동사(또는 부사)의 연속은 사용해본 가장 직접적인 구성 방식임. 프로그램은 문장과 표현의 집합이 아니라 알고리즘의 구성임. 배열, 맵, 함수에 걸쳐 도메인과 범위를 일관되게 다루는 개념. 코드를 읽을 때 눈이 "뛰어다닐" 필요가 없는 왼쪽에서 오른쪽으로의 평가. 데이터에 코드를 보내는 것이 가능하며 선호됨. K 언어의 추가 이점: 뷰(즉, 의존성)를 직접 구현할 수 있고, 인터프리터를 통한 핫 코드 로딩이 가능함. 배열 언어에 대한 질문: "N보다 작은 숫자 중에서 조건 P가 참인 모든 숫자를 찾기"와 같은 작업을 어떻게 수행하는가? 배열 언어에서는 일반적으로 1부터 N까지의 배열을 생성하고, 배열에 대해 조건을 테스트한 후, 조건이 참인 요소만 얻기 위해 마스크를 적용함. N이 크고 조건이 자주 참이 아닐 경우, 불필요하게 많은 임시 배열을 생성하는 것은 메모리와 자원 낭비로 보임. 배열 언어의 구현은 이러한 문제를 최적화하거나, 게으른 평가(lazy evaluation)와 같은 기법을 사용하여 해결할 수 있음. J 언어에 대한 경험: 배열 언어의 패러다임이 편향되어 있으며, 모든 문제를 배열의 중첩으로 생각하는 것이 도움이 되는지 확신할 수 없음. 문제를 단순화할 수 있는 데이터 구조를 자유롭게 생성하는 것이 알고리즘 부분을 크게 단순화할 수 있음. APL/J/K를 사용하기 위해서는 이러한 편향 때문에 더 똑똑해야 함. K 언어 문제를 풀면서 얻은 인상: K 언어는 의도적으로 난해함. 퍼즐과 영리한 해결책에 적합한 언어지만, Python에서 numpy 배열로 작업하는 것이 배열 언어를 배우고 배열로 생각하는 방법을 가르쳐줌. 배열 언어 J의 예시: dot =: +/ . *를 사용하여 P와 Q의 점곱(dot product)을 계산함. K 언어의 문법이 더 짧지만, K 언어의 작동 방식에 대한 많은 내장된 맥락을 머릿속에 유지해야 함.
Hacker News 의견
배열 언어의 유용성과 이해 가능성에 대해 여러 사람들이 의문을 제기하고 있음.
배열 언어의 놀라운 측면이 많으며, 위의 목록은 그중 일부에 불과함.
배열 프로그래밍에 대해 들어본 적이 없고 소개를 원한다면 "The Array Cast" 추천.
70년대에 APL/APL2를 발견하고 반했지만, 함수를 구성하는 능력에 더 매력을 느낌.
배열 언어 사용에서 가장 중요한 깨달음:
배열 언어에 대한 질문: "N보다 작은 숫자 중에서 조건 P가 참인 모든 숫자를 찾기"와 같은 작업을 어떻게 수행하는가?
J 언어에 대한 경험: 배열 언어의 패러다임이 편향되어 있으며, 모든 문제를 배열의 중첩으로 생각하는 것이 도움이 되는지 확신할 수 없음.
K 언어 문제를 풀면서 얻은 인상: K 언어는 의도적으로 난해함.
배열 언어 J의 예시:
dot =: +/ . *를 사용하여 P와 Q의 점곱(dot product)을 계산함.K 언어의 문법이 더 짧지만, K 언어의 작동 방식에 대한 많은 내장된 맥락을 머릿속에 유지해야 함.