개발에 대한 환경은 하루가 다르게 변화하고 있다. 이러한 변화에 대해서 생산성이 향상된다고들 많이 주장을 하고 있다. 과연 새로운 기술과 새로운 기술프레임워크가 생산성을 향상시키는 것일까? 그리고 그에 대한 반대급부는 없는 것일까?
얼마전에 iOS를 다시 개발할 일이 생겼다. 너무 오래전에 잠깐 했던 기술이고, 그당시는 Object-C밖에 없어서 해당 언어를 연습하고 개발에 참여했었다. 그러다가 이번에는 Swift라는 언어를 Apple에서 새로 만들어서 그 언어로 개발을 해볼까 했는데, 많은 부분들이 참 간략화가 가능해지는것을 알았다. 특히 람다식은 기존의 함수개념을 완전히 바꿔놓는 수준이였다.
안드로이드 개발을 최근에 외주일을 하게 되서 직원에게 맡겼다가, 진도가 생각보다 안나가서 지원을 해주려고 봤더니, 이 친구가 RxJava, Binding 기술을 이용해서 개발을 하고 있었다. Kotlin은 내가 자바로 개발하라고 해서 안썼다고는 하는데, 지금 해놓은 수준은 Kotlin을 썼던 안썼든 상당히 내가 아는 수준을 벗어났다. 왜 이렇게 개발했느냐고 했더니, "코드를 아주 많이 줄여줘서 생산성을 높일려고 했습니다."가 답이였다.
최근에 나오는 기술들은 기존의 기술, 언어에서 아쉬운 부분들을 간략히 하거나, 새로운 개념을 도입하여 새로운 방식으로 개발을 할 수 있게 도와주는 방향으로 가는것 같았다. JSP를 아니는 사람에게 스프링부트는 초기에 많은 설정들이 있지만, 자동화 해주는 것들이 많아서 확장해 나가는데 거부감은 줄어들었을것 같다. 초기 C 개발자가 OOP개념이 도입된 C++을 접했을때 그런 수준의 느낌정도?
하지만, 그건 기존의 기술을 알고 있다는 가정에서 스탭바이 스탭으로 나갈때 좋다고 판단이 든다. 최근의 람다식은 기존의 함수개념을 완전히 깨부수는 수준이였다. 이건, 기존의 함수에 대한 개념이 잡혀있고, 문제점이 무엇이었다는걸 알았을 때 이해도가 높아질 수 있다. 하지만, 처음부터 람다식으로만 배운다면 어떨까?
생산성이 높아진건 처음부터 배운 사람에게는 해당되는 사항이 아니다. 그냥 책에서 높아졌다고 하니 높아진 것이다. 하지만, 생산성은 그것만으로 이야기 되는 것이 아니다. 협업에서 진정한 생산성이 높아져야 하는 것이다.
당장에 나는 RxJava와 Data Binding을 보아야 하고, 기존에 이 친구가 짜놓은 소스에 대한 이해를 하고 시작해야 한다. 나로서는 생산성이 매우 나빠진 것이다. 향후 이 코드가 다른 개발자들에게 전달이 되었을 때 어떻게 생각을 하게 될까를 보면 일단 이 코드를 접하기 위해서는 상당수준의 학습을 하고 와야만 가능해진다. 그런 측면에서 생산성은 오히려 새로운 기술로 인해 전체적으로는 나빠지게 되는 것이다.
빠르게 변하고, 빠르게 나오는 기술속에서 자신의 경쟁력을 갖기 위해서 새로운 기술을 접하는 친구들이 많아지는건 매우 좋은 증상이고, 독려해야 한다. 하지만, 프로그래머는 새로운 기술을 알고 있는 사람이 아니라, 주어진 문제를 어떻게 해결할 것인가를 분석할 수 있어야 한다. 그런 면에서 대부분의 친구들은 원론적인 학문에 대한 접근을 거의 하지 않고 현장에 투입되게 된다. 그리고 코더로서의 역활을 하게 된다. 개발이 된 이후에 어떠한 피드백도 주지 않고, 개발 초기에 투입시켰을 때 아무런 대응도 하지 않는다. 다만, 회의때 부정적인 의견만 내게 된다. 문제의 본질은 "너가 알고 있는 수준에서 개발을 할 수 있는지를 판단해라"가 아니라 주어진 문제를 어떻게 분석해서 어떤 방식으로 해결할 수 있는가를 봐야 하는데 말이다.