>  기사  >  백엔드 개발  >  옛날 외국 프로그래머의 반성: C, Python, Java를 동시에 가질 수는 없습니다. 프로그래밍 언어 하나만 잘 배우는 데 집중하세요!

옛날 외국 프로그래머의 반성: C, Python, Java를 동시에 가질 수는 없습니다. 프로그래밍 언어 하나만 잘 배우는 데 집중하세요!

王林
王林앞으로
2023-04-30 15:01:061027검색

一位国外老程序员的反思:C、Python、Java 不可兼得,专心学好一门编程语言就行!

최근 유명 게임 프로그래머이자 id Software의 공동 창업자인 존 카맥(John Carmack)은 한 인터뷰에서 프로그래머는 프로그래밍 언어를 잘 배우는 데 집중해야 한다고 말했습니다. 이것은 나를 조금 놀라게 했습니다. 나는 개인적으로 이 조언에 강력하게 동의하지만, 이 견해는 오늘날 프로그래머 집단에서 논란의 여지가 있습니다.

저는 모두가 "늙은 프로그래머"라고 부르는 사람인 것 같아요. 저는 어리지 않고 평생 프로그래밍에 종사해 왔으며 사회에 들어온 이후로 이 전문적인 일에 종사해 왔습니다. 때때로 나는 많은 프로그래밍 언어의 발전을 목격한 프로그래밍 언어 애호가처럼 느껴집니다. 이 흥미진진한 역사를 되돌아보면, 우리는 몇 가지 프로그래밍 언어를 아는 것이 결코 나쁠 것이 없다는 (잘못된) 결론에 도달하지 않을 수 없습니다. 프로그래밍 언어의 역사적 발전은 매우 흥미롭지만 오늘날의 개발 상황은 비교적 평화롭습니다.

이 기사에서는 과거의 역사를 검토하고, 배운 내용을 요약하고, 어떤 프로그래밍 언어가 가장 표준화된 언어인지 살펴보고 싶습니다.

선사시대(1950년대~1980년대)

컴퓨팅 하드웨어와 컴퓨터 과학이 하나의 학문으로서 점차 등장하면서 컴퓨터 프로그래밍(프로세서 자체의 명령을 넘어서)도 서서히 발전하기 시작했습니다. 처음 수십 년 동안 프로그래밍 언어는 주로 학계의 전유물이었으며 소수의 연구자들을 끌어 모았습니다. 프로그래머를 위한 옵션은 제한되어 있으며 주로 해당 분야에 따라 다릅니다.

COBOL은 비즈니스 프로그래밍에 사용되고, Fortran은 과학 프로그래밍에 사용되며, 그 외에도 특정 분야나 연구, 하드웨어에 주로 사용되는 언어가 몇 가지 있습니다.

대부분의 프로그래머는 전체 프로그래밍 경력 동안 또는 오랫동안 하나의 프로그래밍 언어를 배우는 데만 집중하면 됩니다. 일부 사람들은 프로그래밍 언어 설계에 관심을 갖고 있었지만 당시에는 이 분야가 아직 초기 단계였습니다. 몇 가지 흥미로운 혁신에도 불구하고 좋은 프로그래밍 언어를 설계하는 데 필요한 요소는 아직 잘 이해되지 않았습니다.

전문화(80년대~90년대)

컴퓨터 하드웨어의 수가 증가하고 그 용도가 점점 다양해짐에 따라 프로그래밍 언어의 수도 늘어나기 시작하며 프로그래밍 언어의 선택이 화두가 됩니다. 사람들은 프로그래밍 언어를 분류하기 시작했습니다. 프로그래머의 유형과 달성하고자 하는 전문 지식 수준에 따라 프로그래머가 어떤 언어를 선택할지 알 수 있습니다.

