개발자로 전직하기

과거를 돌아보면 저는 개발자가 되기 위해 인생을 살아온 것은 아니었습니다.

그냥 살다 보니 저의 진로가 개발자로 정해졌습니다.

컴퓨터 게임을 좋아했다 보니까 컴퓨터와 관련된 직업을 갖고 싶다는 생각에... 고등학생이었을 때 C언어를 공부해봤고 그 이후 무지성으로 소프트웨어학과에 진학하게 되었습니다.

소프트웨어학과는 게임과는 크게 상관 없었습니다. 시꺼먼 화면에 이상한 영어 글자를 쓰고 읽는 학과입니다. 코딩은 생각보다 그렇게 재미 없지는 않았습니다. 저의 뇌가 '너 코딩에 재능이 있을수도 있어.' 라고 말해주는 느낌이었죠. 그렇게 C 언어부터 시작해서 자바, 파이썬, 리액트, 뷰, 도커와 쿠버네티스, MySQL, 그리고 지금 저의 주무기가 된 플러터까지.. 학교다니면서 다양한 기술들을 찍먹해봤네요. (물론 지금은 플러터 빼고 다 까먹었습니다!)

예전에는 개발자가 되기 위한 명확한 가이드가 많지 않았던 것 같습니다. 진로를 설정하면서 개발자에 대한 속 시원한 정보를 얻은 적이 없던 것 같습니다. 물론 요즘은 개발자 블로거, 유튜버가 많이 생겨나서 어디서든 손쉽게 정보를 얻을 수 있습니다.

옛날 생각을 하며 개발자에 대한 글을 적어보았습니다.


프로그래밍 첫 입문

전 처음에 윤성우의 열혈 C 프로그래밍이라는... 엄청나게 유명한 C 언어 책을 구매해서 공부했습니다. 변수 선언하기, 조건문, 반복문 등 문법을 배우고 printf 함수를 통해 콘솔에 찍어보는 연습을 하였습니다.

그 이후에는 윤성우의 열혈 자료구조라는... 데이터의 자료구조에 대해 공부하게 되었죠. 자료구조를 만들고... 역시나 콘솔에 찍어보고... 결과를 확인했습니다.

저는 너무 답답했습니다.

'대체 이걸로 뭘 할 수 있다는걸까?' 라는 질문만 머릿속에서 맴돌았습니다. 콘솔 찍기를 잘 한다고 해서 웹사이트와 앱을 만들거나, 밥을 지어 먹을 수 있는 전기밥솥을 만들거나, ChatGPT같은 인공지능을 만들 수는 없습니다.


이렇게 배우는게 맞나?


삐뚤어진 다이아몬드 콘솔 찍기


콘솔 찍기를 하는 이유는 '프로그래밍 언어'를 빠삭하게 배우기 위함입니다. 프로그래밍 언어는 프로그래머에게 있어서 기본중에 기본입니다. 언어를 잘 다루어야 그만큼 애플리케이션도 잘 만들 수 있는 법입니다.

하지만, 여러분들이 코딩을 배우는 이유는 무엇인가요? 언어를 잘 다루기 위함인가요?

그렇지 않습니다. 나만의 멋진 애플리케이션을 만들고 이걸로 수익을 창출하고, 또 그것을 사람들에게 자랑하기 위해서 입니다.

물론 언어를 다루는 것에 소홀히 하라는 뜻이 절대 아닙니다. 방향성에 대해서 다시 생각해보란 뜻입니다.

코딩을 왜 배우시나요?


콘솔 찍기는 이제 그만

프로그래밍 언어를 다루는 것에 어느 정도 숙달됐다 싶으면 콘솔 찍기는 이제 그만하세요.

콘솔 찍기는 언어에 대한 공부는 충분히 할 수 있겠지만, 컴퓨터에 대한 공부는 조금 부족할 겁니다. 더 나아가 IT 라는 분야에 대해 이해하기 힘들 것입니다.

이제는 여러분들만의 애플리케이션을 제작하세요. 나만의 애플리케이션을 만들다 보면 이해하지 못했던 영역도 자연스럽게 알게 됩니다.

