개소리 오브 개소리 – CS Fundamental, 자료구조, 알고리즘 깊이 몰라도 된다는 개소리

난 사실 OKKY 별로 안좋아한다. 옛날에 개발 공부할 때 대부분의 사람들이 하던 SI식 개발방법론을 많이 배웠던 곳이기도 해서 그런지 별로 좋지 않다. 회원들도 너무 폭이 넓어서 그런지 배울 게 많은 사람도 있는 반면에 배울 게 없는 사람들도 너무 많다.

근데 여기에 아주 폭탄 하나 떨궈놓은 글이 있다.

이런 거 떠들 수 있다는 거 자체는 그다지 좋은 게 아니다. 당사자들이 싸우거나 어이없게 논점 흐려지는 거랑은 전혀 다르게, 이런 걸 받아들일 주니어나 학생들 입장에서는 진짜 개판적인 사고를 심어준다. 결과적으로, 그 커뮤니티가 정체된다. 이런 이야기는 나중에 술마시고 적어야 하니 이쯤으로 하고…

저 글이 대체 뭐가 문제냐면, 고도의 추상화가 되고 있기 때문에 우리는 그것들을 쓰면서 구현을 하고, 그러면서 그에 해당하는 알고리즘을 익히고 한다는 것이다. 즉, [개발 경험이 풍부하다 = 고급 알고리즘을 알 수 있다]라는 개소리 오브 개소리다.

기술이 발전했으니까..? 그러면 그 기술을 발전시키는 사람들은 대체 어떤 곳에서 태어나는 것인지는 깊이 생각 안해보는 건가? 당연히 기본적인 CS 기본 지식들과 자료구조, 알고리즘을 엄청나게 학습한 상태에서 현재의 기술들에 문제점을 파악하고 그것을 발전시킨 사람들이다. 굳이 대학원이 아니어도 기업의 연구소, 국가 연구소, 개발 중 나온 신기술들 또한 그런 구조다. 구글이나 페이스북, MS, 애플은 뭐 그런 거 안하고 그냥 누가 만드는 수준으로만 대충 구현만 해서 기술 만드는 사람들인 줄 아나?

지금 당신들이 쓰는 컴퓨터의 메모리 관리 구조도, 멀티코어 관리 기술들도, 파일 시스템들도, 네트워크 기술도 죄다 기초적인 기술들이 모이고 모인 기술들이다. 그 중에서 그냥 제공되는 프레임워크와 API 쓸 줄 안다고 해서 그 안의 기술을 알 수 있다? 그리고는 게임 개발에 쓰이는 OpenGL이 20년전 유행기술이었지만 지금은 다른 기술들도 많다? 그들 또한 그 아에 있는 기본 기술들을 다른 식으로 응용한 거라는 건 모르겠나?

기술의 발전이라는 걸 무시하는 것이다. 특히나 특정 “계보”에 의해 진화된 기술들에 대해서 개무시하는 것이다. 선택받지 않은 기술은 다 죽은 기술인 것이다. 저들은 과거에 아이폰이 나왔을 때, 개발에 오브젝티브-C가 쓰였을 때에도 해당 언어 까기 바쁜 사람들이었다. 그리고는 C++로 할 수 있는 방법 없냐를 자주 물었다. (실제로 그런 사람들을 위한 책도 나왔었다.) 그러나, 다들 그냥 해당 언어를 빠르게 배워서 먼저 개발 싹 했고, 필요한 프레임워크나 기능들을 오브젝티브-C로 짜내기도 했다. 코드 연동 또한 잘 되는 편이라 기존부터 많이 이용되었던 알고리즘도 그대로 써보니 성능 잘 나와서 크게 바뀔고 할 것도 없던 것도 있고… 이런 응용의 모든 방식을 죄다 부정하는 것이나 마찬가지다.