PC 프로그래밍 매니아들은 점점 인기를 얻고 있는 BASIC을 사용합니다. 이것은 매우 터무니없고 원시적인 프로그래밍 언어이지만 널리 사용되며 (나를 포함하여) 한 세대의 프로그래머를 위한 지침이 되었습니다. Pascal은 구조화된 프로그래밍을 도입하여 큰 영향을 미쳤습니다(Pascal은 Turbo-Pascal 및 Delphi로 번성하는 커뮤니티를 구축했지만 결국 사라졌습니다).

C는 UNIX에서 유래하여 시스템 프로그래밍 언어가 되었습니다. C++는 C의 후속이 되었고 Smalltalk의 객체지향 프로그래밍을 차용하여 전문 애플리케이션 및 서비스 개발자의 언어가 되었습니다. 결국 Visual Basic(BASIC과 아무런 관련이 없음)은 "비주얼 프로그래밍"을 대중화하고 (Windows의 출현과 함께 급속도로 성장한) 응용 프로그램 개발 요구를 충족하여 대중의 첫 번째 선택이 되었습니다. 그러나 일반적으로 VB 프로그래머는 파트타임 프로그래밍 작업을 수행하는 도메인 전문가인 반면 C 및 C++는 "전문" 프로그래머로 간주됩니다.

이 단계에서 사람들은 여전히 ​​프로그래밍 언어의 디자인을 잘 이해하지 못하기 때문에 많은 인기 프로그래밍 언어 디자인의 여러 측면이 이상적이지 않습니다. C 언어는 간단하고 강력하지만 익히기가 어렵고 잘못될 수 있는 부분이 너무 많습니다. C++는 좋은 의도를 갖고 있지만 결국에는 설계가 잘못되어 사용하기 불편합니다. Visual Basic은 재미 있고 단순하지만 약간의 해킹이었고 당시의 기술 조건에서는 우아하지도 효율적이지도 않았습니다. 스몰토크와 LISP는 모두 흥미롭고 우아한 언어였지만 전문적인 하드웨어와 값비싼 도구에 묶여 있었기 때문에 결국 인기를 끌지 못했습니다.

성숙기(90년대~2000)

이후 인터넷이 등장했습니다. 인터넷이 프로그래밍 언어에 미치는 영향의 정확한 정도는 알 수 없지만, 이는 의심할 여지 없이 중요한 요소입니다. 오래 전만 해도 프로그래밍 언어는 드물었고 대개 연구실이나 대규모 상업 기업에서 탄생했지만 이제는 누구나 자신만의 프로그래밍 언어를 개발할 수 있는 것 같습니다. 한동안 PERL은 시스템 관리부터 웹 프로그래밍까지 모든 것을 다루는 대중적인 범용 언어가 되었습니다.

이후 Python은 과학 연구 언어에서 간단하고 배우기 쉬운 범용 언어로 바뀌었습니다. 처음에는 느리게 발전했지만 결국 전 세계를 휩쓸었습니다. Netscape의 Brandan Eich는 불과 며칠 만에 JavaScript(기능이 매우 제한된 브라우저 확장 언어)를 개발했다고 합니다. 이는 Eich가 천재라는 것을 증명할 뿐만 아니라, 그 시대 사람들이 프로그래밍 언어의 설계를 잘 이해하고 있었음을 증명합니다.

이 기간 동안 다른 많은 프로그래밍 언어가 등장했으며 그중 가장 유명한 것은 Java입니다. 언어 자체는 특별하지 않지만, 그것이 제공하는 JVM은 "한 번 작성하면 어디서나 실행 가능"을 실현하는 범용 런타임 환경입니다. 이는 언어가 매우 보편적이며 특정 하드웨어, 운영 체제 또는 대상 환경. 엄밀히 말하면 초기 JVM은 과시할 만한 것이 아니었지만 점점 더 성숙한 언어 런타임 및 배포 옵션의 시대를 열었습니다.

신속한 개발 (2000~2010)

