현대 웹 애플리케이션 개발에 Java가 사용되지 않는 이유는 무엇입니까? [닫은]


393

전문적인 Java 프로그래머로서, 현대 웹 응용 프로그램에서 Java를 싫어하는 이유를 이해하려고 노력했습니다.

현대의 웹 스타트 업 중 상대적으로 적은 비율이 Java를 사용하는 것으로 보입니다 (Java의 전반적인 인기와 비교). 이것에 대해 몇 가지를 물었을 때, 나는 일반적으로 "열정으로 자바를 싫어한다."와 같은 응답을 받았습니다. 그러나 아무도 확실한 결정을 내릴 수없는 것 같습니다.

또한 동일한 웹 스타트 업 커뮤니티가 자바 개발자를 부정적으로 언급하는 것으로 들었습니다.

결과적으로 루비 / 레일을 집어 들기 위해 기본적으로 내가 잃어버린 것을 알아내는 데 시간을 보냈습니다. 그러나 나는 내 상대적인 경험 수준으로 인해 "자바를 사용하는 경우 훨씬 빨리 할 수있다"고 스스로 생각하는 것을 도울 수 없다.

또한 Java에서 중요한 "누락"을 보지 못했기 때문에 동일한 응용 프로그램을 구축하지 못했습니다.

내 질문에 나를 데려옵니다 .

현대 웹 응용 프로그램에서 Java를 사용하지 않는 이유는 무엇입니까?

  • 언어의 약점입니까?

  • 오랫동안 사용되어 왔기 때문에 불공평 한 고정 관념입니까? (이전 기술과 불공평하게 관련되어 있으며 "현대적인"기능에 대한 인식을받지 못하고 있습니까?)

  • Java 개발자의 부정적인 고정 관념이 너무 강합니까? (자바는 더 이상 "쿨"하지 않습니다)

  • 다른 언어로 작성된 응용 프로그램은 실제로 구축 속도가 빠르고 유지 관리가 쉽고 성능이 더 우수합니까?

  • 새로운 언어에 적응하기에는 너무 느린 대기업에서만 Java를 사용합니까?


142
나는 당신이 틀렸다고 생각합니다 : 그것은 여전히 ​​사용되어 있으며 멋진 요인을 잃어 버렸습니다.

41
@Graham Lee : Java가 멋지다? 뭔가를 놓친 것 같습니다. 글쎄, 차가운 커피 인 것 같아요. 주된 이유는 자바, 특히 엔터프라이즈 자바 프레임 워크가 과도하게 과도하게 엔지니어링되어 있기 때문이라고 생각합니다. 경량으로 간주 할 수 없으며 플랫폼의 배포 / 밸런싱 / 확장 성 기능이 필요하고 동종 성을 위해 Java로 수행되는 프론트 엔드 용 프레임 워크를 사용하기를 원하기 때문에 사용하기 만합니다.
팔콘

20
아마도 현대적 이지 않기 때문에 ? : P 그리고 Java 는 해킹 부분을 프로그래밍에서 제외했기 때문에 결코 시원 하지 않았습니다 .
back2dos

28
@Falcon Java는 처음 소개되었을 때 시원해졌으며 Sun은 과대 광고가 정당화되었는지 여부와 관계가 없는지 여부에 관계없이 Java를 과대 평가했습니다. 많은 멋진 것들이 이유없이 과장되었습니다.
Mahmoud Hossam

11
@Falcon에서는 Java EE 6에서 JSF 2.0으로 웹 애플리케이션을 작성하고이를 경험과 비교해야합니다. 당신은 즐겁게 놀랄 수 있습니다.

답변:


174

현대의 스타트 업은 가능한 빨리 시장에 진출해야합니다. Java 웹 애플리케이션을 출시하기 위해 약 6 개월을 소비 할 필요가 없습니다.

예를 들어 Twitter는 Rails / Ruby를 사용하여 구축되었지만 일단 확장 할 수 없게되면 JVM으로 마이그레이션했습니다.

개발 프로세스가 생산적이지 않다는 것은 말할 것도 없습니다. 코드-> 컴파일-> (Rails / Django / Grails)와 같은 프레임 워크에있는 동안 배포 : 테스트 서버 실행-> 코드-> 변경 사항 및 발생 상황 확인.

좋은 소식은 JRebel을 사용하면 코드 변경 사항을 즉시 볼 수 있다는 입니다.


81
Play Framework 는 Ruby on Rails와 비슷하지만 Java 용입니다. 코드-> 브라우저를 업데이트하십시오.
Jonas

34
오해를 없애십시오. 많은 사람들이 생각하는 것처럼 Java EE가 Java 서버 측에서 유일한 것은 아닙니다.
Jonas

22
페이스 북도 비슷한 일을한다. 코드 기반은 PHP로되어 있지만 속도와 확장 성 문제로 인해 PHP를 C ++로 컴파일 한 컴파일러 (HipHop)를 작성하고 g ++를 사용하여 컴파일했습니다. 모든 사람들이 루비와 PHP가 얼마나 훌륭한 지, 모든 사이트가 그 주변에 구축되어 있는지에 대해 이야기하는 것은 재밌습니다. 그러나 얼마나 비효율적인지 살펴보면 대부분의 대규모 조직은 다른 것으로 전환해야합니다. 내가 올바르게 기억한다면 Craigs List에는 C / C ++로 작성된 많은 백엔드 코드가 있습니다.
Kibbee

28
1) Eclipse를 사용하면 입력 할 때 컴파일이 발생하며 거의 눈치 채지 못할 것입니다. 또한 Eclipse에서 Tomcat을 실행하면 1 초 안에 앱을 다시 시작할 수 있습니다. 내 앱을 다시 시작해도 거의 방해받지 않습니다. 2)은 총알이 없습니다. 루비 나 다른 언어는 10 배 더 빠르지 않습니다. Java dev의 문제는 종종 시간이 걸리는 일이지만, 수행중인 작업을 알고 있으면 10 분 안에 프로젝트에서 작업 할 수 있습니다.
alex

5
Java 및 기타 정적 언어에는 두 가지 큰 이점이 있으며 거의 ​​걱정없이 리팩토링 및 문서화없이 API를 발견 할 수 있습니다.
Eran Medan

136

내 경험에 따르면 웹 응용 프로그램 용 Java는 소규모 응용 프로그램에는 과잉입니다. 예를 들어, 하나의 데이터베이스 테이블에 블로그 항목이 포함 된 간단한 블로그는 훨씬 간단한 것으로 수행 할 수 있습니다.

필자는 일반적으로 메인 프레임 백엔드 및 데이터베이스 및 피어 웹 서비스 배경 배치 처리 시스템과 같은 다른 많은 시스템과 통신하는 훨씬 더 큰 웹 응용 프로그램 (은행 및 보험 회사 생각)에서 Java가 훨씬 더 나은 것을 보았습니다 ... 모두 같은 응용 프로그램에서).

내가 본 것으로부터, JavaEE 웹 애플리케이션의 아키텍처는 보통 작고 단순한 웹 애플리케이션에 필요한 것 이상이다.


5
"작은"응용 프로그램의 경우 Websphere와 같은 괴물 응용 프로그램 서버에서 작업해야하는 경우 (예 : "표준"이고 회사에서 사용하기 때문에) 훨씬 더 사실이지만 Tomcat이 아닌 경우에는 충분합니다. .. 왜 엉망인 관리 콘솔로 작업해야합니까? 한숨
Jalayn

7
@ Jalayn : 내 경험상 그것은 팀 A의 관리자 WebSphere, 팀 B의 Tomcat, 팀 C의 Glassfish (또는 다른 것)가 아닌 모든 것에 대해 하나의 응용 프로그램 서버 프로그램 만 유지하기를 원하기 때문입니다 ... 나도 기분이 좋지만 그래요.
FrustratedWithFormsDesigner

3
Java EE의 경우에도 마찬가지이지만 이제는 Java 웹 앱을 Ruby on Rails만큼 가볍고 생산적으로 만드는 Play Framework 가 있습니다.
조나스

9
새로운 Java 6 EE, 특히 웹 프로파일은 매우 간단한 웹앱을 허용합니다.

4
@ ThorbjørnRavnAndersen 앱은 간단하지만 프레임 워크를 이해하는 것은 아니며 Ant 나 Maven과 같은 주요 도구를 이해하는 것도 아닙니다. 초보자의 학습 곡선은 거대하고 중첩 된 약어 수프 레이어, 스펙 (예 : JAX-RS)과 impls (예 : Jackson) 등의 혼동 등으로 가득합니다. 실제로하고있는 일을 실제로 이해하려면 간단한 일을하는 것이 엄청나게 복잡합니다.
Craig Ringer 2018 년

135

4 년 이상 전에 파이썬으로 전환하기 전에 10 년 동안 Java 웹 앱을 프로그래밍했습니다. 파이썬을 사용하면 생산성이 훨씬 높아지고 단기간에 훨씬 더 많은 일을 할 수 있으며, 솔직히 말하면 파이썬으로 개발할 때 훨씬 행복합니다. 다음은 개인적 경험을 바탕으로 파이썬이 Java보다 낫다고 생각하는 이유 중 일부입니다.

웹 프레임 워크 :

Java로 웹 앱 프로그래밍을 처음 시작할 때 Struts가 방금 나왔지만 훌륭하지는 않았지만 가장 좋은 방법이었습니다. 나는 많은 struts 앱을 만들었고 다른 몇 가지 프레임 워크를 만들었습니다. 새로운 프레임 워크 (Tapestry, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring 등)가 나올 때마다 시도해보고 더 나아 졌는지 확인하고 대부분 나아 졌을 때 때로는 더 나아지지 않을 수도 있습니다. 플레이 프레임 워크가 올바른 방향으로 나아가는 단계라고 말해야합니다.

배터리는 포함되어 있지 않습니다 :

Java의 가장 성가신 부분 중 하나는 사용하는 대부분의 라이브러리가 Java 자체에 포함되어 있지 않기 때문에 아파치 공통점과 같은 곳에서 많은 타사 라이브러리를 포함해야한다는 것입니다. 다른 큰 라이브러리에서 최대 절전 모드와 같은 것을 사용하면 최대 절전 모드로 끝나고 최대 절전 모드에서는 하나의 jar 버전이 필요하고 다른 버전에는 다른 버전이 필요합니다. jar 파일을 잘못된 순서로로드하면 운이 좋지 않습니다. 의존성을 관리하기 위해 maven 및 ivy와 같은 도구에 의존해야하며, 이는 프로젝트에 더 많은 의존성을 가져 오므로 프로젝트가 거대합니다. 가장 간단한 웹 앱을 위해 100MB 이상의 war 파일이 있습니다.

