C, C ++ 또는 Java보다 Python 프로그래밍이 더 빠릅니까? [닫은]


27

들 사이에 가 더 역동적이고 느슨하게 타이핑 될수록 프로그래머가 더 생산적 일 것이라는 믿음이 널리 퍼져 있습니다. 귀도 반 로섬 (Guido van Rossum)은 1998 년에 파이썬을 사용하여 프로그래밍 생산성에 대해 썼고 웹을 검색 하면서이 정확한 주장을 언급하는 사람들을 여전히 봅니다.

문법적으로 파이썬 코드는 실행 가능한 의사 코드처럼 보입니다. Python을 사용한 프로그램 개발은 C / C ++를 사용하는 것보다 5-10 배 빠르며 Java를 사용하는 것보다 3-5 배 빠릅니다. 대부분의 경우 C / C ++ / Java 코드를 작성하지 않고도 응용 프로그램의 프로토 타입을 Python으로 작성할 수 있습니다. 종종 프로토 타입이 충분히 기능적이고 최종 제품으로 제공되기에 충분한 성능을 발휘하므로 개발 시간이 크게 단축됩니다. 다른 경우에는 프로토 타입을 부분적으로 또는 전체적으로 C ++ 또는 Java로 변환 할 수 있습니다. Python의 객체 지향적 특성으로 인해 번역이 간단합니다.

이 문제는 과학적으로 올바르게 평가 되었습니까? 이 아니라면 아마도 , 또는 와 같은 형제 스크립트 언어를위한 것일까 요?

문제를 조사하는 데 시간이 걸리는 연구원이나 전문가의 의견이 아니라면 합리화, 유추 또는 대답하기 어려운 이유에 대한 설명을 찾고 있지 않습니다.

나는 처음에 회의론자들 에게이 질문을했으며 누군가는 여기에서도 질문해야한다고 제안했다.


25
글쎄, 당신이 가능한 답을 제한했기 때문에, 나는 먼저 대답해야 할 또 다른 질문 (imho)을 물어 봄으로써 코멘트를 감히합니다 : "프로그래머의 생산성"을 측정하기위한 신뢰할 수 있고 확실한 척도가 있습니까?
Paul Michalik

1
@Paul Michalik-생산성을 조사한 모든 연구 논문에 정의가 포함되어 있다고 가정합니다 (그렇지 않으면 실제로 측정하기가 어렵습니다). 따라서 누군가가 연구를 참조한 경우 답변에 정의를 포함하면 도움이 될 것입니다. 아마도 생산성을 측정하는 몇 가지 완벽하게 수용 가능한 여러 가지 방법이있을 것입니다. 아마도 "여러 단위 테스트를 통과하는 데 걸리는 시간"이 그 중 하나 일 것입니다.
키트 선데

1
@Paul Michalik-물론 프로그래머가 쓴 책, 블로그, 강연 및 기사에서 읽은 내용은 실제로 경험적으로 테스트 되었습니까? 생산성을 측정하는 더 좋거나 나쁜 방법이 있다고 확신합니다. 예를 들어. "커피 소비 / 시간"은 아마도 전통적인 "코드 / 시간 라인"보다 더 나쁠 것입니다. 나는 우리가 보았던 특정 생산성 주장에 대한 판단을 보류하고 그것을 바탕으로 장점을 주장 할 수 있습니다. 생산성 주장은 단순한 잘못 이 아닙니다. 사람들이 메트릭을 파괴하지 않을 때 "코드 / 시간 라인"이 무언가를 측정 한다고 확신 합니다.
Kit Sunde

1
이 기사에 관심이있을 수도 있습니다 : citeseerx.ist.psu.edu/viewdoc/…
DistantEcho

1
@ChrisF-이 질문은 Programmers.SE에는 적용되지 않는다고 말씀하십니까? 그것은 회의론자들에게도 해당되며, 여기에도 잘 맞는 것 같습니다. Robert Cartaino가이 질문에 대한 최근 의견을 읽을 때까지는 안된다는 인상을 받았습니다 : skeptics.stackexchange.com/q/1963/631 이것은 본질적으로 커뮤니티와 지역 사회에 관심이 있다면 완벽하게 괜찮다고 말합니다. 다른 사용자가 요청한 후에 만 ​​수행했습니다. 질문이 불확실 해지고 있다는 점을 고려하면이 커뮤니티에도 관심이있는 것 같습니다.
Kit Sunde

답변:


17

스크립팅 언어에 대한 Ousterhout의 기사 1 에서는 프로그래밍 수준이 높을수록 프로그래머의 생산성이 높아진다고 제안합니다. Boehm이 2 에서 알 수 있듯이 프로그래머가 주어진 시간에 쓸 수있는 줄 수는 일정하며 언어 나 유형 (낮은 수준, 시스템 프로그래밍, 스크립팅)에 의존하지 않고 주장을 쉽게 믿을 수 있습니다. 결과적으로 소스 당 코드 라인 당 명령어 수는 시스템 프로그래밍 언어보다 스크립팅 언어에서 훨씬 더 우수 할 수 있습니다.

