GN⁺: Haskell을 뒤로한채 떠나기
(journal.infinitenegativeutility.com)- 저자, 소프트웨어 엔지니어가 10년 동안 사용한 함수형 프로그래밍 언어인 Haskell에서 벗어나는 여정을 공유한다.
- 저자는 코드를 기호적이고 대수적으로 이해하는 Haskell의 능력과 견고한 타입 시스템에 끌렸다.
- Haskell의 타입 시스템은 과도하게 제한적이거나 시끄럽지 않은 엄격한 타입 검사를 허용하여 코드 작성 및 유지 관리를 용이하게 한다.
- 저자는 타입을 사용하여 불변성을 표현하는 Haskell의 능력을 높이 평가하였으며, 이는 컴파일러가 로직을 이중으로 확인하게 하여 코드의 안전성과 정확성을 향상시킨다.
- 이러한 장점에도 불구하고, 저자는 스타일적인 새로움에 대한 열망, 어색한 도구, 그리고 지속적인 변화라는 세 가지 주요 이유로 Haskell에서 벗어났다.
- 스타일적인 새로움은 Haskell 커뮤니티가 새로운 추상화를 실험하는 경향을 가리키며, 이는 혁신적이지만 코드 유지 관리를 어렵게 만들 수 있다.
- 저자는 Haskell의 도구를 "괜찮다"고 평가했지만, Rust의 cargo만큼 사용하기 쉽고 안정적인 도구가 없다고 언급했다.
- Haskell의 지속적인 변화, 특히 정기적인 하위 호환성이 없는 수정은 언어 사용의 마찰을 증가시켰다.
- Haskell에서 벗어났음에도 불구하고, 저자는 여전히 그것의 강점, 즉 코드를 대수적으로 리팩토링하는 능력, 타입 시스템, 그리고 선언적 라이브러리 생태계를 인정한다.
- 저자는 Haskell 사용 여부는 개인의 목표에 달려 있다고 결론짓고, 더 나은 프로그래머가 되기 위해 Haskell을 배우는 것을 권장하지만, 그가 설명한 도전 과제로 인해 기본 언어로 사용하는 것에 대해서는 주의를 당부한다.
Hacker News 의견
- Haskell 커뮤니티는 학습에 대한 강한 강조와 호기심 및 지식 공유의 환경을 조성하는 것으로 알려져 있다.
- 그러나 커뮤니티는 종종 아이디어를 테스트한 후 버리는 데 어려움을 겪어, 전문적인 Haskell 코드베이스가 혼란스럽게 된다.
- Haskell의 툴링은 비판받지만, 대부분의 프로그래밍 언어가 열등한 툴링을 가지고 있다고 주장하는 사람들도 있다.
- Haskell의 툴링은 Hoogle이라는 독특한 기능을 가지고 있으며, 이는 그 유용성 때문에 매우 인정받고 있다.
- Haskell과 그 유일한 합리적인 공개 구현인 GHC의 발전은 지속적인 변화와 불일치 때문에 비판받고 있다.
- GHC와 표준 라이브러리인 base의 특정 버전 간의 연결은 새로운 GHC 버전이 출시될 때 종속성에 변화를 강제하는 문제로 인식된다.
- 저자의 Haskell에 대한 관심 상실은 스타일적인 새로움, 어색한 툴링, 그리고 지속적인 변화라는 세 가지 주요 요인에 기인한다.
- Haskell의 문서화와 툴링은 작업하기 어려웠고, 커뮤니티의 Cabal에서 Stack으로, 그리고 다시 Cabal로의 전환은 개선의 징후로 여겨진다.
- 다른 프로그래밍 언어들은 함수형 프로그래밍의 요소를 통합하여 일부 개발자들에게 더 매력적으로 만들었다.
- 일부 개발자들은 코드 작성이 더 간단하다는 이유로 Haskell에서 F#으로 이동했다.
- Haskell은 배우기 어렵다고 여겨지며 그 라이브러리들은 종종 구식이거나 반쪽짜리이다.
- Haskell의 성능은 비판받으며, 게으른 평가는 메모리 문제와 느린 성능을 초래한다.
- Haskell 개발자들에게는 언어의 특수성 때문에 일자리 전망이 제한적이라고 여겨진다.
- Haskell에서의 디버깅은 언어의 복잡성 때문에 도전적이라고 설명된다.
- Scala는 Haskell에 대한 좋은 대안으로 여겨지며, 양쪽의 장점을 모두 제공한다.
- 일부는 일상적인 소프트웨어 엔지니어링 작업에서 고급 언어 기능의 필요성을 의문시한다.
- Haskell의 연구와 학문적 추구에 대한 초점은 실용적인 프로그래밍의 필요성과 충돌할 가능성이 있다고 여겨진다.
- 게시물은 Haskell에서 실험적인 기능과 안정적인 기능을 분리할 방법이 필요하다고 제안한다.
- 저자는 Haskell에서 새로운 고급 타입 기능을 사용하도록 압박받지 않으며, 복잡한 타입을 얼마나 사용할지에 대한 직관을 개발하는 것을 제안한다.