개발

[일반] 비전공자 혹은 대학 신입생이 개발자가 되려면 어떤걸 배워야 할까?

나인에스 2022. 4. 20. 19:41

개요

최근 커뮤니티에서 개발자가 되고 싶은데 어떤 것을 해야할지 모르겠다는 분들을 자주 봐왔습니다. 전공자의 경우도 있었고, 비전공자의 경우도 있었으며, 이분들은 대부분 공통적으로 어떤 언어를 어떻게 시작해야할지 몰라서 난감해 하는 경우가 대다수 였습니다. 물론 요즘 트렌드에 맞는 iOS/Android 개발을 위한 Swift / Java / Kotlin 을 공부하거나 Backend에서 많이 사용되는 Kotlin/JAVA Spring Framework혹은 NodeJS, 웹을 위한 Javascript, react, VueJs, AngurlarJS,  데이터 분석가를 위한 R이나 Python, 최근 떠오르는 Go, ReactNative등 본인의 스타일이나 목표에 맞게 설정을 한 다음 배우는 사람들도 있지만 앞서 설명한 것 처럼 너무 다양하고 진입 방법이 많다보니 난감해 할 수밖에 없을 것 같습니다.

이처럼 다양한 language와 framework가 있기는 하지만 어느 한 언어에 대해서 어느정도 마스터를 하게 되면 사실 다른 language를 배우는 것은 그다지 어렵지 않습니다. 오히려 새로운 language를 배울때 문법같은 내용들은 검색등으로 쉽게 해결 할 수는 있으나 이 language의 특성이나 이를 이용하는 framwork, system의 특성을 이해하지 못해서 실무에서 개발을 했지만 사용할 수 없는 상황이되거나 어렵게 개발한 것들이 문제를 양산하는 상황을 초래할 수 있습니다.

누구나가 개발자가 되기 위해서 혹은 개발자로서 더 성장하기 위해서 language를 공부 할 때에는 시간이라는 제약이 있기 때문에 최대한 효율적으로 시간을 이용해서 language를 배우고 배운것을 바탕으로 실무에 사용하기를 혹은 이를 통해 취업/전직을 하기원합니다. 때문에 가급적이면 본인이 원하는 목표를 잘 설정하고, 그 목표에 맞도록 언어를 선택합니다. 언어를 선택한 후 만약 언어에 대해서 기초가 없다면 흥미 유발이 최우선입니다. 그 후에 기본적인 문법을 배우고, 이후에 언어를 이용하는 system, framwork, 언어의 특성과 같은 개발이라는 전체 카테고리에 대한 기본적인 내용을 조금은 채운 다음 심화 학습을 하시면 취업/면접/실무에서도 많은 도움이 될거라 생각합니다.

 

어떤 언어를 선택해야 할까?

보통 비전공자분들의 경우 수많은 언어중에 과연 어떤 언어를 선택해서 배워야할지에 대한 고민과 과연 내가 선택한 언어가 나에게 맞을까라는 걱정이 앞설수 있습니다. 그나마 "나는 ios개발자가 될거야" 혹은 "Android 개발자가 될거야", "Web Frontend개발자가 될거야" 라고 결심한 분들은 swift나 JAVA/Kotlin, Javascript로 스터디를 시작하면 되기 때문에 많은 고민을 하지 않지만 "Backend 개발자가 될거야" 혹은 "Frontend 개발자가 될거야"라고 결심하게 되면 조금 복잡해질 수 있습니다. 일단 순서대로 하나하나 접근해 봅시다.

iOS 개발자

iOS native 개발자가 되고 싶다면 Swift 로 시작하면 됩니다. 간단해 보이쥬? 하지만 이것도 기본적인 swift를 익히고 나면 수많은 선택지혹은 배워야 하는 option이 다수 있습니다. 요즘은 대부분 RxSwift, ReactorKit등의 framework를 사용해서 개발 하기 때문에 초기에 익히고 배웠던 스타일의 코딩은 거의 하지 않게 될 가능성도 있습니다.(callback 지옥에서 벗어나야죠! ^^)

Android 개발자

Android 개발자의 경우 초기에 작은 선택이 필요합니다. Java로 시작하느냐 Kotlin으로 시작하느냐 입니다. 요즘은 대부분 kotlin을 기반으로 개발을 하고 있고, 기존의 Java를 사용하는 프로젝트에서 부분적으로 Kotlin을 사용할 수 있기 때문에 Kotlin으로 시작하는 것도 나쁘지 않은 선택입니다. 사실 Kotlin이건 Java이건 둘중 하나를 재대로 사용하게 되는 수준이 된다면 두 언어를 넘나드는것은 그리 어렵지 않습니다. 이도 iOS와 마찬가지로 기본을 배우고 나면 RxJava, RxKotlin 같은 것들이 있네요.

Web Frontend 개발자

