프로그래밍의 근본, 알고리즘 (feat. 코딩테스트)

2021. 12. 27. 23:58IT용어 아는척 하기

반응형

 

프로그래밍은 문제 해결능력이다.


프로그래밍은 매우 복잡한 과정이며 조합의 결과물이다.

지금 세상에는 배워야할 언어도, 라이브러리도, 프레임워크도, 심지어 SaaS 서비스까지 그 수는 헤아릴 수없을 정도이다.

 

프로그래밍의 전체 과정은 이를 잘 조합해서 서비스를 만드는 과정이다.

 

간단한 웹사이트 만들기에도 많은 결정사항들과 조합이 따라온다.

일단 비즈니스를 웹에 잘 녹이는 의사결정부터 해야한다. 여기만 해도 벌써 머리가 아플 것이다.

기능정의 부터 사용자 친화적 UI/UX, 사이트맵 등등이 따라온다.

 

기술적으로 들어가면 프론트앤드는 무엇으로 할것인지

백엔드는 어떤 언어와 프레임워크의 조합으로 갈 것인지

협업 툴은 무엇을 사용할지

인프라는 어떻게 구성할지

아니면 그냥 SaaS 서비스를 활용할지

 

결정해야할 포인트도 수백가지고 그것들의 조합을 따지면 거의 무한대에 가깝다.

 

 

 

웹사이트 제작에도 수많은 결정을 해야한다.

 

 

 

결국 프로그래밍을 하여 서비스를 만드는 것은 적절한 선택으로 문제를 해결해 가는 능력으로 귀결된다고 본다.

 

여러 매체들에서 프로그래머에게 가장 중요한 역량은 무엇인가를 물으면 모두들 문제해결 능력을 이야기하는 것이

결국 이 복잡한 단계들에 대한 해결이 기다리고 있기 때문이다.

 

그럼 그 능력을 얻기위해 무엇을 해야할까?

더많은 선택지들을 배우고 장단점을 알면 되는 것일까?

그러다 내가 배운 선택지들이 인기가 없어지고 사장되면 또 다른것을 배워야 하는것인가?

 

결국 해답은 근본에 있다고 생각한다.

컴퓨터 공학이 나온 이후로 계속해서 베이스 지식으로 강조되는 영역, 바로 알고리즘이다.

 

 

 

 

 

알고리즘이란 무엇인가?


알고리즘이란 단어를 한번쯤 수학 책에서 몇가지 도형과 선으로 만들어진 형태로 접해보았을 것이다.

 

알고리즘을 위키피디아에서는 아래와 같이 정의한다.

 

"알고리즘이란?, 셈법은 수학과 컴퓨터과학, 언어학 또는 엮인 분야에서 어떠한 문제를 풀어내기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것, 계산을 실행하기 위한 단계적 절차를 의미한다. 즉, 문제풀이에 필요한 계산절차 또는 처리과정의 순서를 뜻한다."

 

 

간단하게 말하면 어떤 입력을 어떤 출력으로 변환하는 일련의 계산과정이라 정의할 수 있다.

 

우리가 접하는 대부분의 프로그래밍 문제들에서

알고리즘을 정의해 보면 "수에 대한 문제를 풀기 위한 명확하고 유한한 방법의 절차"이다.

 

"수에 대한"이 의문일수도 있겠지만 결국 컴퓨터는 0과1로 모든것을 해결하는 도구이다.

요즘 뜨고 있는 딥러닝 문제도 결국은 이미지를 수로 바꿔서 처리하고

자연어 처리도 형태소 분석등을 통해 결국 수로 바꿔서 문제를 처리한다.

 

주어진 조건 맞게 적절한 출력을 하기위한 계산과정을 설계해 나가는게 알고리즘을 만드는 과정이고

이것이 결국 문제해결 과정을 닮아 있다.

 

 

 

 

알고리즘을 만드는 과정과 문제해결 과정


「어떻게 문제를 풀 것인가(How to Solve It)」 책에서 소개하는 문제 해결 과정

1) 문제를 이해한다.
2) 어떻게 풀지 계획을 세운다.
3) 계획을 수행해서 문제를 해결한다.
4) 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

 

알고리즘을 만드는 과정은 아래와 같이 정리할 수 있다.

1) 주어진 문제를 이해한다.

2) 흐름과 처리를 조합해 계산과정을 설계한다.

3) 처리마다 수를 추적하며 검증한다.

4) 더 나은 과정을 고려해 본다.

 

※ 흐름과 처리
프로그래밍 기초단계는 사실 크게 3가지로 이루어져 있다고 생각한다.
조건문, 반복문, 변수 가 그것이다.
이를 조합하여 더 복잡한 문법들이 만들어진다고 본다.

처리는 결국 변수이다.
입력, 연산, 출력 모두 변수를 가지고 이루어지기 때문이다.
흐름은 조건문과 반복문이다.
프로그래밍이 대부분 위에서 아래로 순차적으로 흐르고 그 안에서 어느부분은 반복하고 분기처리 할 것인지가 관건이다.

 

매우 유사한 것을 볼 수 있다.

 

기업에서 코딩 테스트를 기본 소양으로 제시하는데도 이 이유가 맞닿아 있을 것이다.

입사한 이후에도 계속해서 사내 테스트를 시행하여 알고리즘 문제를 해결하여 평가하는 이유도 마찬가지 이다.

 

알고리즘을 만드는 과정 자체가 문제해결 능력을 기르는 연습이 되기 때문이다.

 

 

 

반응형