언어... 어느 언어로 할 것인지 그것이 문제로다.
원래 제목
자 이제 어느 정도 개발에 관심있는 사람들이 이 글을 보고 있을 것 같다. 이전 글로도 알 수 있겠지만 이 시리즈는 아직 개발 경력이 얼마 되지 않은 문과생이 일 하면서 느낀 점을 토로하는 에세이다. 유익한 정보는 고사하고 오히려 잘못된 글이 넘쳐날 것이다. 왜냐면 그게 정말 신입인 내가 헷갈리고 아직 잘 모르고 있다는 증거이기 때문에 기록으로 남겨두려는 것이다. 같이 공감해주시는 분들이 계셔서 감사하다.
다들 개발자가 사용하는 언어 몇 가지는 이름을 들어보았을 것이다.
전통적으로 유명한 C 씨, C++ 씨뿔뿔, C# 씨샵, JAVA 자바, PHP 피에이치피 과 최근 유행하는 Python 파이썬, Javascript 자바스크립트, go 고, Swift 스위프트(즈위프트 라고 하기도) 등등이 있다.
사실 저 언어 이름을 들으면 C가 진화하면 C++이 되고, 거기서 최종 진화한 것이 C# 같다.
그리고 JAVA랑 Javascript는 무언가 우리가 모르는 찐한 관계가 있을 것 같다.
근데 둘 다 아니었다. 글제목에 있는 문장을 개발자나 컴퓨터 전공생들한테 이야기하면 손사래치면서 그거 아니라고 근데 어떻게 이 사람이 이해할 수 있게 설명할지 고민하는 것을 구경할 수 있으니 심심하면 해 보시길 바란다. 직장에서는 하면 안 된다.
자바와 자바스크립트의 관계가 궁금하다면 이 영상을 참고하시면 좋다.
이름이 다른만큼 그 언어의 정체성과 문법 등이 정해져있고, 그 언어로 구현할 수 있는 기능이 있을 것이다. 근데 문제는 개발자들에게 물어보면 한 언어를 잘 하면 뭐든 다 할 수 있다고 한다... (mm) 아니 그래 한 우물만 파면 뭐든 다 잘 하겠지. 엑셀로도 명화 그림 그리시는 분이 계시니까 그 언어의 한계를 내가 정할 순 없겠지만 그치만 공부를 시작할 언어 한 개를 내가 정해야되지 않는가.
코딩 강의 하는 사람들은 이게 좋다, 저게 좋다는 장점만 이야기하고, 정작 나처럼 시간이 없고 빠듯한 사람들은 어쩔 수 없이 한 개를 골라서 올인을 해야하니 금전적 여유가 있는 사람들은 부트캠프를 알아볼 것이고, 그렇지 못하면 국비지원으로 학원 커리큘럼을 알아보게 된다. 결국 거기 가서도 상담을 받으면
라고 할 것이다.
가장 도움이 안 된 영상은 이런 내용과 학원 홍보물이다.
라인 개발자가 다시 신입이 된다면 배우고 싶은 프로그래밍 언어 순위를 꼽았는데 굳이 영상을 안 보셔도 된다. 왜냐면 우리같은 신입들에게는 도움이 안 되는 영상이기 때문이다.
1. JAVA / 2. Javascript / 3. Python / 4. C/C++
순서로 나왔는데 그 이유는 라인에서는 JAVA를 많이 쓴다고 한다. 그러니 그렇지. 이런 회사나 교수, 강의처에서 추천하는 영상을 보다보면 더 혼란스럽다. 왜냐면 추천하는 곳에서 가장 많이 사용하고 도움이 되는 언어를 배우라고 추천하기 때문이다. 근데 우리는 그 추천하는 업체에 취직할 것이라는 보장이 없다. 나는 혼자서 어떻게든 다른 회사를 가서라도 돈을 벌 수 있을 정도의 주니어 개발자가 되어야한다.
내게 가장 도움이 되었던 조언은 어떤 일을 하고 싶은지를 정하고, 그 일을 하는 사람과 회사가 어떤 언어를 사용하는지를 살펴보고, 그리고 일단 쉬운 언어라도 한 가지를 정해서 그 언어를 어느 정도 사용할 수 있는 수준이 된 다음에, 다른 언어를 고민해보라는 것이었다. 남자친구가 해 준 이야기지만 이 내용을 좀 더 이해하기 쉽고 관련된 자료도 같이 보여주면서 설명해 둔 동영상이 있어서 가져와본다.
개발자로 조금 오래 근무한 사람들은 하나같이 말한다. 시작하는 언어가 중요한 것이 아니라고.
개발자로 일을 시작하기 전에는 두루뭉실했던 조언이, 지금 슬슬 체감이 되고 있다. 아무리 좋고 훌륭하고 쉬운 언어가 있어도 내가 그 언어로 에러가 나지 않고, 사용 중간에 강제 종료가 되지 않는 프로그램을 만드는 것이 중요하다.
언어에 대한 설명을 시작하면 중간에서부터 '프레임워크' 라는 것이 따라온다. 프로그램 언어만으로는 아무것도 하지 못한단다.... 이 부분은 추후에 더 공부를 하고 자료를 모은 다음에 이야기를 따로 하겠다
내가 아무리 데이터 분석을 하고 싶다고 R과 파이썬을 배웠다고 하지만, 지금 일하는 회사에서는 일단 웹/앱 페이지 구현을 먼저 한 후, 서비스가 어느 정도 진행 된 후 데이터 분석을 할 수 있다. 그래서 회사에 처음 가서 받은 책이 HTML/CSS와 REACT 였다.
어릴 적 그래도 나모와 드림웍스로 홈페이지를 만들었던 세기말 감성이 있어서 홈페이지는 금방 할 줄 알았더니 웬 걸.
HTML/CSS는 영혼만 어렴풋이 남아있는 REACT 리액트로 홈페이지 구현을 하고, 의 프레임워크인 GATS BY 개츠비 라는 것도 대충 훑어보고, 근데 홈페이지에 들어가는 이미지, 글자는 헤드리스 CMS 라는 STRAPI 스트라피를 사용하게 되면서 혼란스럽고, 결과적으로 개츠비를 빌드한 파일을 구글 Firebase 에 업로드 하게 되면서 이것까지 알아보았다.
음, 왜 이렇게 복잡해졌냐 라고 하면 이렇게 여러 가지를 섞어쓰는 게 훨씬 편하고 어썸한 신기술을 사용한 것이라고 한다... 라고 들었고. 약간 인체연성 같은 것이다.
각 언어와 프로그램마다 좋은 장점을 가져다가 얼기설기 이어 붙이는 것이다. 그게 잘 섞이면 좋고, 안 섞이면 뭐. 그럴 수 있지. 그렇지만 컴퓨터 프로그래밍 분야는 기술 변화의 속도가 매우 빠르기 때문에 이렇게 다양한 것을 섞어쓰는 것은 피할 수 없다. 내가 배운 한 가지만 쓸 수 있을 거란 생각은 일찍이 버리자.
이건 마치 한국어를 알면 일본어를 배우기 쉽다는 느낌 같다. 실제로는 파이썬을 먼저 학원에서 배운 뒤 리액트를 독학으로 공부했다. 컴퓨터 프로그래밍에 쓰이는 기본적인 데이터와 배열, 문법 등이 어떤 것이 있는지 한 번 들어봤기에 그래도 더듬거리면서 할 수 있었다.
개발 경력이 쌓이면 쌓일수록 언어를 학습하는데 들어가는 노력과 수고가 줄어들 것이다. 그리고 가장 처음 배운 언어가 무엇인지에 따라 다음에 배울 새 언어 체계와 문법이 배우기 조금 수월한지 난해한지 정도의 차이는 있을 수 있겠다. 다만 그것을 배우고자 하는 본인의 의지가 중요하다.
이 두 가지를 좀 더 쉬운 것으로 비교하자면 개발언어는 컴퓨터 사인펜이고, 개발하는 과정은 문제풀이 방법이라 설명하겠다. 컴퓨터 사인펜이 어떻든간에 문제풀이만 잘 하면 시험 결과가 좋을 것이다. 문제풀이 방법은 사람마다 굉장히 다른데, 보통은 과목별로 대중적으로 통용되는 팁이 있을 것이다. 개발하는 과정도 이와 비슷하다.
내가 구현해야 하는 것이 웹사이트 구현이라고 하면, 이걸 업무 단위로 쪼갤 수 있어야한다. 그리고 경력이 조금씩 쌓이면 그 작은 업무단위들을 내가 어느 정도의 시간 안에 완료할 수 있는지도 데이터를 쌓아두면 좋다. 누군가가 나에게 일을 맡길 때 언제쯤이면 끝날까요 라고 물을 때 당황하지 않고 대답할 수 있어야 하지 않을까.
업무 단위로 일을 쪼갤 때, 기능 구현 단위로 쪼개는 것이 좋은 것 같다. 그래야지 지금 내가 하는 일이 명확하게 알 수 있으니까 덜 헤맬 수 있다. 회원가입 폼을 만든다면 우선 폼 UI 를 구현하고, 각 폼에 입력한 내용이 서버에 저장할 수 있는 기능까지 만든다. 그리고 내가 받은 주문은 서버에 저장된 내용이 회사 대표 메일로 보내질 수 있는 기능도 추가해달라고 했다.
자 여기서도 개발을 하는 과정과 개발자의 사고방식이 조금 남다른 것을 체감할 수 있었다.
나는 당연히 [회원가입내용] -> [서버] -> [메일 전송] 만이 유일한 정답이라 생각해서 몇 일을 고생해서 검색하다가 도저히 안 되서 역시나 남자친구를 잡았다. 이 녀석은 자신이 쓴 코드라면서 10줄 채 안 되는 코드를 보여주고 이거면 메일이 가 라며 자랑을 했다. 그리고 메일을 보내는 방법은 한 가지가 아니라고 한다.
작성된 [회원가입내용]이 [서버]와 [메일 전송] 두 가지를 다 할 수 있게도 된다는 것이다. 프로그램이 굴러가는 순서가 조금의 차이가 생기긴 했지만 실행이 되면 그걸로 된 것이다!
이와 비슷하게도 for문과 if문을 사용하는 팁도 배우면 좋다. 나도 아직 정확하게 감을 못 잡았지만 결국 코딩은 조건문으로 이루어지는 결과물같다. 우리는 저걸 영어회화 구문으로만 배웠지 이걸로 컴퓨터에게 명령을 내릴거란 생각을 해 보지 못한 사람들이다. 근데 개발자들은 이걸로 온갖 명령을 다 내린다. 엑셀 if 문을 써 봤으면 그래도 조금 편할 것이다.
내가 정말 힘들게 알아 낸 if 문 기본 구조다...
if ( 조건문 ) {
조건에 맞을 때 실행되는 것
} else {
조건이 아닐 때 실행되는 것
}
리액트는 조금 다르다.
if ( 조건문) {
return 조건에 맞을 때 실행되는 것
} else {
return 조건이 아닐 때 실행되는 것
}
return 이 들어가신다. 이게 자바스크립트 삼항연산자 라는 것으로 업그레이드 될 수 있다.
{ 조건 $$ 조건이 참일 때 실행 } //거짓이면 실행되지 않음
{ 조건
? 조건이 참일 때 실행
: 조건이 거짓일 때 실행 } //거짓일 때 실행되는 것도 설정할 수 있음
이게 생긴 건 다 달라도 결국 똑같은 기능이다... 코드가 이렇게 진화를 했다... 우리가 힘든 건 이런 기본개념도 개념이겠지만, 저 기능을 하기 위해서 어떤 검색어로 구글에 찾아보는지가 너무 어렵다. 그리고 그 기능이 실제 구현할 수 있는건지 아닌지 파악하는 것도 아직 못하는 것이 당연하고. 똥인지 된장인지 맛 봐야 안다고 하지만, 신입은 그걸 맛 봐도 모르는 것이다. 그렇게 먹고 있음 사수든 남자친구든 누군가 보고 그거 아니야 라고 해 주긴 하니 당신 주변에도 친절하게 도와줄 NPC가 있다면 좋겠다.
심리학에서 이야기하는 성취감과 연결되는 이야기이다. 사람에게는 커다란 성공경험 한 가지 보다는 자잘한 성공경험이 여러 번 쌓이는 것이 더 좋다. 어차피 신입에 업계 초짜인 우리는 거창한 것을 할 수 있는 것이 없다. 한 가지 책과 언어를 잡자. 책 목차를 보면 그 언어로 만들 수 있는 가장 작은 프로젝트가 하나 나올 것이다. REACT 리액트는 TO DO LIST 만들기였다. 그 페이지를 완성했을 때, 개발은 이런 느낌으로 하는 것이다 하는 생각이 조금 들었다.
그래서 나는 깃헙페이지에 잔디를 심는 걸 일기장처럼 삼고 하고 있다.
차곡 차곡 쌓으면 이것도 다음 이직 때 긍정적은 요소로 작용할 수 있다고 하니 여기에 나의 작고 소중한 프로젝트들을 하나씩 올려보자. 그게 내가 다 공부한 기록이 될 것이다.
이 험한 이직 생활을 하기로 했으면 우리 어떻게든 해 나가보자. 화이팅.
+추가
https://sparta-forbiz.oopy.io/
[1시간만에 끝내는 직장인 필수 코딩용어]
이거 좀 별로이긴 한데 근데 정말정말 이런 거라도 다 들어야겠다 싶으신 분이 계시다면 무료니까 한 번은 들어보세요. 전 정말 남는 거 하나 없이 다 빠져나간 강의였어요.
https://library.ridibooks.com/books/3594800/
[비전공자를 위한 이해할 수 있는 IT 지식]
차라리 이게 조금 더 나을 거에요. 근데 얘도 개발자로 일 하는 사람에게는 너무 두루뭉실한데, 그래도 쉽게 큰 틀부터 다시 짚고 넘어가고 싶다면 가볍게 읽기 좋아요. 큰 기대는 마시고.