Как не пародоксально, но эта будет не статья, а большой, развернутый вопрос. Наберитесь немного терпения и прочитайте пожалуйста предисловие.

Не так давно я заинтересовался чип-тюнингом авто. И начал собирать сопутствующие гаджеты. Ни один БК, а я их перепробовал 3шт, моим требованиям не удовлетворял. Остался единственный выход — сделать все самому. Как показала предшествующая практика, из этого выходят неплохие вещи. Что бы было понятнее о чем я говорю: так например я в своё время делал OSD для DVBDream. Для тех кто не в курсе — это программа просмотра для спутникового телевидения. Подробности там. И так решено было сделать гаджет который будет отображать необходимые параметры в реальном времени с приличной частотой. Встал вопрос — на чем все это мастерить. Из железа было выбрано raspberri pi2. Здесь определиться было просто. На чем все это писать?
Кандидаты были Qt и C++, Python Tkinter, Lazarus. Ключевым фактором оказалась — лень :). На питоне уже был проект с открытым исходным кодом — pyOBD. Автор его забросил и проект содержал ошибки. Но огромная работа была им проделана и за это ему большое спасибо. Все дело в том что ЭБУ отдает параметры в не совсем «человеческом виде». И автор написал библиотеку которая обрабатывала всю эту рутину (работа с com-портом, декодировщики и тд). На тот момент я не был хорошо знаком с питоном и тем более с какой то GUI под него. Но я решил «убить двух зайцев»: познакомиться с вышеперечисленным и решить поставленную задачу. Из практики знаю, что нет лучше способа для изучения языка программирования, как нежели что то дельное на нём своять.

И так в моём арсенале появился еще один язык программирования. Вообще я знаком с: bash,html+javascript,php,perl, python+Tkinter,c++ и Qt,Lazarus-Delphi-Cbuilder, Pascal и C. Последние 2 не было наверное смысла выделять так как Delpih — object pascal, а не зная Си не возможно писать в связке c++ и Qt, но тем не менее. Я не говорю что я являюсь профессионалом во всех этих языках, но на каждом из них, в своё время, решалась успешно какая то задача. Я привел этот перечень не для того что бы похвастаться, а для того что бы в дальнейшем, те кто пожелает ответить на мой вопрос мог привести сравнения с вышеперечисленными языками.
Нет нужды приводить сравнение, например с Ruby, для меня это будет пустой звук. Я абсолютно не знаком с этим языком и не собираюсь с ним знакомиться просто по убеждениям.

Итак мы подошли к главному, а точнее прошли мимо Java. Все как то, собирался, но так и не собрался познакомиться с этим языком. Пришло время X и я стал просматривать статьи про написание кода на яве. И обнаружил что не могу найти для себя стимула писать на этом языке. Все что я читал меня не вдохновляло.

Например:
Python и Tkinter — просто прелесть если вам надо что то свалять на коленке. Библиотека Tkinter по максимуму избавлена от лишней писанины, да и собственно сам питон. Для пример приводим «Hello world!» в GUI.
from Tkinter import *
root=Tk()
Label(root,text="Hello World!").pack()
root.mainloop()

image
Нет наверное ни одного языка, где бы вы написали меньше кода для GUI. Этим я и вдохновился в свое время.

Qt и C++ — тут даже наверное излишне говорить, что быстрее этой связки ни чего не работает. Плюсом ко всему этому есть еще и QtCreator. Так что скорость разработки весьма приличная. Также напишем «Hello World!».
#include <QtCore>
#include <QtWidgets>
#include <QMainWindow>
.
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QMainWindow *mw = new QMainWindow();
    QLabel *label = new QLabel(mw);
    label->setText("Hello, World!");
    mw->show();
    return app.exec();
}

image
Как видите все достаточно логично и осмысленно. И не так уж много писанины.

Следующий кандидат Lazarus. Тут надо отметить что вам вообще не придётся писать код. Заместо этого вам нужно сделать два клика мышкой и в caption вписать «Hello, World!». Но это будет не совсем честно. Поэтому мы сделаем это в событии OnCreate основной формы.
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Caption:='Hello world!';
end;