애플리케이션은 우리가 흔히 아는 '앱'을 가리키는 걸 수 있지만, 넓게 본다면 '만듦' 이라는 행위를 통한 모든 결과물이라고도 말할 수 있습니다.

그런데, 프로그래밍 언어 하나를 배우고 바로 무작정 애플리케이션을 제작하는 것은 쉽지 않습니다. 그래서 우리는 선조 개발자분들이 만들어 놓으신 라이브러리와 프레임워크를 활용해야 합니다.

라이브러리와 프레임워크를 공부하시다보면 자연스럽게 애플리케이션도 제작할 수 있습니다.


개발자로 전직하기


메이플스토리 모험가

던전앤파이터 모바일 남거너 직업 선택


메이플스토리나 던전앤파이터같은 RPG 게임 해보셨나요? 캐릭터가 처음에는 공통의 스킬을 사용하며 성장하다가 일정 레벨에 도달하면 컨셉을 가지고 더 강해지게 되는 전직을 하게 됩니다. 메이플스토리의 전사, 도적, 궁수 또는 던전앤파이터의 레인저, 런처, 버서커 처럼요.

개발도 여러 분야가 있습니다. 웹사이트를 제작하는 웹 개발자, 모바일 앱을 만드는 앱 개발자, 서버를 만드는 서버 개발자, 게임을 만드는 게임 개발자, 해킹을 하는 정보보안전문가, 인공지능을 연구하는 인공지능 개발자, 하드웨어와 소프트웨어를 연결하여 전자제품을 작동시키는 임베디드 개발자 등이 있습니다.

여러분도 분야를 선택해서 전직해보세요. 다만, 게임과 다른 점이 있습니다. 되돌릴 수 있다는 것입니다. 메이플스토리나 던전앤파이터는 한 번 캐릭터를 전직하면 되돌릴 수 없습니다. 하고싶은 직업의 캐릭터가 있으면 캐릭터를 다시 만들어서 키워야 하지만, 여러분은 되돌릴 수 있습니다.

내가 공부한 분야가 나와 안맞는다고 생각하신다면 다시 되돌아가서 다른 분야를 선택해서 공부하시면 됩니다. IT는 여러 분야갸 긴밀하게 겹치는 부분이 많기 때문에 이전에 공부하셨던 분야의 지식이 다음으로 공부할 분야에 도움이 됩니다.

또한, 게임은 직업을 하나 밖에 고르지 못하지만, 개발은 한 가지 분야만 공부 하지 않고 다른 분야도 공부하여 다양한 기술 스택을 쌓을 수 있습니다. 예를 들어, 웹 또는 앱 개발(혹은 둘다)(프론트엔드)을 공부하고 서버 개발(백엔드)을 공부해서 하나의 애플리케이션에 대한 모든 단계를 구현하고 양방향 개발을 할 수 있는 '풀스택' 개발자가 될 수 있습니다.

만약 나이가 어린 학생이라면, 또는 취업에 여유가 있으신 분이라면 하나를 깊게 공부하는 것 보단 다양한 기술을 접해보는 것을 추천드립니다. 기술에 대한 견문을 넓히는 것은 개발자 인생에 도움이 됩니다.

게임과 비슷한 점이 하나 있습니다. 게임에서는 캐릭터가 어떤 직업으로 전직하느냐에 따라 사용하는 무기가 달라집니다.

메이플스토리의 도적은 표창을 던지기 위해 '아대'를 사용하고 궁수는 화살을 쏘기 위해 '활' 무기를 사용합니다. 던전앤파이터의 레인저는 '리볼버'를 사용하고 런처는 '핸드캐넌'을 사용합니다.

개발자도 마찬가지입니다. 여러분이 사용하려는 프레임워크와 라이브러리에 따라 사용하는 프로그래밍 언어가 달라집니다.

예를 들어

React - JavaScript (웹)

Spring - Java (서버)

Unreal Engine - c++ (게임)

Flutter - Dart (크로스 플랫폼 앱)

Embedded - C, C++, Rust (임베디드)

