개발자라면 절대적으로 피해야 하는 것이 있다.
그것은 바로 "안일함" 이다.
다른 사람들이 개발한 플랫폼 위에서 먹고 사는 사람들은,
그들이 의존하는 플랫폼이 더이상 발전하지 못하고 아주 새로운 플랫폼에 밀려 사라질 때 함께 도태된다.
피쳐폰, PDA, 윈도우모바일 개발자들이 그랬고, ActiveX 개발자들이 그랬으며,
안드로이드나 iOS도 그렇지 않을거란 보장이 없다.
내가 생각하는, "보장된 플랫폼" 은 단 두 가지 뿐이다.
1. 리눅스
2. 웹 표준
이 외에는 거의 플랫폼 개발사나 해당 플랫폼을 사용하는 디바이스 벤더에 좌지우지 되어
시간이 지나면 크게 변형되거나, 사라질 확률이 매우 높다.
이런 상황에서 개발자들이 자신의 직업을 장기적으로 바라보고 취할 수 있는 적극적 액션 또한 두 가지 정도로 볼 수 있다.
1. 계속 새로운 것들을 습득한다
2. 변형이 적고 안전한 분야로 옮긴다
전자는 힘든 길일 것이고 후자는 지루해질 소지가 크다.
그래서 대다수 개발자들은 플랫폼의 변화에 대해 수동적으로 대응하게 된다.
둘 중 어느 쪽을 선택하게 되어도 좋을 지식 기반을 다져두는 것은
개발자로서 자신의 경력을 좀더 유연하게 다지는 데 도움이 될 수 있을 것이다.
그렇다면 이것이 가능한 언어는 어떤 것이 존재할까?
개인적인 후보군을 꼽아 보겠다.
C#, JAVA, Python, Javascript, swift
이들은 적어도, 어느 하나라도 깊이 배워서 후회하지 않을 후보군이다.
하드웨어 분야가 아닌 한 C언어로 개발을 한다는 것은 개발자로서는 꽤 3D 직종에 종사한다고 생각한다.
기본적으로 프로그램 개발은 "생각하고, 코드로 적는" 작업이다.
생각할 시간이 너무 많이 필요하면 생산성이 떨어지게 되고,
원하는 결과를 만들어 내는 데 걸리는 시간이 오래 걸리고 그것은 자신의 성취감과 생산성의 감소로 이어질 소지가 있다.
급여 차이가 크면 모르겠는데 only C로 개발하는 직군은 대단한 자존감을 주는 일이 아닌 한 추천하고 싶진 않다.
많은 사람들이 프로그램 언어로 최대한의 생산성을 유지하면서 개발할 수 있는 범주가 어느 정도인가를 놓고 고민해 왔다.
그러나 생산성만을 고려하기에는 소프트웨어의 크기가 커졌고,
협업이 중요해짐에 따라 코드의 가독성이나 포맷 강제성이 중요한 요소가 되었다.
이런 점에서 Java는 좋은 대안일지도 모른다.
그러나 내 개인적 소견으로는 Java는 어디까지나 협업에'만' 최적화 되어 있다.
소규모 그룹이나 개인 개발자에게는 그다지 명시적일 필요가 없는 부분에서조차 불필요한 코드의 추가를 강제한다고 생각된다.
(이러한 염증에도 불구하고 많은 개발자들의 주력 언어는 Java다. 먹고살기 위한 언어.)
프로그램 언어에 대한 논쟁은, 컴파일러인가 인터프리터인가로 시작하여
절차적 프로그램과 객체지향 프로그램으로, 최근에는 동시성 프로그램의 지원여부나 동적 타입의 효용성까지 이어지고 있다.
우리는 일련의 흐름을 기계가 읽을 수 있는 언어로 적는 것을 프로그래밍이라고 부른다.
기계가 읽을 수 있는 언어가 사람이 읽을 수 있는 언어에 가까워질수록 고급 언어라고 부른다.
해외에서는 점차 고급 언어군에 더 많은 비중을 두는 추세다.
"고급 언어"의 개념에 가장 충실한 언어가 뭘까?
앞서 이야기한 언어 논쟁의 떡밥들을 최대한 반영할 수 있다면 그것이 가장 "고급 언어"에 가깝다고 생각할 수도 있을 것 같다.
1. 컴파일과 인터프리터의 장점을 고루 취한다
2. 절차적 프로그램과 객체지향 프로그램이 모두 가능하다 (더 많은 디자인 패턴)
3. 순차 or 동시성 프로그램 (멀티스레드, 멀티프로세싱, 비동기 이벤트 핸들링, 채널 등등....)
4. 동적 타입의 지원
5. 다양한 하드웨어, OS플랫폼 지원
6. 코드의 동적 변경
언어의 융통성 면에서 C와 Java는 이제 Python, Javascript, Swift 같은 언어들에 비하면
고급 언어라고 부르기엔 무리가 따르지 않나 생각된다.
다양성을 내포한다는 것은 일종의 "방언"을 허용하는 것이다.
지구상의 모든 사람들이 한가지 언어만 썼으면 좋겠다고 생각했던 적이 있다. (어쩌면 지금도 그럴지도 모른다)
때론 어떤 표현이 길고 복잡해지더라도, 단 한가지 발음과 개념으로만 공유되길 바랬다.
하지만 세상은 그렇지 않다.
진시황도, 칭기즈칸도, 알렉산더도, 그리고 히틀러도 죽었다.
다양성을 존중하고, 그 안에서 더 큰 발전이 이루어진다고 믿는 사람들이 세상을 이끌고 있다. (한국은 뭐 아직 그렇지 않을수도 있다)
내 결론은 Python과 Javascript다.
이 두 가지를 알면 현존하는 거의 모든 소프트웨어 서비스를 구성할 수 있다.
하드웨어적인 부분들은 C가 필요할 것이지만, C는 선택 사항일 뿐이다.
(Go 는 단지 유명하지 않아서 제외했다. 언어가 좋아도 범용성이 없으면 말짱 꽝이다.)
그럼에도 불구하고 왜 Java, C#, Swift가 추천 후보군에 올라갔는가를 묻는다면,
더 많은 장치에서 프로그램이 구동되게 하려면 Python과 Javascript만으로는
이들을 100% 따라갈 수 없기 때문이다.
(대세는 모바일! 을 외치는 풍토 때문이기도 하고)
Javascript의 필요성에 대해서는 모르는 사람이 없을테니 슬쩍 넘어가도록 하고,
글의 취지에 따라 Python을 간단히 소개해 보겠다.
Python의 특징
1. Python은 인터프리터 언어다.
인터프리터의 강점은 인터프리터 쉘에서 대화형 프로그래밍이 가능하다는 점이다.
특히 해커라면 이 방식에 환장할 수밖에 없다. OS 커맨드라인에 비하면 자유도 1000%의 쉘이 생긴거니까.
2. 충분한 동적 타입을 지원하며, GIL의 한계로 동시성 프로그램을 스레드로 하기에는 무리가 따르지만 그 대신 멀티 프로세스 기법들이 발전되어 공유되고 있다.
3. 절차적 프로그램과 객체지향 프로그램의 문법을 모두 지원하며, 혼용해도 잘만 돌아간다.
4. 기본 제공되는 컬렉션으로 딕셔너리와 튜터를 제공하며, 그로 인해 텍스트 마이닝이나 분석 등에서 간결하고 세련된 코드 표현이 가능하다.
5. 프로그램의 구획을 표시할 때 중괄호를 사용하지 않는다.
타 언어들과 가장 직접적으로 구분되는 특성이며, 모든 구역 표시는 코드 라인과 역슬래시, 들여쓰기로 이루어진다.
파이썬은 가독성에서 만큼은 표현의 자유를 강제한다.
즉, 코딩 컨벤션 없이 누가 코드를 적더라도 웬만해서는 알아볼 수 있는 코드가 나온다.
7. x86, x64뿐 아니라 ARM아키텍쳐도 잘 지원된다.
웬만한 OS에 거의 다 포팅되어 있고,
pip를 사용하면 모듈 코드를 다운받아 컴파일해서 설치해 주기 때문에 장치나 OS에 대한 확장성은 굉장히 좋은 편.
8. GUI프로그래밍도 지원된다.
qt나 wx, tkinter 등.. 게임은 pygame이나 cocos2d 등..
9. 웹 개발 프레임워크로 Django, Flask 정도가 유명하다.
개인적으로 Flask를 선호하는데, 파이썬에는 코드를 줄일 수 있는 모듈이 많아
굳이 마이크로프레임워크보다 많은 기능이 필요치는 않다는 생각이다.
10. 많이 쓰이지는 않는데, Kivy 프레임워크를 쓰면 안드로이드 앱개발도 가능하다.
11. 파이썬을 글루 언어라고도 칭한다.
C, Java 등의 언어들과 정말 잘 붙기 때문.
고연산 작업에서는 인터프리터의 성능의 한계가 존재하는 부분만 컴파일언어로 구성하는 방식이 많이 쓰이게 된다.
나열한 내용을 보면 만능 언어에 가깝다.
임베디드에서부터 서버사이드와 클라이언트, 데이터분석이나 머신러닝까지, 대세에 가까운 모든 작업이 가능한 언어가 파이썬이다.
해외 개발 언어별 평균 페이를 보면 항상 최상위 랭크에 파이썬과 루비가 있다.
그런데, 해외에서의 높은 호응에 비하면 국내는 유독 파이썬에 대한 인기가 낮다.
영어권 국가들은 새로운 개발언어에 대한 적응력이 좋고 그만큼 전환속도도 빠르기 때문이기도 하지만,
파이썬의 높은 생산성, 개발 방법론에 대한 자유도가 높으면서도 포맷에 대해서는 강제적이라는 점이 협업에서 중요한 포인트가 되는 것 같다.
반면 국내 개발자들은 상당히 보수적이다.
안그래도 수직적 문화인데다, 윗사람들은 책임지지 않고 직원에게 책임을 묻는 풍토 때문에
새로운 기술에 대한 불안감이 있고(심지어 개발환경 버전업도 잘 안 한다),
그래서 비교적 모든 것을 명확하게 짚고 들어가는 자바를 선호하는 편이다.
정부에서 표준처럼 밀고 있기 때문이기도 하다.
겁낼 것 없다.
인터넷에서 "3일 배워서 평생 쓰는 언어" 라는 말을 처음 들었을 때 반신반의 했었지만,
나도 배우는데 그 정도밖에 걸리지 않았다. (객체지향 부분만 제외하고는)
이 블로그에서는 강좌를 하지 않는다.
다만 추천하는 방향을 적을 뿐이고, 어디까지나 반론은 존재할 수 있다.
다만
"학원에서 C언어부터 배워야 된다는데요?"
이런 망언을 듣고자 하는건 아니다.
국내 컴퓨터 교육계에서 가장 많은 실망을 안겨주는 부분이고,
첫 언어로 C언어를 택하는 것은 학생들에게 있어 시간낭비가 될 것이라고 생각한다.
배우기 쉬운 언어를 골라 단시간 내에 결과물을 완성해보는 것이 성취감을 느낄 수 있다는 측면에서 더 낫다.
하드웨어를 직접 다루어야 하거나 아주 큰 연산이 필요하지 않은 한,
대부분의 비즈니스 로직에서 C언어는 필요치 않다.
요즘에는 인프라에 대한 투자는 사업의 유지비용 중에는 별것 아닌 수준의 비용이 되어버렸고,
안정성이 문제된다면 구글이나 아마존 같은 클라우드 서비스도 많이 있다.
학습이나 테스트용 정도는 무료로 체험할 수 있는 곳도 있고..
파이썬은 웹 프론트엔드(HTML / 자바스크립트 영역)를 제외한 거의 모든 분야에 활용할 수 있다.
인터프리터임에도 성능이 좋은 편이라 특히 각종 업무자동화, 데이터분석과 인공지능 분야에서 엄청난 호응을 얻고 있는데,
안드로이드 플랫폼 빌드스크립트에도 파이썬이 포함되고,
구글의 텐서플로 같은 머신러닝 프로젝트도 파이썬으로 이용할 수 있게 구성되어 있다.
빅데이터와의 대화, 즉 SNS를 통해 집단의 생각을 조종한다는 이론이 페이스북을 통해 증명된 바처럼,
소프트웨어가 인간의 내면까지도 영향을 미치는 시대가 왔다.
데이터 수집과 분석은 당장은 기업에 도움이 되지 않는 허구나 신기루로 매도되기도 하지만,
실제로 국가, 종교단체, 지역사회를 사상적, 정치적으로 조종하고 있으며
돈을 쫓는 기업들에 의해 마케팅의 일환이 되어 개인의 구매욕구까지 자극하고 있다.
알파고가 이세돌을 이긴 것은 단지 하나의 이벤트로 여길 문제가 아니다.
세상은 변하고 있는데, 개발자로서 자신이 사용하는 개발 언어가 이런 분야에 유리하지 못하다는 진실은 매우 슬픈 일이다.
한국의 대학교들이 졸업생 80% 이상은 써먹어보지도 못할 C언어를 가르치고 있을 때,
해외의 대학들은 입문 언어로 Python을 가르치며 대학교 4년 동안 더 많은 것을 시도해 보라고 가르친다.
왜 그들은 Python에 환장하는가 - 이제 그 질문에 대한 답이 좀 되었을까?
3 thoughts on “하드코어 개발자 되기 #2. 왜 그들은 Python에 환장하는가”
흥미롭고 깊은고찰 잘 읽었습니다
음. 27년 전 제가 대학(공대)에서 C를 배울 때가 생각 나네요. 그 때는 C가 지금 파이썬 처럼 뜨는 언어 였는데, 학교에서는 여전히 포트란 77을 가르치고 있었다는…. 아마 C를 잘 모르는 교수들도 상당했을 듯…
문제는 옛 기술에 안주하려는 기득권 세력들 인 듯해요.
C언어로 먹고 살고 있는 개발자입니다. C언어 하나로도 좋은 실력이 아니지만 새로운 기술 및 언어에 갈증을 느끼고 있어서 파이썬에 관련된 내용을 찾던중, 이곳에서 확신을 얻고 갑니다.
좋은글 잘 읽었습니다. 감사합니다.