end. 

image
Не смотря на то что кода здесь прилично, руками вам придется написать всего одну строчку
Label1.Caption:='Hello world!';
Интерфейс здесь получается очень и очень приятный, ни каких лагов, дерганий и прочей ерунды. Есть множество сторонних компонентов, таких как LazReport и ZeusDBO. И даже в стандартной поставке Lazarus имеет очень мощный арсенал. Приятно был удивлен, что есть под linux arm-архитектуры. Главное не забыть очистить исполняемый файл от дебага и сжать сам exe-файл если вы используете его как windows компилятор. Екзешники получаются очень мелкими. И самый главный плюс — это скорость разработки. Я думаю здесь нечего противопоставить даже близко. Билдер среда просто супер! Для работы с базами DataSource, DBGrid, DBEdit и тд, аналогов не встречал.

Но с каждым днём я все больше слышу о популяризации Java. Видимо это связано с растущей популярностью андроида, где основным инструментарием остается android studio с java. Есть конечно возможность писать на NDK но мало документации и много рутины и googl очень не охотно поддерживает данное направление. Хотя все признают что такой код значительно быстрее. А по моему мнению это очень существенно для андроида.

Итак моё знакомство я явой. Для начала стал рассматривать её как инструмент для создания пользовательского интерфейса для десктопов. Понятно что надо смотреть в сторону фрэймворков. Ну вот что я увидел:

1. AWT — вроде бы быстрый, вроде как интерфейс похож на осевский. Но толком ни чего не может и на сегодня морально устарел. Функционал ниже плинтуса, нет таблиц и даже не может иконки на кнопки вешать. Да еще и оказывается некоторые компоненты могут вообще не работать на «неродных» платформах. Программа будет выглядеть кривоватой.

2.Swing — набор компонентов улучшился, море доки, но иногда вообще вешает систему, требователен к ресурсам, медленнее AWT.

3. JavaFX — для отрисовки используется графический конвейер, сырой, глючный, не распространенный. Много громких заявлений, который и по сей день не реализованы в проекте. Ну собственно вот здесь читайте выводы.

Ну традиционный «Hello world!» на swing-е прямо с оракловской документации.
import javax.swing.*;

public class HelloWorldSwing {
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);
        frame.pack();
        frame.setVisible(true);
    }
    
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

image
Это уже фрэймфорк, а это примитивнейший «Hello world!»! Нравиться?! И мне вот не очень!

Термин «кроссплатформенность», конечно смотря что под ним понимать. Вот так выглядит клиент UTM5 java на моем нетбуке от нашего биллинга.
image
Отрисовка убогая, при динамичном обновлении ужасные лаги. Весь какой то корявый. И он запустится если только у вас оракловская java и ни каких openjdk. А запускается он прилично долго. Вот честно скажу, что после вот таких демок не прибавляется желания писать на яве.

Без ООП в яве вообще делать нечего, там все класс — зачем? Ну ладно смиримся с этим. Как выглядит простой консольный вывод текста — system.out.print() то есть два класса и метод, не перебор?! И сравним на Си puts(). А это зачастую приходится писать именно руками! Вот хорошая статья по этому поводу. Где хорошо описано, что зачастую классы лепят там где они не нужны. Но ява не дает альтернативы.

Немного позанудствую. Много лет назад я написал свою первую программу на бейсике. Компьютер был Электронника-БК. Затем появился ДВК, где я освоил азы паскаля и потом мне попал в руки Спектрум-Z80. С которого я начал изучать assembler, поскольку что то стоящее и быстрое можно было написать только на нём.
И когда я уже стал постарше и познакомился с программистами с нашего завода. Я получил доступ к заводской библиотеке, где мне в первые в руки попала книга о программировании на Си. Я был поражен его синтаксису его знаменитыми "++" "--" "+=", фигурными скобками за место begin и end. Его гибким конструкциям, которые позволяли значительно снизить количество набираемых символов. Я видел что этот язык создан что бы на нем Программировать! А что твориться сейчас? Для простого вывода в консоль я должен написать вот этот бесполезный хвост — system.out., а если это серьезная программа где мне нужно написать тысячи таких выводов? Сколько потраченного времени уйдет просто на набор текста? Ну вот так дела обстоят с десктопом.