너무 많은 옵션 :

어떤 이유로 Java에서 동일한 작업을 수행하는 데 너무 많은 다른 방법이있는 것 같습니다. wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java )와 23 가지 ORM ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# 에 따르면 Java에는 38 가지가 넘는 웹 프레임 워크가 있습니다 . Java ) 몇 가지 예를 들자. 다른 언어를 보면 더 합리적인 숫자가 있습니다. 어떤 사람들은 많은 옵션을 갖는 것이 좋은 일이라고 생각하지만 개발자 커뮤니티에서 많은 노력을 낭비하지는 않습니다. 모든 사람들이 같은 바퀴를 재발견하고 있습니다. 선택할 수있는 옵션이 너무 많습니다.

앱 서버 :

Java 웹 응용 프로그램은 실제로 무겁기 때문에 실행하는 데 많은 리소스가 필요합니다. 그들은 특히 메모리가 배고프다. 다른 소프트웨어와 마찬가지로 리소스 풋 프린트를 줄 이도록 조정할 수 있지만 다른 언어에 비해 기본 설정이 끔찍합니다. 과거에는 weblogic, websphere, Jboss, tomcat 및 jetty를 사용했습니다. EJB를 사용하도록 강요 받았을 때 처음 세 개만 사용했지만 EJB를 사용하지 않더라도 큰 응용 프로그램 서버 였고 때로는 구성하고 올바르게 실행하기가 어려웠습니다. Tomcat과 Jetty는 훨씬 더 좋고 설정하기 쉽지만 여전히 리소스를 낭비합니다.

앱 호스팅 :

당신이 당신의 자신의 서버를 운영하고 있지 않다면 합리적인 가격에 당신의 자바 앱을위한 공유 호스팅을 찾기 란 정말 어렵다. 주된 이유는 Java 앱이 다른 언어에 비해 훨씬 더 많은 메모리를 필요로하기 때문에 공유 호스팅 제공 업체가 동일한 장소에서 5 개의 PHP 사이트를 실행할 수있을 때 Java 사이트를 실행하는 소중한 RAM을 사용하는 것은 이치에 맞지 않기 때문입니다. 즉, Java 호스팅을 제공하는 공급자가 적으므로 웹 사이트 운영 비용이 높아집니다.

개발 시간 :

Java로 개발할 때 파이썬에서 할 수있는 것보다 훨씬 느리다는 것을 알았습니다. 변경, 컴파일, 재배치 및 테스트를 수행해야하므로 반복 프로세스 속도가 느려집니다. 나는 이것을 더 빨리 만들 수있는 방법이 있다는 것을 알고 있지만, 최선의 경우에도 파이썬에서 할 수있는 것보다 훨씬 느리게 느꼈습니다.

파이썬에서 똑같은 일을하는 상용구 코드가 훨씬 적기 때문에 코드 개발에 더 적은 시간을 소비합니다.

Java는 많은 부분에서 과도하게 설계되었다고 생각합니다. 많은 API와 인터페이스는 원하는 작업에 복잡합니다. 그리고 모든 사람과 형제는 자신이 자바 아키텍트라고 생각하고 사용하기 어렵고 개발하기 어려운 복잡한 시스템을 만듭니다.

IDE :

Java로 개발할 때 IDE에 갇혀 있다고 느꼈으 며 IDE가 없으면 길을 잃었습니다. IntelliJ는 시장에서 가장 좋은 IDE이며, 파이썬과 같은 것이 없기 때문에 파이썬으로 전환하기가 어려웠습니다. 따라서 IDE 대신 방금 텍스트 메이트를 사용했는데 이는 일반적인 텍스트 편집기 일뿐입니다. 처음에는 어려웠지만 텍스트 편집기 였기 때문에 정말 빠르고 반응이 빠른 응용 프로그램이었습니다. 몇 초 만에 전체 프로젝트를 열 수 있지만, IDE에서 프로젝트를 열려면 RAM이 많은 컴퓨터에서 1 분 이상 걸릴 수 있습니다. IntelliJ의 제조업체는 pycharm이라는 Python 편집기를 출시했으며 처음 출시되었을 때 구입했으며 훌륭합니다. 그러나 내가 깨달은 것은 파이썬 용 IDE가 필요하지 않다는 것입니다. 텍스트 편집기로는 괜찮습니다. 때때로해야하는 Java 웹 앱 작업으로 돌아 가면 텍스트 편집기를 사용하려고하지만 아직 완전히 익히지 못했습니다. 무언가를 엉망으로 만들면 다시 컴파일하고 재배치하는 데 시간이 오래 걸리므로 느려질 수 있기 때문에 개인적으로 Java 용 IDE가 더 필요합니다.

ORM :

처음으로 Hibernate를 ORM으로 사용하기 시작했을 때, 나는 그것이 훌륭하다고 생각했고 문제가 있었고 완벽하지는 않았지만 이전에했던 것보다 낫습니다. 파이썬 프로젝트에서 Django의 ORM으로 응용 프로그램을 적용하고 눈을 뜨게 될 때까지 ORM이 작동하는 방식에 만족했습니다. 그 프로젝트 후 나는 최대 절전 모드로 돌아 갔고, 나는 실망감을 느꼈고 Django의 ORM으로 돌아 가기를 갈망했다. 또 다른 위대한 파이썬 ORM은 sqlalchemy이며 장고의 ORM과 비슷하지만 약간 다릅니다. 나는 ROR의 ORM에 대한 경험이 제한적이지만, 내가 기억하는 것에서도 꽤 좋았습니다.

템플릿 :

Java의 웹 템플릿 시스템은 그다지 좋지 않으며 모든 것을 시도했습니다 (타일, 프리 마커, 속도 등). 대부분은 기본 기능 만 제공하며 작업하기가 쉽지 않습니다. 파이썬 측면에서 가장 좋아하는 두 가지 요소는 Django 템플릿과 Jinja2이며 템플릿 엔진에 필요한 모든 것을 갖추고 있으며 사용하기 쉽습니다.


10
나는 여러 가지 점에서 당신과 함께 있지만 일부 문제가 있습니다. 컴파일 / 테스트 루프 : Eclipse의 동적 웹 모듈 및 / 또는 JRebel을 사용하십시오. 큰. 강점 : JBoss AS 7은 매우 가볍고 빠릅니다. EE를 원하지 않으면 톰캣이나 부두를 사용할 수 있습니다. 테스트 : Arquillian은 내가 사용할 수있을 정도로 성숙해졌지만 모든 언어로 사용 된 최고의 테스트 도구입니다. 의존성 지옥 : Maven을 사용하십시오. JAva의 표준이고 의무적 인 부분이어야합니다.
Craig Ringer 2018 년

위의 모든 내용은 "포함되지 않은 배터리"문제에 추가됩니다. 이는 큰 문제입니다. Java EE는 자체 프레임 워크를 빌드 한 다음 앱을 빌드해야하는 하위 프레임 워크 인 것 같습니다. 매우 비효율적입니다. 모든 툴은 버그가 많으며 JSF2는 단순히 개발자 생산성 파괴 도구입니다.
Craig Ringer

2
또한 학습 요점 과 버그로 인해 속도가 느려집니다.
Craig Ringer 2018 년

@CraigRinger 나는 이클립스의 동적 웹 모듈이나 JRebel을 사용하지 않았으므로 당신이 옳았을 수도 있습니다.
Ken Cochrane 2016 년

2
IntelliJ를 좋아한다면 PyCharm을 사용해보십시오. 동일한 코어를 기반으로합니다.
Tamlyn

94

스타트 업은 반짝이기를 원합니다. 반짝 거리는 것은 RoR, Groovy, Grails, OOP w / PHP, Foobar, Wibble, Narf 등입니다.

엔터프라이즈는 안정적이고 안정적이며 확장 가능한 솔루션을 원합니다. Java 및 .NET은 그 계산에 적합합니다 (올바로 수행 한 경우).

현재 공연 : 금융 서비스. 플랫폼 : ColdFusion (본질적으로 Java 태그 라이브러리) 및 Java.

이전 공연 :

  1. 교육 테스트 서비스-ColdFusion
  2. 고위험 보험-ColdFusion 및 Java
  3. 401k-ColdFusion 및 Java
  4. 여행-내부 ColdFusion 앱이있는 Java
  5. 보안-ColdFusion (Java 이전 버전)

이들은 모두 대량의 보안 사이트입니다. 이 회사들 중 어느 누구도 PHP를 고려하지 않았으며, 일부는 RoR을보고 너무 많은 문제를 보았습니다. 401k 회사에는 유능한 개발자와 함께 .NET 응용 프로그램을 실행하는 자매 회사가 있었으며이 앱은 매주 중단되었습니다. 그들은 마침내 그것을 Java로 변환하고 안정성을 얻었습니다.

Java를 멸시하는 유일한 사람들은 실제 경험이 거의 없거나 거의 구현되지 않았으며 현재는 부끄러운 사람들입니다. 그들은 모든 멋진 아이들이 그것을 사용하고 있는지 반짝 반짝 보이는 것을 보았습니다.


23
"401k 회사는 유능한 개발자와 함께 .NET 응용 프로그램을 실행하는 자매 회사를 보유하고 있었으며이 응용 프로그램은 매주 충돌을 일으켰습니다. 마침내 Java로 변환하여 안정성을 얻었습니다." Lol :), 반대 사례를 들었습니다.
Den

12
물론입니다. 코드를 작성하는 것보다 웹 응용 프로그램이 더 많으므로 서버를 조정하고 최적의 SQL을 작성하는 방법을 알아야합니다. 이 회사에는 2 명의 .NET 개발자가 있었고 실제 서버 관리자는 없었습니다. 나와 함께있는 회사를 구입 한 회사도 거래에서 해당 앱을 얻었습니다. 그들은 거대한 Java 상점이었으며 안정성을 보장하기 위해 더 많은 리소스를 사용할 수있었습니다.
Adrian J. Moreno

48
당신이 그 문장을 원인과 결과라고 언급 한 것은 저에게 불쾌한 것 같습니다. Java로 변환 = 안정성 향상? 우리는 그것이 왜 그런지 알고 있습니다. 또한 ColdFusion의 모든 경험에 대해 죄송합니다.
Jordan