일단 Javascript를 배우시면 됩니다. 기본적인 내용을 배우시고 나면 여기서도 선택지가 다양하게 있습니다. 요즘은 Javascript+JQuery만을 이용해서 프로젝트를 진행하는 것은 거의 없고 VueJS, React, AngularJS이 대표적으로 많이 사용되고 있는 Framework입니다. 2022년 현재 Angular는 이제 감소 쇠가 뚜렷하고, VueJS, React는 비슷하게 증가 추세를 이루고 있습니다. 제 개인적으로는 React가 React Native로 전향도 쉽기 때문에 좋지 않을까라고 생각해보긴 합니다.

Backend 개발자

선택의 시작부터가 고난입니다. 너무 많은 언어, platform, framework, cloud service가 있기 때문에 파고 들면 선택해서 시작하기도 전에 지쳐버릴수 있습니다. 특히 android, ios, web과는 다르게 선택이 필요한 각각의 언어 특징이 뚜렷하기 때문에 하나를 선택하면 나머지는 거의 버린다고 생각해야 합니다.

일단 Java의 경우, 국내의 학원(?) 혹은 정부 지원 교육기관 같은데서 진행하는 Backend개발자 과정은 거의 99%가 Java를 기반으로한 Spring Framework입니다. 이말은 국내의 대다수 업체들의 서버가 Spring Framework으로 이루어져 있어서겠죠?(아마도..그러니 교육기관에서 선택했겠죠?ㅎㅎ) 결국 대부분의 비전공자 분들이 Backend 개발자가 되려고 마음 먹으면 Java로 시작을 하게 됩니다. 하지만, 요즘 실리콘 벨리에서는 대부분의 서버 Framework을 NodeJS 혹은 GoLang으로 가고있는 추세이긴하죠.

NodeJS의 경우 javascript와 동일한 문법을 이용하기 때문에 진입장벽이 낮고, 사용할 수 있는 3rd party app의 지원이 아주아주 많습니다.(우스게 소리로 내가 개발 하려고 하는 것을 github 혹은 npm에서 검색 하면 대부분 누가 먼저 개발 했을거다 라고 하죠...) 위에서 언급한 것처럼 실리콘벨리를 중심으로 유명 스타트업 회사들이 선택하는 language이기도 합니다.

Golang의 경우 구글에서 개발한 언어이고 NodeJS와 같이 script language가 아닌 compile language이기 때문에 성능이나 memory관리면에서 우세하긴 합니다. Backend뿐만 아니라 여러 곳에서 사용될 수 있다는 장점도 있죠. 하지만 국내에서는 아직 많이 대중화 되진 않은 언어이기 때문에 지금 개발자가 되기 위해 시작하시는 분이라면 말리고 싶긴 하네요.

사실 Backend 개발자는 단순하게 language만을 공부해서 되는건 아니고 framework이나 db등 알아야 할 것들이 매우 다양합니다. 요즘은 AWS, GCP, Asure같은 클라우드 서비스가 기본이기 때문에 적어도 하나의 프로바이더를 선택해서 기본적인 내용도 봐두는것 또한 매우 중요합니다. 여기에다가 요즘은 monolithic 서버운영을 거의 하지 않기 때문에 Kubernates, Docker, AWS Lambda, GCP Functions등과 같이 MSA 혹은 serverless로 운영하기 위한 것들에 대한 기본적인 내용도 알아둬야 하고 MySQL, DynamoDB, MongoDB 와 같이 DB, Redis와 같은 memory cache/sub/pub system, MQTT, websocket등 알아야 할것이 너무 많네요.... 하지만 너무 걱정 하실 필요는 없는게....아마 기본적인 능력을 키워서 취업을 하게 된다면 자연스럽게 관련 내용들을 습득하거나 스터디를 하게 될겁니다...

Embedded 개발자

요즘 RaspberryPi나 arduino, STM등과 같이 교육용이나 프로젝트 가능성 검토를 위한 embedded tool kit이 많이 대중화 되어 있습니다. 각가의 platform에 맞는 공부를 하는게 좋기는 하지만 일단 embedded를 하신다면 C/C++은 필수가 됩니다. 물론 RaspberryPi의 경우 Python을 이용하길 권장하고 있지만 실제 회사에서 과련 RaspberryPi를 사용해서 Product를 만들까요?ㅎㅎ

위에서 언급한 것처럼 Embedded 개발자의 경우 C/C++을 공부해야하고 메모리에 대해서도 개념을 머릿속에 잘 정리해둘 필요가 있습니다. 당연한 거지만 C/C++을 공부하다보면 pointer라는 것을 접게하게 되고 이는 memory에 직접 접근을 할 수 있기 때문에 자칫 잘못 배웠다가는 실무에서 어마어마한 실수를 하게 될수도 있습니다. (선임에게 혼꾸녕 날지도! ㅎㅎ)

Etc - Data 분석가

이것도 세부 분야에 따라서 조금 다르기는 한데 제 개인적인 생각은 일단 Python에 대한 기본적인 능력은 있어야 하고 이후에 세부 분야에 따라 R 혹은 Python 심화 학습을 하시는 것이 좋을 것 같네요. 중요한건 Python 과 R은 데이터 분석 분야에서 비슷해보이나 서로 다른 역활을 합니다. R은 주로 통계 분석에 사용이되고 Python은 data science 에 조금더 중점을 두고 있기 때문이죠. 결국 통계학적인 분석 이 필요하다면 R을, 이외에 data를 이용한 학습, engineering, data handling/분석, AI 과 같은 분야를 원하신다면 해당 분야의 Python 심화 학습이 필요하겠네요

 

