파이썬 생산성 대 자바 생산성


24

그래서 Google AppEngine에서 개발하기에 가장 적합한 플랫폼, Java 또는 Python에 관한 질문을 받았습니다. 많은 사람들이 Python over Java를 사용하여 얻는 생산성 향상을 자랑했습니다. 파이썬 대 자바 생산성 주장에 대해 한 가지 말하면 Java는 동적 특성으로 인해 파이썬 이이 영역에서 실제로 부족하기 때문에 개발 속도를 높이는 탁월한 IDE를 가지고 있다는 것입니다.

따라서 파이썬을 언어로 사용하는 것을 선호하지만, 특히 새로운 프레임 워크를 사용할 때 Java에 비해 생산성이 크게 향상되지는 않습니다. 분명히 Java 대 Python이고 사용할 수있는 유일한 편집기가 VIM 인 경우 Python은 생산성을 크게 향상 시키지만 IDE가 방정식에 포함되면 분명하지 않습니다.

Java의 장점은 종종 언어 수준과 종종 오래된 가정에 대해서만 평가되지만 Java는 언어 자체 이외의 많은 이점을 가지고 있다고 생각합니다. 파티 도서관, 플랫폼 등

질문 : 파이썬 / 관련 동적 언어는 종종 자주 이야기하는 생산성 향상을 제공합니까? (새로운 프레임 워크를 사용하고 중대형 응용 프로그램과의 작업을 고려하여).


2
PyCharm IDE를 확인하십시오. 또한 프론트 엔드에서 사용하기 위해 Java 코드를 JavaScript로 변환하는 GAE에 대한 새로운 프레임 워크가 있다고 믿어 생산성이 크게 향상 될 수 있습니다.
Andrew M

14
IDE의 유무에 관계없이 한 줄의 Python으로 (잘) 할 수있는 일에 대해 10 줄의 Java를 작성해야합니다.

2
Java에 대한 당신의 사랑을 부끄러워하지 마십시오. 당신은 엉덩이를 걷어차 게하는 몇 가지 트릭 (IDE, 라이브러리 및 프레임 워크)을 배웠습니다. 받아들이십시오. 당신은 우리의 허락을받을 필요가 없습니다. 자바하게되면 당신이 생산 한 후 충분히 그.
Scant Roger

1
1) JVM 잠재력은 매우 제한적 입니다. 신중히. 그것은 "나쁜"것이 아니라 단지 제한적입니다. 2) IDE는 수백 가지의 기존 구성 요소 (유효하고 명예로운 프로그래밍이지만 유일한 구성 요소는 아님)를 통합하는 경우에만 도움이됩니다. 복잡한 알고리즘을 구현할 때 Python은 Java보다 훨씬 생산적입니다 (람다 함수 및 목록 이해와 같은 것조차도 큰 차이를 만듭니다).
SK-logic

1
IDE로 인해 생산성이 크게 향상되면 사용자 나 프로그래밍 플랫폼에 심각한 문제가있을 가능성이 있습니다. (Smalltalk는 예외입니다. 프로그래밍을 위해 완전히 반사적 인 시스템을 생성하기 때문입니다).
Marcin

답변:


18

파이썬의 주요 장점 중 하나는 "배터리 포함"철학입니다. 광범위하고 사용하기 쉬운 표준 라이브러리입니다. Java에서 텍스트 파일을 읽으려면 몇 줄의 코드, 중첩 된 리더 등이 필요합니다. 파이썬에서는 f.read()입니다. 이는 특히 빠른 프로토 타이핑에서 생산성이 크게 향상 될 것입니다. 파이썬 언어는 일반적으로 덜 장황합니다. 나쁘지 않습니다 (단, 간결함 대 간결함의 중요성은 종종 지나치게 강조됩니다).

그러나 GAE와 같은 일부 프레임 워크에서 이미 작업하고 있다면 차이가 훨씬 작을 것이며 주로 언어의 개인적 유창함까지 기대할 수 있습니다. 대부분 선택한 구문과 프레임 워크를 연결하면됩니다. 파이썬의 훌륭한 표준 라이브러리는 거의 도움이되지 않습니다.


