개발자가 되기 위해 반드시 컴퓨터 관련 전공을 선택해야 하는 건 아닙니다. 실제로 우리 주변에는 컴퓨터를 전공하지 않고도 개발 업무를 훌륭하게 수행하고 계신 분을 어렵지 않게 찾아볼 수 있습니다. 하지만 개발 일을 계속하다 보면, 전공자들과 함께 팀을 이뤄 개발하다 보면 기반 지식이 부족함을 느낄 때가 자주 찾아올 것입니다. 당연한 일입니다. 대학 4년이라는 시간과 수천만 원의 학비가 그 가치를 증명하는 순간들입니다.
좋은 소식이 하나 있습니다. 대학에서 배운 전공 지식들이 모두 실무에 쓰이는 건 아닙니다. 개발도 세부 직군이 다양한 만큼 배운 내용의 절반 이상은 평생 쓰지 않을 확률이 높습니다. 한 걸음 늦게 뛰어든 비전공 개발자들에게는 참으로 다행스러운 일이죠. 내가 선택한 길에 꼭 필요한 지식만 선택해서 더 빠르게 따라잡을 수도 있다는 뜻이니까요.
그렇다면 나에게 꼭 필요한 전공 지식은 무엇일까요? 각자의 길이 다르니 정답도 제각각입니다. 그러니 질문을 다르게 던져봅시다. 누구에게나 꼭 필요한 전공 지식은 무엇일까요? 다행히 이 질문에는 비교적 일관되고 객관적인 답을 드릴 수 있습니다. ‘누구에게나’ 필요한 지식이므로 취업과 이직 시 면접 질문으로도 단골로 등장합니다. 지금부터 하나씩 들여다봅시다.
프로그래밍 언어는 컴퓨터와 대화하기 위한 언어입니다. 그래서 ‘반드시’라고는 할 수 없지만, 보통은 개발자로의 첫 관문은 프로그래밍 언어 익히기입니다.
문제는 프로그래밍 언어가 굉장히 다양하다는 것인데, 그나마 다행인 소식! 소위 ‘메이저’ 언어는 몇 개 되지 않습니다. 파이썬, 자바, C, 자바스크립트. 대다수 개발자가 이 언어들 중 하나로 컴퓨터와 첫 대화를 시작합니다.
이 언어들이 주로 쓰이는 분야는 다음과 같습니다.
‘자바’와 ‘자바스크립트’는 이름만 비슷할 뿐, 아무 관련이 없는 언어입니다. |
꿈꾸는 분야가 확실하다면 고민하실 필요 없겠지요?
분야 이름이 낯설어서 무슨 이야기인지 모르겠다면 다음 절에서 소개할 ‘IT 상식 넓히기’용 책들을 먼저 살펴보시면 도움이 될 겁니다.
분야를 아직 정하지 못하여 ‘배우기에 가장 쉬운 언어부터 시작하겠다’라는 생각이시라면 파이썬을 추천합니다. 파이썬으로 할 수 있는 일들은 <파이썬 공부하면 뭐하나?>에 따로 정리했으니 참고하세요.
위의 책들 중 가장 오른쪽의 <혼자 ‘만들면서’ 공부하는 파이썬>은 곧 선보일 새 도서입니다. 흥미로운 프로젝트를 진행하면서 무언가를 직접 만들어보는 데 더 집중했습니다. <혼자 공부하는 파이썬>을 빠르게 익힌 후 보셔도 좋고, 곧바로 도전하셔도 좋습니다. 특히 다른 언어를 조금이라도 다룰 줄 아신다면 곧바로 시작하셔도 전혀 어렵지 않을 겁니다.
이 둘은 컴퓨터 비전공자들을 위해 IT와 개발을 쉽게 이해할 수 있게끔 준비된 책들입니다. <오늘부터 IT를 시작합니다>는 IT 파워 블로거이자 강연자이신 고코더(이진현) 님이 안내해 주시고, <혼자 공부하는 얄팍한 코딩 지식>은 인기 유튜버이자 강사이신 얄코(고현민) 님이 안내해 주십니다. 두 분의 사이트도 훑어보시고 책에서는 무슨 이야기를 하는지도 살펴보세요. 마음을 움직이는 책이 있다면 좋겠네요.
상식 넓히기를 넘어 ‘진로 선택’이 목적이시라면 물론 책만으로 해답을 얻기는 어렵습니다. 주변 채널을 총동원하여 업계 선배를 찾고 커뮤니티에도 적극적으로 문의하세요. 단, 제대로 묻고 답변을 올바로 이해하여 판단하려면 IT 상식이 많아야 유리하다는 사실!
프로그램은 결국 ‘어떤 절차로 무언가를 처리’하는 게 핵심입니다. 여기서 ‘절차’를 알고리즘이라고 하고 ‘무언가’를 데이터(자료)라고 합니다. 비유하자면, 프로그래밍 언어는 정확한 글을 짓는 ‘문법’, 알고리즘은 맛있게 요리하는 비법을 기록한 ‘레시피’, 데이터는 ‘음식 재료’입니다. 한편, 맛집으로 성공하려면 손님들께 요리를 제때 내놓을 수도 있어야 합니다. 그래서 주방장들은 그날그날 필요한 재료들을 ‘정해진 위치’에 ‘정해진 형태(손질 상태 등)’로 준비해 두고 일을 시작합니다. 이를 ‘자료구조’라고 합니다.
즉, 코딩을 시작할 때는 우선 ‘컴퓨터가 알아듣는 문법(프로그래밍 언어)’부터 배워야 하지만, 그 뒤에는 ‘일을 어떤 순서로 처리하면 좋을지(알고리즘)’와 ‘데이터를 어떤 구조로 쌓아둘지(자료구조)’도 반드시 익혀야 합니다. 알고리즘과 자료구조를 모르면 집들이 손님 정도는 맞이할 수 있겠으나 결코 맛집으로 성공할 수는 없습니다.
제 취향으로는 <그로킹 알고리즘>이 가장 마음에 듭니다. 이 책은 알고리즘과 자료구조를 따로 설명하지 않고, 알고리즘을 설명하면서 해당 알고리즘 구현에 필요한 자료구조를 함께 설명하는 방식을 택했습니다. 뼈와 살이 따로 떨어져 있으면 안 되듯이 알고리즘과 자료구조는 함께 해야 의미가 있습니다. 설명을 위한 예가 아닌, 현실적인 활용 예를 접하게 되어 자연스럽게 응용력도 키워지리라 기대합니다.
<그로킹 알고리즘>이 그림을 최대한 동원하여 동작 과정을 쉽게 설명하는 데 초점을 맞췄다면(물론 코드도 보여줍니다), <나의 첫 알고리즘+자료구조 with 파이썬>은 실제 코드로 구현하고 결과를 확인하면서 이해시키는 방식입니다. 그러니 코딩 연습도 많이 겸하고 싶다면 <나의 첫..>이 나은 선택일 수 있습니다.
이 두 책은 코드 예제에 모두 파이썬 언어를 씁니다. 파이썬은 문법이 직관적이고 간결하기로 정평이 나 있으니, 프로그래밍을 다른 언어로 시작한 분들도 따라오시는 데 무리가 없을 겁니다.
마지막으로 <이것이 자료구조+알고리즘이다 with C 언어>는 다른 두 책보다 분량이 두 배 가량 많습니다. 그러니 프로그래밍에 갓 뛰어드신 분보다는 어느 정도 경험을 쌓고 스스로 ‘자료구조+알고리즘을 진득하게 제대로 공부해 봐야겠다’고 마음먹으신 분들께 추천합니다. 또한 코드 구현 비중도 제법 높으니 C 언어를 다뤄본 분께 추천합니다.
그러고 보니 세 책의 설명 순서가 모두 다르네요.
|
우리가 만드는 앱(응용 프로그램)은 운영체제 위에서 동작합니다. 운영체제는 CPU, 메모리, 키보드, 디스플레이 같은 하드웨어 자원을 활용하여 앱들을 구동하는 거대한 소프트웨어입니다. 오늘날의 앱들은 대부분 어디인지 모를 먼 곳의 또 다른 컴퓨터와 통신하면서 기능을 수행합니다. 그래서 앱이 동작하는 방식을 깊이 이해하려면 컴퓨터 구조, 운영체제, 네트워크를 알아야 합니다.
<혼자 공부하는 컴퓨터구조+운영체제>와 <혼자 공부하는 네트워크>는 재미나게도 한 분이 쓰셨습니다. 같은 저자에 같은 시리즈라서 소프트웨어 세계를 연결하고 움직이는 원리를 일관된 시각과 눈높이로 학습할 수 있는 환상의 콤비가 아닐까 합니다.
그런데 이 밑단의 원리까지 우리가 왜 알아야 할까요? 우리가 무언가를 ‘제대로 동작하게’ 만들려면 그 무언가가 작동하는 환경과 맥락을 이해해야 합니다. 예를 들어 회사의 인사 평가 시스템을 설계한다면 그 회사는 무엇으로 수익을 내는지, 수익을 늘리려면 무엇이 가장 중요한지, 어떤 사람들로 구성되어 있고 그들의 생각은 어떠한지, 협업 형태는 어떠한지, 그동안의 문화는 어떠했는지 등을 종합적으로 고려해야 합니다. 저자 님이 이유를 더 구체적으로 말씀해 주셨네요.
제가 한 가지 덧붙이자면, 특히 운영체제는 그 자체로 고도로 설계된 거대한 소프트웨어입니다. 수많은 기능을 오류 없이 효율적으로 제공해야 하는 막중한 책임도 안고 있죠. 그래서 운영체제는 소프트웨어 개발자로서 우리가 참고할 만한 온갖 개념을 모아둔 보물창고와도 같습니다.
이 글은 여러분이 전공 대학생이 아니라, 비전공자로서 지금 개발자의 길을 걷고 계신 분이라고 가정합니다. 그러니 이 단계까지 오셨다면 프로그래밍 경험을 제법 쌓으셨을 겁니다. 그렇다면 개발을 제법 맛본 실무자로서 설계와 도구 활용 능력도 점검해보아야 하겠습니다.
소프트웨어 설계의 시작으로는 역시 ‘객체 지향’을 추천합니다. 앞서 ‘프로그램 = 알고리즘 + 데이터’라고 했지만, 프로그램의 덩치가 커지다 보면 모듈을 나눠야 더 효율적인 순간이 오게 마련입니다. 사람들이 모인 조직들도 덩치가 커질수록 세분화/전문화되는 것과 같은 이치입니다. 작을 때는 모듈이 거추장스럽지만, 일정 규모를 넘어서면 나누지 않고는 감당하기 어렵습니다.
객체 지향은 모듈(객체)을 나눠 역할을 부여하고 나뉜 모듈들이 협력하여 큰 과제를 수행하는 방식을 정의하는 설계 원리입니다. 다르게 표현하면 더 큰 소프트웨어를 만들기 위한 하나의 설계 방법론입니다.
디자인 패턴은 선배 개발자들이 수십 년 동안 숱한 시행착오를 거치며 정립한 ‘이럴 땐 이렇게’ 모음입니다. 개발하면서 자주 마주치는 상황들을 기술하고(이럴 땐), 그때 일반적으로 가장 무난한 해법을 알려줍니다(이렇게). 선배 개발자들의 노하우를 빠르게 흡수하는 좋은 방법이지만, ‘이럴 땐’의 상황을 직접 겪고 고민해보지 않았다면 ‘이렇게 하는 게 왜 좋은지’가 잘 와닿지 않을 수 있습니다. 그러니 디자인 패턴 공부는 실무 경험과 병행하면서, 틈틈이 다시 꺼내어 공감가지 않던 패턴들을 다시 곱씹어 보는 방식을 추천합니다.
<자바 객체지향 디자인 패턴>은 객체 지향의 기초를 살짝 다룬 후 주요 디자인 패턴들을 살펴보고 <헤드 퍼스트 디자인 패턴> 디자인 패턴에 더 집중하여 설명합니다.
다음은 도구입니다. 도구는 반복 업무를 자동화하고, 실수를 막아주고, 불필요한 커뮤니케이션을 줄여줍니다. 그래서 똑같은 도구라도 소프트웨어 덩치가 커지고, 팀이 커지고, 개발과 유지보수 기간이 늘어날수록 더 빛을 발합니다.
개발자가 반드시 능숙해져야 하는 도구로는 통합 개발 환경(IDE), 빌드와 배포 도구(CI/CD), 협업 도구가 대표적입니다. 이중 IDE와 CI/CD 도구는 프로그래밍 언어와 개발 팀별로 선택지가 다양하지만, 협업 도구 시장에서는 깃/깃허브가 절대적입니다. 오픈소스 소프트웨어들도 거의 대부분 깃허브로 코드를 공개하고 기여자들과 협업합니다.
마지막으로, 인공지능이 눈부시게 발전하면서 개발 도구 시장에도 파란을 일으키고 있습니다. AI를 제대로 활용하는 개발자는 혼자서도 하나의 팀만큼의 성과를 낼 수 있는 세상이 되었습니다. 이제 개발자라면 마땅히 AI를 적극 활용해야 합니다.
이제 소프트웨어 세계가 어떻게 돌아가는지도, 거대한 소프트웨어를 어떻게 만드는 지도 알았습니다. 하지만 아직 중요한 게 하나 빠져 있습니다. 본격적인 서비스를 구축하려면 분명 상당한 양의 ‘데이터’를 다루게 될 것입니다. 소셜 서비스나 쇼핑몰 같은 서비스는 고객 정보, 제품 정보, 거래 정보, 관계 정보 등을 다뤄야 합니다. 게임에서도 업적, 랭킹, 아이템 등이 모두 데이터입니다. 제공하는 기능이 이런 데이터를 직접 활용하지 않더라도, 고객이 어떤 기능을 얼마나 활용하는지 같은 정보를 수집해 분석하려면 또 데이터를 다뤄야 합니다.
양이 적고 단순한 데이터라면 자료구조와 알고리즘 수준에서 감당할 수도 있지만, 대량의 데이터를 수집, 저장, 가공, 분석하려면 더 전문적인 기법이 요구됩니다. 그것이 SQL과 데이터베이스입니다. SQL은 Structured Query Language의 약자로, 대량의 데이터를 수집, 저장, 가공, 분석하는 데 특화된 ‘언어’입니다. 그리고 데이터베이스는 대량의 데이터를 관리하기 위해 만든 전문 소프트웨어로, 소통용 언어로 SQL을 이용합니다. 컴퓨터에게 무언가를 시키려면 프로그래밍 언어를 이용하듯, 데이터베이스로 데이터를 관리하려면 SQL을 이용해야 합니다.
다행인 소식은 데이터베이스를 깊이까지 이해해야 하는 개발자의 비중은 그리 높지 않다는 것입니다. 그래서 우선은 <혼자 공부하는 SQL>부터 시작하여, 업무에서 필요한 만큼씩 더 파고드는 전략이 어떨까 합니다.
인공지능이 전공 필수가 된 건 비교적 최근입니다. 인공지능이 각종 서비스의 핵심 경쟁력으로 떠오르면서 이곳저곳에서 인공지능 인력을 뽑고 있습니다. 물론 우리 모두가 인공지능 엔지니어가 되진 않을 겁니다. 그럼에도 인공지능을 전공 필수에 포함시킨 이유는 그 활용 범위와 위상이 지금의 운영체제, 네트워크, 데이터베이스(DB) 수준으로 빠르게 커지고 있기 때문입니다. 이제 인공지능을 모르고는 IT 서비스를 온전히 이해하기 어려운 시대가 되어가고 있습니다.
<파이썬 공부하면 뭐하나?> 글에서도 이야기했듯이 인공지능을 직업으로 삼으려면 공부할 게 굉장히 많습니다. 하지만 전공 상식 수준에서의 입문용이라면 <밑바닥부터 시작하는 딥러닝 1(리마스터판)>과 <혼자 공부하는 머신러닝+딥러닝> 정도면 충분할 것입니다. 다음 그림에서 파란 배경의 책들입니다.
컴퓨터 전공 개발자를 따라잡기 위한 필수 지식 쌓기는 이것으로 끝났습니다. 그런데 이렇게 쌓은 지식을 다른 사람 앞에서 라이브로 증명해야 할 때가 있습니다. 바로 취업 혹은 이직 시의 인터뷰 자리입니다. 개발자 인터뷰에서 확인하는 능력은 크게 3가지입니다. 전공 필수 지식, 문제 해결 능력(주로 알고리즘 설계와 구현), 맡게 될 직무 관련 경험과 지식.
이중 전공 필수 지식과 문제 해결 능력은 지원한 직군과 무관한 공통 영역입니다.
먼저, <이것이 취업을 위한 컴퓨터 과학이다>에서는 이 글에서 지금까지 살펴본 전공 필수 과목들이 인터뷰 대비용으로 요약/정리되어 있습니다. 인공지능만 빠져 있네요. ‘하지만 이제는 인공지능도 필수가 되어야 하지 않겠나’라고 생각합니다만, 아직 모두가 동의하시지는 않겠지요. 한편, <이것이 취업을 위한 코딩 테스트다>와 같은 책들은 주요 IT 기업의 기출문제를 분석하고, 핵심 알고리즘의 이론을 복습하고 문제를 풀어보며 응용력을 키워주도록 꾸며져 있습니다.
마지막으로 직무에 특화된 도서들도 준비되어 있습니다. 취업, 이직, 온보딩과 관련한 자세한 이야기는 다음 기회에 다른 글로 찾아뵙겠습니다.
최신 콘텐츠