AI가 어차피 다 해주는 세상에서 알고리즘 스터디는 왜 하는가?
알고리즘 공부에 대한 생각
알고리즘 공부에 대한 생각
최근 전직장 동료 A를 만났다. 오래 함께 같은 팀에서 일했던 개발자 동료였음.
각자의 근황을 얘기를 시작으로 AI의 시대에서 우리가 어떻게 살아남을 수 있을까에 대한 이야기들을 하였다. 나의 근황 중 하나가 리트코드 알고리즘 스터디를 하는 거였는데 돌아오는 반응.
그걸 왜 해요? 이젠 알고리즘 공부 안해도 되잖아요. 어차피 AI가 해주는데. 저는 앞으로 알고리즘 할 필요가 없다고 생각해요.
틀린 소리라고는 생각 안한다. 알고리즘 코드 자체는 AI가 또 알아서 다 짜줄 수 있는 시대니까.
다만 나는 이 알고리즘 스터디를 '그냥 해야지~'라는 단순한 이유로 시작했던 건 아니다. 알고리즘은 인풋과 아웃풋이 주어지면 그 중간의 해석을 찾아가는 과정이 포함된 하나의 설계 방식이다. 그러니 문제를 정의하고 풀이를 고민하며 코드를 작성해나가는 그 과정을 훈련하고자 한 거다. 알고리즘 문제는 아무래도 이미 정형화된 패턴들이 있다보니 그 훈련이 다소 옛것처럼 느껴질진 모르겠지만 나는 애초에 그 가치 자체를 낮출 이유도 없다고 생각함
알고리즘을 AI한테 넘기지 않고 싶다면, 문제 풀이할 때 그냥 단순히 코드만 작성하는 게 아니라 왜 그렇게 코드를 작성했는지 주석도 달아보고, TC와 SC는 어떻게 나오는지 생각하면서 풀이하면 된다.
문제 풀이만 하면 엄청 짧을 코드지만 주석이 더 긴 나의 문제 풀이 예시... 지난 주 문제 풀이 PR
python# 7기 풀이 # 시간 복잡도: O(n) # - 문자열 s의 전체 문자를 순회할 때 길이 n만큼의 시간 소요 # 공간 복잡도: O(1) # - start, end 등의 변수만 사용 class Solution: def isPalindrome(self, s: str) -> bool: # two pointer로 각 문자열을 비교하며 palindrome인지 체크한다. # 해당 문제의 조건 중 하나가 alphanumeric한 문자만 체크하는 것 start, end = 0, len(s) - 1 # 양 끝의 포인터 인덱스가 같아지기 전까지 루프를 돌린다. while start < end: if not s[start].isalnum(): # s[start] 문자가 alphanumeric하지 않은 경우엔 start 포인터를 오른쪽으로 한 칸 이동 start += 1 continue if not s[end].isalnum(): # s[end] 문자가 alphanumeric하지 않은 경우엔 end 포인터를 왼쪽으로 한 칸 이동 end -= 1 continue if s[start].lower() != s[end].lower(): # 두 문자의 lowercase가 동일하지 않은 경우에는 palindrome이 아니므로 False로 early return 해준다. return False start, end = start + 1, end - 1 # while 루프가 다 돌았다면 조건에 걸리지 않고 palindrome임을 충족하므로 True를 return return True
그러니 오히려 요즘에 더 필요한 것 아닐까,라는 마음으로 시작한 것이 크다. 물론 문제 풀며 머리 써보는 과정 자체가 재밌어서 하는 거기도 함 ㅎㅎ (+아.. 다 까먹어서 다시 공부해야겠다 생각했던 것이기도 함 ㅋ... 이유는 여러가지)
수학 공부 열심히 했던 고등학생 때도 비슷하게 생각했던 것 같다. 애초에 공식을 외우는 과목이 아니라 "이해"한 공식을 "문제에 적용할 줄 알아야 하는 과목"이라고 생각했었음.
공학용 계산기가 있다고 해서 미적분 공부를 하지 않아도 되는 건 아니지 않았는가. AI가 다 해준다고 해서 알고리즘 자체를 공부 안해도 된다는 이야기도 이와 결이 비슷한 것 같다. 그걸 그냥 안해도 된다로 치부하면 기술의 전문가에게는 오히려 아쉬워지는 상황 아닐까 생각했다. (물론 비개발자들이 AI를 사용할 줄 아는 거와는 조금 다른 결이라 생각함. 그들에겐 내부 구현의 세계는 추상화 영역이라 모를 수도 있다고 봄)
전문화 영역과 그를 이루는 경계가 흐려지는 요즘인 것도 맞다. 그래도 개발자의 전문화 영역은 내부 구현을 이해하여 공학적(+하드웨어 영역 포함)이거나 워크 프로세스의 효율을 개선할 수 있다는 점이겠다. 이조차 점점 AI로 대체 가능해질지도 모르겠다만, 지금 시점을 commit하고 봤을 땐 그 상황까지 가려면 조금 멀지 않았나 싶다.
AI의 기술이 하루가 다르게 발전하고 AI가 커버해주는 영역이 익스포넨셜하게 늘어나는 상황이니 어떤 가치는 바로 쓸모가 없어지기도 하는데, 그래도 근본은 결국 안 없어질 거 같다. 알고리즘을 푸는 행위 말고, 그 과정에서 문제를 정의하고 풀이를 고민하는 사고 훈련.. 그게 근본 아닐까?