Я также много слышал о том что ява используется для каких то серверных решений. Но так же знаю что ява проигрывает в скорости приложениям на Си. И по сравниваемой информации, примерно это в 2 раза. Для серверов в 2 раза!!! Я у себя систему с нуля перестроил что бы получить прирост в два раза!!! Была проведена огромная работа. Я сэкономил половину железа, и эта половина нам позволила поднять еще один город для предоставления услуг интернета!

Ну как мне подойти к руководству и заявить что я решил все переделать на яву, но нам потребуется докупить еще половину оборудования. На первый раз меня просто, принудительно отправят в отпуск.:)))

Вот собственно мой вопрос — «Почему JAVA???». Почему и кто её для себя когда то выбрал? В чем её преимущества? Что на ней можно делать что нельзя на других языках? Цем она хороша?

Для себя сделал вывод, что это монстр с огромным потреблением ресурсов, не удобный код со множеством писанины. Который с натяжкой подходит для пользовательских приложений и уж тем более ни как не подходит для серверных решений. Возможно я ошибаюсь и буду рад если вы убедите меня в обратном.

Только прошу вас не уподобляться америкосам, которые считают что они самые «крутые», при этом не выезжали ни разу за пределы страны, и не могут ответить почему.

Очень бы хотелось услышать людей кто программировал несколько лет на других языках и познал яву в сравнении.
Поделиться с друзьями
-->

