문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 프로그래머 (문단 편집) === [[프로그래밍 언어]] === 학교와 전공 분야에 따라 많이 다르지만 '''[[다다익선|아는 게 많을수록 좋다.]]''' 첫 번째 언어에서 디자인 패턴을 공부할 수준까지 가면, 틈 나는 대로 다른 언어들도 공부하는 것이 좋다. 1~2개의 언어만 붙잡고 다른 언어를 외면한다면 어느 순간 도태될 수도 있다. 현실의 외국어와 달리 프로그래밍 언어는 문법이나 용어들이 비슷하므로 C++ 같이 복잡한 언어가 아니라면 습득하는 데 큰 노력이 들지 않는다. 물론 그 많은 언어들을 다 유창하게 사용할 능력까지는 필요 없고, 간단한 프로그램을 만들 정도만 익혀도 부족하지 않다. 나중에 그 언어를 주력으로 사용하게 될 때, 나머지 상세한 부분을 공부해도 좋다. 누구나 그렇듯이, 트렌드를 지속적으로 따르는 건 어렵다. 라이브러리나 프레임워크를 뺀 순수 '언어'들만 해도 [[https://en.wikipedia.org/wiki/List_of_programming_languages|200여 종]]이 넘는다. [[http://www.tiobe.com/tiobe-index/|점유율 3% 넘는 것들만 쳐도]] 6종이다. 그 중에서 다음 프로젝트에 무슨 언어가 쓰일 지는 확정지을 수 없다.[* 물론 전문 분야 자체를 바꾸는 게 아니라면 대략 3종 내에서 결정되는 편이다.] 게임 개발의 경우 [[C++]]이나 [[C\#]]이 보통이지만, 갑자기 [[Python]]을 같이 사용해야 하는 경우도 있다.[* [[맥시스]]는 유명 개발사인데 심즈4에서 C++과 파이썬을 혼용했다. 사실 서버 문제는 언어와는 관계가 없긴 하다만, 기획자들은 그걸 모른다.] 심지어는 갑자기 언어에 변혁이 일어나기도 한다. 1983년부터 [[Objective-C]]가 개발되어 맥과 [[iPhone]] 앱에서 잘 쓰이고 있었는데, 2014년 [[Apple|애플]]에서 더효율적인 [[Swift]]를 발표했다. Objective-C로 코딩한 결과물이 쓸모없어지는 건 아니지만, Objective-C는 레거시가 돼서 지원이 점점 끊긴다. 그러니 그때그때 몸담고 있는 영역에서 유리한 언어를 사용하는 게 편리하다. 아주 오래전에는 [[기계어]]와 [[어셈블리어]]밖에 없었으나, 각 언어에는 장단점이 있기 때문에 분야마다 쓰는 언어가 다양해졌다. 이제 한 언어가 모든 분야에 절대적으로 유리하지는 않다. 대개 웹 프로그래머라면 [[Java]]와 [[JavaScript]], [[PHP]], 시스템 프로그래머라면 [[C(프로그래밍 언어)|C]], [[C++]], [[Rust(프로그래밍 언어)|Rust]]를 주력으로 삼는다. 한국 내에서도 이런 수요가 가장 많다. 시장의 수요에 따라 특정 언어를 할 줄 알면 몸값을 올릴[* 대기업에서 [[전사적 자원관리|ERP]]가 유행할 때 ABAP 프로그래머나 아이폰 발매 초기 C 프로그래머 등.] 수 있기 때문에 다양한 언어를 다룰 줄 아는 것이 중요하다. 가령 [[아두이노]]를 사용한 [[IoT]] 디바이스를 웹과 연결하는 프로그램을 짜고 있다고 하자. 웹에서 예를 들면 쇼핑몰을 구축해야 할 때 [[PHP]]가 적합한데 C/C++로 CGI로 홈페이지를 구축하는 것은 생산성만 떨어뜨리는 어리석은 접근이다. [[프로그래밍 언어/코드 예제]] 문서에 가보자. "Hello, World!" 외에도 그 아래쪽 것들을 구경해볼 것. 열 줄짜리 구구단 출력 자바 코드가 [[Ruby]] 언어에 가면 매우 줄어든다. [[Java]]의 예를 들어보자. 처음엔 [[날코딩]]에서 시작해 [[통합 개발 환경|IDE]]를 쓰게 되고, 서드파티 라이브러리를 사용하다가 스프링 프레임워크라는 것이 있다는 걸 알게 되고, 프레임워크의 유연성에 감동하다가, 그 프레임워크를 만든 근간 기술인 [[디자인 패턴]]에 대해 공부하게 되고… 그렇게 차츰 자기도 모르게 고급 프로그래머가 되어 간다. 그러나 학습량은 결코 적지 않다. 위에서 트렌드를 이해해야 한다고 했는데, Java 쪽의 트렌드를 따라가려면 읽어야 할 자료가 엄청나게 많다.[* 단순한 양만을 따져봤을 때도 장난이 아닌데 거기에 적용된 개념을 이해하기 위해 읽어야 하는 것까지 합치면 방대하기 그지없다. 오래된 언어일수록 공부량이 방대한 것은 당연하긴 하다.] 그래서 다른 것에 한눈팔 여유가 없다. 그래도, Java의 인기와 점유율은 여전히 상당하다. 최신 트렌드를 접하다 보면 [[Spring(프레임워크)|스프링 프레임워크]]를 접할 때 즈음엔 함수형 언어에 대해 알게 된다. 일급 객체, 클로저 등에 대해 10분만 검색하면 인터페이스가 불필요할 수도 있다는 걸 알고 멘붕할 것이다. 객체지향이 진리라고 믿었더라도, 메서드 체이닝과 [[고차 함수]] 개념을 접하고 나면 객체를 상속하듯이 행동을 확장할 수 있는 [[프로그래밍 언어#s-4.4.3.1|함수형 언어]]의 설계 패러다임을 접하고 다시 멘붕할 것이다. 그리고 멀티 스레드는 금단의 사과 같은 테크닉이라고 믿었더라도 [[GPGPU]]를 배우면 스레드가 다다익선일 수도 있음을 알게 된다. 리턴 값을 두 개 세 개 막 넘길 수 있는 [[Python]]과 [[Go(프로그래밍 언어)|Go]]를 보고, 숫자에 메소드를 붙이고 문자열 자체를 메소드 명으로 해석해서 실행시키는 괴랄한 테크닉이 가능한 [[Ruby]]를 보고[* 예를 들어 10.times do puts "hello" end 라는 코드가 문법적으로 올바르다. 코드의 의미는 'hello를 10번 출력하라.'], 심지어 같은 자바 가상 머신을 사용하는데도 유연성이 훨씬 뛰어난 [[Scala]]와 [[Groovy]]를 접해보게 된다. 이러한 점 때문에 프로그래밍에 흥미만 붙인다면 여러가지 다양한 개념과 사고를 접할 수 있기 때문에 정말 프로그래밍 공부가 재미있어진다.[* 좋은 점들만 계속 얘기해서 함정에 빠질까봐 얘기하는 것이지만 이는 자기 전문 분야를 확실히 익히면서 추가적으로 공부하라는 거지 주구장창 언어들만 공부해서는 아무것도 안 된다.] 이런 경험을 아예 하지 않으면 더 문제다. 일할 때 속도가 심하게 느려지기 때문이다. 남들이 2주에 400만원이면 충분하다고 하는 프로젝트를 본인 혼자서 2년에 2억을 부른다면 시장에서 도태되고 말 것이다. 이런 과정을 거치다 최정점에 서게 되면 이거고 저거고 다 비슷해 보이는 언어의 한계를 돌파한 polyglot이 된다. 무슨 언어를 쓰든 거기서 거기처럼 느껴질 수도 있겠지만 이 경지까지 가면 스스로 컴파일러를 제작해서 사용할 정도의 초월자가 되어있을 것이라 논외. [include(틀:상세 내용, 문서명=프로그래밍 언어)]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기