견해
컴퓨터 공학 지식이 안드로이드 개발자로서 실무에 직접적으로 사용되는 경우는 많지 않다. 따라서 CS에 대한 지식이 깊지 않아도 당장 주어진 요구사항을 구현하고 코드를 해석하는 데에는 문제가 되지 않는다. 하지만 최근 들어 다음과 같은 고민들이 생겼다.
첫째로 문제 상황을 마주했을 때 익숙한 해결 방식으로만 해결하려 한다는 것, 그로 인해 시야가 한정되는 느낌이 들어 성장이 멈춘 느낌이다. 결국 우리가 사용하고 있는 기술의 로우레벨로 가면 갈수록 CS와 밀접해지기 때문에 CS를 공부하면 시야를 넓히고 새로운 인사이트를 얻을 수 있다고 생각한다.
둘째로 CS 기초가 허술하다보니 안드로이드 프레임워크를 다루는 것 외에는 미지의 영역과 같이 보인다는 것이다. 결국 안드로이드 개발을 하는 것은 구글에서 잘 추상화한 API를 가져다 활용하는 것이기 때문에 내부적으로 어떤 원리로 동작하는지에 대한 이해도가 부족함을 느꼈다. 단편적인 예시로 안드로이드 스튜디오의 실행 버튼을 누르면 자동으로 컴파일과 빌드가 진행되고 안드로이드 운영체제 디바이스 혹은 에뮬레이터에서 실행이 되는데, 이러한 과정의 내부 원리는 잘 알지 못한다. 또한 회사의 프로젝트는 모두 Compose로 이루어져 있지만 Compose 컴파일러와 런타임에서 어떻게 동작하는지에 대한 이해가 없기 때문에 미지의 영역(리컴포지션이 정확히 언제 발생하는지, 의도한 바와 다르게 UI가 그려지는 지 등등)에 대한 추측과 상상으로 문제 해결을 하려고 하는 경향이 있다. 미지의 영역을 줄이고 싶었다.
마지막으로 CS는 현재 나의 약점이다. 특히 컴퓨터구조와 네트워크에 대한 이해도가 현저히 낮아서 이러한 부분들을 공부해서 단점을 극복하고 나아가 장점으로 만들고 싶었다. 특히 네트워크, 데이터베이스에 대한 이해도가 높이면 백엔드 개발자들과 커뮤니케이션하거나 협업할 때 도움이 될 것 같다.
결론
올해는 CS 지식의 빈 틈을 채워 나가려고 한다. 일단은 컴퓨터 구조와 네트워크부터 공부해보려고 한다. 학부 때처럼 단순 지식 습득이 아니라 안드로이드 개발에 있어서, 실무에서 어떻게 적용해볼 수 있을지 고민하면서 공부하는 것이 목표이다.