기본 개발자 소양을 갖추기 전에 Machine Learning은 하지 마라!

Machine Learning을 사용하는 International 프로젝트를 처음 경험하다보니 ML에 대한 관점이 많이 바뀌었다.

사실 프로젝트를 하면서 사내에서 쓰는 ML라이브러가 어떻게 돌아가는지 소스코드를 까볼 기회조차 없었고, 심지어 여러 세부 세팅을 조작해볼 기회도 역시 없었다. 그럼 뭘 했나???ㅋㅋㅋ

사실 위와 같이 ML 라이브러리를 살펴볼 필요가 없었다. 대강 어떻게 알고리즘이 돌아가는걸 알고, 이 라이브러리는 잘 돌아갈 것이라 믿으면 그만이다.

ML이 물론 프로젝트 내에서 중요한 부분이기는 하지만, ML은 데이터(features)를 가지고 헨들링 하는것이지.. 세부 알고리즘 세팅을 가지고 하는 작업은 아니기 때문이다.
이런 접근 방법은 블랙박스 모델처럼 보이는 ML을 가장 효과적으로 애플리케이션 내에서 쓸 수 있는 방법이라고 생각한다. 내 경험상 새로운 획기적인 ML 알고리즘을 만들지 않는 이상 알고리즘을 바꿈으로서 얻어지는 성능향상은 거의 없다. 더군다나 특정 알고리즘 설정을 바꾼다고 해서 절대 성능향상은 없다. 만일 있다면, 다른 부분에서 성능저하가 분명히 있을 것이다(공짜 점심은 없다…. ㅋ ). 물론 애플리케이션의 목적에 따라 최적 알고리즘이 있을 수 있긴 하지만, 역시 큰 성능상의 차이는 없다.

사실 ML보다 내가 더 신경을 많이 썼던 부분은 ….. 애플리케이션 개발 능력이였다. 말하자면 코딩, 더 크게 보자면… 알고리즘, 클래스 설계 이런 부분이였다.
요런 규모 정도의 라이브러리 개발 프로젝트를 진행해본 경험이 전무한 관계로… 위 능력들을 빠르게 키우는데 내가 가장 많은 시간을 투자했던 부분이였다. 이 다음으로 많은 시간을 투자한 곳은, 데이터 분석 정도.. 침착하고 냉정을 잃지 않는 …분석…그런거..

Machine Learning이라는 단어가 소프트웨어 개발의 매직 워드로 쓰이는 실정이라는 사실은 부정하기 힘들다. 나역시 그렇게 느껴왔으니까, 하지만, 소프트웨어 개발 전체에서 ML은 그리 단어만큼 매직을 부리는 부분은 아닌듯 싶다. 차라리… 정확하고, 이해하기 편하고, 퍼포먼스 좋게 알고리즘을 설계하거나 코드를 짜는 능력이… 가장 먼저 선행되어야 된다고 생각한다.

나 역시, 내 생각을 코드화 시키는데 큰 문제 없는 개발자 였지만, 프로젝트 수준에 맞게 코드를 작성하는 능력은 부족했었던게 분명했다. 그래서 많은 반성이 필요했다. (프로젝트 수준의 의미는 함께 개발하는 개발자들의 수준과 거의 비슷한 것을 의미한다. 함께 개발 하려면, 당장 능력은 되지 않더라도, 금방 따라갈 수 있는 자질은 갖추어야 할 것이다.)
 
누군가, ML을 가미한 프로젝트를 한다면, 한번 묻고 싶다. 과연 당신은 비슷한 개발 프로젝트를 충분히 견딜 수 있는 개발자 내공이 있느냐고 말이다. 

결국 하고 싶은 말은…
Machine Learning을 주구장창 외치기 전에 개발자로서 프로젝트에 필요한 기반 기술들에 익숙한지 먼저 자문을 해야 할 거란 이야기다(깊은 개발 언어에 대한 이해, 그리고 아키텍처, 디버깅 능력…등등).
이런 프로젝트 개발에 진정 자신이 있을때 적제 적소에 가볍게 Machine Learning 개념을 집어 넣어 주는 센스는 당신이 만드는 애플리케이션을 좀더 빛이 나게 할 수 있을거라 생각한다. 

CC BY-NC 4.0 기본 개발자 소양을 갖추기 전에 Machine Learning은 하지 마라! by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.