어떤 언어를 선택하건 흥미 유발이 우선!

위에서 본것처럼 아주 다양한 언어가 있고, 이중 하나를 선택하게 될 겁니다. 그리고, 학원이든 교육기관이든 아니면 self study이든 시작을 하게 될텐데, 가급적이면 처음 진입할 때에는 이론적인것들을 먼저 보지는 말고, getting start와 같은 걸보고 뭔가 작은 것을 만들어서 실행하고 정상적으로 실행되는 결과를 보면서 즐거워하시면 됩니다! (만약 즐겁지 않다면.....개발자는 다시한번 생각해보시는것도...ㅎㅎ)

즐거워 하신 후에 내가 만든것들의 세부 내용이 어떤 것들이 있고, 어떤 의미를 가졌는가를 보시면 되고 모두 알게 되면 이제 다음 단계의 프로그램 혹은 예제 혹은 했던것보다 좀더 규모가 크거나, 좀더 nice 해보이는 거나, 신긴한것들이 있으면 하나하나 차근차근 진행하면 어느센가 본인이 초기에 목표로 했던것에 도달 할 수 있을겁니다.

그렇다고 해서 이론적인것들이 중요하지 않다는 것은 아닙니다. 아주아주 매우매우 중요합니다. 나중에 취업을 하고 실제 현업에서는 이론적인 내용들이 뒷바침 되지 않는다면 결국 nice 한 프로그램도, nice한 알고리즘도 나오지 않고, 시스템에 대한 이론적인 이해가 없다면 버그를 양산하는 모듈을 생산해 내게 될수 있습니다. 전공자들의 경우 이론적인 부분들을 학과 수업에서 듣게 되기 때문에 adventage 있기는 하지만(물론...학교에서 배운것들을 다 기억하는 사람은 잘 없긴 하죠..ㅎ) 비전공자도 차근차근 관련 도서나 블로그, 사이트를 보면 충분히 따라갈 수있습니다. (취업의 여부와 관없이 지속적으로 스터디를 하시는 것을 추천하긴 하지만...쉽지는 않겠죠?ㅎㅎ)

 

기본을 배운 다음은?

본인이 선택한 언어에 대해서 기본 스터디가 완료 된다면 그 다음 스텝은 미니 프로젝트를 진행하는 것입니다. 아마 교육기관에서 배우는 거라면 교육기관에서 그룹 프로젝트를 진행하게끔 할테고, 그게 아니라면 같이 수업듣던 사람중 마음맞는 사람 몇명을 꼬셔서(?) 뭐라도 작은 프로젝트를 그룹으로 진행해보는 것이 좋습니다. 이는 내가 배운것들을 써먹으면서 아는 것에 대해서 숙련도를 올릴수 있는 중요한 과정입니다. 배운것을 사용해보지 않는다면 결국 금방 잊어버릴테니까요.

이후에는 여러 선택지가 있지만 공통적으로 자료구조에 대해서 공부 해보세요. 아마 이론적인 내용의 초기에는 매우 지루하거나 뭔가 싶은것들이 많을 수 있지만 이를 통해서 stack, queue, Big O 표현법, sort, tree, linked list등 여러 알고리즘의 기초중의 기초가되는 것들을 배울 수 있습니다. sort나 linked list와 같은 내용을 실무에서 실제 구현할 일은 거의 없지만(embedded 제외) 어떤 것들이 있는지, 어떤것이 어떤상황에서 사용하면 유리한지 알아야 잘 사용할 수 있으니까요. 이 외에 compile language 를 사용한다면 (특히 C/C++을 사용하는 embedded 개발자) memoy구조나 memory를 다루는 방법에 대해서도 잘 알아야 하니 운영체제나 메모리구조 같은 이론적인 내용도 좋은 공부 거리입니다.

 

마치며...

저는 사실 전자공학과 출신이라서 정확하게 말하면 개발쪽 전공자는 아닙니다. 제가 학과때 배운것들은 회로이론, 전력전자 같은 HW를 다루는 내용이 대부분이고 C언어를 교양과목으로 배웠던(스쳐지나갔던) 기억이 있네요. 이후 학교를 졸업하고 개발자가 되기위해서 C/C++을 시작으로 스터디를 시작했고 MFC개발자, embedded 개발자를 거쳐서 현재는 Backend가 주이고, 그외에 ios/android 개발도 슬쩍슬쩍 다리를 걸치고 있네요. 글 초기에 설명한 것처럼 하나의 언어를 마스터 하게 되면 다른 언어의 문법을 배우는 것은 그다지 장애물이 되지 않습니다. 오히려 그 언어를 사용할 시스템에 대한 이해도가 더더욱 중요하죠.

개발자가 되는 길에서 중요한 것은 흥미를 잃지 않고 계속해서 공부를 한다는게 중요 포인트가 아닌가 싶네요..