필자가 프로그래밍에 주로 사용하는 언어는 Python이다. 물론, 컴공을 전공한 것도 아니고, 독학으로 깨작깨작 배운 것이 전부이기 때문에 실무를 진행하는 프로그래머만큼은 실력이 쌓이지는 않았다만, 나름 필자의 업무도 Python을 이용한 스크립트 작성이 없지는 않은데다(심지어 그 결과도 좋았고), 혼자 쏠쏠히 필요한 프로그램을 만들어서 사용할 정도는 되었기 때문에 그 이상으로 배움에 큰 의지를 가지지 못해왔던 것도 사실이다.
아, 그래서 왜 갑자기 자료 구조를 보게 되었느냐고? 사연이 있다. 필자는 현재 SE를 업으로 삼고 있다. 이 분야를 잘 모르는 분들에게 조금 풀어서 설명을 하자면, System Engineer인데, 회사에서 판매하는 서버 등에 대해 작동 원리를 익히고, 시스템을 구축하고 문제가 발생하면 작동 원리를 기반으로 문제를 해결하는 직업이다.
사실, 워라벨 측면에서 볼 때 회사도 그렇고 직업도 크게 나쁜 점은 없다. 바쁜 때에는 무지 바쁘지만 일이 없는 때에는 외근 나갔다가 직퇴를 하는 경우도 많고 최근에는 코로나가 창궐하여 재택근무가 주를 이루는 덕에 정말 일이 없으면 집에서 쉬는 것도 가능하다(물론 지금은 그런 꿈만같은 일과 정 반대의 상황이 벌어져서 문제지...)
그런데 필자가 SE로 오래 일하지는 않았지만, 최근 들어 필자의 직업이 얼마나 오래 유지가 될 수 있는지에 대한 의구심이 조금씩 생기고 있다. 우선 첫 번째 이유는, SE는 회사에서 지정한 제품 외에 타 제품을 접할 일이 그리 많지 않다. 그것도 담당 제품이 국내에서 많이 사용되는 회사의 주력 제품이라면 더더욱 다른 제품을 접하기 힘든 구조다. IT 업계의 경우 이직을 통해 몸값을 올리는 경우가 많은데, 소수의 제품군만 접하는 상황이 지속되면 이직할 수 있는 기회가 확실히 많이 줄어든다. 필자 주변만 봐도 이러한 경우가 많은데, 이직을 해봐야 비슷한 규모의 , 유사 제품을 다루는 업체로 밖에 이직이 안된다. 연봉 상승이라는 가장 중요한 부분은 둘째로 치더라도, 유사 제품군만 다루다보면 확실히 시야가 좁아질 수 밖에 없다.
첫 번째 원인이 커리어와 관련된 이유라면, 두 번째 원인은 조금 더 개인적인 이유이며 비중이 크다. SE는 누군가가 창조한 제품, 그리고 사용자에게 필요성을 인증받은 제품만 담당한다. 그러다보니, 제품의 창조자가 생성한 세계 내에서만 업무가 진행되고, 그 경계를 벗어나 창조적인 시각으로 바라보는 것이 점점 어려워지고 있음을 느낀다. 물론, 그들이 만들어낸 제품 내의 작동 구조나 프로그램을 하나씩 확인하면서 이들의 의도를 파악하면서 배우는 것도 적지 않지만, SE가 다루는 제품 수가 많지 않고 작업이 한정적이다보니 결국 창조가 아닌 모방, 이들의 생각에 종속되어버린다는 느낌이 점점 강해진다. 더욱 웃긴것은, 제품에 문제가 생겨 조금 더 깊숙한 내용을 확인하기 위해 제조사에 도움을 요청하면 의외로 해결을 잘 못(안)해준다. 특히 외국 업체들의 경우, 순전히 문제 해결을 위해 시스템 접근 권한을 요청하는 경우에도 지원을 잘 해주지 않는 경우가 대부분이며 문제가 생기면 업데이트를 하거나 재설치를 하라는 말이 70%다. 조금 더 정리하자면, SE 업무로는 IT 업계에서 필요한 창조성을 키우기에 너무나 좋지 않은 환경이라는 것이다. 필자도 무언가에게 종속되기보다 앞에서 선도하고 점유하는 것을 선호하는 성격이라 그런지, 최근 업무에 대해 느끼는 감정이 뭔가 좋기도한데 싫기도 한...애증 덩어리로 전락하고 있다.
이러한 이유 때문에 최근에 생각을 조금 많이 해봤다. 무언가 새로운 것을 창조할 수 있는, 그리고 영향력을 끼칠 수 있는 것이 무엇이 있을까? 무에서 유를 창조할 수 있는 직업 중 하나가 프로그래머였다. 아! 물론 프로그래머가 된다고 해서 반드시 창조와 밀접해지는 것은 아니다. 무슨 말이냐면, 프로그래머도 중소업체로 내려가면 판매하는 제품군이 딱 정해져있기 때문에 그 제품과 관련된 프로그래밍만 대부분 진행한다. 게다가 중소 업체 프로그래머들은 대기업이나 공공기관을 상대하여 업무를 진행하기 때문에 창조적인 방식의 생각보다, 갑들이 원하는 방식의 생각을 구현해야할 때가 99%다.
그럼, 결론은 하나다. 정말 프로그래머가 역량을 발휘할 수 있는 큰 규모의 회사로, 프로그래머로 이직을 해야한다는 것.
이 생각에 다다르고 나서 필자가 지금까지 독학한, 그리고 개인적인 프로젝트와 업무 상 작성한 코드를 쭈욱 꺼내어 살펴보았다.
코드를 보다보니, 필자가 당장 중점적으로 익혀야 할 부분 중 가장 급한 부분이, 프로그래밍의 절차를 효율적으로 만드는 방법이었다. 그러니까, 필자의 코딩 실력으로 생각한 바를 다른 사람이 읽기 쉽게 깔끔하게 표현할 수는 있지만, 이 코드들을 어떻게 작성해야 더 효율적으로 작동하는지에 대해서는 전혀 고려가 되어 있지 않다는 것이다.
흔히 기업의 코딩 테스트와 관련된 글들을 읽다보면 알고리즘과 자료구조의 중요성에 대해 눈에 못이 박히는 것처럼 읽게되는데, 이 알고리즘과 자료구조가 바로 효율적인 코드 작성을 위한 기반이 되는 것이기 때문이다.
그래서... Android나 기타 등등 벌려놓고 끝내지 일들이 많지만,
다 제껴두고 필자의 주력 언어를 기반으로 하는 자료구조 카테고리를 개설하게 되었다.
시간은 조금 오래 걸릴 듯 하다만,
삽 하나로 100층짜리 건물 기반을 닦는 느낌이 들지만... 하나씩 해보려 한다.
다음 포스팅은 알고리즘과 순서도에 대해 간략히 작성하는 것부터...
'Python > Python Data Structure and Algorithm' 카테고리의 다른 글
[자료구조 with Python] 5. 선형 자료 구조 - 배열(4), Hash검색 (0) | 2021.01.10 |
---|---|
[자료구조 with Python] 5. 선형 자료 구조 - 배열(3), 선형/이진 검색 (0) | 2021.01.05 |
[자료구조 with Python] 4. 선형 자료 구조 - 배열(2), 기본 메서드/함수 동작 (0) | 2021.01.02 |
[자료구조 with Python] 3. 선형 자료 구조 - 배열(1) (0) | 2020.12.13 |
[자료구조 with Python] 2. 알고리즘이란. (0) | 2020.12.12 |
댓글