레거시 개발자가 생각하는 언어부심.
카테고리가 사는얘기인 만큼
재밌자고 쓴 글이니 진지한 반응은 자재 부탁드립니다.
나는 응용프로램 개발자이다
실력은 별로 없는...
넓고 얇게 판 생계형 개발자이다
자 이제 밑밥은 깔았으니
내가 해왔던 개발이란게 얼마나 허접하고 별거 없는지를 이야기 해 보겠다
나는 처음에는 다른일을 했었다
나와 적성이 너무 안 맞았다. 나는 몸 쓰는 것을 싫어 했기 때문이다
그리고 인터넷이 처음 생기고 나서, 심마니, 넷스케이프가 나올때 쯤...
홈페이지 제작에 관심을 갖는다. 지금으로 치자면 sns 와 같은 것이다
CGI 로 된 방명록도 붙여보고 메모장도 붙여 보다가 소스를 까보기 시작했다
Perl 이란 언어 인데 나도 멋지게 기능을 고쳐보고 싶었다
요게 너무 재밌어서 시도해 보다가 결국 이쪽으로 방향을 잡기로 결정한다
처음 회사에
사장이란 단둘이 있는 회사에 들어갔는데
Perl 을 거쳐서 Php, Mysql 을 사용하여 서비스를 만들게 되었다.
혼자서 리눅스 서버 셋팅하고, 플래시도 하고 프론트, 백엔드도 모두 만들 었다
이때는 없는 단어였던, 1년차에 풀스텍 개발자가 된것이다
월급이 밀려서 3개월 만에 나오고
본격적인 개발팀이 있는 회사에 들어갔다
2년차에 산업은행 플젝에 투입됬다
매일같이 야근해도 개발이 너무 재미 있었다
퇴근하고 지하철에서나 집에 가서도 책을 계속 구입해서 꾸준히 공부했다
리눅스 레드헷, 메일서버, DNS서버, 네임서버 , TCP/IP 닥치는 대로 읽었다
Php 한 가지만 만 할줄 알다 보니
asp 나 jsp 를 하는 사람이 너무 부러웠다
저렇게 멋진 언어를 하다니..
나는 mysql 만 주구장장 하고 있는데 oracle 하는 사람이 부러워졌다
사실 초기에는 오라클이 pc 버전이 없어서 엔터프라이즈 환경에서 실무 플젝을 뛰어야만
만져볼수 있는 DB 였다
실제로 오라클 다루는 친구한테 이런 질문도 했다
'오라클은 어때요? 많이 어려워요?'
그러다 정규직 회사는 자꾸 망하고 월급이 안나와서 2년차에 프리를 하게 된다
돈도 많이 준다
팀장이 php 플젝을 jsp, servlet 로 해 보자고 해서
앗싸! 하면서 열심히 공부했다
막상 해 보니 java, oracle 별거 아니었다
2~3년차가 되니 어깨에 힘이 들어갔다.
항상 플젝에 투입되면 나를 기준으로 아래 위로 나눈다.
나보다 경력이 많고 내가 못해본 기술을 가진 선배에게는 당연 존경심이 나왔다.
그렇지만 나보다 못한다고 생각하고 경력이 짧은 사람은 무시하는 투로 대하게 되었다.
그렇게 java, spring 만 주구장창 하면서
5년차, 7년차가 넘어가고 10년 이상 고착화 된 반복적인 생활을 하게 된다
물론 중간에 android, ios 도 했지만..
그럼 나는 실질적인 공부는 언제까지 했을까?
솔직히 5년차 정도 까지 인거 같다
그 이후로는 게을러서가 아니라 공부할게 없었다
적어도 내가 먹고 사는 목적으론 말이다
그냥 공부가 아니라 레퍼런스 뒤지기? 정도 이다.
진정한 공부가 아닌 사용방법 알아보기? 라면 이해가 쉬울까?
물론 책은 그동안 100 권정도 사서 읽은거 같다
나중에는 모두 버렸다. 2년 지나니 구버전이 되어서 더이상 책이 쓸모가 없어졌다
구글이라는 최신 버전의 책이 항상 존재했으니...
안드로이드, 아이폰 앱개발?
처음에는 내가 늘 만지는 휴대폰 앱을 개발하는게 신기하고 재밌었다.
웹은 여러 잡다한 기술을 머리 아프게 익혀야 되지만 모바일은 그렇지 않았다.
언어 한가지만 하면 됬다
근데 몇번 해 보니 오히려 빨리 질리게 되었다
처음에는 웹보다 단순해서 편했는데 이 단순함이 나중에는 지루함의 원인이 됬다
다시 웹을 하니 재미있다. (이건 뭔 현상??)
어떻게 하다 또 3D를 WebGL 을 사용하여 개발하게 됬다
3D 애니메이션을 웹으로 개발하다니.. 너무 멋있지 않은가?
그러다 나중에 알게됬다. 3D는 2D 로 구현된다는 것을..
배신감이 느껴졌다. 그냥 Z 축에 대한 이해만 있으면 되는 것이었다.
내가 새로운 기술에 대한 부러움의 실체가 무엇인지 나중에 깨달게 됬다.
그것은 가지지 못한 것에 대한 환상과 욕망이라는 것을..
연애, 결혼을 못해본 사람들이 환상을 갖듯이..
자유롭지 못한 군대 훈련소에 들어가니 초코파이가 그렇게 맛이난 것처럼...
자!
이제는 내가 얼마나 허접한 개발자인지를 구체적으로 설득력 있게 풀어 보도록 하겠다
아래는 내가 이력서에 보유 기술이라는 항목으로 적어 놓은 것들이다
단순히 공부했다가 아니라 돈받고 실무에서 사용했다는 이야기 이다
* 서버 및 Was 개발환경
- Linux, Unix, Ubuntu, Sun, HP, Aix, IBM, Solaris, WinNt, IIS, Apache, Netscafe, WebTob,
Jeus, Tomcat, Resin, Websphere, Weblogic, AWS Lambda, Step Function, Api Gateway, Cognito
* 개발 언어
- Java, Python, Objective-C,Servlet, Applet, JSP, PHP, ASP, Shell, Perl, PL/SQL, Procedure, Flash ActionScript
Android, HTML5 Canvas, WebGL, Tree.js 3D, Node JS, Kotlin, Dart
* DB 환경
- Oracle, MySQL, PgSql, MsSQL, DB2, SyBase, MongoDB, AWSRedshift, DynamoDB
* 프레임웍, 미들웨어, Xinternet
- 전자정부, Miplatform, Xplatform, Anyframe, IBsheet, EJB, Tuxedo, Flask, CICS, JGarnet, Struts, Spring,
Pear, Mdb, Prototype, Jquery, jqGrid, dynaTree, Three.js, Mapbox, ArcGis, Codeingnter
* 서버 구축 및 운용
- Named, Apache, FTP(ProFtp, VsFtp), Samba, Sendmail, Pop3, IMAP, NFS, IRC, , VPN, CVS, SSH, Rsync, Nginx
* 개발툴, 모델링, 형상관리
- ErWin, EditPlus, Xcode(Mac), Toad, Crt, Vi, Eclipse, Gauce, CBD방법론, UML, Together, Git, CVS, SVN, Flex Builder
* 웹디자인 및 학원 강의
- PhotoShop, Namo, Dreamweaver, Flash, 3D Max, Illustrator, Director, AutoCAD
뭔가 많아 보이는가?
그런데,
이것 저것 여러가지를 넓고 얇게 파보다 보니
다음과 같은 결론이 내려 졌다
1. 알고리즘 공부? 5년차 넘어가니 안해도 된다.
CURD 가 전부다
개발의 시작은 CURD 이지만 개발의 끝도 CURD 이다
CURD에 얼마나 특별한 알고리즘이 필요 하겠는가?
오히려 문제 해결을 위한 논리적 접근이 더 중요했다.
svn, git 형상관리가 없던 시절 알수 없는 오류가 났다. 소스를 되돌릴 수가 없다
가능성은 내부적인 변수 5, 외부적인 변수 5 합쳐서 5x5=25 가지 경우의 수이다
2박 3일에 걸쳐 25개의 경우의 수를 모두 테스트 해 보고 원인을 찾았다.
개발자는 논리적인 접근이 중요하다.
새로운 언어는 2주 + 구글링 이면 된다
당장 프로젝트에 투입되면 첨하는 언어도 공부하면서 개발하면 된다.
'처음 하는 언어인데 가능하시겠어요?' 몰어보면 무조건 Yes 한다.
그리고 미친듯이 공부한다.
물론 옆 자리에 6개월이라도 먼저 해본 동료가 있다면 금상첨화이다.
대기업, 관공서 SI 플젝을 하면서 느낀 것은
플젝이 크면 클수록, 트래픽이 많으면 많을수록 응용프로그램 개발자가 핵심적인 부분을 만질 일이 없다는 것이다.
어떤 경우는 DB 접속도 못한다. 이미 정해진 미들웨어나 프로시저만 호출해서 사용하면 된다.
시스템 설계? 아키텍트? 이건 오히려 스타트업에서 해야 하는 경우가 많다.
그래서 나는 개인적으로 대형 프로젝트만 한 개발 포지션의 사람일수록 우물안 개구리일 확률이 높다고 생각한다.
실제로 만난 프리중에서도 5년차 인데 리눅스 명령어 쓰는게 무섭다고 나한테 부탁한 경우도 있었다.
나는 횟수로 23년 차 이지만 실제적으로 공부하고 노력한 횟수는 5년 정도 인거 같다
나머지 경력은?
그냥 다양한 환경에 대한 경험과 구글링만 쌓였을 뿐이다
이마저도 새로운 것을 했을때 이야기 이다.
2. 수학? 사칙연산만 할줄 알면 된다.
암호화? 압축기술?
이미지, 사운드 프로세싱?
그냥 있는 라이브러리 가져다 쓰면 된다, 응용프로그램 개발자가 이걸 직접 개발할 일은 거의 없다
내가 개발 할려고 해도 이미 더 잘하고 검증된 것들이 존재하기 때문이다.
3D 게임? 물리엔진?
그냥 unity 로 개발하면 다 있다.
참고로 내 아들이 중학교때 게임 개발하고 싶다고 해서 유니티를 가르쳤는데 물리엔진이 기본적으로 있더라.
AI?
요것도 약간의 돈만내고 클라우드 시스템을 이용하면 된다.
AWS AI api 를 이용해 보니 이미지 한장 올리면 이미지 속에 뭐가 들었는지,
선정적인지, 폭력적인지, 불법적인지 모두 분석해 주더라
SK텔레콤 연구소 플젝에 들어갔다, 프로젝트 이름도 지능망시스템이다
PHP 로 그래프 이미지 만들어 주는 시스템이었는데 나는 대단한 수학이라도 해야 하는 줄 알았다
들어가 보니 연구소 직원들이 계산식을 다 풀어서 4칙 연산으로 만들어 주더라
물론 수학함수 가 몇개 들어가긴 하지만...
3. 새로운 언어? if, for 문만 알면 된다
개발 경력 15년차 정도 되면서 나는 곰곰히 생각해 봤다
언어 란게 뭐지?
유저와 커뮤니케이션 하기 위한 UI 또는 이벤트,
if 문으로 조건 제어, for 문으로 반복 실행,
데이터를 임시로 저장하는 변수,
이것을 영구적으로 저장하는 DB, 또는 쉽게 조회하기 윈한 SQL,
데이터가 원격지에 있으니까 TCP/IP, UDP, Stream, 소켓통신, json 등..
이것들을 벗어나지 않는다.
아! 그렇구나 언어는 if, for 문만 알면 되는구나
나머지는 개발하고 서비스를 구성하기 위한 환경에 불과 하구나~
깨달음이 왔다
대형 시스템의 설계자? 아키텍터?
그냥 더 많은 경험만 가졌을 뿐이다. 이 역시 개발은 if, for 문으로 한다.
c, c++, java, python, kotlin, swift, nodejs, DB 프로시저 , javascript, dart 모두 같은 원리이다
다만 개발자가 더 쉽고 빠르게 개발할수 있도록 형식만 바꼈을 뿐이다.
결론
모든 언어는 if, for 문만 할줄 알면 된다.