3
너무 공평하기 때문에 투자자들은 올해의 맛을보고 싶어합니다. 그러나 나는 개인적으로 찾기가 쉽지 않은 고품질 Java 개발자를 제외하고 빠른 프로토 타입 개발을위한 더 나쁜 선택을 개인적으로 생각할 수 없습니다.
Erik Reppen 2016 년

9
찾기 쉽지 않은 고품질 Java 개발자 -실제로.
luis.espinal

73

FrustratedWithFormsDesigner의 답변에 추가 : 귀하의 질문이 더 작은 사이트를 목표로한다고 생각하기 때문에 많은 사람들이 고려해야 할 중요한 측면이 있습니다. 호스팅 은 PHP에는 보편적이지만 Java 또는 ASP 사이트에는 더 어렵습니다. 그러나 이것은 해당 언어의 결함이 아닙니다.


나는 이것이 바뀌 었다고 생각하지만 이제는 무료로 GAE에서 Java 웹 앱을 호스팅 할 수 있습니다.
Mahmoud Hossam

Java 호스팅의 경우 +1 ASP.Net은 찾기가 어렵고 저렴합니다. 공유 ASP.Net 호스팅 비용은 한 달에 8 달러입니다. 반면에, Java로 사이트를 만들려고했지만 Java를 실행하는 공유 호스트를 찾을 수없고 VPS를 사용해야하는 것은 학습 프로젝트에 관심이 없습니다.
Jetti

9
이것을 위해 +1. Java 용보다 PHP 용 서버에서 많은 사이트를 호스팅하는 것이 훨씬 쉽고 Java 용보다 저렴한 PHP 용 웹 호스팅 솔루션을 찾는 것이 훨씬 쉽습니다.
조나스

당신은 맞습니다 @Mark, fixed.
sebastiangeiger

1
@ Kibbee- Arvixe 그게 내가 사용하는 사람입니다. 나는이 personalASP 프로 계획.
Jetti

70

Java 현대 웹 애플리케이션 개발에 절대적 으로 사용됩니다. 특히 일단 웹 응용 프로그램 스펙트럼의 훨씬 더 크고 더 복잡하고 확장 가능한 끝에 도달하면.

현대적이고 생산적인 도구와 프레임 워크에 관심이있는 경우 다음을 살펴보십시오.

그러나 JVM 플랫폼에서 가장 현대적인 웹 개발은 Java를 직접 사용하지 않고 새로운 JVM 언어 중 하나로 수행 될 것으로 생각합니다 .Java는 단순히 기본 라이브러리 및 백엔드 인프라 측면에서 백본을 제공합니다. Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) 및 Clojure ( Noir , Ring / Enlive + lots of custom frameworks)에서 많은 웹 개발이 진행되고 있습니다.

모든 혁신이 새로운 JVM 언어 공간에서 일어나면서 개인적으로 Java가 궁극적으로 "서버 측 프로그래밍의 어셈블러"가 될 것이라고 생각합니다.


Vaadin은 인트라넷 및 대기업 응용 프로그램을 만드는 데 유용한 도구입니다. 내가 생각하는 스타트 업에는 적합하지 않습니다. 모양을 바꾸는 것이 너무 어렵 기 때문에 모양을 받아들이지 않는 한 그렇지 않습니다.
naugtur

7
합의 Java EE 6은 JSF2를 삭제하고 깔끔하고 생산적인 것을 사용하자마자 훌륭합니다. 그래도 학습 곡선은 엄청납니다 .
Craig Ringer 2018 년

1
최신 Java 웹 프레임 워크 목록에 Tapestry5 ( tapestry.apache.org )를 추가 할 수 있습니다 .
Neeme Praks 2012 년

@CraigRinger JSF는 쉽습니다. 귀하의 의견은 다음과 같이 질문 자체를 읽습니다 : 종교적
고인

@jwenting 글쎄, 3 년 이 지났 으므로 그 이후로 문서와 외부 도구 측면에서 조금 개선되었습니다. 제가 작업을 할 때 EE 6 스택에서 Glassfish 3 AS 7을 지원한다면 그것은 끔찍한 일이었습니다 .
Craig Ringer

41

Google, Amazon 또는 LinkedIn은 현대적인 것으로 간주합니까?

Java는 최신 웹 응용 프로그램에 사용됩니다. 기업 전체를 살펴보면 웹 응용 프로그램 (내부)에 가장 많이 사용되는 언어입니다.

즉, Java는 웹 개발 표준이 모든 사람에게 모든 것이되도록 노력한 기간이었습니다. "반복하지 말아라"는 자바 웹 개발의 xml 지옥과 긴 빌드주기에 대한 응답이었다. 결과적으로 Java (EJB, Struts, JSF 등)는 모든 새로운 패러다임이 극복하려고 시도한 것으로 간주되었습니다.

자바, 언어는 장황하다. 그것은 장단점입니다 (유지 보수에 좋으며 개발자에게는 짜증납니다). Java로 작성하지 않은 많은 최신 언어 기능이 있지만 코딩 시간을 크게 단축 할 수 있습니다 (속성, 이벤트, 클로저, 생성기, 목록 이해 등). 따라서 더 현대적인 언어에서 올 때 실망 할 수 있습니다. 즉, C #이되고있는 쥐 둥지가되지 않고 성숙한 언어에 추가하기가 어렵습니다.

최신 웹 개발에 사용되는 많은 언어가 동적으로 입력됩니다. 이렇게하면 코드를 작성할 때 동적으로 코드를 다시로드 할 수있는 툴링이 가능합니다 (정적 언어 인 jrebel에서는 더 어렵습니다). 웹 개발은 빠른 반복에 적합하기 때문에 동적 재로드는 큰 승리입니다. 그린 필드 프로젝트의 개발주기를 크게 줄이고 UI와 UX를 쉽게 얻을 수 있습니다 (시범 및 오류).

정적 언어도 그 자리에 있습니다. 복잡한 백엔드 로직의 경우 수년간 실행해야하며 문제없이 확장해야하며 매우 빠르며 오류가 없어야하며, 정적으로 유형이 지정된 언어 (Java 또는 C와 같은)가 선호됩니다.

또한 개발자 수 / 회전율이 증가하고 제품이 성숙함에 따라 의도가 높은 사람들이 버그를 도입 할 가능성이 높아집니다. 잘 설계된 Java 프로젝트 (인터페이스, 패턴 및 PHP 뱀파이어를위한 성수)가 시행하는 엄격하고 규율은 장기적인 위험을 줄이는 데 도움이됩니다. 이것은 단위 테스트를 통해서도 달성 할 수 있지만 정적 검사 (및 findbugs 및 clang과 같은 정적 분석기)에서 파생 된 안전망은 필기 테스트로 복제하기 어려운 기본 수준의 코드 적용 범위를 제공합니다. 틀리지 말고 단위 테스트와 기능 테스트가 있어야하지만 실제 조직은 결코 100 % 적용 범위를 달성하지 못합니다. 그들이 확인하는 것은 정적 분석기입니다.

따라서 독립적으로 개발 된 코드 덩어리간에 복잡한 상호 운용성이있는 대규모 프로젝트 (코드 크기보다 팀 크기로 더 정의 됨)에서 Java와 같은 언어가 여전히 선호됩니다. 예를 들어 금융 중개인 (중개인), 금융 거래소 (nasdaq, nyse, .net 실패 후 런던 일 수 있음), 온라인 뱅킹 (거의 모든 것), 이메일 (google), 경매 (ebay)와 같은 대규모 / 복잡한 웹 애플리케이션 등

성능 및 확장 성 측면에서 볼 때 페이스 북의 애플리케이션 파티셔닝 수에 따라 웹 애플리케이션의 확장 성과 성능이 결합 된 Java 플랫폼을 능가하는 것은 없습니다. 예를 들어 트위터는 페일 고래를 다시 바다로 내보내기 위해 자바 VM에서 스칼라에있는 루비 인프라의 많은 부분을 다시 작성해야했습니다. 다른 큰 예를 들었지만 지금 당장 나를 피합니다.

보안도 고려해야합니다. Java 브라우저 플러그인은 보안 취약점으로 인해 많은 어려움을 겪었지만 Java 플랫폼 자체는 더 안전한 플랫폼 중 하나입니다. Java 웹 응용 프로그램은 매우 안전하다는 명성을 가지고 있습니다. 코딩 관행, 라이브러리 및 아키텍처는 SQL 주입이나 버퍼 오버플로와 같은 공격을 가능하게하는 실수를 오랫동안 권장하지 않았습니다. 다른 웹 플랫폼 (레일)은 좋은 보안 평판을 가지고 있지만 Java를 능가하는 플랫폼은 없습니다.

결론적으로, 대부분의 웹 응용 프로그램은 기술적으로 간단합니다. 간단히 말해서, Java는 종종 과도하게 사용됩니다 (우리가 C로 작성했을 때와 마찬가지로) : 그러나 웹앱이 복잡하거나 (백엔드 또는 기타) 개발자가 100 명 이상일 것으로 예상되는 경우 Java를 이길 수 없습니다.

-

개인적으로, Grails는 두 세계의 장점을 모두 제공하기 때문에 Grails를 많이 사용합니다 (루비 세계에서 점점 더 인기를 얻고있는 JRuby에 대해서도 마찬가지입니다).

BTW-PHP의 부상이 정말 당황 스럽습니다. 언어로서의 PHP는 가독성의 펄과 결과 품질의 VB와 거의 같습니다. 그것은 끔찍한 관행을 장려하고 유지 관리가 불가능한 옆에 있습니다. 타사 라이브러리는 예상대로 작동하지 않으며 래리 월 (Larry Wall)을 잘 만들 수있는 구문을 가지고 있습니다. 내가 설명 할 수있는 유일한 설명은 (VB와 같은) 점진적 학습에 적합하다는 것입니다. 다시 말해, 프로그래밍 / 관리에 대해 거의 알지 못하는 유용한 무언가를 달성 할 수 있으며 한 번에 작은 덩어리로 지식을 확장 할 수 있습니다. 입양 관점에서 볼 때 많은 말이 있습니다. 그러나 회사 / MFG 세계에서 "프로그래머"가 작성한 수십억 개의 VB 앱 중 하나를 지원하거나 교체해야하는 모든 사람에게 당신은 아마 고개를 흔들고 은퇴를 계획하고있을 것입니다. :)


