F# 101

@codemaru · July 24, 2013 · 7 min read

F# 인트로덕션: 강연 하시는 분이 유머 감각이 좀 있으십니다. 욱겨요 ㅋ~

학부 전공이 컴퓨터 공학이었습니다. 4년을 다녔는데 항상 아쉬웠던 점은 함수형 언어에 관한 수업을 듣지 않은 것이라는 생각이 많았습니다. 학교에 함수형 언어 수업이 있었는지는 잘 모르겠네요. 어쨌든 MIT의 “컴퓨터 프로그램의 구조와 해석” 같은 책들을 보면서 전 항상 프로그래머로써 촌스럽다는 생각을 많이 했었습니다.

그럼 졸압하고 혼자 공부하면 됐지 않냐구요? 네. 옳은 말씀입니다. 하지만 항상 함수형 언어들은 한가지 맹점을 가지고 있었는데 제가 사용하기에 그다지 실용적이지 않다는 점이었습니다. 심지어 임베딩을 해서 쓰기에도 적합한 타겟을 물색하기가 쉽지 않았죠. 그렇게 시간은 하염없이 흘러갔습니다.

시대가 많이 변했죠. CPU는 하나라고 가정되던 세상에서 핸드폰 속에도 쿼드코어가 들어가는 시대가 됐습니다. 멀티 스레드 프로그래밍은 이제 일반적인 화두가 돼 버렀죠. 구글을 기점으로 마치 새로운 기법인마냥 “맵-리듀스”란 용어가 한때 업계를 휘젓기도 했습니다. 바야흐로 함수형 언어가 다시 각광을 받을 수 있는 시대가 된 것이죠.

함수형 언어는 기본적으로 사이드 이펙트에서 자유롭기 때문에 명령형 언어(C,C++,Python, …)에 비해서 병렬화를 하기가 엄청 수월하다는 장점이 있습니다. 더불어 위 인트로덕션 동영상에도 나오지만 함수형 언어를 이용한 문제 해결 과정은 정말이지 문제 자체에만 집중할 수 있게 해준다는 느낌이 강하죠. 문제를 풀기위한 구질구질한 작업들은 잠시 잊어도 되는 것입니다. 당연히 생산성이 향상될 수 밖에 없겠죠.

이런 시대적 흐름에 발맞춰 MS에서는 F#이라는 .NET용 함수형 언어를 개발했습니다. MS가 개발한 언어답게 Real-World에서 바로 사용할 수 있을 정도로 실용성이 강조됐습니다. 기존 .NET 프레임워크를 잘 활용할 수 있도록 구성돼 있죠. 특히나 제가 느낀 인상은 MS가 상당히 공을 들이고 있다는 점입니다. F# 배우기 페이자만 보더라도 정말 토나오죠. MVP 리드도 F# MVP를 간절하게 찾고 있는 모양이예요. 이러니 저리니 해도 일자리를 구한다는 의미라면 사실 F#이란 언어가 크게 시장성이 있지는 않을 겁니다. 그래도 배워두면 여러분의 강력한 무기 중에 하나가 될 거라는 점은 장담할 수 있을 것 같아요.

fs0
MVP 계의 블루오션 F#, 지금 시작하세요 ㅋ~

함수형 언어는 리그 오브 레전드 리그와 비슷한 특징을 하나 더 가지고 있는데요. 게임 방송을 보면 와 저렇게 하면 쉽게 되겠구나 라고 생각되는데 막상 직접 해보면 생각처럼 잘되지 않습니다. 함수형 언어도 남들이 풀어놓은 솔루션을 볼 때면 와 이거 정말 쉽네, 저렇게 간단하게 되는구나, 라고 생각되는데, 막상 스크래치해서 처음부터 만들어 내려면 하나부터 열까지 생각이 탁탁 막히는 느낌이 들겁니다. 바로 명령형 언어에 너무 익숙해져버린 뇌 때문이죠. 함수형 언어를 배울 때 가장 먼저 익혀야 하는 것은 함수형 시각으로 문제를 생각하는 방식입니다. 최근에 “Real-World Functional Programming”이란 책을 한 권 구입했습니다. 서문에 이런 저의 생각이 잘 나와 있더군요 ㅋ~ 물론 본문은 아직 시작을 못했습니다.

fs1

This book is different from many other programming books available today. It doesn’t focus only on a specific programming language or library. Instead, it use the presented languages and libraries to explain a way of thinking — a way of thinking that becoming increasingly important and has influenced many recent technologies.

– Real-World Functional Programming, Tomas Petricek & Jon Skeet

최근에 우리는 .NET 환경을 적극 활용하는 방향으로 전환했습니다. 전 F#으로 패턴 스캐닝 엔진을 새롭게 쓰는 작업을 하고 있습니다. .NET이 일반화된 환경이기도 하고, MONO 같은 오픈 소소를 활용하면 손쉽게 멀티 플랫폼의 장점을 누릴수도 있기 때문입니다. 보안적인 측면에서도 네이티브와 듀얼 구성을 한다면 다양성 측면에서는 오히려 보안이 한층 더 강화된다고 할 수 있습니다.

감히 예측컨데 앞으로는 함수형 언어로 생각을 할 수 있는 프로그래머와 그렇지 않은 프로그래머로 나뉘는 시대가 올 겁니다. 미리미리 함수형 사고 회로를 뇌에다 설치하는 작업을 해 두도록 합시다. 설령 그런 시대가 오지 않아도 손해 보진 않을 거예요 ㅋㅋㅋ~

 1  1

 

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중