티스토리 뷰

 간만에 여유가 생겨서 이곳 저곳 기웃 거리다 보면 심심치 않게 '알고리즘 대전' 이라는 이름으로 몇몇 게시글을 볼 수 있었다. 내용인 즉슨, 실무에 정말 알고리즘이 필요하냐 이다. 이러한 글들이 요즘 새삼 스레 많이 보이는 이유는 신입 개발자 뽑는 곳에서 대부분 알고리즘 온라인 테스트를 하고, 경력 이직들도 알고리즘 테스트를 보기 때문이다.

 재미나게도 왜 알고리즘을 알아야 하는 것에 반대되는 이야기가 나오는 이유는 적지 않는 세월동인 SI를 해본 입장에서 이해는 가긴 한다. 빠른 시간안에 서비스를 구현하기 위해서는 알고리즘 보다는 서비스를 이해하고 분석하며 빠르게 개발하는 것이 더 중요하다는 것이다.

 

 이해는 가지만, 동의하지 않는다.

 

 이러한 말들이 개발자 간 오갈 때 꼰대 같지만 내가 하는 예시가 있다. 1 부터 100이라는 연결된 숫자가 담긴 배열이 있고 이 값들을 모두 더하면 어떤 값이 나올까라는 문제를 풀려고 한다. 내가 이러한 내용을 개발자에게 물어보면 대부분 for문들을 이용해서 간단히 해결해서 풀이를 한다.

 

 해결했고, 결과도 나왔다.

 

 하지만, n(n+1)/2 공식을 아는 사람은 '100 * (100 +1) / 2' 를 활용해서 동일한 결과값을 나오게 할 수 있다. 알고리즘은 바로 이와 같다. 이게 왜 알아야 할 포인트인 것이 for문을 사용하면 반복과 합산이라는 연산이 100번 동안 수행하게 된다. 이는 사람이 느끼기에 찰나의 시간일지 몰라도, 이게 여러 군데에서 쌓이고 쌓이면 속도저하로 연결되는 것이다.

 알고리즘을 아는 사람들을 왜 회사에서 뽑을까? 이건 주니어 개발자들의 소스를 리뷰하면서 쌓인 경험을 비유하자면 예초에 저렇게 효율적이지 않는 코딩을 안한다는 것이다. 이미 서비스 프로세스를 보고 '아, 이곳에는 이걸 써보면 더 효율적이겠다.' 라는 생각을 할 수 있다는 것이다.

 

 알고리즘을 공부하지 않는 개발자 중에 어느정도 레벨이 오르면 경험으로 인하여 프로세스를 보고 '이건 문제가 있는데? 이렇게 하면 좋겠다.' 라는 분들이 있다. 이것도 알고리즘 영역이라고 생각한다. 하지만, 공부를 왜 하냐, 바로 이러한 경험을 얻게되는 시간을 짧게 만들어 주는 첩경이니까.

 

 참고로, 할 수 있다는 것과 한다는 것은 다르다. 이 벽을 넘는 것은 경험의 영역이다.

 

 알고리즘은 소프트웨어 공학의 기초 레벨이다. 이 기초가 상식이고, 상식이 있다면 소위 '교양' 있게 말을 할 수 있다. 알고리즘만이 아니다. 프로그램 언어학, 데이터 네트워크, 운영체계, 자료구조 등등 이러한 것들이 소프트웨어 공학의 기초다. 이는 프로그래머로써 자신의 수준을 올리기 위해 가장 중요한 '학문'이다.

 

 고급 개발자가 와서 같이 웹 개발을 하는데, 큰 라이브러리를 써놓게 쓰지 않을 때 메모리 해제 하지 않아 나오는 메모리 누수를 자신은 문제 없다고 당당히 말하는 사람을 보고, '몰상식' 하다고 생각이 들었다. 가비지 컬렉터가 뭔지도 모르더라...

 메뉴 구조 만들고, 선택한 메뉴만 메뉴에 출력되게 하는 기능을 만드는데, 내가 재귀함수로 자료 구조의 트리 탐색 알고리즘 쓰면 된다고 할 때 어떤 분은 그런건 이론에나 있는 말이다고 할 때, 어처구니가 없었다. 결국 내가 개발을 했지만...

 

 여담이지만, 개인적으로 지금의 알고리즘 온라인 테스트는 반대하는 입장이다. 너무 폭력적이다. 어떤 곳은 5시간이나 할애하게 만든다. 과연 그들은 '5시간 정도는 할애해서 우리 테스트를 봐야함!' 할 수 있지만, 그 5시간이 누구누구에는 소중한 시간이다. 나처럼 애를 키우는 유부남에겐...

 뭔가 카카오나 큰 기업에서 인증 센터를 만들어서 한번 인증 제대로 받으면 보증할 수 있는 게 있다면 좋다는 생각이다. 이걸로 장사를 해도 돈 좀 벌겠네...

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함