3
"C #이되고있는 쥐가 둥지를 짓고있다"는 점에 대해 자세히 설명해 주시겠습니까?
XåpplI'-I0llwlg'I-

1
왜 ""반복하지 말아라 "는 XML 지옥과 Java 웹 개발의 긴 빌드주기에 대한 응답이라고 말했는지 잘 모르겠습니다. DRY는 애자일 커뮤니티에서 개념으로 등장했으며, 당시 대부분은 Java 이외의 언어를 사용하고있었습니다.
Jules

38

글쎄, 나는 최근에 새로운 Spring Data 프로젝트에 정말로 흥분한 Java 사람을 만났다. DB에 대한 기본적인 CRUD 액세스를 얻는 데 필요한 코드가 거의 없기 때문이다.

몇 가지 명령으로 Rails (DB 액세스뿐만 아니라 뷰 및 컨트롤러)를 사용하여 CRUD 을 빌드 할 수 있습니다 .

(제 머리 위에 새 프로젝트, 엔티티 당 1 개의 스캐 폴드 명령, 데이터베이스를 마이그레이션하는 명령, 서버를 시작하는 명령 1 개가 있습니다.)

그것은 언어와 관련이 없으며 도구에 관한 것입니다. 그리고 동적 언어에는 많은 상용구 코드를 제거하는 도구와 프레임 워크가있는 경향이 있습니다. (우리를 위해 상용구를 생성하는 강력한 IDE의 부족을 보완하기 위해.)

또한 동적 언어는 이러한 도구와 프레임 워크를 훨씬 쉽게 작성하는 경향이 있다고 생각합니다. Spring Roo라는 코드를 grok 할 수있는 것보다 Padrino 또는 Rails (ruby web frameworks) 코드를 훨씬 쉽게 구할 수 있습니다. 그래도 Java를 아는 것보다 Ruby를 훨씬 더 잘 알고 있기 때문일 수 있습니다.


24
개인적으로 나는 동적 인 언어를 좋아하지 않습니다. 정적 언어는 IDE에서 모든 유형 오류를 빠르게보고 리팩토링 도구를 사용할 때 생산성을 향상시킵니다. Ruby on Rails에서 영감을 얻은 Java 웹 프레임 워크 인 Play Framework를 살펴보고 Java로 생산성을 높일 수 있습니다.
조나스

4
레일과 같은 강력한 프레임 워크는 무언가 잘못 구현 된 경우 해당 컴포넌트가 프레임 워크에 너무 빡빡하기 때문에 대부분의 사람들이 다른 것으로 대체 할 수 없음을 의미합니다. Java의 경우 최대 절전 모드가 마음에 들지 않으면 카이엔 또는 JPA와 같은 다른 것을 사용할 수 있습니다.
Coyote21

2
장고와 싸우는 누군가로서, 코요테 21은 절대적으로 옳습니다. 기본 CRUD를 5 분 안에 시작할 수 있지만 두 번째로 비즈니스 로직을 추가하기 시작합니다 (이 레코드가 업데이트 될 때이 테이블에 레코드를 삽입해야하며 ...). CRUD에 문제가 있습니다. .
asthasr

Rails에 있지만 Java가 필요한 경우 Seam Forge를보십시오. JSF2를 사용한다는 점에주의하십시오.
Craig Ringer 2018 년

당신이 분에 루를 사용하여 자바에서 CRUD 애플리케이션을 구축 할 수 있습니다 (아직 정확히 자바,하지만 JVM) Grails의와 같은 일이 ...하지만 어디로 1.0 발전기 / 비계, 궁금했던 플레이
에 란 메단

24

최근 몇 년 동안 Java는 "기업"으로 자리 매김했습니다. 스타트 업이 필요로하는 스펙트럼의 다른 측면에 있습니다. 웹 응용 프로그램 개발에는 고통없는 데이터베이스 액세스, 훌륭한 문자열 조작, 구문 설탕 및 앱에 필요한 수많은 작은 변경을 수행하는 빠른 반복 프로세스의 4 가지가 필요합니다.

우선 순위 목록에서 성능, 확장 성 및 안정성이 약간 떨어집니다.

또한 Java는 코드 작성이 매우 좋지 않은 언어입니다. 어제 스위치 문에서 문자열을 사용할 수있는 혁신적인 기능을 얻었습니다. 그리고 자바 스크립트는 매우 해커 언어이므로 프론트 엔드를 개발 한 후 자바로 돌아올 때 매우 제약을 느낍니다.

그래서 이것이 웹 스타트 업이 자바를 피하는 이유라고 생각합니다.


12
고통없는 DB 액세스? Spring JDBC 또는 Hibernate는 훌륭하게 작동합니다. 훌륭한 문자열 조작? 모든 프로젝트에서 문자열 조작이 5 % 이상이라고 생각하지 마십시오. 구문 설탕? 그게 무슨 뜻입니까? 빠른 반복 프로세스? Java에는 있습니다 (Eclipse 내부의 Tomcat은 고통스럽지 않습니다). 자바 불행? 간결한 익명 클래스 / 람다 등이 누락 된 것입니다. 다른 언어의 "재미있는"기능은 난독 화되어 덜 명확 해집니다. 스위치의 문자열 ... 예, 짜증나는 것을 인정해야합니다 (그러나 대부분의 경우 열거 형을 사용해야합니다).
alex

4
@alex : Syntax sugarJava는 실제로 DSL에 사용할 수 없습니다. 예를 들어 Play의 구성 및 경로 파일은 Java 파일이 아니며 django의 settings.py 및 urls.py보다 적은 외래 구문입니다. 리스트 이해력 없음; 중요한 데이터 유형 (예 :지도, 목록)은 기본적으로 가져 오지 않습니다. 관용구 파일 당 하나의 파일이 실제로 방해가됩니다. Java API는 불필요하게 장황한 경향이 있습니다. 또한 GET / POST 매개 변수에서받은 문자열을 전환 할 때 열거 형을 사용할 수 없습니다.
Lie Ryan

4
@alex 재미있는. C #의 모든 곳에서 제네릭을 사용하는 경향이 있습니다. 외부에서 보더라도 람다의 기능이 향상 되었기 때문일 수 있습니다. 따라서 IRepository<T>와 함께 사용할 수 있습니다 IQueryable<T> Where(Expression<Func<T, Boolean> Expression). 람다를 얻을 때 Java에서 더 인기를 얻게 될지 궁금합니다. 아마 편안한 지역 일 것입니다. 그러나 Java는 장황한 느낌입니다. 그리고 나는 2 개의 부품이 함께 맞지 않을 것이라는 보장없이 50 가지 유형의 자동차를 만들 수있는 비트를 제공받은 것과 매우 흡사합니다.
기본

3
두 사람이 Eclipse 내부의 Tomat이 고통스럽지 않고 Java 개발을 효율적으로 만든다고 주장했다고 ​​믿을 수 없습니다. 각 개발주기가 훨씬 빨라지지만 반복적으로 새로 고침, 재구성, Tomcat 정리, 재배포, 다시 시작 및 때때로 Eclipse 다시 시작 및 이전 단계 반복을 포함하여 매일 유지 관리가 필요하다는 것을 알았습니다. 내 차에 그렇게 많은 유지 보수가 필요한 경우, 나는 일을하지 않을 것입니다.
Brandon

1
@Brandon 나는 그것을 두 번째로 할 것이다. 한 번도 Node 또는 Python / Django의 구성 문제로 어려움을 겪지 않았습니다. RoR에 대한 인내심을 잃습니다. 우리의 Ant / Mvn / Spring / Hibernate / eclipse 의존성 라이드 Java 코드베이스는 코드에 도달하기 전에 깨어있는 악몽입니다.
Erik Reppen 2016 년

18

저는 현재 "저는 Java를 싫어합니다"개발자가있는 회사에서 일하고 있습니다. 나도 놀랐어요. Java와 함께 사용할 수있는 모든 기술이 싫습니다. 이것은 의사 결정을 너무 어렵게 만듭니다. 선택의 폭이 너무 넓 으면 선택의 여지가 없습니다. 실제로 당신에게 맞는 프레임 워크를 만들기 위해 100 가지 프레임 워크로 시간을 보내야합니다. 표준 Servelt 아키텍처는 대부분의 응용 프로그램에서 복잡합니다. 루비, 장고 등은 그렇지 않습니다. 언어보다는 단일 프레임 워크에 가깝습니다.

개발자로부터 가장 큰 불만

  1. 구문이 너무 깁니다. 무언가를 인쇄하기 위해 System.out.print를 작성해야합니다. 실제로 편집기와 같은 간단한 VI를 사용하고 몇 시간 안에 작동하는 코드를 작성할 수 없습니다.
  2. 테스트 프레임 워크가 약합니다. 테스트 프레임 워크는 Java와 Ruby에서 매우 유사하지만 Ruby는 테스트를 위해 쉽게 사용할 수있게함으로써 한발 앞서 나아갑니다. 애플리케이션에서 DB를 광범위하게 사용하는 경우 특히 그렇습니다. 많은 웹 프레임 워크조차도 테스트에 대해 생각하지 않습니다.
  3. 템플릿은 고통입니다. 비교적 간단한 언어를 국수로 만듭니다.
  4. 쿨하지 않아. 대부분의 Java 응용 프로그램은 개발자와 잘 어울리지 않는 관료주의와 관련된 대기업에서 작성되었습니다. 사람들은 자바를 생각할 때 구글을 생각하지 않습니다. 구글 == 파이썬. 또한 Y 일에 X를 표시하는 책이 나오지 않는 많은 일을해야합니다.
  5. 컴파일하고 싶지 않습니다. 대부분의 개발자에게 컴파일은 10 년 전의 현상입니다. 80 년대에는 C를 사용하는 것이 합리적이지만 mordern 컴퓨터는 훨씬 더 많은 일을 할 수 있습니다. 컴파일 된 언어로 코드를 작성하지 않습니다. Java는 컴파일되어 웹 응용 프로그램을 작성하는 데 사용되는 매우 적은 언어 중 하나입니다.
  6. 죄송합니다 개념이 너무 많습니다. 개발자가 조용히 Oops 도메인을 채택했지만. 그들은 그것을 완전히 좋아하지 않습니다. 각 클래스가 한 가지 작업을 수행하는 10 개의 클래스로 응용 프로그램을 작성할 때는 마음에 들지 않습니다. 100 개의 파일을 열고 100 개의 클래스에서, 때로는 프레임 워크와의 상호 작용을 상상할 수 있습니다. 전체 프로그래밍 활동을 집안일로 만듭니다. 이것은 대부분의 언어에서 사실 일 수 있지만 Java 개발자는 클래스의 기능에 많은주의를 기울이는 것을 보았습니다. 종종 100 개의 클래스가있는 코드를 만드는 Java 개발자입니다. 이것은 많은 관점에서 좋지만 Java 개발자가 아닌 사람은 싫어합니다.

