for Robot Artificial Inteligence

컴퓨터 공학 비전공자가 개발자 되기 위한 노력

|

첫 컴퓨터 언어 입문

나는 대학교때 컴퓨터 언어와 컴퓨터 프로그래밍이라는 과목을 들은 적이 있다. 컴퓨터 언어 수업에는 C++ 개념과 컴퓨터 프로그래밍에서는 Matlab과 Labview를 배운적이 있었는데, 그렇게 잘하지는 못하였다. 기억도 안나지만 C++로 공학용 계산기를 만들고 Labview와 Matlab을 이용하여 간단한 메커니컬 문제들을 풀었던 기억이 난다. 나는 수업을 들으면서 도통 컴퓨터 시스템과 메모리 그리고 메카니즘을 이해하지 못했다. 그러면서 나는 다짐했다, 컴퓨터 언어를 쓰는 직업은 안갖겠다고…

로봇공학 석사 과정

석사 과정을 하면서 로봇공학의 연구의 기본 베이스는 컴퓨터 언어이었다. 시뮬레이션이나 임베디드 코딩을 하면서 실험을 통해 결과를 뽑아내야 논문을 쓸 수 있기 때문이다. 거기다 나는 로봇 소프트웨어 관련된 연구실에 배정을 받게 되었다. 나는 처음 연구실에 왔을 때 주눅이 들었었다. 박사, 석사 심지어 학부 연구생들 모두 프로그래밍을 하는 모습을 보면서 과연 내가 이 학교에 졸업할 수 있을까? 양질의 논문을 써서 졸업할 수 있을까 라는 의문점이 들었기 때문이다. 그렇게 나는 최대한 프로그래밍 언어를 빠르게 습득해야겠다고 결심하였다.

스크립트 언어 Python

석사 첫 학기에는 정말 프로그래밍을 따로 공부할 시간이 없었다. 핸드폰도 개통해야되고, 학교 행사, 수업 과제등 매일 매일 해야할 것들이 쏟아져 나왔기 때문이다. 특히 학교 수업은 8과목을 들었는데, 말 그대로 죽는 줄 알았다. 엄청난 과제와 프로젝트는 내가 생각했던(여유로운 석사생활) 석사생활이 아닌 헬스로 치면 단기간 벌크업 하는 느낌이었다. 그렇게 한학기가 끝나고, 연구실 프로젝트를 참여하기 위해 Udemy에서 python 강좌와 Machine learning in python 강좌, 그리고 ROS로 시작하였다. C++가 아닌 python을 시작한 이유는 인터넷에서 많이들 쉽다고 하고, 또한 C++보다 느리지만 연구하는데 있어 파이썬으로 많은 것을 할 수 있기 때문에 python으로 먼저 공부를 하였다. Udemy에서 산 python 강좌와 Machine learning in python의 실전 문제를 풀면서 우선 코딩에 자신감을 갖게 되었다.

C++ 시작

파이썬을 이용해서 많은 알고리즘과 시스템을 이용해 보았다. Tensorflow라든지 Self Driving Car, Opencv, OpenAi등 재미있는것을 도루도루 해보았다. 그러던 도중 C++를 시작하게 되었다. 사실 python으로 모든 연구와 개발을 할 수있다. 하지만 현업, 즉 많은 로봇 회사에서는 C++를 사용하는데, 그 이유가 포인터나 data structure등을 이용하여 메모리 할당량의 크기와 Access가 더 빠르기 때문이다. 나는 석사 과정까지만 하기로 결정을 하였고, 회사를 찾고 있었다. 인턴이든 정규직이든 C++의 능력은 거의 필수이다. python을 사용하는 회사는 극히 드물다. 그렇기 떄문에 C++를 시작하였다.

C++ 공부

파이썬을 하다 C++를 하려고 하니 어느정도 상관된 메커니즘이라 이해는 되지만, 여전히 C++는 어려웠다. 특히 Static, Dynamic, Pointer 등등 Data structure를 구현하는 것도 어려웠고 특히 C++에 대한 시스템 이해도가 낮았다. 개인적으로 Udemy를 통해 Computer Language 스킬을 올리기에 적합하다 생각하여 3개의 강좌를 구매하였다. Begineer C++, Advance C++m을 구매하였다. Begineer C++에는 C++의 기본적인 시스템을 설명해주고 실전 문제를 통해 문제를 풀어보았다(도서관 문제). Advance C++는 C++ 테크닉을 가르킨다고 생각하는게 맞을거 같다.

비전공자가 개발자 되는데 있어 알면 좋은 과정들

19년 1년동안 연구 개발과 프로그래밍을 하면서 실력을 쌓았다. 20년 3월 나는 자신감을 가지고 MS 코딩 테스트를 보았다. 하지만 3개 문제 중에 하나의 문제도 제대로 풀지 못하였다. Data structure와 Algorithm을 공부한적이 없기 때문이다. 여태까지 연구 개발하면서 기초적인것을 놔두고 문제에 직면하였을떄 구글링을 통한 문제를 풀었기 떄문에 스스로 알고리즘 문제를 풀 능력이 없었기 때문이다. 충격을 받고 이대로는 취업을 못하겠다라는 생각에 비전공자이지만 개발자로 일하고 계신 노코프님에게 메일을 보내어 진로 상담을 하였다. 비전공자가 개발자가 되는데 필요한 지식은 다음과 같다.

  • Data structure
  • Algorithm
  • OS
  • Computer Architecture(조금)

Data structure and Algorithm 에는 Time 및 Space Complexity를 논할 정도면 된다. OS, Computer Architecture에는 Process view, Thread model, CPU structure, memory hierarchy, virtual memory 정도 알고 있으면 된다. 실전 코드문제는 Leetcode 문제들을 통해 각 문제별로 Data structure와 Algorithm등이 어떻게 쓰이는것이 아는 것이 중요하다.

앞으로

비전공자들이 코딩을 공부하면서 코딩 테스트에 떨어진 경험이 많다. 특히, 업계에서 엔지니어링 석박사 학위 수준의 경력과 컴퓨터를 잘하는 사람을 찾는데 적합한 인재가 되기에는 많은 노력이 필요하다. 논문 구현을 어설프게 할 줄 아는 사람을 뽑아서 제품에 들어가는 프로그램을 맞길 수 없기 때문이다. 이리저리 정보를 보고 정리를 하면서 컴퓨터 비전공자가 알아야할 컴퓨터 관련 기대 수준은 컴공 학부 2~3학년 수준이라고 생각이 된다. 앞으로 2020년 취업까지 반년이 남았는데, 기초를 튼튼히 쌓고 연구 개발 및 코딩 문제 해결 능력등을 통해 현재 이 불안함을 떨쳐 낼 것이다.

Comments