스크립팅 언어는 일반적인 작업 (예 : 데이터 구조, 문자열 조작)을 위해 기성품 유틸리티에 크게 의존하기 때문에 주로 배우기 쉽고 효율적으로 프로그램을 유지하는 구문을 제공하여 실행 속도를 늦추는 비용으로 생산성을 향상시키는 데 주로 사용됩니다. 와. 최고 실행 속도가 필요할 때 스크립트 언어에 의존하지 않습니다.

[1] : JK Ousterhout, 스크립팅 : 21 세기 컴퓨터 (IEEE)를 위한 더 높은 수준의 프로그래밍 , 1998
[2] : B. Boehm, 소프트웨어 공학 경제 , Prentice Hall, 1981


9
이것이 좋은 대답이지만 현대의 비 스크립팅 언어도 개발 속도를 높이기 위해 기성품 유틸리티가 함께 제공되는 경향이 있다는 것을 잊지 마십시오. C #이 떠 오릅니다. 파이썬이 C #보다 미리 준비된 유틸리티를 제공한다고 생각하는 사람은 단순히 C #보다 파이썬을 더 잘 아는 것입니다. 실제로는 둘 다 광범위하고 비교할 수있는 "내장"유틸리티를 가지고 있습니다.
Roman Starkov

@romkyns, 사소한 프로젝트가 아닌 경우 많은 코드를 작성해야합니다. 레고 벽돌이 많더라도 바이오닉은 마법처럼 뭉치지 않습니다.

2
@하지만 오일 드릴, 플라스틱 공장 및 레고 블록 압출기를 먼저 건설하는 대신 레고 벽돌을 미리 세우는 것이 실제로 도움이됩니다.
Roman Starkov

2
c ++과 Java에는 일반 컨테이너가 있으며 c ++ 11에는 정렬 알고리즘 및 반복자 등을위한 완전한 표준 lib가 있습니다. 파이썬을 프로그래밍하는 누군가가 실질적인 이점이 있다고 확신하지는 않습니다. 또한 나는 프로그래밍을 위해 대부분의 시간을 입력하지 않고 내가해야 할 일을하는 데 소비합니다. 따라서 일을하는 데 걸리는 줄의 수를 계산하는 것이 프로그래머가 해당 언어로 얼마나 빠른지에 대한 명확한 지표는 아닙니다.
Sam Redway

7

생산성을 "특정한 간단한 프로그램을 작성하는 시간"으로 측정하는 경우 언어가 아닌 실제로 평가하는 언어보다 프로그래머 경험과 빠른 생각에 훨씬 더 의존합니다.

타임 코드 컨테스트는 언어가 그런 종류의 작업에 실제로 중요하지 않다고 말합니다. 그러한 도전을 다른 언어보다 쉽게 ​​이룰 수있는 언어는 없습니다 (적어도 상대적으로 인기있는 언어는 허용하지 않습니다).

특정 언어로 작성된 "최상의 프로그램의 효과"로 성능을 측정하면 언어에 덜 의존적입니다. 예를 들어 Galcon AI 공모전 결과를 참조하십시오 . 우승자는 Lisp로 작성되었습니다. 그러나 다음 Lisp 항목은 # 280으로 순위가 매겨집니다. 이것이 훌륭한 AI를 효율적으로 작성하기위한 언어의 적합성에 대해 무엇을 알려줍니까? 제 생각에는 아무것도 없습니다. "bocsimacko"가 가장 효과적인 알고리즘을 구현하고 구현했다고 알려줍니다. 기록적으로,이 콘테스트에서 시간은 중요한 요소가 아니 었습니다. 사람들은 코드를 개발하는 데 2 ​​개월 이상이 걸렸습니다.

마지막으로, 성과를 "프로젝트를 유지하기위한 장기적인 비용"으로 측정한다면 나는 당신이 무언가에 있다고 생각합니다. 특히 당신이 그 일에 가장 적합한 사람들을 고용하고 비용을 달러가 아닌 인시로 계산하는 경우. 나는 어떤 언어가 이것에 가장 적합한 지에 대한 강한 의견을 가지고 있지만, 당신을 연결시킬 확실한 증거가 없다면이 의견을 남겨 두겠습니다. 다른 사람이이 유형의 성능에 대한 링크를 가지고있을 수 있습니다.


7
"언어가 아닌 프로그래머를 실제로 평가하고있다"-이것이 실제로 과학적으로 수행된다면 그렇지 않다. 프로그래머 100 명을 고용하십시오. "이러한 특정 요구 사항으로 캘린더 앱 작성"과 같은 일반적인 프로젝트를 선택하십시오. 자동화 된 유닛 테스트와 관련된 요구 사항. 프로그래머 50 명은 C ++로 앱을 작성하고, 50 명은 무작위로 선정하여 양질의 개발자가 골고루 퍼지게합니다. 결과는 평균 완료 시간과 통과 한 단위 테스트 수를 합한 점수입니다. 파이썬 결과의 평균과 C ++ 결과 및 ... 과학의 평균을 비교하십시오!
Morgan Herlocker