PyTorch, TensorFlow - Python (인공지능)

이런식으로요.

혹시 무슨 프로그래밍 언어를 배워야 할까 고민하고 계시지 않나요? 그런 고민은 할 필요가 없습니다. 여러분이 어떤 개발자로 전직할 것인지에 따라 사용해야하는 프로그래밍 언어는 정해져 있습니다.

'C 언어를 공부해야 하나요? 파이썬을 공부해야 하나요?' 라는 질문은 마치 '검, 활, 아대, 지팡이 중 어떤 무기를 연습해야 하나요?' 라고 물어보는 것과 비슷하네요. 여러분이 전사가 되고 싶으시면 검술을 배우고, 궁수가 되고 싶으시면 활 쏘는 법을 배우세요. 웹 개발자가 되고 싶으시면 자바스크립트를 하시고 임베디드 개발자가 되고 싶으시면 C, C++, Rust를 배우세요.

(임베디드 분야처럼 여러 프로그래밍 언어가 공존하는 경우도 있습니다. 마치 메이플스토리의 전사는 창, 폴암, 두손 검 등을 사용하는 것처럼요. 또 다른 예시로 안드로이드 네이티브 앱 개발은 Java와 Kotlin을 씁니다.)

프로그래밍을 처음 배울 때, 어느 분야로 해야할지는 모르겠으나 코딩은 해보고 싶을 때, 메이플스토리로 치자면 캐릭터를 방금 생성한 레벨 1 초보자일 때에는 C언어를 추천드립니다. C언어가 모든 언어의 근본이면서 다른 언어에 비해 좀 더 많은 지식을 담은 언어라고 생각합니다.


플러터를 하는 이유




저는 수많은 개발 기술 중 Flutter를 선택했습니다.

'눈에 보이는 것'을 만들고 싶었던 것 같습니다. 그래서 저는 앱 개발자가 되기로 했습니다.

앱을 개발할 수 있는 기술에는 여러가지가 있습니다. 그 중 저는 Flutter를 선택했습니다.

플러터 특유의 선언형 프로그래밍 방식과 위젯 트리 구성이 저의 뇌와 잘 맞습니다.

플러터는 Dart 언어 하나로 UI도 구성하고 비즈니스 로직도 작성합니다. 다른 기술들은 보통 XML이라고 해서 UI 코드 작성을 위한 마크다운 언어가 있습니다.(웹은 HTML/CSS) 그리고 비즈니스 로직을 위한 프로그래밍 언어도 같이 알아야 하죠. 하지만 플러터는 Dart 언어 하나만 알면 되니까 편하지 않나요?

여러 기술들을 접해보고 본인에게 잘 맞는 기술을 선택하시는 것을 추천드립니다.

간혹 어떤 분들은 기술에 티어가 정해져 있는 줄 압니다. '웹 기술 1대장은 리액트죠!', '앱 개발 기술 1티어는 코틀린과 스위프트입니다.'라고 말이죠. 개발자들이 많이 쓰는 기술은 있겠으나 기술 자체에 순위는 없습니다. 만약 그랬다면, 모든 개발자들이 다 같은 기술만 쓰고 나머지 기술들은 사라졌겠죠? 하나의 웹을 만들더라도 리액트, 뷰, 앵귤러 등 여러 기술들이 존재합니다. 기술마다 장단점이 있습니다.

나에 따라서, 회사의 상황에 따라서 알맞은 기술을 선택하여 활용하면 됩니다.


개발자가 적성에 맞을까?



사실 위 내용 전부 보다 이번 내용이 제일 중요합니다. 개발자가 적성에 맞지 않고 프로그래밍에 재능이 없다고 생각하신다면 굳이 개발자가 될 필요는 없다고 생각합니다.

나의 재능을 발견하는 것만큼 최고의 행운이 없으며, 재능이 없는 분야에서 활동하는 것만큼 최악의 불행은 없으니까요.

저는 코딩하면서 개발자가 저와 적성이 맞는지 항상 고민했습니다. 저의 사주팔자를 검색해서 제 사주가 개발자 사주인가 찾아보기도 했습니다.