JVM 이후 프로그래밍 언어는 흥미로운 방향으로 빠르게 발전하기 시작했습니다. Self 언어(Smalltalk의 후속 버전이지만 우수하지만 매우 실패함)에서 파생된 JIT(Just-In-Time 컴파일러)가 추가로 연구되어 Java HotSpot이 탄생했으며 Microsoft는 Java에 맞서기 위해 .NET CLR을 출시했습니다. .NET은 한 단계 더 나아가 C#뿐만 아니라 여러 언어에 대한 범용 런타임으로 CLR(공용 언어 런타임)을 사용합니다. 돌이켜보면 이것은 분수령의 순간이었습니다. 프로그래밍 언어의 선택이 무의미해졌습니다.

이것이 Microsoft가 이 선택을 한 주된 이유는 아닐 수 있습니다(당시 Microsoft는 여전히 매우 인기 있는 Visual Basic 및 C#을 계속 지원하려고 노력하고 있었습니다). 그 기간 동안 Microsoft의 비공개 라이선스와 함께 CLR은 불가능했습니다. 가장 인기 있는 운영 환경이 되었습니다. 그러나 새천년이 시작된 후 처음 10년 동안 프로그래밍 언어는 더욱 많아지고 어디에나 존재하게 되었습니다.

한편, 프로그래머 수도 폭발적으로 늘어났습니다. 소프트웨어에 대한 수요가 급속도로 증가하고 도구와 지식이 더욱 널리 보급됨에 따라 전 세계 수백만 명의 사람들이 프로그래머가 되었습니다. 이 프로그래머는 인간이며 강한 그룹 정체성을 갈망합니다. 일반 사람들이 스포츠 팀에 대해 강하고 비합리적인 의견을 갖고 있는 것처럼, 프로그래머들도 프로그래밍 언어 선택에 있어 한쪽 편을 들기 시작했습니다. 많은 프로그래머는 새롭고 독특하며 특별한 프로그래밍 언어를 선택해야 합니다.

예를 들어 어떤 사람들은 함수형 프로그래밍이 왕이고, Ruby가 Python보다 낫고, Scala가 데이터 과학을 완전히 바꿀 것이며, Clojure를 선택하지 않으면 손해라고 주장합니다... 현시점에서 프로그래밍 언어는 ​선형적 발달로부터 혼란스러운 다윈주의적 적자생존 시대에 들어섰습니다.

Hyperstandardization (2010-현재)

이 시대의 사람들은 일부 프로그래밍 언어가 개발을 지속하기에는 너무 이상하다는 것을 깨닫게 될 것이라고 생각했습니다. 그러나 상황은 그렇지 않았다. 오히려 상황은 예상치 못한 방향으로 흘러갔다. 많은 애플리케이션과 서비스가 인터넷의 수많은 분산 노드에 배포되는 '클라우드' 컴퓨팅 시대에는 어떤 프로그래밍 언어를 사용하는지는 더 이상 중요하지 않은 것 같습니다. 프로그래머는 서로 통신하는 독립적인 구성 요소를 개발하고 있는데 왜 프로그래밍 언어에 신경을 쓰나요? 구성 요소는 서로 어떤 언어로 작성되었는지 알 필요가 없습니다. 프로그래머가 X 언어로 구성요소를 작성하고 싶다면 이 언어를 사용하십시오. 무슨 상관이야.

Docker가 출시되면서 단일 시스템에서 실행되는 애플리케이션이든 오케스트레이션 소프트웨어를 통해 여러 시스템에서 공동으로 실행되는 소프트웨어이든 컨테이너가 인기를 얻었습니다. 동일한 패러다임을 사용하여 쉽게 관리할 수 있습니다.

사람들은 오늘날에도 여전히 새로운 프로그래밍 언어를 개발하고 있으며 그 중 다수는 유망하고 큰 기대를 받고 있습니다. 일부는 도메인별(모바일 앱용 Swift, Kotlin 및 Dart, Ethereum 스마트 계약용 Solidity)인 반면 다른 일부는 더 일반적이지만 각 언어는 수십 년 동안 배운 교훈을 활용합니다(Go의 경우 클라우드 프로그래밍, Rust의 경우 시스템). 프로그래밍, JavaScript의 상위 집합인 TypeScript 등).