2
@Prof 어쩌면 당신이 각각 천 개를 얻는다면 ...하지만 여전히 특정 사고 방식과 특정 수준의 능력을 가진 사람들 만 C ++을 알 것이라는 사실을 어떻게 통제합니까?
로마 Starkov

C ++ 및 Python의 숙련도 테스트를 통과 할 수있는 사람들 만 샘플을 가져 오도록 할 수 있습니다. 저의 옛 교수들도 비슷한 연구를하고있었습니다. 또한 당신은 다른 사람들이 여기에서 논의했다고 가정합니다 : programmers.stackexchange.com/q/73715/3792
Morgan Herlocker

6

http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf 는 여러 언어의 생산성을 실제로 직접 비교 한 것으로 알려진 몇 가지 연구 중 하나입니다. 오래되었지만 주제를 흥미롭게 찾으면 읽을 가치가 있습니다. 비교에는 기사가 매우 정직한 여러 가지 단점이 있습니다.

전반적인 결과는 저수준 언어 (예 : C, C ++)를 작성하는 데 시간이 오래 걸리고 메모리가 훨씬 적게 걸리며 훨씬 빠르게 실행될 수 있다는 것입니다. 그러나 가변성이 매우 높습니다. 고급 스크립팅 언어는 작성하는 데 절반이 걸리고 접근 방식의 변동성이 적습니다. 놀랍게도 스크립팅 언어로 무언가를하는 확실한 방법이 있습니다.

Java에 대한 모든 성능 수치는 주요 소금을 사용해야합니다.이 논문은 사람들이 Java에 대해 많은 경험을 갖기 전에, 그리고 JVM이 최적화되기 전에 90 년대에 생산되었습니다. 두 요소 모두 중요한 영향을 미칩니다.


1

일반적으로 파이썬으로 프로그램을 작성하는 것은 일반적으로 C, C ++, Java로 동일한 프로그램을 작성하는 것보다 빠릅니다.

속도가 느려질 수도 있습니다.

물론, 관련된 특정 작업이 '보다 기본적으로'지원되므로 다른 언어가 더 빠를 수있는 특정 응용 프로그램이 있습니다.

나는 속도 / 생산성의 증가를 확인하기위한 어떤 연구도 알지 못하지만 (한 의견자가 언급했듯이, 정확하게 측정하기가 어려울 수 있음), 언어의 표현성에 대한 직접적인 연구가 있었다.

언어 표현력과 프로그래밍 속도 사이에는 상관 관계가 있다고 생각합니다. 간단한 반복 패턴과 파이썬 for 루프 또는 목록 이해가 더 간결 해지는 방법을 그려보십시오. 바로 입력 할 수있을뿐만 아니라 일대일 오류, 범위를 벗어난 인덱스 및 코딩 프로세스를 크게 느리게 할 수있는 기타 문제에 대한 우려를 제거합니다.

이것은 언어의 표현 비율에 대한 추정치를 보여줍니다. 소금 한 덩어리로 가져 가야하지만 언급 한 각주는 매우 가치가 있습니다.

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness


-5

지난번에 Java를 사용했을 때 (일부 인정 받았지만) 파일을 열고 파일을 작성하려면 코드로 가득 찬 화면이 필요했습니다. 이것을 파이썬이나 펄의 두 줄과 비교하면 어느 것이 더 빠를 지 추측 할 수 있습니다.

분명히 언어는 모두 나름의 장단점이 있지만, 대부분의 작업에서 파이썬은 더 빨리 작성할 수 있습니다.


6
"이 파일에 개방 및 쓰기에 코드의 전체 화면을했다"두 가지 방법으로 유틸리티 클래스에 이것을 넣고 write()그리고 read()당신의 자바 프로젝트 파일 액세스의 나머지 부분은 파이썬에서 간결로 될 것입니다. 나는 당신의 예제가 파이썬과 자바를 비교하기에는 너무 제한적이라고 생각합니다 (Java가 더 장황한 경향이 있음에도 불구하고).
Giorgio

물론 파이썬, 펄 및 그 이상의 언어는 일반적으로 그에 대해 미리 생각했기 때문에 유틸리티 클래스를 작성할 필요가 없습니다 (또는 많은 클래스는 아님). 유틸리티 클래스를 사용하는 데 여전히 시간이 걸리며 실제로 수행중인 작업에 따라 Java와 Python에 모두 적용되는 재사용 가능한 코드의 원칙입니다.
wobbily_col

이것은 Java가 파일을 열고 쓰려면 50-60 줄의 코드가 필요하다고 가정합니다. 이것은 단순히 정확하지 않습니다.
h22
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.