고민 끝에 저는 개발자가 되기로 결심했습니다. 개발자의 특징이 있습니다.

개발자는요...

1. 혼자 보내는 시간이 많습니다.

학교에서 교수님들이 '개발자는 협업 능력 및 팀원들과 의사소통 능력이 정말 중요하다'라고 늘 강조하셨습니다. 물론 팀워크는 정말 중요합니다. 학기말 텀프로젝트 할 때 팀원들과 싸우지 않고 평화롭게 과제를 수행해야 했습니다.

그럼에도 불구하고 혼자 보내는 시간이 더 많습니다. 팀워크를 위한 가장 중요한 능력은 개인의 역량이라는 말이 있죠. 팀원들간에 소통은 프로젝트 과정의 30%정도..? 그렇게 많이 하지는 않는 것 같아요.

(그렇다고 의사 소통 능력이 중요하지 않다는 얘기가 아닙니다! 커뮤니케이션 능력 정말 중요하죠. 그리고 이건 개발 분야 뿐만 아니라 다른 분야에서도 해당되는 얘기인 것 같습니다.)

개발자는 나 자신과의 싸움을 하는 직업입니다. 내 코드가 왜 안되는지 화를 내도 소용 없습니다. 컴퓨터는 여러 분의 말을 알아 들을 수 없으니까요. 인내와 끈기를 갖고 구글에 검색하면서 차근차근 해결해 나가야 합니다. 요즘은 ChatGPT같은 인공지능이 많이 생겨나서 나 자신과의 싸움이 좀 더 수월해졌습니다.

혼자 있는 것을 좋아하고, 나 자신과의 싸움에 몸이 훈련되어 있으시다면 당신은 개발에 적성이 있습니다!


2. 논리와 창의의 조합이 필요합니다.

여러분들은 좌뇌와 우뇌중 어느 것이 더 발달 되어 있나요? 좌뇌는 이성과 논리의 영역, 우뇌는 감성과 창의의 영역이라고 알려져 있습니다.

개발자는 논리력이 중요하다고 합니다. 맞습니다. 내가 어떤 프로그램을 만들기 위해서는 코드를 논리적으로 구현해서 컴퓨터가 내 코드를 알아 먹게 해야 합니다. 우리가 평소 사람들과 대화할때도 대화의 논리가 맞지 않으면 대화가 안통합니다. 코드를 작성하는건 컴퓨터와 대화를 하는 것입니다. 컴퓨터에게 논리적으로 얘기해줘야 합니다. 심지어 컴퓨터는 사람이 아니기 때문에 척하면 척 알아듣질 못해서 프로그래머가 좀 더 상세한 논리로 말해줘야 합니다.

'수학을 잘해야 하나요?' 라는 질문이 있습니다. 수학은 논리력과 밀접한 학문입니다. 그런데 대한민국의 수학을 말한다면... 조금 이질적입니다. 논리력에 중점을 둔 것 보다는 흡사 IQ 테스트 비슷한 문제를 푸는 방법에 주력하기 때문입니다. 이건... 프로그래밍과는 상관 없습니다. 그런 수학보다는, 문제 해결 능력이 필요합니다.

수학의 정답은 결국 하나로 정해지지만, 풀이 과정은 다양하게 존재합니다. 문제 해결 능력이란, 다양한 풀이 과정을 모색하는 것과 비슷합니다. 수학 문제를 풀기 위해 하나의 풀이 과정에만 의존하지 말고 색다른 풀이 과정을 도출해보세요.

때로는 창의력도 필요합니다. 코드를 반드시 한 가지 방법으로만 구현해야 한다는 법은 없습니다. 이전보다 더 효율적이고 생산적인 '좋은 코드'를 작성할 수 있어야 합니다. 프로그램이 부드럽게 잘 동작할 수 있도록 알맞은 코드를 떠올려야 합니다.

