우리는 소프트웨어 분야와 관련 여부에 상관없이 알고리즘이라는 단어를 참 많이 듣는다.
아마도 정부에서 강조하는 4차산업 혁명이나, 코딩교육 의무화등 소프트웨어가 우리 일상속에 많이 스며든 탓인것 같다.
알고리즘이라는 말의 어원은 의외로 사람 이름이다.
중세시대 페르시아의 수학자 알-콰리즈미(750~850년경)에서 비롯되었다고 알려졌으며, 알 콰리즈미는 이차방정식의 풀잇법과 인수분해를 개발한 사람이다.
그럼 우리는 어떤 의미로 알고리즘 이라는 단어를 사용하고 있을까?
알고리즘의 사전적 의미는 '문제를 푸는 방법이나 절차' 이다. 이를 좀 더 구체적으로 말하면 어떤 문제가 있을 때, 주어진 '입력' 정보를 원하는 '출력(답)' 정보로 만드는 일련의 과정이다.
예를 들어 어떤 수의 절댓값을 구하는 알고리즘을 구하라고 하면 다음과 같다.
1. 숫자가 0보다 큰지 작은지 판별한다.
2. 만약 0보다 작은경우 -1를 곱한다.
다음과 같은 두가지 방법으로 우리는 어떤 수의 절댓값을 구하는 알고리즘을 구상해 보았다.
이 알고리즘은 방금 나처럼 한글로 설명할 수 있고, 파이썬 코드로 if n<0: 등으로 표현하거나 C,JAVA 등 다양한 언어로
표현할 수 있다. 따라서 기업같은 곳에서 알고리즘 테스트를 한다고 하면, 거기서 어떤 컴퓨터 언어를 사용할지 선택을 하는 경우가 많다.
절댓값을 구하는 알고리즘은 위와 같이 구할 수도 있지만, 다음과 같은 형태로도 가능하다.
1. 숫자를 제곱한다.
2. 그 숫자에 루트를 씌운다.
이 방법으로도 특정 수의 절댓값을 무리없이 구할 수 있다.
이처럼 알고리즘에는 한가지 정답만이 존재하는 것이 아님을 알 수 있다.
그렇다면, 어떤 알고리즘이 좋은 알고리즘일까?
답은 예상했듯이, 더 쉽고 간단하게 구현할 수 있는 것이다.
특정 문제를 푸는 과정이 복잡하면 복잡할 수록, 그것을 구현하는 컴퓨터에 많은 부하가 걸린다.
조금 더 간단하고, 명확한 알고리즘을 제시할 수 있는 사람이 더 뛰어난 알고리즘 구상능력을 가지고 있는 사람이다.
컴퓨터 공부를 시작할때, 많은 사람들이 파이썬으로 시작하라고 말한다.
나는 그 이유를 파이썬은 불필요한 문법적 요소나 알고리즘에 굳이 필요하지 않는 사고를 덜어주는 방식으로 설계되어 문제 본질에 더욱 집중할 수 있게 해주기 때문이라고 생각한다.
파이썬은 몇가지 단점도 존재하지만, 간단명료하게 구현하는 것에 최적화 되어있기 때문에, 많은 사람들에게 사랑받고 있고 앞으로도 그럴 것이다.
만약 소프트웨어, 알고리즘 공부를 시작할 계획이 있다면, 파이썬으로 시작하는 것을 권한다.