동시에 프로그래밍 세계는 더 이상 모든 새로운 트렌드를 쫓거나 모든 새로운 언어를 채택하지 않는 새로운 수준의 성숙도에 도달했습니다. 우리는 모두 성장했습니다.

프로그래밍 언어를 잘 배우는 데 집중하세요

일부 프로그래밍 언어가 실제로 더 좋고, 다른 프로그래밍 언어가 특정 사용 사례를 처리하는 데 더 적합하다는 것은 의심의 여지가 없습니다. 한동안 프로그래밍을 해본 사람이라면 새로운 언어를 배우는 것이 전혀 어렵지 않다는 것을 알고 있을 것입니다. 대부분의 프로그래머는 단 하루만에 새로운 언어의 기본을 쉽게 배울 수 있으며, 며칠을 사용한 후에는 생산성이 다소 높아질 수 있습니다. 새로운 프로그래머는 주요 프로그래밍 언어로 시작하여 프로그래밍 지식을 다른 언어에 쉽게 적용할 수 있습니다.

그러나 프로그래밍 언어를 자주 변경하는 것은 두 가지 주요 이유로 좋지 않습니다. 첫째, 프로그래밍 언어를 배우는 것은 체스를 배우는 것과 비슷합니다. 규칙을 빨리 배울 수는 있지만 숙련된 플레이어를 이길 수 있다는 의미는 아닙니다. 전략을 배워야 하며 그러기 위해서는 시간과 연습이 필요합니다. 이는 모범 사례, 함정, 최적화 기술은 물론 라이브러리, 도구, 커뮤니티로 구성된 생태계입니다. 둘째, 프로그래밍은 간단하지만 오류가 발생하기 쉽습니다.

일반적인 프로그래밍 경험과 최고의 도구가 있어도 아이디어를 컴퓨터 코드로 변환하는 것은 직관적인 행동이 아닙니다. 프로그래머가 어떤 직관을 개발하더라도 반복 사용, 즉각적인 피드백, 오류 수정의 사이클을 거쳐야 합니다. 프로그래밍 언어를 변경할 때마다 대가를 지불하게 됩니다. 그래서 제 경험상 프로그래밍 언어의 선택도 중요하지만 한번 선택하면 장기적으로 그 언어를 고수해야 합니다.

프로그래밍 언어 선택 방법

2022년까지 프로그래밍 언어 선택 시 다음 사항을 고려해야 합니다.

우선, 가장 중요한 고려사항은 언어의 적용 범위입니다. 특정 도메인이고 일부 도메인별 언어를 사용해야 하는 경우 가장 일반적으로 적용되는 언어가 선호됩니다. 다행스럽게도 Java가 "한 번 작성하면 어디서나 실행"을 제안했기 때문에 런타임과 배포는 더 이상 문제가 되지 않으며 비용과 라이선스도 더 이상 제약이 되지 않습니다. 오늘날 모든 프로그래밍 언어, 런타임 및 다양한 도구는 기본적으로 무료로 제공됩니다. 어떤 언어가 특별한 경우에 적합하지 않다면 그 언어가 충분히 인기가 없고 모든 사람에게 퍼지지 않았다고 말할 수 있습니다. 또는 그 언어가 실제로 해당 작업에 적합하지 않은 몇 가지 기본적인 요인 때문이라고 할 수 있습니다.

인기가 중요합니다. 강력한 커뮤니티, 풍부한 정보 소스, 함께 작업하거나 고용할 수 있는 다른 프로그래머가 많은 언어를 선택해야 합니다. 인기가 없는 언어는 선택할 가치가 없습니다. 특별한 상황에 직면하게 되면 선택이 더욱 어려워질 것입니다. 모든 시나리오에 적합한 하나의 언어는 없지만 이상적으로는 대부분의 시나리오에 공통된 주류 언어로 충분합니다.

마지막으로 우리가 선택하는 프로그래밍 언어는 대부분의 다른 언어보다 우수해야 합니다. 2022년에도 여전히 배우고 사용하기 어렵고 프로그래머를 쉽게 문제에 빠뜨릴 수 있는 끔찍한 프로그래밍 언어가 있습니다.