사실, 프로그램을 만드는 것 자체가 창조의 영역입니다. 창의력이 필요한 건 당연한 것 같습니다. 프로그래머가 완성한 프로그램의 모습은 마치 예술의 경지에 이릅니다. 그 지저분하고 복잡한 코드들을 잘 연결지어 상상으로만 해왔던 멋있는 프로그램이 탄생했으니까요. 코드를 작성할 땐 논리력을 구사하면서, 그 결과로는 예술 작품을 만들어 냅니다.

프로그래머는 논리를 통해 예술을 하는 직업입니다. 프로그래밍은 좌뇌와 우뇌 둘다 고르게 잘 발달한 사람이 잘할 것 같습니다.


3. 만들어가는 재미를 느낍니다.

현대 프로그래밍은 선조 개발자분들이 만들어 놓으신 코드를 조합하여 새로운 프로그램을 만드는 것입니다. 프로그램을 '만드는' 겁니다. 평소에 레고 조립이나 마인크래프트처럼 뭔가 만드는 게임을 좋아하진 않으셨나요? 그렇다면 프로그래밍에도 흥미를 보일 수 있겠습니다. 만들어가는 재미를 느끼신다면 개발에 적성이 있습니다.

코딩이 재미있는게 아닙니다. 시꺼먼 화면에 이상한 영어 글자들을 입력하는건 재미 없습니다. 무언가를 만드는 행위에 재미를 느끼는 겁니다. 프로그램을 만들어가는 재미와 내가 프로그램을 완성 했을 때의 성과에 대한 보람을 느낍니다.

이러한 관점에서 코딩과 프로그래밍은 다른 단어입니다. 코딩은 단순히 코드를 작성하는 행위이지만 프로그래밍은 개발자가 논리력과 창의력을 구사하면서 프로그램을 설계하고 만드는 것입니다. 그래서 '코더'라는 명칭보다는 '프로그래머' 또는 '개발자' 라고 많이 얘기합니다.

프로그래밍은 단순함 보다는 변화무쌍함에 가깝습니다. 설계와 구현을 하다 보면 예상하지 못한 각종 버그들을 맞닥뜨리고, 그런 버그들을 해결하면서 내가 모르는 영역을 알게 됩니다. 개발자는 만들어야 하는 프로그램이 늘 다릅니다. 비슷한 프로그램을 만들더라도 차이가 있기 마련입니다. 다양한 프로그램들을 계속 만들면서 개발자의 지식은 지속적으로 넓어집니다. 기술에 대해 공부를 하는 것이 아닌, 하게 되는 직업입니다.


기술 발전과 시대의 변화와 함께 개발자가 되려는 사람들이 예전보다 훨씬 많아졌습니다. 그만큼 개발자는 매력적인 직업이라는 뜻이 아닐까요? 인터넷에 개발 관련 공부 자료가 많아졌고, 일부 경력 개발자 분들은 강의를 녹화하여 개발 입문자 분들로 하여금 프로그래밍 실력을 더욱 쉽게 끌어올릴 수 있도록 합니다.

그런데, 저처럼 개발자에 대해 잘 모르고 무턱대고 진로를 결정하는 사람들도 굉장히 많습니다. 제가 다니던 학과만 하더라도 개발에 적성이 맞지 않아 자퇴 및 전과를 한 학우분들이 많습니다. 저는 천운이 따랐는지, 다행히도 개발에 적성이 맞는 듯 합니다.

대한민국의 교육은 아이들에게 재능 발견과 진로 설정에 대해 충분한 시간을 주지 않고 대학 입시에 초점을 맞춥니다. 이러한 분위기는 언제쯤 바뀔지 모르겠습니다. 이 때문에 잘 모르는 분야의 학과를 가서 시간과 돈을 낭비합니다. 불행 중 다행인건 아직도 20대 초중반이라는 사실입니다. 이때부터 시작해도 전혀 늦지 않습니다. 좌절할 필요가 없습니다.

꿈을 정하기 전까지는 재능 발견과 진로 설정을 멈추지 마세요. 꿈을 이루셔서 사회에 이름을 남기는 멋진 사람이 되시길 바라겠습니다.

댓글

이 블로그의 인기 게시물

카트라이더 개선 방안

팩토리 패턴을 응용한 플러터의 클린 아키텍처

프로젝트 사면초가