요즘 유행하던 FP(함수형 프로그래밍)이던 OOP(객체지향 프로그래밍)이던 절차형 프로그래밍이던, 어떤 것이든 뭐가 좋다 나쁘다 할 것이 이젠 없다. 많이 그리고 정확히 알아두면 좋다.
저것들은 단지 구현을 위한 방법과 그 도구들일 뿐이다. 어떤 방법을 썼을 때 좀 더 간결한 코드를 만들어 쓸 것인지, 좀 더 효율적인 코드를 만들어 쓸 것인지의 차이일 뿐이다.
요즘 개발 환경이 복잡하다는 건 누구나 다 아는 사실이다. 그리고 그를 간단하게 만들기 위해서 여러가지 기법들이 생겨나고 있고, 라이브러리들이 많이 만들어지고 있다. 그 안에 저런 기법, 즉 저런 표현 도구들을 알아서 잘 써먹느냐 아니냐에 따라서도 구현의 질이 달라진다.
함수형 프로그래밍에 대해서 잠깐 공부하면서 봤지만, 실제로 많은 복잡한 내용들을 짧은 코드로 만들 수 있도록 해준다. 그래서 기존에 객체지향으로 했을 때 코드는 복잡해지지만 자료의 구조를 실상에서처럼 잘 구현하고 하던 부분에서 생길 수 있는 복잡함, 그것들을 해결해 줄 수 있는 방법이 되기도 한다. 근데 그건 기존의 개발 패러다임에서도 하나 둘 맞춰서 추가되고 있다. 그것을 그전부터 이해하던 사람들이 보기에는 생소하고 이해하기 어려워서 그렇지.
그리고 각각의 이 도구들과 표현들이 잘 지원되기 위해 서로 공존하는 것 또한 요즘의 환경이다. 윈도우 프로그래밍에서 F#과 C#이 CLR 환경에서 공존하듯, 자바와 스칼라가 JVM에서 공존하듯 하는 것과 같은 이치라고 본다. 그들이 서로 공존하면서 필요에 따라 서로의 패러다임에도 영향을 미친다. 그에 맞게 업데이트도 된다. 도구의 버전이 업데이트 될수록 그 기능들은 개발자들이 익혀서 알아두어야 하는 기능들로 추가가 되고, 언젠가는 쓰일 때가 온다. (어떻게 복잡해질지 몰라서..)
더 많은 이유들이 있긴 하지만, 많이 알아두는 것에 대해서는 나쁠 게 없다. 그리고 그건 원래 개발자들이 가져야만 하는 숙제 같은 것일지도 모른다.
그리고 이제 정확히 알아두는 것. 이건 좀 여러모로 짜증이 많이 났다. 이젠 한번 배워서 써먹었다고 끝나는 시대도 아니고, 지속적으로 업데이트 되면서도 그전에 배운 내용들이 구식이나 이미 없어진 수준의 이야기가 되는 경우도 많다. 근데 이 부정확함만 가지고 지속적으로 나나게 되면… 꼬인다. 제대로 꼬인다. 그렇기에 제대로 알고 덤벼야 한다. 특히나 요즘처럼 처리량도 많고 처리 방법에 대해서도 복잡한 구졸 사용하게 되면 더더욱 정확한 이해와 사용을 요구하게 될 것이다. 요즘 말 많은 빅데이터와 머신러닝 분야도 실제로 코드로 구현하고자 하면 이 복잡한 문제를 해결하려 할 때, 어떤 구조대로 설계를 해봐서 진행해야 하는지를 깊이 생각하는 것이 주고, 그게 코드로 되면 은근 지원되는 거 잘 이용하는 것이 태반인 경우도 많으니…. 정확히 알아두면 그 뒤에 고생은 조금이나마 덜하겠지.