위의 진술을 고려하면 실제로 선택의 여지가 많지 않다고 생각합니다. 이제 최고의 프로그래밍 언어를 살펴보겠습니다.

최고의 프로그래밍 언어

JavaScript/TypeScript

프로그래밍 언어 세계에서 JavaScript는 인간이 의사소통을 위해 사용하는 영어와 같습니다. 다양한 시나리오(브라우저/프론트엔드, 시스템/백엔드, 다양한 환경에서 확장 언어로 내장됨)에 적합한 가장 인기 있고 다양한 프로그래밍 언어입니다. JavaScript의 런타임(V8/Node/Deno)은 매우 효율적이며 많은 훌륭한 도구와 대규모 커뮤니티를 갖추고 있습니다.

TypeScript는 강력한 타이핑 및 표준 도구를 도입하고 빠르게 JS 프로그래밍의 기본 선택이 되고 있는 JavaScript의 상위 집합입니다.

Rust

Rust는 C/C++의 모든 기능을 갖추고 있으며 사용하기 쉽고 함정이 많지 않습니다. Rust의 커뮤니티와 생태계는 강력하고 성장하고 있으며 도구는 사용하기에 좋습니다. Rust가 필요한 모든 기능을 제공한다면 그것은 확실히 최선의 선택입니다. 이전에는 C나 C++만 사용할 수 있었지만 이제는 Rust를 선택할 수 있습니다. 또한 Rust는 WebAssembly를 위한 자체 범용 언어도 구축하고 있습니다(WebAssembly는 궁극적인 "한 번 작성하면 어디에서나 실행되는" 런타임이라고 할 수 있습니다).

강력한 경쟁자

Python

저는 Python을 사용한 지 20년이 넘었습니다. 안타깝게도 2022년 기준으로 Python은 여전히 ​​진정한 범용 프로그래밍 언어가 아닙니다. 한 가지 이유는 Python이 여전히 매우 비효율적이며 많은 성능 중심 상황에서 사용할 수 없다는 것입니다. 또 다른 이유는 웹 브라우저나 휴대폰과 같은 주류 사용자 대면 환경에 적용되지 않았기 때문입니다. 그럼에도 불구하고 Python은 여전히 ​​뛰어난 프로그래밍 언어이며 데이터 엔지니어링/데이터 과학/기계 학습에서 중요한 위치를 차지하고 있으므로 이러한 분야에서 일한다면 Python은 확실히 알고 사랑할 가치가 있는 언어입니다. 현재로서는 Python이 데이터 과학을 위한 보편적 언어로 계속 발전할 가능성이 높지만 이 분야를 돌파하지 못할 수도 있습니다.

Go

Go는 "클라우드" 프로그래밍에 매우 적합한 언어입니다. Go 언어는 우아하고 배우고 사용하기 쉬우며 뛰어난 커뮤니티, 생태계 및 도구를 갖추고 있습니다. 클라우드 네이티브 공간의 핵심 제품에 널리 사용되므로 그대로 유지됩니다. 안타깝게도 Go는 보편적으로 적용할 수 없으며 인터넷 서버 외부에서는 사용할 수 없습니다. 또한 Go 디자인 선택으로 인해 C/C++ 세계에서는 제대로 작동하지 않습니다. Go도 좋지만 선택을 해야 한다면 Rust는 Go가 달성할 수 있는 모든 기능을 구현할 수 있습니다. 시간이 지나면 Go는 주류 시스템 프로그래밍 언어로 대체될 수 있습니다.

C#/Java

C#과 그 생태계는 훌륭하며 이를 통해 많은 것을 성취할 수 있습니다. Java는 모든 면에서 C#만큼 좋지는 않아서 누가 그걸 좋아하는지 이해가 안 되지만, Java는 정말 인기가 많아요. C#은 시스템 및 "비즈니스" 언어뿐만 아니라 모바일 애플리케이션 및 브라우저까지 널리 사용됩니다. 강력한 런타임, 훌륭한 생태계. 그러나 C#의 맞춤형 런타임 및 도구 기능이 필요하지 않으면 C#이 단기적으로 JavaScript 및 Rust와 경쟁하기 어려울 것입니다.

