신입 개발자 입문하기
비전공자의 관점에서 어떻게 개발자로서 성장해 나가면 좋을지 튜토리얼을 제공하는 것이 좀 더 유익한 시간이 되지 않을까 하여 블로그에 글을 포스팅하게 되었다. 나름대로 전공자라고 하더라도 어떻게 공부할 것인가에 관해서는 각자 고민이 있을 것이고 각기 다를 것이다. 그런데 비전공자는 이렇게 고민할 엄두조차 나지 않고 본인이 뭘 모르고 뭘 공부해야 하는지 알지 못하는 것이 가장 큰 고민일 것이다. 필자가 그동안 전산학을 어떻게 공부했는지를 소개할 것인데 비전공자가 받아들이기 편하게 의식의 흐름대로 작성해 보게 되었다. 여기서 어떠한 공부를 해 나갈지를 가볍게 톺아보면서 계획을 세우는 데 도움이 되기를 바란다.
이론(공학적인 개념) 공부하기
처음 개발을 시작하게 되면 궁금한 것이 바로 알고리즘과 같은 어려운 공학적 개념일 것이다. 단순히 명령어를 나열한 것이 프로그램일 것이고 어느 정도만 알더라도 충분히 결괏값을 뽑아낼 수 있을 것이라고만 생각할 수 있다. 그리고 원하는 결과물만을 어떻게든 뽑아내기만 해야 한다면 정말 깊게 배울 필요가 없을지도 모른다. 정말 결과물만을 급하게 필요한 사람이라면 이론까지 배울 필요가 없을지도 모른다.
하지만 대용량 처리가 필요하거나 좀 더 효율적인 프로그래밍을 해서 유지보수를 간편하게 하고 싶다거나 새로운 라이브러리가 등장했을 때도 원리를 빠르게 파악하고 싶을 때는 반드시 공학적인 개념이 필요할 것이다. 이것이 직장 생활에서 일어나는 과정이라면 반드시 컴퓨터 공학적인 개념은 일정 부분 필요할 것이다. 요즘 같이 알고리즘을 이용한 코딩 테스트를 준비한다면 더할 나위 없이 컴퓨터 공학적인 개념이 동반되어야 할 것이다.
어떻게 공부해야 할까?
그렇다면 비전공자 관점에서 공부를 쉽게 하는 방법은 무엇이 있을까? 필자는 이 경우 정보처리산업기사의 과목을 학습하는 것을 추천한다.
그런데 개발을 진행하기 위해서 이론적인 지식을 어느 정도 알아야 하는 것은 맞는다고 생각하지만, 모든 이론을 완벽하게 깊게 알아야 할 필요는 없다고 본다. 뭐든 많이 알수록 유리한 건 사실이지만, 우리에게는 이것 말고도 공부해야 할 것이 많으므로 모든 걸 다 알고 갈 수는 없다고 생각한다. 통과 의례로 거쳐 가는 코스이자 기본기로 꼭 가지고 있어야 할 부분 정도까지만 공부하더라도 개발자로 성장하는 데 크게 지장은 없을 것이라 예상한다.
전자계산기구조
우리는 무의식중에 컴퓨터를 컴퓨터라 부르지만, 과연 컴퓨터라는 뜻은 어떻게 생겨난 걸까? 우리말로 바꿔 보면 어떻게 부르면 될까? 이렇게 부르는 사람은 없지만 아마 전자계산기가 가장 잘 표현하는 단어가 아닐까 한다.
지금 이렇게 블로그 포스팅을 보기 위해 디스플레이에 화면을 띄우는 것까지 모두 엄청난 연산 작업을 하고 있다는 것을 의미할 것이다. 사람도 물론 계산할 수 있겠지만, 많은 시간이 소요되는 것을 짧은 시간으로 줄여주는 것을 바로 컴퓨터가 해주는 것이다. 이러한 관점에서 어떻게 컴퓨터가 1+1을 계산하는지, 10진법을 2진법으로 계산하는지를 가볍게 살펴보면 도움이 될 것이다. 자바스크립트에서 IEEE754 표준에 따라 부동 소수점 숫자로 저장된다고 하는 의미가 무엇인지 좀 더 확 와 닿을 수 있을 것이다.
자료구조
계산해야 할 숫자는 있는데 이것을 계산하는 과정에서 어떤 방식으로 저장해야 가장 효율적으로 계산할 수 있는지를 고민한 것이 자료를 어떻게 컴퓨터에 담아두었다가 어떻게 계산을 수행하게 될 것인지를 배우게 될 것이다.
운영체제
예전에는 수학적인 계산에 따른 결괏값만 얻어내면 된다고 생각했는데 컴퓨터라는 장비가 복잡해지고 자원이 많아짐에 따라 이것을 효율적으로 관리하게 될 필요성을 느끼게 되었을 것이다. 그에 따라 이것을 관리하게 해주는 무언가가 필요했을 것이고 그것이 바로 운영체제를 탄생하게 했을 것이다. 운영체제는 실제로 하드웨어(RAM, 디스플레이 등)의 자원을 이용하여 소프트웨어를 구동하여 효율적으로 계산을 수행하게끔 해준다.
데이터베이스
효율적인 계산을 위해서 자료 구조를 만들고 운영체제가 자원을 효율적으로 활용하여 계산을 돕게 한다면 저장은 어떻게 할까? 물론 데이터베이스가 없어도 저장은 할 수 있지만 범주화하여 자료를 일정한 구조나 틀 안에 맞추어 짜임새 있게 저장하고자 한다면? 그래서 바로 데이터베이스가 탄생했을 것이다.
소프트웨어 공학
초기에는 계산을 위한 컴퓨터였겠지만, 오늘날의 프로그램은 다양하고 복잡해졌다. 그리고 이 프로그램 또한 사람처럼 생명을 지닌다. 폭포수 모델로서 프로그램이 한 단계를 밟으면 더는 무를 수 없는 생명주기를 선택할 것인지 아니면 고객에게 프로토타입 모형을 만들고 사용자와 지속해서 피드백을 주고받으며 개발을 진행해 나갈지 등에 관한 방법론에 관해 배울 것이다. 그렇다면 현업에서 진행하는 소프트웨어가 어떠한 모델을 지향하고 있고 현재는 어떤 단계에 와 있는지를 체감하는 데 도움이 많이 될 것으로 생각한다.
데이터 통신
운영체제를 이용하여 계산하고, 자료를 짜임새 있는 틀에 저장하고 불러오는 것까지는 됐다. 그런데 이제는 컴퓨터끼리 통신을 하고 싶어졌다. 그러한 큰 의미에서 인터넷이라는 녀석이 등장하게 되었다. 그렇다면 각 컴퓨터끼리 통신할 때는 어떠한 규칙으로 통신해야 하는 것일까? 우리가 길을 건널 때 신호등이 빨간 불일 때는 멈추고 파란 불일 때 건넌다. 최근에는 운전 중에 구급차가 삐뽀삐뽀 울리면 길을 비켜주어야 하는 법적 규약도 새로 추가됐다. 이처럼 컴퓨터끼리도 어떻게 통신하여 서로 충돌 없이 회선을 이용하여 자료가 왔다 갔다 할 수 있을지를 약속한 것이다.
이러한 의미에서 초기에는 어떤 방식으로 네트워킹이 진행되었고 진행되기 위해서는 어떠한 개념이 필요한지를 차분히 생각한다면 좀 더 쉽게 공부할 수 있을 것이다.
에필로그
글에서 정보처리기사가 개편되었다고 했는데 이제 2022년부터는 정보처리산업기사 또한 개편되어 위의 과목이 모두 폐지된다고 합니다. 하지만 그렇다고 하더라도 위의 과목이 낡아서 더는 쓸모가 없어서 폐지하는 것은 아니라고 생각합니다. 만약에 이 글을 다 읽어주셨다면 너무 감사하고 또 개발자로서 경험을 시작해 보겠다고 생각해 보시는 분들께 정보처리산업기사 자격증을 취득해 보실 것을 권합니다. 이는 자격증을 취득하라는 것에 목적을 두는 것이 아니라 단순히 공학적인 개념을 주제로 살펴볼 기회를 먼저 만들면 좋다는 것이라는 취지에서 말씀드린 것입니다.
혹시 내용이 부족하다면 댓글 달아주시면 궁금하신 부분에 관해 도와 드리겠습니다.
잘못된 내용이나 부족한 부분에 관해서도 문의 주시기 바랍니다.