따라서 모든 Java에서 프로젝트 시작시 가파른 곡선을 적용하므로 커밋하기에는 너무 많은 돈이 필요합니다. 이것에 Java에 연결된 거대한 커뮤니티를 추가하십시오. 각각 다른 방식으로 생각하고 아무도 전체 커뮤니티를 이끌지 않습니다. 그들은 또한 지역 사회가 진행하는 회담과 회의가 모든 멋진 새 것을 보여주지 않습니다. 새로운 멋진 책이 없습니다. 몇 년 전에 너무 많은 다른 문제를 해결하는 데 사용 되었기 때문에 Java가 다운 된 것처럼 보입니다.


(2)는 JBoss Arquillian ( arquillian.org )에 의해 훌륭하게 해결되었습니다 . 나머지는 Java 문제보다 JSF2 문제입니다. 가장 큰 문제 IMO는 학습 곡선과 프레임 워크의 거대한 버그를 배우고 있지만 JSF2를 피하면 잘 할 수 있습니다.
Craig Ringer 2018 년

5
나는 OOP를 좋아한다. 또한 OOP를 알고 있기 때문에 대다수의 Java 개발자가 너무 많은 일을하고 있다는 데 동의하지 않습니다. 클래스를 작성할 수 있지만 코드가 여전히 얽힌 스파게티 엉망이라면 실제로 수행 한 모든 것은 간단한 함수 또는 구조체뿐만 아니라 무의미한 구조로 래핑 된 절차 적 코드를 작성하는 방법 (콩)을 찾는 것입니다.
Erik Reppen

2
"사람들은 자바를 생각할 때 구글을 생각하지 않습니다." ... Google에 대해 생각할 때 Android와 Dalvik VM (Java VM)에 대해 확실히 생각합니다. 또한 GWT (자바에서 JavaScript 자동 생성)와 같은 멋진 것들에 대해서도 생각합니다. Java에 "높은"회사가 하나 있으면 Google입니다. 애플이나 마이크로 소프트보다 훨씬 더. 물론 Oracle과 IBM은 Google보다 Java와 더 관련이 있지만 여전히 Java VM에서 Java 앱을 실행하는 수십억 대의 Android 장치는 매우 강력한 Google / Java 링크를 설정하지 않으면 생각하기 어려운 것입니다.
세드릭 마틴

이 의견에서 @CraigRinger에서 JSF2에 대한 많은 증오. :-) 당신을 자극하는 것은 무엇입니까? 나는 시작하기가 복잡하다는 것을 알았지 만 일단 시작하면 좋아 합니다. 물론, 나는 그 전에 Spring을 사용하고 있었으므로 다른 것들은 개선처럼 보일 것입니다 ... :-)
Brian Knoblauch

1
Java의 OOP 개발자이며 개발자에게 OOP의 이점을 과장 할 수 없습니다. 예, 개발하는 동안 시간이 조금 더 걸리지 만 버그 속도가 낮고 읽기 쉽고 코드를 쉽게 유지 관리하는 것이 좋습니다. OOP를 올바르게 수행하면 단위 테스트가 훨씬 쉬워진다는 것은 말할 것도 없습니다.
IntelliData

14

Java 웹 개발을 수행하기위한 프레임 워크는 상당히 많은 학습 곡선을 가지고 있으며, 종종 필요한 것에 과도하게 사용되며, 작업을 수행하는 데 필요한 많은 간접적 인 지시는 단지 고통 스럽습니다.

나는 스프링 / 자바 개발을 한 회사에서 일했고, 프레임 워크가 번거 롭다는 것을 알게되었다. Struts 개발에 익숙한 친구가 있고 Struts가 더 나쁘다고 생각한 것을 제외하고 Spring의 프레임 워크에 대해 말할만한 유쾌한 것들이 없습니다. 웹 프레임 워크는 데스크톱 응용 프로그램이나 모바일 (예 : Android) 응용 프로그램을 수행하는 것과는 전혀 다르며 실제로 이해하는 데 시간이 걸리는 매우 추상적 인 아이디어가 많이 있습니다 (물론 확실하다면 많은 힘과 기능을 제공합니다) '전문가이며 엔터프라이즈 급 앱과 같이 정말 복잡한 일을합니다). 모바일 또는 데스크톱 장치 용 Java 프로그래밍을 좋아하지만 웹 앱용 Java 프로그래밍을 좋아합니까? 별로.

Ruby / Rails에서 개인적으로 프로그래밍을 한 적이 없지만 Struts를 사용했던 친구는 이제 Ruby 웹 프로그래밍을 수행하고 있으며 Java 웹 프로그래밍에서 수행하기 어려운 작업은 코드와 복잡성이 훨씬 적습니다. 루비. 다른 구문과 언어 규칙에는 확실히 학습 곡선이 있지만, 프로토 타이핑 앱의 경우 원하는 결과를 달성하는 데 필요한 코드 양 측면에서 이점이 있습니다. 다른 사람들이 언급했듯이 확장 성은 고려해야 할 문제이며 더 성숙한 앱이 더 진보적 인 언어로 자주 보이지 않는 이유 중 하나입니다.


프레임 워크 오버 킬의 경우 +1 그것의 미친, 봄 j2ee maven 개미 동면, 당신은 XML 구성을 작성하는 데 모든 시간을 보내고 있습니다.
Richard

1
프레임 워크 +1 원래의 프레임 워크는 P ** s Poor (JSP, STRUTS)를 시도했을뿐 아니라 RoR뿐만 아니라 어느 쪽도 효과가없는 것을 선택할 수 있습니다.
제임스 앤더슨

프레임 워크 만이 아닙니다. 말이 안되는 것들에 대한 외설적 인 수준의 적합성입니다. 많은 속성을 노출하면 잘못하고 있음을 의미합니다. 바닐라 게터와 세터를 때리는 것은 무의미한 메소드 호출을 추가하고 아무것도 변경하지 않지만 Java 개발자는 객체와 같은 객체에서 속성을 매달려 버리지 않습니다. 커뮤니티는 이미 수행하고있는 것보다 더 잘못되었다는 것을 커뮤니티가 강화하기 때문입니다. 그러나 진지하게, 코드 대신 XML은 ... 어떻게 5 분 이상 지속 되었습니까?
Erik Reppen 2016 년

14

비용과 추세에 따라 달라집니다. Web 2.0 Startup은 돈보다 더 재능이 많은 30 세 미만의 비전가에 의해 만들어졌습니다 (물론 일반화하고 있지만 이것이 "평균"입니다). 그는 프로그래밍을하고 있기 때문에 (몇몇 친구들과 함께) 자신이 익숙한 언어를 사용할 것입니다. 그는 아마도 독학 프로그래머 일 것입니다.

Java는 엔터프라이즈 환경을 대상으로합니다 (Java에서는 언어, 프레임 워크 및 표준을 의미 함). 전세계의 IBM, Oracle 및 BEA가 엔터프라이즈를 판매하기를 원하는 고가의 도구가 많이 있습니다.

Java에 능숙 해지는 단계는 복잡하고 비싸다. 풍경이 바뀌고 있지만 너무 늦습니까?

스타트 업이 끝나면 견인력이 커집니다. 유능한 개발자를 모집하는 것은 어렵습니다. 대부분의 "6 주 만에 프로그래머가되었습니다"프로그램은 Java (또는 .NET)를 가르치고 시장은 "6 주 프로그래머"로 포화 상태입니다 (이상하게도 6 년의 지식을 보여주는 7 년의 경험을 가진 이력서를 가진 개발자들을 보았습니다. 주 프로그래머). 비주류 비 엔터프라이즈 환경을 사용하는 것은 6 주간의 프로그래머에게는 자연스러운 필터 일 수 있습니다. 직무 요건을 벗어난 Ruby 또는 Scala를 배우려면 헌신과 개인적인 투자가 필요합니다. 이것은 후보자 에게 가장 큰 잠재력 을 나타내는 지표 입니다.

지식은 경험과 함께 제공되지만 헌신적이고 열정적 인 프로그래머는 헌신 / 열정이없는 사람보다 더 빠르게 (평균적으로) 지식을 얻습니다. 기타를 좋아하는 아이처럼 아빠가 그를 만들어서 레슨을받는 아이보다 더 빨리 나아질 것입니다.


나는 이것이 정말로 좋은 점이라고 생각합니다. +1
sfrj

1
나는 다음과 같은 단락에 동의하지 않습니다. 그는 아마도 스스로 가르치는 프로그래머 일 것입니다. 요즘은 30 년대의 대부분의 사람들이 유능한 프로그래머이며 최소한 학위를 가지고 있습니다.
Coyote21

1
??? 저는 프로토 타입 웹 스타트 업을 그렸습니다. 나는 그들이 유능한 것에 대해 아무 말도하지 않았다. 동시에 독학하고 유능 할 수 있습니다. 당신이 동의하지 않는 것이 확실하지 않습니다.
Michael Brown

1
이것은 나의 대답이되어야했다. Java는 유능한 개발자가이를 선택하여 사용할 수 있도록 설계되지 않은 유일한 최신 웹 기술입니다. 답의 두 번째 부분은 Paul Graham이 The Python Pardox
user16764

14

자바가 너무 복잡하다. 나는 많은 PHP 작업을 수행하며 대부분의 상황에서 더 쉽고 빠릅니다. 서버에 SSH로 연결하여 PHP 파일을 열어 변경 사항을 저장하고 완료하는 기능은 훌륭합니다. 내가 작업 한 일부 Java 앱은 가장 간단한 변경을 위해 항상 다시 시작해야했습니다. (항상 내가 말한 것에 대한 것은 아닙니다). 또한 PHP 호스팅은 저렴하고 쉽게 이용할 수 있습니다.

