Functional Programming For Scientists

2018.04.27 Tae Geun Kim

글을 쓰고 있는 지금(2018년) 기준으로 프로그래밍 패러다임에 지각변동이 일어나고 있습니다. 전체적인 순위는 별 차이가 없지만 내부를 들여다 보면 상당히 많은 부분 변화가 있습니다. 철옹성 같이 1위를 지키던 Java가 무너져가고 Kotlin과 Scala가 그 자리를 천천히 잠식해가고 있습니다. iOS에는 오랫동안 써왔던 Objective-C가 퇴장하고 Swift가 주역으로 떠올랐습니다. Javascript는 여전히 굳건하지만 함수형 자바스크립트라는 말이 늘어나고 동시에 함수형 반응형 프로그래밍(FRP)이라는 용어가 등장했습니다. 서점에는 "Functional Programming in C++" 등과 같은 기존의 언어들로 함수형 프로그래밍을 구현하는 책들이 늘어났구요. 또한 과학계에서는 아직 유명하진 않지만 Julia라는 멋진 언어가 등장하여 점유율을 높여가고 있죠.

위에서 언급한 모든 변화에는 공통점이 있습니다. 바로 함수형 프로그래밍과 연관이 있다는 것입니다. Swift, Kotlin, Scala, Julia는 모두 준 함수형 언어이며 객체지향으로 만들어졌던 C++, Java, Javascript, C#, Python 등의 전통적인 강자들도 최신 업데이트마다 함수형 도구들을 달고 나옵니다.

분명 함수형 패러다임은 새로운 것이 아닌데 왜 최신 트렌드인 것처럼 뜨겁게 다뤄질까요? 또한 프로그래밍 업계와 밀접한 과학자들은 이런 시대에 어떤 스탠스를 취해야 될까요?

요즘 과학계는 프로그래밍 없이는 연구 자체가 불가능한 경우가 많을 정도로 프로그래밍에 많은 부분을 의존하고 있습니다. 하지만 "Scientists are some of the worst programmers on the face of the planet" 소리를 들을 정도로1 소위 말하는 쓰레기 코드를 양산하는 과학자들이 많습니다. 물론 연구하기도 바쁘니 도구따위에 시간을 쓰기 아까울 수 있습니다. 하지만 적어도 이 도구가 어디에 쓰이는 것인지, 저 도구와 이 도구 중에 무엇이 더 적절한지 정도는 판별할 수 있어야 도구를 사용했다라고 말을 할 수 있습니다. 우리가 요리를 하는데 불도저를 쓰는 것은 엄청나게 비효율적인 일이니까요.

그럼 개발자들의 트렌드를 그대로 따라가면 되는 것인가요?

그것도 옳은 것만은 아닙니다. 트렌드는 분명 이유가 있을 것이지만, 그것이 과학에서 잘 적용이 되느냐는 또 다른 일이니까요. 개발자들과 과학자들은 프로그래밍을 한다는 것에서 공통점이 있지만 근본부터가 다릅니다. 객체지향을 모르는 개발자는 없지만 아는 과학자는 드물고 대학교 레벨의 수학을 모르는 과학자는 없지만 개발자는 모를 수 있습니다. 따라서 개발자에겐 객체지향이 함수형 보다 상당히 쉬운 편입니다만, 과학자들에겐 오히려 객체지향이 낯설고 어려운 개념일 수 있습니다. 순전히 필자의 경험이지만 필자에게는 함수형 언어인 Haskell이 객체지향 언어인 Java보다 훨씬 쉬웠습니다.

함수형 언어는 분명 과학에 잘 녹아들 수 있는 패러다임입니다. 하지만 안타깝게도 이는 과학자들에겐 거의 알려져 있지 않습니다. 따라서 이 글이 한 걸음 더 다가갈 수 있게 되는 계기가 되길 바랍니다.

그럼, 이만 각설하고 시작해봅시다.

1. Physics Forum

results matching ""

    No results matching ""