나는 정말 GAE를 사용하는 방법을 배울 필요가있다. 추천 할만한 온라인 자습서 시리즈가 있습니까? 저는 파이썬에 익숙 하지만 GAE에 대한 실마리는 없습니다. 감사!


4
또는 Maven 구성 줄로 Apache Commons IO를 추가 한 다음 한 줄로 파일을 읽을 수도 있습니다. 포함 된 배터리 접근 방식은 나에게 양날의 칼입니다.
jiggy

@ jiggy : 어느 정도 동의합니다; 파이썬의 배터리는 거의 항상 유용하고 종종 충분하지만 분명히 표준 라이브러리는 가능한 모든 목적을 충족시킬 수 없으므로 때로는 라이브러리로 돌아 가야합니다.
Joonas Pulakka

2
자바에서 텍스트 파일 읽기 : List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));. 나쁘지 않아! (이것은 3 월 11 일에 아직 릴리스되지 않은 Java 7입니다).
assylias

19

여기 내 2 센트가 있습니다. 내 경험상 파이썬은 중소 규모의 프로젝트에 적합하지만 큰 프로젝트의 경우 Java로 생산성이 높습니다.

일반적으로 소규모 프로젝트에는 Python (또는 PHP)과 같이 동적으로 형식이 지정된 언어를 사용할 수 있습니다. 너무 복잡하지 않고 빠르게 처리하고 너무 잘못하지 않을 수 있습니다. 이 경우 Python을 사용하는 것이 더 실용적이라는 것을 알았습니다.

그러나 더 큰 소프트웨어를 개발해야 할 때 컴파일러는 가능한 한 많은 검사를 수행하는 것을 선호하기 때문에 Java와 같은 정적으로 유형이 지정된 언어를 선호합니다. 내 경험에 따르면 큰 프로젝트에서는 Java보다 Python으로 버그를 수정하는 데 더 많은 시간을 소비해야하므로 나중에 시간을 절약 할 수 있기 때문에 Java로 코드를 작성하는 데 조금 더 시간이 걸리더라도 귀찮게하지 않습니다.


6
+1, 완전히 동의합니다. 나는 작은 프로젝트에서 파이썬과 비슷한 언어를 사용하는 것을 좋아합니다. 여기서 큰 어려움없이 머리를 감싸 줄 수 있습니다. 문제는 구성 요소 간 인터페이스를 유추해야하는 대규모 프로젝트에서 발생합니다. 이것은 약한 리팩토링 지원과 결합되어 크고 안정적이며 유지 관리가 가능한 시스템을 생성하는 데 대한 확신이 부족합니다. 컴파일러가 수행하는 정적 분석의 부족을 보완하기 위해 많은 테스트를 작성하고 유지해야합니다. 이 시점에 도달하면 빠른 초기 반복의 이점은 유지 관리에서 손실됩니다.
bunglestink

둘 다 사용하고 둘 다 좋아합니다. 나는 당신에게 전적으로 동의합니다.
Daniel Baktiar

11

저는 파이썬이나 루비 같은 더 강력한 언어에서 훨씬 더 생산적입니다. IDE에서 일부 Java 코드를 생성 할 수 있는지 여부는 중요하지 않습니다. 읽고 유지해야 할 코드가 더 있습니다. 반복적 인 코드를 살펴보고 중요한 부분을 찾는 데 더 많은 시간이 걸리고 코드를 변경하는 데 더 많은 시간이 걸립니다. 이클립스가 변환 할 수 있다는 것은 괜찮습니다.

private Date dateOfBirth;

에:

private Date dateOfBirth;
public Date getDateOfBirth() { return dateOfDeath; }
public setDateOfBirth(Date d) { dateOfBirth = d; }

그러나 수업을 열 때마다 그 쓰레기를보고 흥미로운 부분을 찾기 위해 그것을 넘어야합니다. 또한 유지 관리 중에 생성 된 코드에 오류가 발생할 수 있습니다.

나는 오히려 오히려 볼 것이다 :

attr :date_of_birth

저에게 IDE와 Java를 효과적으로 작동시키기 위해서는 다른 언어를 선택해야합니다.

아마도 더 강력하게,이 루비 코드를 비교하십시오 :