또한 적어도 PHP로 가지고있는 것은 14/15 년 전에 정적 HTML로 시작한 것을 좋아하는 많은 개발자라고 생각합니다. 작업이 진행됨에 따라 쉽고 간단하고 저렴한 PHP를 사이트에 추가하기 시작했습니다. 수년에 걸쳐 언어는 성장하고 겸손한 시작을 넘어서는 능력을 확장했으며 이제는 실제로 많은 것이 아니라고 생각합니다.

반대로 대부분의 PHP 개발자는 Java 가이 거대한 지나치게 복잡한 800lb 고릴라로 알고 있습니다 .18 휠러 세미 트럭을 꺼내서 식료품 가게로 운전하여 빵 한 덩어리를 얻는 것과 거의 같습니다.

나는 자바를 배우려고 노력했습니다. Java가 매우 긴 바람과 손목 터널을 유도 한 첫 인상이었습니다. 또한 시작하여 Java 베테랑에게 쉬운 것처럼 보이는 많은 질문이 나에게 떠났습니다. OpenJDK 또는 Sun? 톰캣, 아니면 글래스 피쉬? 또한 Java 책에 대한 모든 소개는 명령 줄에 대한 코드 작성을 시작하는 것으로 보입니다. 요즘 대부분의 사람들이 스누즈 페스티벌이라고 생각합니다.


3
PHP의 9000 개가 넘는 내장 메소드에 대해 더 많은 선택과 약간의 복잡성을 취할 것입니다.
Kaleb Brasee

1
PHP는 설정이 매우 쉽습니다.
Barfieldmv

9
그러나 좋은 코드를 작성하기가 너무 어려워서 설정하기 쉽고 시작하기 쉽고 언어를 선택하는 데 지루하지 않아야합니다. 좋은 프로그래밍은 훈련, 인내와 노력이 필요합니다 ... 선택하는 동안 프로그램이 없다면 나쁜 징조입니다 ...
alex

둘 다 악취가 없지만 하나는 다른 것보다 훨씬 더 많은 PITA입니다.
Erik Reppen

12

우리 팀과 저는 현재 Java 6 + Stripes에서 그린 필드 웹 애플리케이션을 개발하고 있습니다. 작년에 나는 Java 6 + Stapler (Hudson / Jenkins 명성의 Kohsuke Kawaguchi가 개발 한 다소 알려지지 않은 웹 프레임 워크)를 사용하여 또 다른 그린 필드 웹 애플리케이션을 작업했습니다.

Java는 현대 웹 개발에 절대적으로 사용됩니다. 확실히 루비 나 다른 동적 언어에 대한 "섹시한"매력은 없지만, 프로젝트가 확장되기 시작하면 동적 언어가 좋은 것이라고 확신하지 못합니다.

최신 Java 앱 서버는 성능 측면에서 ASP.NET과 매우 경쟁력이 있으며 둘 다 내가 아는 동적 언어 VM보다 훨씬 빠릅니다.

오해하지 마세요 ... 제가 자바는 말을하지 않을거야 항상 (!하지 원격으로) 최선의 선택 -하지만 둘 것은입니다 항상 잘못 또는 "오래된"선택.


1
나는 "빠른"에 동의하지 않는 경향이 있습니다. 이론적으로는 거기에 있지만 거대한 PHP 사이트가 있으며 성능 문제에 대한 거의 모든 일화는 MySQql 또는 기타 기본 데이터베이스와 관련이 있습니다. 반면에 거의 모든 J2EE 앱은 성능이 수용되기 전에 필요한 광범위한 조정과 접촉했습니다.
제임스 앤더슨

1
@ 제임스 : 모호한 일화 외에 그것을 뒷받침 할만한 일이 있습니까? 상위 10 개 웹 사이트는 모두 관리 플랫폼 (Amazon on Java, Scala IIRC의 Twitter, Java 및 C ++의 사용자 정의 백엔드의 Google)에서 실행되거나 고도로 사용자 정의 된 인프라 (Facebook 및 Wikipedia는 PHP를 사용하지만 둘 다 속도를 위해 엄청난 양의 사용자 정의 네이티브 코드가 있습니다. Java는 벤치 마크에서 동적 언어보다 정기적으로 성능이 뛰어납니다. 나는 자바 열광자가 아니지만 성능은 Java의 문제가 아닙니다.
Daniel Pryden

Java 자체에는 "C만큼 빠르지는 않지만 다른 것보다 빠른"성능 문제는 없습니다. 그러나 J2EE, 프레임 워크, ORM, 의존성 주입, 오버 킬 디자인은 거의 수행되지 않습니다. 숨겨진 병목 현상과 예기치 않은 상호 작용의 가능성이 너무 많습니다
James Anderson

1
@Basic : 요점이 뭐예요? 모든 언어에 대해 깨진 라이브러리와 프레임 워크가 많이 있습니다. 그렇습니다. 많은 내용이 있고 구식 문서가 있지만 그다지 드물지 않습니다. 반대로, Java를위한 환상적인 라이브러리, 프레임 워크 및 도구가 있습니다. 모든 응용 프로그램마다 하나의 종단 간 프레임 워크가 있어야한다고 제안하려고 진지하게 노력하고 있습니까?
Daniel Pryden

1
@Basic : 무엇에서 거꾸로? 이 답변을 처음 작성한 후 1 년 반 만에 저는 현재 Google에서 일하고 있으며 현재 Java가 Google의 웹 애플리케이션 개발에 매우 ​​많이 사용된다는 것을 확신 할 수 있습니다. 물론 Google의 요구는 다른 많은 회사의 요구와는 매우 다르지만 올바른 라이브러리와 프레임 워크를 사용할 때 Java는 전적으로 다른 짐승입니다. GWT, 프로토콜 버퍼 등).
Daniel Pryden

12
  1. Java는 PHP / Python / Ruby보다 배우기가 더 복잡합니다
  2. 자바 생태계는 매우 복잡하고 초보자에게는 매우 혼란 스럽습니다.
  3. java와 관련하여 부정적인 평판을 얻은 역사적으로 나쁜 프레임 워크가 많이 있습니다. 시간을 낭비하지 않도록하는 프레임 워크를 알아야합니다.
  4. Java 빌드 도구는 복잡합니다 (maven & ant)
  5. Java에는 사용하기 쉬운 모듈 시스템이 없습니다 (OSGI는 너무 복잡합니다)
  6. 놀라운 기능을 갖춘 매우 강력한 Eclipse와 같은 Java IDE는 많은 경험없이 효과적인 웹 개발을 위해 구성하기 어렵습니다.
  7. Tomcat 또는 Jetty 이외의 것을 서버로 사용하는 경우 WebSphere / WebLogic / JBOSS의 시작 시간이 길어질 수 있습니다.
  8. Java EE는 분산 트랜잭션과 같이 많은 사람들이 갖지 못한 문제를 해결합니다.

전문 개발을 시작한 새로운 개발자는 레일, 파이썬 또는 PHP보다 Java가 Magnitude의 차수를 찾기가 어려워서 배우기 쉬운 것에 갈 수 있습니다.

위에서 언급 한 바와 같이, 올바르게 구성된 Java 개발 환경 이 작동하기에 생산성이 높기 때문에 시작에 Java를 사용하기로 결정 했습니다. 올바르게 구성된다는 뜻입니다.

  1. 시작 시간 10 초 미만
  2. 모든 프레임 워크를 정리하고 구성한 이클립스 작업 공간을 올바르게 구성
  3. 다양한 라이브러리 선택 (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity 등)
  4. SSD가 장착 된 빠른 개발자 머신
  5. 오리 엘리 사파리 가입

8
그래도 명확하게합시다. Java 언어는 배우기가 어렵지 않습니다. 그것은 PITA 인 Java의 단점을 보완하기 위해 Java와 함께 구축 된 모든 쓰레기의 층입니다. 배우다.
Erik Reppen

2
@ErikReppen 매우 사실입니다. Java 프로젝트에서 작업해야하지만 .Net에 대한 배경 지식이 있습니다. 내가 겪은 모든 것이 이해하기 쉽게 언어와 구문이 있습니다. 정말 나를 미치게하는 것은 장황하다. 한 줄에 익숙한 것은 이제 5-10과 XML 구성 파일 편집이 필요합니다. 말할 것도없이, 시간을 읽는 데 몇 시간을 소비하지 않고, 작업에 대한 "올바른"프레임 워크를 고르는 것은 악몽입니다. ​​이는 시나리오가 최우선 사례로 간주되고, 지원되지 않으며, 마음에 들지 않는 경우입니다 다시 작성하십시오. 문제를 해결하기 위해 시간을 보내고 싶습니다.
Basic

"자바는 더 복잡하다"- 누구도 PHP의에 대한 매개 변수 명령 기억 strpos또는 in_array? 그리고 PHP의 XML DOM 인터페이스는 말도 안됩니다 (문자열로 캐스트 속성을 검색 하시겠습니까?). OSGi는 절대적으로 훌륭하고 언어 독립적입니다.
jevon

@ jevon : PHP 문서는 매우 훌륭하며 IDE는 어쨌든 나에게 상기시키기를 열망합니다. 또한 SimpleXML.
DanMan

12

약 5 년 전, 저와 동료는 내부 프로젝트를위한 프로그래밍 작업을 받았습니다. 명령 구문 분석이 필요한 간단한 작업입니다.

나는 약 80 줄의 자바 코드로 전체를 생각해 냈고 동료는 일주일에 20 개의 자바 클래스와 훨씬 더 많은 자바 코드를 사용하여 동일한 작업을 수행했습니다. 말할 것도없이 그의 코드는 골랐다.

이것은 나를 궁금하게했다. 어디에서나 복잡성이 높이 평가되었습니다. (저는 가장 큰 소프트웨어 제품 회사 중 하나에서 일하고있었습니다.) Java는 선택 도구였으며 디자인 패턴은 코딩 방법이었습니다.

이제 단순성을 거부하는 것은 사고 방식이나 오만입니까? 저는 항상 상식이 우선해야한다고 생각했습니다. 기업이든 간단한 웹 애플리케이션이든 기본 사용 사례는 동일합니다. 정확하고 검증 가능해야합니다.

몇 가지 이유로 더 이상 Java를 사용하지 않습니다. 그러나 복잡성이라는 요소 중 하나는 소프트웨어 개발과 관련하여 수많은 Java 개발자가 선호하는 사고 방식입니다.

동적 언어를 확장하는 데있어 JVM은 수십 년의 연구 결과입니다. 루비 등에 대해서도 마찬가지입니다.