이런 사람들이 주로 하는 소리는 여럿 있다. 수학 못해도 개발하는 데 지장 없다는 소리, 내가 해봐서 아는데 알고리즘 깊게 알 필요 없다는 소리 등등… 다 개소리 집합체다. 가뜩이나 그런 개소리 하는 사람 양성하는 곳들도 많은 상황에, 그것도 대학까지 거들고 있어서 병신소리 하는 마당에! 그냥 안드로이드 앱 개발, 윈도우 MFC 프로그래밍, 자바 어플리케이션 개발, 웹 개발 등 UI랑 엮인 응용 프로그램 개발자들이 저런 경우에 많이 빠진다. 저들은 그냥 오픈소스로 되어 있는 프레임워크 갖다가 쓰기만 하면 되니깐 별 생각을 안하게 된다. 그러다가 좀 더 접해보다보면 한정된 상황에서 어떻게 더 잘 할 수 있을까 아닐까를 고민할 때쯤에 저렇게 익힌 사람들은 “자원이 모자라요. 좀 더 좋은 하드웨어 쓰세요.” 같은 소리로 돈을 쓰는 개발을 하게 된다.

그럼 이제, 저들이 왜 저런 디자인 패턴, 코드 패턴 등에 저렇게 찬양을 하는 걸까? 실제로 보면 저런 거랑 아무 연도 없는 그런 개발을 하는 게 엄청나게 많은 사람들이?

“코드, 패턴 그리고 소프트웨어”를 읽어본 사람들은 알겠지만, 아니면 요즘 유행하는 클린 코드, 리펙토링, 디자인 패턴 등등에서도 말하는 것이지만, 언어론적인 이야기다. 설계 문제에 대한 이야기, 문제 해결법과 그 배경에 대한 이야기들, 그 해법 과정에서 생기는 협력 관계나 책임, 그리고 그로 인한 결과론… 즉, [프로그래밍 언어론 + 소프트웨어 엔지니어링]의 문제다. SI 개발을 하는 사람들한테는 저게 되게 중요한 문제가 된다. 구현만 잘 되는 입장에서는 그냥 남들이 봐도 문제 없는 코드, 남들도 다 잘 써먹을 수 있는 코드, 코드 제작에 있어서의 책임과 성과가 정확하게 나오는 구조가 좋은 구조이기 때문에 오히려 그쪽을 더 중요시 하는 것이다.

그리고 이런 건들은 일에 대한 내용이지 컴공의 이론과 관련된 내용과는 좀 많이 동떨어져 있다. (얼마나 이론적인 내용과 많이 떨어져 있으면 자신이 컴퓨터공학 대학원 박사과정이거나 석박 통합과정인데 어정쩡한 위치에서 쉽게 박사학위 논문 따고 싶으면 주제를 이쪽으로 하면 쉽게 딴다는 소문도 있다.) 그런고로 주로 관리자 입장에서 있던 사람들은 이런 이론에 빠삭한 사람들을 좋아한다. 이런 것이 이해되는 사람들이라는 것은 “이해가 되니 그대로 구현해라”라고 할 수 있는, 즉 앉아서 바로 일할 수 있는 사람인 것이다. 거기에 구조가 바뀌더라도 그 구조에 맞춰서 그대로 일만 할 수 있다면 그 사람이 일을 하던 다른 사람이 일을 하던 상관없는, 그런 환경에서 죻아한다.

마지막으로, 이런 환경이 아직도 정~~~말 많다. 대한민국의 SI 비율은 70% 이상은 된다고 한다.

그리고 그 정도 수준의 개발자들은 언제든지 만들어질 수 있고, 저연봉으로 일한다.

소수의 성공한 개발자가 되라고 말하는 게 아니다. 자신의 위치와 상황에 대해서 정확하게 알라는 것이다. 연봉 협상도 제대로 못해서 연봉 좀 더 올려달라고 하면 “너같은 수준의 개발자 많아”라면서 개찬밥 취급 당하거나 해고당하지 않는 것만으로도 다행이라고 생각하는 그런 하찮은 수준으로 앞으로를 살 것인가? 그렇게 있다가 신규 개발자들한테 안치이려고 그대로 “알고리즘 자료구조 그런 거 쓸모없어”라고 지껄일 껀가? 그리고 거기에 안주해서 모자란지식 있으면 “개발 못해요” 라고 할 것인가?

그냥 있는 API 갖다가 단순하게 뭐 만다는 건 일도 아닌 시대가 오는데… 아직도 이런 개소리가 나도는 게 참 한심하다. 그리고 거기에 동조하는 덧글들 또한… 그리고 이런 거에 놀아나는 대학들 또한 한심하다.

“개소리 오브 개소리 – CS Fundamental, 자료구조, 알고리즘 깊이 몰라도 된다는 개소리”의 한가지 생각

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.