안드로이드 개발자라면 #1
그동안 일하면서 안드로이드 개발자라면 어떤 것들을 알고 있어야 하는가에 대한 느낀 점들을 정리해 보려고 한다.
이 글은 안드로이드 개발자를 꿈꾸는 취준생들을 위한 글이 될 수도 있고, 혹은 나에 대한 반성이 될 수도 있다.
간혹 취준생들로부터 안드로이드 개발자로 취업하기 위해서 어떤 것들을 준비해야 하는지 질문들을 받곤 한다.
그래서 어떤 것들을 준비하고 있는지 역으로 질문을 해보면 흔히 최신 기술들 위주로 이야기한다.
물론 최신 기술들도 중요하지만 회사에서 취준생들에게 바라는 것은 최신 기술보다는 전산 기초, 즉 기둥이 튼튼하기를 원한다.
너무 뻔한 말이지만 튼튼하지 못한 기둥 위에 무엇을 쌓든 그것이 온전할 리가 없기 때문이다.
보통 신입사원과 경력자 면접을 진행할 때 질문의 종류나 난이도는 다르지만 결국 물어보는 것은 얼마나 깊이 이해하고 프로그래밍 했는가이다.
이 기술을 왜 사용했는지, 기술의 원리는 무엇인지, 얼마나 알고 사용했는지를 위주로 물어보게 된다.
그러다 보면 결국 이 사람이 가지고 있는 Potential과 노력을 찾으려고 질문하게 되고 이것들은 보통 CS 지식수준으로 드러나게 된다.
CS 지식이 중요한 이유는 실제 개발에서 사용되는 Fundamental한 요소이기 때문이다.
아래는 인터넷에서 소위 컴퓨터 공학의 6대 과목이라고 하는 과목들인데, 취준생들에게는 이 과목들만큼 중요한 게 없다고 아무리 강조해도 지나침이 없다.
그리고 아래의 과목들을 공부할 때는 인터넷보다는 주로 책을 이용하는 것을 권장한다.
이는 최신의 정보보다는 정제된 정보가 더 중요한 과목들이기 때문이다.
자료구조
- 주요 자료구조의 특징, 구조, 장점과 단점, 사용 예시
- 항상 왜 이 자료구조를 사용해야 하는지 고민이 필요하다.
- 직접 특정 자료구조(Queue, Stack, etc.) 만들어보기.
운영체제
- 프로세스, 스레드, 메모리 구조 등등
- 안드로이드는 그 자체로 모바일 운영체제이기 때문에 학교에서 배운 운영체제의 대부분을 몸소 체험하고 실제로 프로그래밍에 적용할 수 있고, 영향을 받는다.
알고리즘
데이터베이스
네트워크
- 데이터를 송/수신하는 과정, 네트워크 구조 등등
- Wireshark 등으로 이슈 디버깅하는 경우에도 많은 도움이 된다.
컴퓨터 구조론
프로그래밍 언어론
- 어떤 언어든 결국 언어는 통하게 되어 있다.
- 6대에서는 벗어나지만 개인적으로는 도움이 많이 되었다.