스칼라는 내가 찾은 언어 중 하나는 매우 영리하고 실용적입니다. 놀이! Scala는 웹 / 엔터프라이즈 응용 프로그램 개발에있어 뛰어난 성능을 발휘합니다.

신생 기업을위한 새롭고 빛나는 루비와 레일즈는 탄탄한 레일스 개발자를 고용하기가 매우 어렵습니다. 실제로는 모든 스타트 업에 방해가되는 반면, 많은 Java 개발자는보다 비즈니스 적으로 이해해야합니다.


나는 자바 팬이 아니지만 당신이 말하는 "복잡성"은 추상화 된 것일 수도있다. 추상화는 테스트와 유지 관리 성 (보통에 사용되는 경우) 모두에 매우 유용합니다. 코드를 비교할 수없는 것은 말할 것도 없다
Basic

11

에서 최근의 인터뷰 와 요셉 Snarr, 구글의 기술 리더 플러스 응용 프로그램이 프론트 엔드에서 백 엔드와 자바 스크립트를 자바 서블릿을 사용하는 방법을 설명했다.

따라서 귀하의 질문에 대답하기 위해 Java는 여전히 최신 웹 개발에 사용됩니다. 최근에 많은 인기를 얻은 스타트 업에게는 적합하지 않습니다.

많은 신생 기업이 다른 기술을 사용하는 이유는 더 섹시하고 기술을 공개적으로 공개하기 때문입니다.


4
신생 기업은 다른 기술을 사용하고 있습니다. 나중에 요 그리고 그들은 30 명이 아닌 3 명 정도가하게되었습니다.
Erik Reppen

인용하는 사람은 자신의 견해와 선택 사항 만 제공 할 수 있지만 자신이 선택한 것이 올바른 결정인지 확인하지는 않습니다.
DivKis01

9

웹 개발과 Java에 대해 언급 했으므로 많은 사람들이 처음에는 웹 브라우저에서 Java 애플릿을 사용하는 것이 잘 수행되지 않았을뿐만 아니라 애플릿의 "샌드 박스"가 완전히 개발되지 않았고 보안 문제가 있음을 잊어 버리는 경향이 있습니다. Java 애플릿이 브라우저에서 실행되고 로컬 머신 데이터 (일명 클라이언트 측 보안 문제)에 액세스 할 수 있습니다. 물론 Java는 백엔드 및 독립 실행 형 응용 프로그램에서 견고했지만 Java와 언어를 Java 애플릿 (브라우저에서 실행)과 연결하면 웹 개발 구성 요소로서 Java에 대한 인식이 다소 떨어졌습니다. 나는 그들이 그로부터 회복했다고 생각하지 않습니다.


9
절대적으로하지! 실제로 Java는 서버 측 세계에서 지배적 인 언어입니다. 애플릿은 약 10 년 전에 소멸되었습니다.
Chiron

5
Flash는 애플릿이 시도한 것을 수행했습니다. 빠른 시작, 빠른 다운로드, 적은 메모리 공간.

4
Java와 Javascript를 구분할 수없는 많은 사람들을 알고 있습니다. 그들은 완전히 관련이 없지만. 이것은 Java에 나쁜 이름을 부여하는 또 다른 것입니다.
Kibbee

5
@Kibbee ... 또는 그것은 자바 스크립트에 나쁜 이름을 준다 :)
Matthew Schinckel

9

문제는 "스타트 업이나 소규모 프로젝트에 Java를 사용하지 않는 이유는 무엇입니까?"입니다. "현대 웹 앱"에 Java가 사용되었습니다. Google에서는 많은 서비스에 대해 백엔드에서 Java를 사용하고 프론트 엔드에 클로저 컴파일 된 JS 또는 GWT를 사용합니다. 문제는 속도 대 규모 중 하나입니다. 스타트 업은 가능한 최소한의 제품을 사용해야합니다. 이들은 보통 1-3 명의 엔지니어로 구성된 소규모 팀이며 성능 또는 유지 관리성에 비해 반복 속도를 중요하게 생각합니다. 확장 성 문제 또는 팀 코드 코드 유지 관리 문제에 대비하는 것은 "원하는"문제입니다. 즉, 해당 단계에 도달 할 때 초기 구현으로 인해 고객을 확보하거나 투자. 이 시점에서 앱을 다시 작성할 수 있습니다.

Google과 같은 회사는 손실을 흡수 할 수 있기 때문에 사용자를 확보 할 수없는 것에 대한 확장을 구현하는 데 시간을 낭비하더라도 고급 확장을위한 사치 구축을 감당할 수 있습니다.

적어도 많은 "쿨", "힙", "현대"회사들이 반복 속도와 단순성이 가장 큰 요구 사항 인 소규모 팀과 함께 작은 앱을 구축한다고 생각합니다.


1
스타트 업이 Java를 사용하지 않는다는 소스는 어디에 있습니까? 몇 가지 사실로 가정을 백업하십시오.
Walter

7

Java의 전통적인 웹 응용 프로그램은 잘 구조화되어 있지만 "빠른 개발"과는 거리가 멀습니다. 필자는 완전한 웹 응용 프로그램 (Java / Tomcat / Struts)을 하나만 작성했지만 매우 까다 롭고 디버깅에 예상보다 오래 걸리며 비즈니스 로직 계층을 구현할 때 일반적으로 고통 스러웠습니다. Java의 잠재적 방어에서는 Java로 작성된 유일한 웹 응용 프로그램이었습니다 (Java로 시스템 수준 응용 프로그램을 프로그래밍하는 데 익숙하지만). 두 번째로 다른 웹 응용 프로그램을 약간 더 빨리 작성할 수 있다고 생각합니다.

필자는 PHP와 C #으로 응용 프로그램을 작성했으며 더 잘 작동하며 Java보다 훨씬 관대합니다. 그 이상으로 Ruby on Rails는 빠른 애플리케이션 개발을 위해 특별히 작성되었으며 Robbie와 마찬가지로 데이터베이스에 대한 쉬운 CRUD 액세스를 허용합니다. 문제는 독자적으로 개발할 대부분의 웹 사이트에는 Java가 제공하는 (사용자가 수행해야하는) 수준의 사용자 정의가 필요하지 않다는 것입니다. 또한 모든 DB 연결 개체는 직접 작성해야하며 템플릿 화가 쉽지 않습니다. 더 나은 프레임 워크가있을 수 있습니다. 특히 Java 7의 새로운 동적 언어 지원 기능을 활용하는 프레임 워크가있을 수 있지만 아직 연구를 수행하지 않았습니다.


3
당신은에보고해야 플레이 프레임 워크 는 자바 생산성을하고 레일에 루비에 의해 영감을 자바 웹 프레임 워크의를.
Jonas

2
@Jonas,이 모든 것을 간결하게 설명하는 좋은 블로그 게시물을 작성해보십시오.

@ Thorbjorn이 말한 것을 @Jonas! 나는 그것을 철저히 읽었습니다. :)
Brian

@ Thorbjørn : 블로그가 없습니다. 한마디로 : Play Framework를 사용하면 Java 소스 코드를 저장 한 다음 웹 브라우저를 업데이트하면됩니다. 코드는 Eclipse 컴파일러를 사용하여 서버 측에서 자동으로 컴파일됩니다. JPA는 데이터베이스 액세스에 사용됩니다. 여기에 관한 기사가 있습니다 ! 프레임 워크 사용성
Jonas

2
@ Thorbjørn & Brian : 플레이 프레임 워크 웹 사이트의 첫 페이지에있는 비디오를 보시면 아주 좋게 설명하겠습니다.
Bjarke Freund-Hansen

7

간단한 대답 : 생산성 향상을위한 학습 곡선.

RoR과 같은 프레임 워크 기반 시스템은 언어 / 구문에 "마법"을 넣는 경향이 있습니다. 기본 RoR 구문을 강화하고 앱을 시작하고 진행하는 것은 매우 쉽습니다.

Java는 먼저 언어였으며 나중에 도구와 프레임 워크가 나타났습니다. 따라서 Java를 먼저 배우고 Spring, Grails 또는 수퍼 IDE 등을 배워야합니다. 루비가 가장 좋아하는 예제로 세터와 게터가 필요하지 않습니다. 사실, Java IDE는 수동 코딩도 제거했지만 여전히 소스에 있습니다. 이 접근법의 장점은 프레임 워크 아래에 모든 Java 개발자가 작업 할 수있는 언어가 있다는 것입니다.

이 혜택은 시간이 중요한 소규모 신생 기업에게는 모호합니다. 일반적으로 그들은 즉시 사용 가능한 프레임 워크로는 할 수없는 일을 거의하지 않습니다. 그래서 그들은 선택한 RAD 시스템을 잡고 다음날 앱을 사용할 수 있습니다.

그러나 Facebook과 Twitter가 확장되면서이를 살펴보면 기본 프레임 워크로는 처리 할 수없는 것을 발견하여 더 낮은 수준의 기술을 사용해야했습니다.

프레임 워크 개발자가 빠른 작업을 수행 할 수 있다는이 거룩한 전쟁은 가짜이며, 학습 곡선을 줄이면서 더 간단하고 필요한 것을 많이 할 수 있습니다. 그리고 많은 것들에 대해, 그것은 "충분히 좋습니다". 문제에 맞는 것을 사용하십시오.


6

"현대 웹 응용 프로그램 개발"을 정의하는 방법에 따라 다릅니다. 시작, 빠른 처리 웹 사이트를 이야기하는 경우 해당 용도로 설계된 언어와 프레임 워크를 고려해야합니다. 안정적이고 확장 가능한 엔터프라이즈 급 웹 개발을 찾고 있다면 그러한 이상을 지원하는 언어와 프레임 워크를 찾으십시오. 저의 책에서 두 가지 목표는 매우 다릅니다. RoR, Groovy 등은 처음에는 좋고 Java는 일반적으로 후자가 더 적합합니다.


6

Google App Engine은 Java를 지원하므로 합리적으로 문서화 된 Google API를 사용하여 Eclipse를 IDE 및 배포 인터페이스로 사용하여 전체 웹앱을 Java로 작성할 수 있습니다. 쓸 수 있는.


5

시작할 때 Java와 JRuby를 사용하여 API를 서로 보완하도록 선택했습니다.

인프라, 프로세스 배포 및 통신의 경우 Java의 견고성을 활용하는 반면, API 엔드 포인트의 실제 구현을 위해서는 JRuby를 선택했습니다. 모든 호출에는 JSON이 포함되어 있기 때문에 느슨하게 사용하여 느슨하게 형식화 된 표현 (JSON)을 조작하는 것이 더 합리적입니다. 유형 언어 (Ruby).