avg = people.filter { |p| p.height > 200 }.collect(:weight).average

비슷한 Java 코드에 대한 :

List<Double> weights = new ArrayList<Double>();
for (Person p: people) {
  if (p.getHeight() > 200) {
    weights.add(p.getWeight());
  }
}
return Stats.average(weights);

루비 코드는 스펙을 직접 번역 한 것으로, 200 (cm)보다 큰 사람들의 평균 체중입니다. 주석은 완전히 중복됩니다.

Java 코드는 읽고 쓰는 데 상당한 노력이 필요합니다.

Paul Graham은이 에서 프로그래밍 언어의 간결성을 설득력있게 주장한다 . 대학원 수준의 수학을하면서 그의 주장은 설득력이 있고 간결함에 대한 주장은 약합니다. 부분 미분 방정식이 단순한 덧셈보다 이해하기 어려운 것처럼, 고급 언어의 한 줄은 저수준 언어의 한 줄보다 이해하기 어려울 수 있습니다. 그러나 강력한 언어로 된 한 줄은 대체하는 5 또는 10 줄보다 이해하기 쉽습니다. 기호 대신 단어를 사용하여 작성된 수학 텍스트를 읽는다고 상상해보십시오.


파이썬을 사용하지는 않았지만 자동 속성을 가진 C #을 사용했습니다. 파이썬에서 로직을 추가하는 것이 얼마나 많은 일입니까 (예 : 이벤트 발생 또는 검증 로직)?
mlk

@mlk- "attr"문은 Ruby에서 온 것입니다. 루비에서는 속성이 설정 될 때 동작을 첨부하는 것이 매우 간단합니다.
케빈 클라인

파이썬에서는 모든 클래스 속성이 자동으로 공개되므로 대부분 직접 액세스합니다.
Zhehao Mao

3
파이썬은 게터 나 세터가 필요하지 않습니다-그냥 dateOfBirth공개하십시오. 나중에 get 또는 set에 로직을 추가해야하는 경우 _dateOfBirth데이터를 저장하기 위해 a 를 추가 한 다음 get 및 set 메소드 로 property이름 을 작성하십시오 dateOfBirth. 파이썬에서는 호출 코드를 전혀 변경할 필요가 없습니다. Java는 "속성"개념이 없으므로 접근 자만 사용합니다.
Izkata

1
Java 8 및 스트림을 사용하면 평균 중량 코드를 다음과 같이 작성할 수 있습니다.people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
vitro

7

몇 년 전에 Java에서 Python으로 옮겼으며 개인적으로 더 생산적이라고 생각합니다. @Joonas가 지적했듯이 많은 생산성은 패키지 라이브러리에서 비롯됩니다. 그러나 그중 일부는 언어 자체에서 나왔습니다. 사전, 목록 이해력, 고차 함수 및 쉘이 없다는 것을 상상할 수 없습니다.

이미 Java를 알고 있다면 Python에 능숙 해지는 데 시간이 걸릴 것입니다.


7

이것은 약간의 오래된 질문이지만 내 $ .03을 추가하고 싶습니다. 나는 그것이 당신이 생각하는 방식에 많이 달려 있다고 생각합니다. 나는 역동적이고 통역되는 언어를 참을 수 없다. 반면에 저는 정적으로 형식화 된 언어를 좋아하는 팬입니다. 물론 Java를 사용하는 것이 더 장황 할 수는 있지만 일단 말하고 완료하면 더 쉽게 읽고 유지할 수 있습니다. 파이썬, 루비, 펄은 읽기가 매우 어렵다는 것을 알게되었습니다. 시도했지만 머리를 감쌀 수는 없습니다. 즉, 스칼라로 코드를 작성할 수는 있지만 큰 문제는 아닙니다. 나는 그것이 당신이 편한 것에 달려 있다고 생각합니다. 하루가 끝날 무렵, Java는 훨씬 더 강력해질 것입니다. Ruby, Python 또는 Perl보다 더 중요합니다. JVM은 매력적인 기술이며 그 기능을 활용하는 방법을 배우면 매우 유익 할 수 있습니다.


