개발을 배우는 목적은 무엇인가?
당신은 왜 개발을 해보고 싶은가? 해보고 싶은 개발 분야는 무엇인가? 프로그래밍 언어를 선택하기에 앞서 자신이 무엇을 위해 개발을 배우려고하는지, 무엇을 하고 싶은지를 인지하는 것은 아주 중요하다고 할 수 있다. 그 이유는 주요 개발 분야마다 사용하는 메이저 프로그래밍 언어가 어느정도 다르기 때문이다. 아래의 표를 참고하여 주요 개발 업계에서 어떤 언어를 쓰는지 알아보자.
게임 | C++/C# |
웹 | Javascript/Java/Kotlin/PHP |
임베디드 | C |
인공지능/데이터 분석 | Python/R |
앱 | Java/Kotlin/Swift |
블록체인 | Go/C++/Solidity/Javascript |
사무 자동화 | Python |
4차 산업혁명이 대두되면서 특히 인공지능/데이터 분석에 대한 관심이 급증하고 대학교에 진학하려는 고등학생들도 이에 관심을 가져 컴퓨터공학과의 수요가 급증한 만큼 파이썬(Python)과 R 언어에 대한 관심이 늘어난 상태다. 2020년 IT베스트셀러에 데이터와 머신러닝/딥러닝에 대한 책이 수록되어 있을 정도니까. 파이썬 언어의 경우 개발을 처음 입문할 때 목적과 관계없이 진입장벽이 낮다는 이유로 많이 배우므로 다른 것보다는 파이썬에는 주목해둘 필요는 있다.
어떤 상황에 처해 있는가?
이 질문이 왜 중요한가? 당신이 처해있는 상황에 따라 거쳐가야할 계단이 생각보다 다르기 때문이다. 당신이 학생일 때와 취준생일 때 밟아야 할 계단과 시간이 같은가? 전혀 그렇지 않다. 우리는 이것에 대해 조금 더 깊게 들어가서 살펴보아야 한다. 이미 길을 알고 있다면 그대로 실행하면 된다. 그러나 길을 모르거나 이제 막 개발업계에 진입하려면 그것을 알기란 쉽지 않다.
시간이 상대적으로 많은 '학생 개발자'
학생도 초등학생이냐 중/고등학생이냐 대학생인가에 따라 달라진다. 초등학생의 경우에는 프로그래밍을 본격적으로 시작하기 전에 흥미를 쌓는 단계가 아주 중요하다. 초등학생일 때에는 직접 코드를 작성하는 것이 아닌 논리력 향상을 위해 스크래치(Scratch), 엔트리(Entry)를 사용하여 교육을 하기도 한다. 이는 개발자로 나아가기 위한 발돋움이 아니라 단순히 흥미위주에서 끝날 수도 있겠지만, 초등학생 상태에선 그것만으로도 충분하다.
중/고등학생이라면 파이썬(Python)으로 프로그래밍을 시작하는 것도 좋다. 파이썬은 진입장벽이 낮은 프로그래밍 언어이기에 비전공자는 물론 프로그래밍을 처음 시작하는 초심자도 배우기 쉬운 언어다. 어찌되었든 코딩에 대한 기본적인 개념들도 익혀야 하기때문에 중/고등학생 즈음 되면 이것을 조금이나마 이해할 수 있게된다.
대학생(소프트웨어/컴퓨터공학과)이라면 C 를 하면 좋다. C언어는 많은 프로그래밍 언어의 뼈대를 구성하는 언어이며 우리가 알고 있는 프로그래밍 언어를 해석해주는 컴파일 엔진은 C언어로 구성되어 있는 경우가 많다. C언어는 대다수의 프로그래밍 언어의 근본이라고 볼 수 있으며 컴퓨터공학적으로 조금 더 깊게 접근하기 위한 언어이므로 타언어보다 먼저 배우는 것을 추천한다.
초등학생 | Scratch/Entry |
중/고등학생 | Python |
대학생(소프트웨어/컴퓨터공학과) | C/Python |
일반인 및 타전공 대학생 | Python |
또한 학생때는 많은 언어를 접해보는 것이 좋다. 각 언어가 추구하는 가치는 다르며 언어의 설계 이념, 언어의 장단점, 자신에게 맞는 언어를 찾아보는 등의 다양한 경험을 해볼 수 있고, 여차하면 하나의 분야 뿐만 아니라 게임/웹/인공지능 등 여러 분야를 접해볼 수도 있는 좋은 때이며 진로를 어느정도 정하고 나면 해당 분야에서 사용하는 언어와 그 분야에 대한 깊은 지식을 쌓을 수 있다.
취업을 위한 개발을 하고 싶은 '취준생 개발자'
취직이 급하거나 취업을 위해 개발을 하고 싶은 취준생이라면 학생처럼 진로를 탐색할 시간도, 한 계단씩 천천히 올라갈 시간도 없다. 그럼 여기서 중요한 것은 시장의 수요다. 구인구직 사이트에 들어가 개발자를 구인하는 기업들이 어떤 기술스택을 원하고 어떤 것은 수요가 많은지 파악하라.
만약이 취업이 급하고 프로그래밍 언어를 한 번도 안해본 상태에서 인공지능/데이터 분석으로 진로를 정했다면 어떨까? 인공지능/데이터 분석은 일단 기본적으로 학사 학위로는 쉽지 않고 수학에 대한 이해가 필요하다. 이를 쌓는데에는 시간이 오래 소모되는 일이다. 과연 취직이 급한 상태에서 그것은 적절한 선택일까? 당신이 대학원생이 아니라면 그렇지 않을 것이다.
자신이 하고 싶은 분야가 깊은 지식을 요한다면 취직을 한 뒤에 조금씩 공부하는 것이 그나마 현실적인 선택일 수 있다. 아직 진로도 정한게 없고 그냥 개발자로 취직을 해보고 싶은거라면 웹 개발을 추천한다. 웹은 시장의 수요가 아주 많으며 기회의 장도 많이 열려있는 상태다.
백엔드 | Java(Spring)/PHP(Laravel)/Javascript(Node.js) |
프론트엔드 | Javascript(React.js) |
웹 개발은 프론트엔드와 백엔드 개발로 나뉘어 있는데, 레이아웃을 구성하거나 동적으로 화면이 움직이는 것에 대해 관심이 있다면 프론트엔드로 가면 되고 프론트엔드의 뒤에서 데이터를 처리하고 동작하게 만들고 싶다면 백엔드로 가면 될 것이다. 이 경우 프론트엔드라면 자바스크립트, 백엔드라면 자바를 추천한다. 백엔드에서 자바를 추천한 이유는 단지 시장의 수요때문이지 그 외의 이유는 없다.
그저 궁금한 '취미 개발자'
취미 개발자는 무엇을 해도 상관없다. 아무거나 해도 괜찮지만, 입문으로는 중/고등학생과 마찬가지로 파이썬을 추천한다. 일단 흥미를 가지는 것이 중요하기 때문에 중간에 그만두지 않으려면 진입장벽이 낮은 언어로 해보는 것이 좋다.
웹 개발에 필수적으로 쓰이는 자바스크립트(Javascript)도 좋은 선택이긴하지만, 언어의 설계가 다소 트리키하고 상식을 벗어나는 행동을 하는 경우도 있기때문에 그다지 추천하는 사항은 아니다. 물론 웹 개발을 해보고 싶다면 자바스크립트는 선택이 아닌 필수가 될 수 있다. 게임 개발의 경우 C# 과 함께 유니티 엔진을 배우면 꽤 재미를 볼 수 있을 것이다.
다른 개발 분야로 옮기고 싶은 '경력 개발자'
이 경우는 현재 나의 경우다. 난 기존에 웹 백엔드 개발을 했지만 현재 블록체인 개발자로 전향하기 위해 Go 언어에 힘을 쏟고 있는 상태다. 공식적인 경력과 관계없이 개발을 어느정도 했다면 다른 언어를 익히기는 그다지 어렵지 않다.
이들은 언어를 배우기 위해 어떤 점에 집중해야 하는지도 이미 어느정도 알고 있다. 언어 설계자의 설계 의도, 언어에서 사용하는 패키지 매니저, 패키지 레포지토리, 대표적인 라이브러리/프레임워크와 사용법 등 기존 개발자에게 이는 다른 언어를 접하고 옮길 때 당연히 해야하는 절차 중 하나이다.
다른 분야로 옮기고 싶다면 취준생 개발자처럼 시장의 수요를 보는 것이 아무래도 중요하다고 생각한다. 일단 개발 경력이 있다고는 하더라도 시장에서 쓰이는 언어를 해야 다른 곳으로 진입하기 조금 더 수월하기 때문이다. 또한 이 쯤되면 언어에 대해 취향이 생긴다. 개발 초심자에게는 언어에 대한 선입견이 없고 취향 또한 없어서 괜찮지만 경력 개발자라면 이야기가 조금은 다르다.
조금씩 하다보면 이 언어는 이러한 점이 마음에 안들고 별로라는 생각을 하게 될 때가 있다. 그것은 전적으로 개인의 취향에 따르지만, 나도 모르게 그것과 비슷한 언어는 피하게 되는 경우가 있다. 난 특히 자바(Java)가 싫다. 시장의 수요만을 따라서 갈 것인지, 아니면 자신의 취향도 고려할 것인지는 개인의 선택에 달려있다. 웹 백엔드 개발에서 제일 잘나가는 것은 현재 자바이다만, 취향에 맞지 않아서 안 했으니까 말이다.
지금까지와는 다른 새로움
경력 개발자가 시도해볼 수 있는 또 하나는 지금까지의 언어들과 다른 구성방식으로 코딩하는 언어를 배워보는 것이다. 이미 그들에게 객체지향은 너무나도 익숙하기 떄문에 새로운 맛을 보고 싶은 경우가 있는데, 이럴 때 Go, Rust 와 같은 언어들을 배우면 느낌이 달라진다. 기존의 언어에서 탈피하여 새로운 방식의 언어를 찾아보고 이를 실무에 적용해보거나 해보고 싶다면 배워보는 것도 좋다. 클래스와 객체라는 개념을 쓰지 않는 함수지향 언어도 흥미롭다.
교양으로 배워보고 싶은 '직장인 개발자'
타분야에서 일하면서 개발을 배워야 할 필요성이나 교양으로 익히고 싶다면 파이썬 이외의 선택지는 딱히 보이지 않는다. 일단 사무직이라면 엑셀, 사무자동화 도구를 많이 사용하게 될 것인데, 이를 착실하게 구성하여 자동화를 할 수 있도록 만들어주는 언어는 파이썬이다. 이 분야에서 파이썬의 위상을 뛰어넘을 언어는 아직까지 없으리라 생각된다.
사업을 위해 개발하고 싶은 'CEO 개발자'
사업을 위해 개발하고 싶다면 이야기가 다르다. 사업을 하고자 홈페이지를 개설하거나 서비스를 만들고 싶을 때 외주를 맡기거나 하는 경우가 많은데, 간혹 어떤 대단한 이들은 이를 직접 만들어보고 시도해보는 사람이 있다. 사업은 개발을 공부하고 싶다거나 직업, 취미로 하고 싶은 것이 아니라 상품을 홍보, 소개하거나 사용자에게 서비스를 제공하고 싶어서 하는 것이므로 러닝커브가 다르다.
당근마켓이나 배달의민족처럼 정교한 서비스가 제공되어야 하는 것이라면 개발자를 따로 채용하거나 함께하는 것이 좋다. 그렇지만 예를 들어 단순히 상품을 소개하는 간단한 홈페이지거나 회원제로 운영되는 게시판을 구성하고 싶다면 개발자를 채용하기 전에 다른 방법을 시도해보는 것이 좋다.
이러한 유형의 개발자에게는 개발이 업이 아니라 그저 도구이므로 기술자체에 대해 탐구하고 싶은 것이 아니라면, 다른 프로그래밍 언어들보다도 PHP 를 추천한다. 많은 사이트를 돌아다니거나 조금이라도 관심이 있다면 워드프레스, 그누보드, 제로보드 등을 들어본 적 있을 것이다. 이러한 것들은 CMS(Content Management System)라 하여 개발을 많이 알지 못하더라도 사용자 친화적으로 구성할 수 있도록 해두었다. 또한 PHP 는 대규모 서비스는 아니더라도 사업 초기 최소기능제품을 제작함에 있어서도 빠른 생산성과 프로토타이핑으로 결과를 낼 수 있는 언어이기도 하니, 사업을 하고자하는 개발자에게는 더욱 적합한 언어다.
CMS 는 대부분 PHP 를 기반으로 구성되어 있기 때문에 사이트를 보수, 새로운 기능을 추가하고 싶을 때 도움이 된다. 그 외에 Wix, 네이버모두, 아니면 쇼핑몰 솔루션이 있는 카페24, 고도몰 등도 사업을 하는데 도움을 줄 수 있는 도구이다. 이러한 도구는 No Code Tools 라고도 이야기하므로 해당 키워드로 검색하면 해외의 다른 솔루션들도 살펴볼 수 있다.
프로그래밍 언어를 배우기 위한 시작은?
이 이야기는 본 포스트의 주제와는 조금은 다르다만 다른 포스트로 분리하기엔 내용이 적어서 같이 쓰기로 했다. 코딩을 배우기 위한 과정은 대표적으로 3가지가 있다. 바로 코딩 학원, 인강, 책이다. 사실 이 경우도 위에서 이야기한 처한 상황에 따라 다르며 공부이기 때문에 사람의 취향에 따라 다르므로 살펴볼 필요는 있다. 내용은 길지 않다.
혼자는 힘든 당신에게, '코딩 학원'
코딩 학원은 대체적으로 진도가 빠르다. 학원은 학교와 다르기 때문에 속전속결이다. 취업이 급한 취준생에게 추천한다. 다만 따라가기 어려울 수도 있다. 여러 개의 언어를 단기간에 습득하고 체험하기 때문이다. 프로젝트도 진행하기 때문에 취업을 위한 포트폴리오에는 적합할 수 있다. 코딩 학원에는 국비지원 학원도 포함하여 이야기하는 것이다. 다만 코딩 학원을 다니는 사람 중에 중도 포기자를 여럿보았기 때문에 이는 신중하게 고민할 필요가 있다. 수강료 또한 만만치 않기 때문에 돈만 버릴 가능성도 있다. 호구가 되지 않도록 주의하라.
하지만 코딩 학원이 꼭 나쁜 점만 있는 것은 아니다. 개발 초심자에게는 자신이 모르는 것조차 모르기 때문에 메타인지가 부족한 상황이므로 코딩 학원을 다니다보면 개발 업계에서 어떤 것을 쓰고 프로그램이 어떠한 방식으로 개발이 되는지 어느정도 파악할 수 있고 관련 지식이 늘어나기 때문에 길이 보일 수도 있다.
핵심을 파고들고 싶은 당신에게, '인강'
인강은 실무자가 강의하는 경우가 많으므로 어찌보면 코딩 학원보다 양질의 강의를 더욱 저렴하게 들을 수 있는 장점이 있다. 책보다는 동영상 강의를 선호한다면 인강은 제일나은 공부법이 될 수 있다. 리뷰가 제공되는 강의도 많고 강사자 또한 멋진 사람들이 많지만, 아무래도 온라인이다보니 강의를 구매만 해놓고 정작 듣지는 않는 이도저도 아닌 상황이 발생할 수 있다.
인강을 들으려면 일단 자기가 어떤 것을 배워야하는지 이미 알고 있어야 강의를 선택하고 수강할 수 있다. 이는 이미 개발을 조금이라도 알고 있으면 좋지만, 개발 자체가 처음이거나 초심자에게는 적합하지 않을 수도 있다. 코딩 인강은 국내나 해외나 유명한 곳이 있으니 구글에서 검색만 해보면 바로 알 수 있을 것이다. 하지만 일반적인 인강에서는 대학에서 배우는 컴퓨터공학적 지식을 배울 수 있는 기회가 적다. 따라서 이러한 경우 대학공개강의를 활용하여 지식을 쌓는 것도 방법이다. 교수님이 수면제인 경우가 많지만 모르는 것보단 나을 것이다.
만약 영어가 된다면 돈을 아낄 수 있다. 한국어로 된 인강도 있지만, 영어와는 가격차이가 많이나기 때문이다.
천천히 한 계단씩 오르기를 바라는 당신에게, '개발 서적'
이 방법은 속도가 전반적으로 느리며 내가 수행중이다. 천천히 나아가기 때문에 다른 방법으로 배우는 것보다 그 깊이는 상당히 깊다. 책을 보면 자신만의 공부속도를 정하여 따라갈 수 있는 것이 장점이다. 이는 시간적인 여유가 있는 학생에게 추천한다. 하지만 개발 서적의 특성상 두께가 상당히 두꺼운 경우가 많아서 700-800 페이지인 경우가 많기 때문에 글자를 싫어한다면 좋지 않다. 프로그래밍 언어를 심도있게 이해하고 조금은 더 깊은 지식을 탐구하고 싶다면 개발 서적이 좋다.
여유가 있다면 관련 분야의 논문을 읽어보는 것도 괜찮은 방법이다. 책에서 얻을 수 없는 것들을 논문이 말해주는 경우가 있기 때문이다. 또한 인강에서는 가르쳐주지 않는 심도 깊은 지식들은 책과 논문을 거치는 것이 제일 나은 경우가 많다. 이에 해당하는 분야는 인공지능/빅데이터가 대표적이다. 어떤 기술이 돌아가는 원리나 작동방식에 대해서는 내용이 방대하고 말로 설명하기도 어려운 경우가 있으므로 코딩 학원과 인강에서는 배우기 어려운 지식이며 오직 책을 통해서만 배울 수 있다.
마치며
여기까지 프로그래밍 언어를 선택하고 공부하기 위한 팁들을 살펴보았다. 유독 파이썬에 대해서는 언급을 많이했는데, 헷갈리면 안 되는 것이 파이썬은 진입장벽이 낮아 많이 추천한 것이지 절대 만능은 아니다. 파이썬이 주류로 쓰일 수 있는 분야는 인공지능과 사무 자동화다. 그 이외에 분야로 나아가고 싶다면 다른 언어로 이동해야 할 필요성이 느껴질 수도 있다.
이 글을 쓰는 나조차도 아직 꼬맹이 20대 중반 개발자에 불과하고 공식적인 경력은 많이 없는 편이지만, 여러 언어를 경험해보고 여러가지 공부법으로 공부를 해본 결과 얻은 팁들이다. 개발자의 길을 들어서려는 당신에게 도움이 되었으면 좋겠다.