프로그래밍 언어는 일단 1개라도 잘하면 된다

현재 재직중인 회사에서 “신입 A씨”를 보고 여러가지 느낀점에 대하여 글을 적었었다. 

어쩌다 보니 “신입 프로그래머 A씨” 가 자꾸 소환되어 갑자기 미안해진다^^ 신입 A씨가 최근 글에 많이 등장한 것은 신입 A씨의 입장을 보고 이리저리 생각이 많아진 탓이다. 

프로그래머와 관련된 칼럼이나 글을 코드도사 사이트에는 종종 작성한 적이 있다.  최근에는 아래 글을 방문자들이 많이 읽어 주었다.

단순히 프로그래머가 우아하게 컴퓨터 앞에 앉아서 모닝 커피를 마시면서 키보드를 편하게 두드리는 직업이 아니라면 점에 대하여 쓴 글이다. 프로그래머는 프로그래밍 언어 이외에도 여러가지 기술적인 지식을 쌓고 많은 경험을 쌓아야 하는 직업이다. 또한 끊임없이 공부를 해야 하는 직업이기 때문에 공부하는 것을 싫어하는 사람은 프로그래머가 적성에 맞지 않을 수 있다.

일단 오늘 하고 싶은 이야기는 “개발일을 시작할때 프로그래밍 언어를 어떤것을 선택해야 좋은가?” 이다.  사실 이부분은 프로그래머라면 처음에 고민이 될 수 밖에 없는 문제다.

언어 선택과 습득에 관련된 글을 예전에 적었었는데 관심있는 분들은 한번 참고해 보면 된다. 일단 프로그래밍 언어를 어떤것을 선택하느냐의 문제는 당장 내가 어떤 분야로 진출하느냐에 문제일 수도 있다.

최근에 내가 재직중인 회사에 입사한 신입 프로그래머 A씨는 이제 갓 대학을 졸업한 완전 새내기 프로그래머이다. 이 친구는 대학 다닐때 JS(자바스크립트)나 HTML 을 주로 다뤄본 프로그래머다. 하지만 그는 현재 회사에서 C/C++을 써야만 하는 프로젝트에 참여하고 있다.

그는 학교 다닐때 학과 시간에 C를 배우긴 했지만 C를 자세히 공부한 적은 없다고 했다. 최근에 전산이나 정보통신 관련 학과들은 C나 C++을 필수로 가르치는게 아닌 파이썬, 자바, 자바스크립트, HTML 등을 주로 가르친다고 한다. 

따라서 신입 A씨는 C를 다뤄볼 기회를 가지지 못한거 같다. 내가 대학 때만 하더라도 C는 전공 필수 과목이었으나 최근 IT 산업 기술 트렌드가 바뀌는 추세여서 그런거 같다. 

그래서일까? 신입 A씨는 현재 회사에 입사하여 근 두달동안 C문법을 잘 이해하지 못하고 있다. 아마도 많이 안다뤄봤기 때문일 것이다. 그가 JS를 많이 다뤄봤다고 해도 C는 또 다른 차원의 언어이기 때문에 쉽게 적응이 안될 수 있다. 

여기서 포인트는 이렇다. A씨는 C 소스를 보는게 너무 어려운 나머지 포기하려는 듯한 태도를 나에게 보였다. 그럼 그가 만약 현재 회사를 그만두고 다른 회사로 취업하여 JS를 다룬다고 하면 그가 프로그래밍을 잘할수 있을까?

일단 내 주관적인 생각으로는 “NO” 이다. 

프로그래밍 언어는 비슷비슷하다.

신입 A씨는 약간의 착각을 하고 있는 거 같았다. 그 이유는 C/C++이 어렵긴 하지만 그렇다고 해서 다른 언어들인 JS, 파이썬, 자바 들의 언어들이 결코 쉬운게 아니기 때문이다. 

사실 C/C++은 그 역사가 오래된 언어인것은 맞다. C같은 경우는 1970년대부터 쓰이던 언어이기 때문에 그 역사가 꽤 긴 편이다. C++은 1980년대 초반에 발표된 C에 객체지향 개념을 추가한 언어다. 

이 두 언어들은 현재 출시된 다른 프로그래밍 언어들에 비해서 약간은 개념이 어려운 축에 속한다. 그 이유는 “포인터(Pointer)” 라는 개념때문이다. 

C, C++의 포인터는 개념이 쉽지는 않다

포인터는 컴퓨터의 메모리를 직접 액세스 하기 때문에 개념 이해와 사용이 초보자들에게는 생각보다 많이 어렵다고 느낄 수 있다. C/C++ 외에 다른 프로그래밍 언어들은 포인터의 개념이 없다.  따라서 C/C++ 외에 다른 언어들은 프로그래머가 메모리 할당을 직접적으로 컨트롤 할 필요가 없이 컴파일러가 알아서 할당해준다. 

포인터를 사용하는 것은 엄청난 장점이자 큰 단점도 되는데 그 이유는 포인터를 잘못 다루면 메모리가 Leak(새는, 누수) 버그가 발생하거나 포인터가 충돌(Segmentation Fault, 메모리 충돌) 현상 때문에 프로그램이 갑자기 죽어버리는 현상이 발생할 수 있다. 이는 경험이 많은 프로그래머도 쉽게 찾기 어려운 버그를 발생시키기도 한다. 