Комментарии (27)


  1. enleur
    19.05.2016 17:59
    +6

    Что ЭТО делает на хабре?


    1. Source
      19.05.2016 18:09

      Интереснее где автор статьи был предыдущие 10 лет. Емнип, как раз в первой половине 00-х был разгар флейма на тему того какая Java медленная и какой убогий у неё GUI.


      1. big-town
        19.05.2016 18:16
        -1

        Я написал, то что я видел. Если на сегодня дело обстоит по другому, расскажите я с удовольствием вас послушаю.


        1. Calc
          19.05.2016 18:53
          -4

          Java медленнее, программисты либо дешевле, либо их целая армия.
          Java проще отлаживать чем C
          Знаний Java под Windows сегодня достаточно чтобы завтра начать писать под Linux, после завтра под Android, а после после завтра под Web.
          С C и C++ так не прокатит. Нужно знать платформу очень хорошо, а для java достаточно окружения.
          Железо всегда было дешевле хорошего разработчика и ПО.


  1. bromzh
    19.05.2016 18:06
    +1

    Лучше всего брать золотую яву. Красную, синяя слабее. В мягкой упаковке лучше не брать, качество хуже.


    А вообще, для вопросов есть тостер.


  1. vooft
    19.05.2016 18:11
    +1

    Вы судите о JavaFX по статье пятилетней давности?


  1. lair
    19.05.2016 18:16
    +1

    И обнаружил что не могу найти для себя стимула писать на этом языке.

    Ну и не пишите, значит. Вас кто-то заставляет?


    Вот собственно мой вопрос — «Почему JAVA???»

    Потому что она позволила выбирающему решать его задачи эффективнее, чем другие языки.


    и уж тем более ни как не подходит для серверных решений.

    И какая же аргументация?


    1. big-town
      19.05.2016 18:22
      -2

      Ну как я и писал выше, в различных источниках примерно одни и те же цифры. Ява медленнее примерно вдвое. Для серверов это очень критично.


      1. lair
        19.05.2016 18:24
        +2

        Для серверов это очень критично.

        Что критичнее: замедление работы сервера в два раза или отставание с выходом продукта на два года?


        1. solver
          19.05.2016 19:03
          +1

          Да тут проблема уже в самом утверждении «Ява медленнее примерно вдвое.».
          Так обычно говорят люди от менеджмента, а не разработчики.
          Тут слишком много условий, что измерили, как измерили, в каком году это делали… и т.д.


          1. lair
            19.05.2016 19:05
            +1

            Я просто решил даже не трогать это утверждение, его истинность в контексте моего последующего вопроса не имеет особого значения.


    1. darkAlert
      19.05.2016 18:38
      -1

      А где ваша аргументация того, что JAVA позволяет решать задачи эффективнее, чем другие языки?


      1. lair
        19.05.2016 18:44

        А за этим вопросом, пожалуйста, к тому конкретному человеку, который выбрал Java для решения его конкретной задачи.


      1. Calc
        19.05.2016 18:57

        Как пример.
        Может быть сотрудник, который стоит в 3 раза ниже рыночной стоимости, учится работать и пишет многотысячные проекты под четким руководством. Библиотеки все под рукой, кода тонна.
        Под C и C++ я бы себе такого не позволил, слишком высокий порог вхождения.
        QA с java позволяет такие финты ушами.


  1. darkAlert
    19.05.2016 18:18
    -3

    Пожалуйста, только не обижайте C++. Я очень переживаю, когда читаю о плюсах негативные комментарии.


  1. burabay86
    19.05.2016 18:23

    Смутил фрагмент: «c++ и Qt,Lazarus-Delphi-Cbuilder, Pascal и C», Вы действительно видели эти языки, перед тем как написать в такой компоновке?


    1. big-town
      19.05.2016 18:28

      Ну да, естественно, а что вас так смутило?


      1. burabay86
        19.05.2016 18:42
        +1

        Начало цитаты смутило — «И так в моём арсенале появился еще один язык программирования.», а потом — Lazarus-Delphi-Cbuilder, Pascal и C". Каша из базовых языков и IDE на них основаных


        1. big-town
          19.05.2016 18:53
          -1

          Ну потому они и написаны через дефис «Lazarus-Delphi-Cbuilder», поскольку я их не стал особенно разделять. Pascal и C имелись ввиду нативные. После я собственно и написал. «Последние 2 не было наверное смысла выделять так как Delpih — object pascal, а не зная Си не возможно писать в связке c++ и Qt»


  1. ekapinos
    19.05.2016 18:23

    Let the Holy War begin!


  1. dim_s
    19.05.2016 18:28

    Посмотрите мой проект develnext.org написанный на Java + JavaFX + JPHP. JavaFX зрелая технология, багов критичных в ней нет и она уже намного лучше Swing. GUI проекта довольно богатое на различные диалоги, элементы управления.


    1. vollossy
      19.05.2016 18:55

      Уоу, весьма внушительный проект. Может быть, напишете пару туториалов по JavaFX, ибо мне, например, было очень тяжело найти информацию по этой технологии?


    1. big-town
      19.05.2016 18:58

      Интересный проект. То есть сейчас JavaFX можно использовать не опасаясь за последствия? Как обстоит дело с производительностью?


  1. 7voprosov
    19.05.2016 18:35
    +2

    Шикарная статья. Вот прям «верните мне мой 2000-й».


  1. Vanger13
    19.05.2016 18:59

    Замечательная статья-вопрос, прям для Stackoverflow или Google.


    1. lair
      19.05.2016 19:05
      +2

      На SO такие закрывают как оффтопик.


  1. gena_glot
    19.05.2016 19:12

    По сути ничего со времен дельфи в смысле компоновочного интерфейса не появилось. Плохой Swing, чуть лучше Visual Studio. Все остальные TkTinder'ы еще хуже. Была надежда на Flex, но надежда умерла последней. Но умерла.

    По сути Swing калька с того же Delphi уровня. Нету, в общем, нормального Front END GUI. Веб-интерфейсов 3.000.000 все по-своему ужасны, там всех спасает что под конкретную задачу можно взять конкретный фреймворк. Фреймворков тьма и каждый год по 200 штук выходит, если не по 200.000