C/C++

린디 효과에 따르면 C와 C++는 향후 수십 년 동안 계속 인기를 끌 것입니다. 이미 이 두 언어의 전문가라면 취업에 대한 걱정은 전혀 없을 것입니다. 이 분야에 필요한 것이 있다면 두 가지를 모두 배우는 데 시간을 투자하는 것도 좋은 선택입니다. 그렇지 않으면 Rust를 선택하는 것이 더 적절합니다.

Honorable Mention

Swift/Kotlin/Dart

이 언어들은 특정 분야에서 그 자리를 차지하고 있습니다. 모바일 UI 프로그래밍이 필요한 경우 이는 좋은 선택입니다. 하지만 JavaScript는 더 보편적으로 적용 가능하고 모바일 개발에도 적합하므로 JavaScript를 더 선택해야 합니다.

LISP (Racket/Clojure)

LISP는 매우 특별합니다. 일상 업무에 이러한 필요성이 없더라도 배워야 합니다. Racket은 최첨단의 매우 복잡한 언어입니다(실제로는 언어 구축 툴킷입니다). Clojure는 JVM을 대상으로 하고 Java 라이브러리를 사용할 수 있기 때문에 강력하다는 소문이 있습니다. 하지만 이 판매 포인트가 얼마나 유용한지는 잘 모르겠습니다.

Haskell/F#/Scala

기능적 언어가 중요합니다. 어떤 경우에는 탁월한 선택입니다. 하스켈은 함수형 프로그래밍의 대표적인 프로그램입니다. F#은 CLR에서 실행되고 .NET 라이브러리를 사용할 수 있으므로 일반적인 적용성이 더 좋습니다. Scala는 순전히 기능적이지는 않지만 매우 일반적이며 JVM에서 실행됩니다.

Julia/R/MATLAB

Julia는 수학 분야에 매우 적합합니다. R과 MATLAB은 모두 특정 상황에 능숙합니다. 그러나 Python이 지배하는 데이터 엔지니어링 분야에서는 이러한 프로그래밍 언어가 생존하기 어려울 수 있습니다.

PowerShell

쉘 프로그래밍에 관심이 있다면 PowerShell이 ​​최고의 선택입니다. 이는 모든 운영 체제에서 작동하므로 다른 쉘을 사용할 이유가 없습니다. PowerShell은 범용 프로그래밍 언어로 간주될 수도 있지만 실제로는 시스템 관리 이외의 용도로는 누구도 이를 사용하지 않습니다.

황혼의 해

PHP / Ruby / PERL

이 언어들도 주로 웹 "백엔드" 언어로 전성기를 누렸습니다. 이러한 언어에 대해 어떻게 생각하든 더 이상 해당 언어에 대한 노력을 낭비해서는 안 됩니다. 그들은 모두 죽어가고 있습니다.

Visual Basic / VBA

VB는 세상을 변화시켰지만 이제 범용 언어와 다른 프로그램의 확장으로서 단계적으로 폐지되고 있습니다. 먼 과거에 VB로 달성할 수 있었던 기능은 이제 다른 현대 언어로 더 잘 달성할 수 있습니다.

요약

저는 프로그래밍 언어를 좋아하고 항상 새로운 언어에 호기심이 많습니다. 그러나 현재로서는 TypeScript가 C에 대한 최고의 선택이며, 강력한 성능과 낮은 수준의 액세스가 필요할 때 Rust가 두 번째로 선택됩니다. 2022년에는 거의 모든 프로그래머들이 나와 비슷한 생각을 가질 것이라고 믿는다.

위 내용은 옛날 외국 프로그래머의 반성: C, Python, Java를 동시에 가질 수는 없습니다. 프로그래밍 언어 하나만 잘 배우는 데 집중하세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제