이런 점 때문에 C/C++을 배우고 잘 다루는 것은 경험이 많지 않은 신입 A씨가 느끼기에는 매우 어려울 수 있다. 하지만 그 외에는 다른 언어들과 공통된 부분이 대부분이다. 

포인터의 개념을 제외한 다른 JAVA, 파이썬, JS, 기타 언어들은 C++과 비슷한 측면이 있다. 그 이유는 이들 언어들이 “객체지향”을 추구하는 언어들이기 때문이다. 따라서 C/C++을 어느정도 다룰줄 알면 JAVA, 파이썬, JS 등을 다루는 것도 수월해진다. 

그럼 포인터의 개념이 어려워서 C/C++을 잘 다루지 못한 상태에서 다른 언어인 JAVA, 파이썬, JS 등을 잘 다룰수 있을까? 결코 그렇지는 않을 것이다. 이들 언어들의 객체지향 개념이 이해가 되지 않는다면 결코 이들 언어들을 다루는 것도 쉽지 않을 것이다. 

학교다닐때에 단순히 간단한 조건문으로 숫자 계산같은 프로그램은 초보자가 접근하기도 쉽고 이해하기도 쉽다. 하지만 실무에서 대량의 데이터를 처리하거나 문자열을 파싱하는 구문으로 접근하게 되면 점점 더 어려워지게 마련이다. 

즉 C/C++ 외에 다른 언어들도 포인터 개념만 없을 뿐이지 실무로 접근하고 코드양이 많아지면 점점 어려워지게 된다.  위의 코드는 C, JAVA, 파이썬의 조건문에 대한 예를 들어놓은 것인데 조건문 문법도 거의 비슷하다고 볼 수 있다. 이 외에 큰틀에서 각 프로그래밍의 언어는 거의 비슷한 부분이 많다. 

따라서 신입 A씨가 C/C++를 어려워하여 포기한다고 해도 다른 언어를 잘 다루리란 보장이 없다. 포인터 개념을 제외하고는 다른 언어는 비슷한데 실무에서 많은 양의 소스를 잘 분석할수 있을지 의문이다. 

오히려 A씨가 C++ 까지는 아니더라도 C의 개념을 잘 이해하고 어느정도 다룰줄 알게 되면 다른 언어를 다루는 것도 매우 수월해진다. 나의 경우에는 C를 실무에서 주로 사용했으나 C++도 공부를 하다보니 객체지향의 개념을 이해하는데 수월하였고 객체지향의 개념을 이해하니 JAVA, 파이썬, JS 등의 언어들을 사용하는데에도 수월해지는거 같다. 

최근에는 취미삼아 파이썬을 공부하였고 향후 수익원을 위해 안드로이드 앱 개발을 위해서 자바를 공부한 적이 있다. 물론 시간적 여유가 없어서 많이 진행은 하지 못했지만 자바로 간단하게 테스트용 안드로이드 앱을 만들어 보기도 했다. 

물론 나의 예이긴 하지만 아마 다른 프로그래머들도 마찬가지일 것이다. 나같이 C를 다뤘거나 C++을 다룬 사람이라면 자바, 파이썬 등을 다루는게 수월해진다. 반대로 자바, 파이썬을 능숙하게 다룬 사람이라면 C/C++을 다루는게 수월해진다. 단 C/C++의 포인터 개념을 이해하는 것은 다소 어려울 수 있다. 

 그래서 처음에 프로그래머가 되기 위해 언어를 선택해야 한다면 자신이 하고 싶은 분야에 필요한 언어를 선택하면 된다. 웹 개발을 하고 싶다면 자바, JS, HTML 등을 익히면 되고 안드로이드 앱을 개발하고 싶다면 자바, 코틀린 등을 익히면 될것이다. 빅 데이터 처리나 인공지능 분야로 진출하고 싶다면 파이썬 등을 익히면 될 것이다. 나같이 리눅스 기반의 시스템을 개발하거나 임베디드 분야로 간다면 C/C++을 익히면 된다. 

언어는 도구일 뿐이다. 프로그래머가 되기 위해서는 언어를 잘 다루는 것은 필수이다. 대신에 어떤 언어를 선택해야 할지 고민을 오래 할 필요는 없다. 가장 먼저 고민해야 할 것은 어떤 분야로 진출해야 할 것인지 어떤 목표를 가지고 있는 것인지, 프로그래밍에 흥미가 있는지 여부를 고민해봐야 한다. 그런 다음에 익혀야 할 언어가 정해졌다면 그 언어를 잘 다루기 위해서 지속적으로 익혀서 내것으로 만들어라. 

그리고 가장 중요한 포인트는 이렇다. 

프로그래머가 여러개의 언어를 잘 할 필요는 없다. 단 한개의 언어라도 잘 다룰 수 있다면 그 사람은 실력있는 프로그래머가 될 가능성이 있다.

 

error: Content is protected !!