1
동의합니다. Python으로 정말 빨리 해킹 할 수는 있지만 나중에 디버깅하거나 새로운 기능을 추가하는 것은 악몽이 될 수 있습니다. 그 이유는 종종 "프로토 타이핑 언어"라고 불리는 이유입니다. hoc 스크립트 유형)
programmx10

2
그 날의 끝은 언제 올 것인가? 우리는 약 20 년을 기다렸지 만 Java에는 여전히 최고 수준의 기능이나 메타 프로그래밍 기능이 없습니다. 그동안 C #은 엄청나게 발전했습니다. 작년에 Java 대신 Groovy 코드를 작성하기 시작했으며 생산성이 크게 향상되었습니다. Groovy 코드는 노이즈가 없어지기 때문에 해당 Java 코드보다 훨씬 작고 이해하기 쉽습니다.
케빈 클라인

@ Kevin Cline-나는 당신이 무슨 말을하는지 알고 있습니다-나는 지난 6 년 동안이나 .NET 개발자였습니다. 나는 생산성에 대해서만 이야기하는 것이 아니라 컴파일 시간, 동시성 및 멀티 코어 유형에 관한 것입니다. Java 및 JVM (Groovy, Scala 등) JVM은 반드시 Java 자체 일 필요는 없습니다.
Nodey The Node Guy

2
@ programmx10 파이썬 코드의 유지 관리 성은 코드 작성 방법에 따라 다릅니다. 하나의 큰 kludge를 만들면 당연히 디버깅 할 수 없습니다. 반면에 코드를 잘 구성하고 기능을 모듈과 클래스로 분리 한 경우 Java 코드보다 유지 관리가 쉬울 수 있습니다.
Zhehao Mao

5

파이썬, 루비, 자바 스크립트 및 SQL이 자바와 같은 컴파일 된 언어보다 훨씬 생산적이라는 것을 알게되었습니다. 그 언어는 매우 빠른 피드백 루프를 가지고 있기 때문입니다. 명령 행에서 몇 줄의 코드를 실행하고 코드가 올바른지 즉시 알 수 있습니다. 예외가 발생하면 즉시 알 수 있습니다. Java를 사용하면 대규모 시스템의 경우 몇 분이 걸릴 수있는 컴파일, 패키지 및 배포가 필요하므로 피드백주기가 매우 느립니다.

빠른 피드백주기를 통해 좋은 솔루션으로 신속하게 반복 할 수 있으므로 동적 언어의 생산성이 향상됩니다.


용어의 위대한 적용feedback loop
양서류

3

나는 최근에 훨씬 더 많은 파이썬을 해왔고 오랫동안 자바 프로그래머였으며 새로운 개발을 위해 파이썬에서 좀 더 생산적이라고 생각합니다. 자바에서 상당히 간단한 것들이 파일 / 스트림 처리, URL에서 물건 읽기, XML 직렬화 등과 같은 약간 지루한 일이 될 수 있습니다. 파이썬에서 하나만 가져 가십시오. 그러나 구아바 또는 다른 컬렉션 API와 같은 올바른 도구를 사용하면 실제로 도움이 될 수 있습니다.

파이썬의 장점 중 하나는 자바에서 타사 라이브러리를 사용해야하는 많은 기능이 포함되어 있다는 것입니다.

말한 바에 따르면, 파이썬에서 할 수있는 것보다 Java에서 훨씬 더 생산적 일 것입니다. 특히 리팩토링 및 대형 코드베이스 작업 등의 경우 특히 그렇습니다.


1
Java는 라이브러리에 관한 것입니다 .Python에서는 PHP와 같은 많은 메소드가 있습니다 .PHP와 같이 모든 것을 기억하기 어려운 곳에서 Java를 사용하면 적절한 라이브러리를 검색 한 다음 적어도 다음과 같은 선택을 할 수 있습니다. 사용 내용
programmx10

1
@ programmx10 무슨 소리 야? 파이썬에는 모든 종류의 것들을위한 많은 라이브러리가 있습니다. 표준 라이브러리의 설명서를 살펴보십시오. 파이썬 라이브러리는 Java 라이브러리가 패키지로 분리 된 것처럼 모듈로 분리됩니다.
Zhehao Mao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.