JRuby 클래스 중 하나가 병목 현상이 발생하는 경우 Java (기본적으로 라인 단위 변환)로 직접 다시 구현하면됩니다. 이는 많은 계산을 수행해야하는 클래스에서 자주 발생할 수 있으며,이 맥락에서 JRuby는 프로토 타입 언어와 매우 유사하게 작동합니다.

우리는 자체 동적 클래스 로더를 구현했습니다. 즉, 서버를 다시 시작하지 않고도 Java 클래스를 즉석에서 변경할 수 있으며 선택에 매우 만족합니다. 따라서 "매번 컴파일하고 다시 시작해야합니다."인수는 그다지 중요하지 않습니다.

핵심은 모든 Java EE를 피하는 것입니다. 거대하고 번거롭고 민첩하지 않습니다.


5

나는 여전히 많은 웹 개발에서 Java가 사용되고 있다는 느낌을 가지고 있습니다. 그러나 일반적으로 비즈니스 중심의 기술이 아닌 대기업 유형의 개발에 있으며 일반적으로 기술에 더 관심이있을뿐만 아니라 약간의 견인력을 얻고 자체 작업을 촉진 해야하는 신생 기업보다 덜 개방적입니다. . 따라서 많은 회사 웹 사이트에서 사용 되더라도 실제로 기술 스택에 대해 공개적으로 신경 쓰지 않으므로 알 수 없을 것입니다.

즉, 모든 원래 질문에 주석을 달았습니다 ...

언어의 약점입니까? Python이나 Ruby와 같은 다른 언어와 비교할 때 Java는 장황하며 유사한 작업을 수행하기 위해 더 많은 코드가 필요한 경향이 있습니다. 그러나 그것은 언어의 능력뿐만 아니라 언어를 둘러싼 커뮤니티와 그러한 도구를 사용하는 개발자의 종류가 아닙니다. 따라서 Python, Ruby, PHP 등의 대부분의 모듈과 도구는 오픈 소스이며 Java 세계보다 찾기가 쉽습니다. 서비스 제공 및 충전에 더 중점을두기 때문입니다. 예를 들어, Ruby 커뮤니티는 실제로 웹 개발에 중점을두고 있으므로 Ruby를 사용할 수있는 모든 개발자는 웹 프로젝트의 문제점 및 사용 가능한 도구에 대해 알게됩니다. 보고 시스템과 같은 다른 종류의 시스템에서 작업 할 수 있었던 Java 개발자에게는 반드시 그런 것은 아닙니다. 물론 좋은 개발자라면 누구나 따라 잡을 수 있습니다.

오랫동안 사용되어 왔기 때문에 불공평 한 고정 관념입니까? (이전 기술과 불공평하게 관련되어 있으며 "현대적인"기능에 대한 인식을받지 못하고 있습니까?) 자바는 그렇게 오래되지 않았으며 공정하게도 크게 향상되었습니다. 약 10 년 전에 시원하고 관련성이 높은 플랫폼이었습니다. 그러나 그 이후로 Ruby on Rails와 같은 새로운 문제를 염두에두고 새로운 플랫폼이있었습니다. Java의 핵심 부문은 주로 문제가있는 기업 세계 였으므로 외부의 새로운 프로젝트를 찾는 사람들은 다른 도구를 찾고있었습니다. 또한 멀티 플랫폼 인 Java 디자인의 주요 장점은 오늘날처럼 관련이 없습니다.

Java 개발자의 부정적인 고정 관념이 너무 강합니까? (자바는 더 이상 "멋지다" 는 것이 아니다. ) 그것은 또한 진실이다. Java는 여전히 "구직하기"를 배우는 언어입니다. 따라서 걱정하지 않고 돈을 벌기 위해 무언가를 배우고 싶다면 약간의 Java 학습을 끝내고 다시 개선하기 위해 신경 쓰지 않을 것입니다. 다시 말하지만, 인식과 가시성에 관한 것입니다. 지식을 공유하지 않고 코딩하는 훌륭한 Java 개발자가 많이 있지만, 블로그를 작성하고 오픈 소스로 공동 작업하는 PHP 개발자는 많지 않을 수도 있습니다. 따라서 PHP 개발자는 Java 개발자보다 특정 의견이 있으므로 Java 개발자보다 낫다고 생각합니다.

다른 언어로 작성된 응용 프로그램은 실제로 구축 속도가 빠르고 유지 관리가 쉽고 성능이 더 우수합니까? 나는 그들이 건축하는 것이 더 빠르다고 말하고 싶습니다. PHP, Python 또는 Ruby와 같은 언어의 원칙은 지속적으로 변경 될 수있는 소프트웨어를 생성하는 데 매우 유용합니다. 예를 들어 동적 입력을 통해 인터페이스를 쉽게 변경할 수 있습니다. Java에서 잘 정의 된 인터페이스를 갖는 것이 중요하며, 이는보다 안정적이고 변경하기 어려운 인터페이스로 이어집니다. 이것은 신생 기업에서 매우 중요합니다. 주요 문제는 돈이 다 ​​떨어지기 전에 제품을 얻는 것입니다. 성능에 대해서는 "Java가 Ruby보다 빠릅니다."또는 "MongoDB는 웹 규모입니다" 와 같이 요구 사항을 잘못 이해하고 마술 을 사용 하여 필요한 성능을 달성하는 것이 매우 쉽습니다 .

새로운 언어에 적응하기에는 너무 느린 대기업에서만 Java를 사용합니까? 확실히, 회사에 이미 Java 개발자 팀이 있으면 새로운 프로젝트에 동일한 언어를 계속 사용할 수 있습니다. 이것은 특히 회사의 핵심이 기술이 아닌 경우 "안전한 내기"로 인식됩니다. 어쨌든 Java는 대기업에서만 사용되지는 않지만 Java를 사용하여 멋진 물건을 사용하는 많은 신생 기업이 여전히 있습니다 (예 : FightMyMonster 또는 Swrve 는 Java를 광범위하게 사용합니다). 장면은 다른 언어를 사용하는 것입니다. 대부분의 사람들이 루비, 파이썬 또는 PHP로 작업하는 것이 더 "친절하고"즐겁다 고 인식되기 때문에 사람들을 얻는 방법이기도합니다.


5

이것은 사실이지만 Java와 그 생태계 때문이 아닙니다. 사람들이 Java를 사용할 때 큰 혼란과 무거운 혐오를 일으키는 경향이 있기 때문입니다.

물건을 빨리 만들 수있는 충분한 프레임 워크 (spring-mvc, grails, play 등)가 있습니다. 사람들이 자신의 시스템을 과도하게 엔지니어링한다는 사실은 사람들이 Java 생태계와 함께 일할 때 얻는 지식의 증가와 함께 발생하는 문제입니다. 손톱".

"해키"라면 Java를 사용하여 다른 언어와 거의 동일한 작업을 수행 할 수 있으며 다음을 나타내는 연구가 있습니다.

49 명의 프로그래머에 대한 연구 : 정적 타입 시스템은 개발 시간에 영향을 미치지 않았습니다 ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

이미 말한 것에 약간을 추가하기 위해 많은 것이 (문자 그대로) 기능적인 웹 응용 프로그램으로 얼마나 빨리 갈 수 있는지와 관련이 있다고 생각합니다.

현재 가지고있는 아이디어 만 있다면 웹 제공 업체에서 EC2 이미지와 같은 자체 인프라를 선택하든 웹 응용 프로그램을 작성하는 단계를 넘어가는 것이 가장 쉽습니다. 필자의 경험에 따르면 Java를 선택하는 것은 일반적으로 더 많은 작업이며 종종 더 많은 비용이 소요됩니다.

또한 Linux 및 PHP / Python / Ruby를 사용하는 경우 도구와 플랫폼이 무료이며 서로를 지원하도록 설계되었습니다. Java를 사용하면 때로는 두 세계 (OS와 Java)가 서로 조화롭게 작동하지 않는 것처럼 보입니다.


학습 곡선은 절대적으로 수직입니다. 처음 몇 주 동안은 두문자어가 무엇인지, 표준이 구현과 어떻게 관련되는지, 모든 것이 어떻게 계층화되는지 등을 알아낼 것입니다. 그런 다음 몇 주 동안 사용할 라이브러리와 프레임 워크의 스튜를 알아냅니다. 다음 몇 주 동안 버그를보고했습니다.
Craig Ringer

3

누가 그렇지 않습니까?

Spring MVC + Spring Data JPA 또는 Mongo + Thymeleaf for templating + Coffee-maven-plugin for Coffee to JS transpiling을 사용하면 좋습니다.


+1에 전적으로 동의합니다
Arshad Ali

3

많은 사람들이 Java 및 웹 애플리케이션 개발을 J2EE의 공포와 연관시킬 수 있습니다. J2EE는 대규모 "청색 및 적색"회사의 괴물 같은 J2EE 애플리케이션 서버와 함께 기본 "Hello World"가 온라인 상태가되기 전에 몇 주 동안 작업 한 것과 같습니다.

사실, 최근의 JEE 사양 및 구현은 더 가벼우 나, 짧은주기의 빠른 개발 프로젝트를 위해 이와 같은 것을 제안하기 전에 여전히 세 번 생각합니다.

이것은 여전히 ​​Java에서 웹 애플리케이션 개발을 수행하는 표준 기반 방법입니다. 다른 답변에서 언급 된 많은 대안은 너무 많은 선택과 함께 더 혼합되고 혼란스러운 그림을 전달합니다.

다른 언어는이 다수 대신 단일 턴키 솔루션을 묘사합니다. 이것은 더 중요한 생선을 볶을 때이 선택이 목적에 더 적합 해 보이도록합니다.


Java EE 6은 "경량"일 수 있지만 (JSF2 제외) 여전히 엄청나게 큰 학습 곡선, 복잡한 사양의 거대한 스택 및 엄청나게 복잡한 계층 시스템입니다. 가벼울 수도 있지만 간단하지는 않습니다.
Craig Ringer

2

생각보다 많이 사용 된 것 같습니다. 사용은 수선 바로 아래에 있습니다. 두껍고 멋진 자바 서비스에는 많은 루비 온 레일 래퍼가 있습니다. 특히 빅 데이터에 접근하는 것을 다룰 때 특히 그렇습니다. . .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.