Java. — Не понимаю java

Содержание
  • Как запустить Java на Windows (XP, 7, 8 и 10)
  • Установка Java
  • Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Скачайте бесплатную версию Community Edition , нажав « Загрузить ».
  • Ваша первая программа на Java
  • Как выучить Java?
  • Официальная документация Java
  • Рекомендуемые книги по Java
  • Вместо заключения
  • Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Microsoft бросает вызов Linux на рынке вычислительных кластеров
  • Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто
  • Как выучить Java с нуля: советы новичкам
  • А теперь — подробнее: почему Java?
  • Трудно ли изучать Java?
  • 5 главных советов, как изучать Java, чтобы не было мучительно больно
  • 1. Соблюдайте правильный баланс между теорией и практикой
  • 2. Создайте расписание учёбы и поставьте чёткие цели
  • 3. Попробуйте игровой формат в обучении, чтобы успешно учиться, сохраняя мотивацию
  • 4. Общайтесь с другими студентами и Java-программистами. Не стесняйтесь задавать вопросы!
  • 5. Создайте собственное портфолио
  • Заключение
  • Как работает виртуальная машина Java — взгляд изнутри
  • Структура class-файла
  • Загрузка классов
  • Вызовы методов
  • Циклы
  • Заключение
  • Связанный список Java, не понимаю
  • Почему я не могу понять Java? [закрыто]
  • 2 ответа
  • Java. — Не понимаю java
  • 1. Java, как первый язык программирования
  • 2. Кроссплатформенность
  • 3. Java и Андроид
  • 4. Groovy
  • 5. Открытый исходный код
  • 6. Java и NoSQL
  • 7. Java Virtual Machine
  • Как научиться программировать на Java — полное руководство
  • Что такое язык программирования Java?
  • История версий Java
  • Функции языка программирования Java
  • Java — межплатформенный язык
  • Объектно-ориентированный язык программирования
  • Java работает быстро
  • Java — безопасная платформа
  • Обширная базовая библиотека
  • Применение платформы Java
  • Терминология Java, которую следует знать
  • Как запустить Java на своей операционной системе
  • Как запустить Java на Mac OS
  • javac –version
  • Как запустить Java на Linux
  • java –version
  • Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Как запустить Java на Windows (XP, 7, 8 и 10)
  • Установка Java
  • Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Скачайте бесплатную версию Community Edition , нажав « Загрузить ».
  • Ваша первая программа на Java
  • Как выучить Java?
  • Официальная документация Java
  • Рекомендуемые книги по Java
  • Вместо заключения
  • В чем разница между java и core java?
  • 15 ответов:
  • [java] Почему я не люблю Java
  • Как научиться программировать на Java — полное руководство

    В данном руководстве мы расскажем обо всём, что нужно знать перед началом изучения программирования на Java . Вы узнаете о возможностях платформы, её применении, а также о том, как правильно начать изучение Java .

    Что такое язык программирования Java?

    В 1991 году « Зелёная команда », подразделение Sun Microsystems , возглавляемое Джеймсом Гослингом , создала язык для программирования бытовых электронных устройств. На тот момент он назывался Oak (« Дуб »). Почему « Дуб »? Просто потому, что за окном рабочего кабинета Гослинга росло это дерево.

    « Зелёная команда » продемонстрировала использование Oak в интерактивном телевизоре. Но для цифрового кабельного телевидения тех лет эта технология была слишком передовой. Одновременно с этим набирал популярность интернет, для которого новый язык программирования подходил лучше всего.

    Через некоторое время новый язык переименовали в Green , и уже после этого — в Java , в честь кофе с острова Ява. Поэтому на логотипе Java изображена кружка с кофе.

    Во время разработки Java были популярны C/С++ , поэтому Гослинг сделал синтаксис языка похожим на C/C++ и реализовал для него принцип « написать один раз — запустить где угодно ». В 1995 году Sun Microsystems выпустили первую официальную версию Java . И одновременно с этим было объявлено, что Java войдёт в состав браузера Netscape Navigator .

    В 2010 году компания Sun Microsystems вместе с языком программирования Java была приобретена корпорацией Oracle .

    История версий Java

    1. Июнь 1991 – старт проекта разработки языка программирования Java .
    2. JDK 1.0 – Январь 1996 года.
    3. JDK 1.1 – Февраль 1997 года.
    4. J2SE 1.2 – Декабрь 1998 года.
    5. J2SE 1.3 – Май 2000 года.
    6. J2SE 1.4 – Февраль 2002 года.
    7. J2SE 5.0 – Сентябрь 2004 года.
    8. Java SE 6 – Декабрь 2006 года.
    9. Java SE 7 – Июль 2011 года.
    10. Java SE 8 – 18 марта 2014 года.
    11. Java SE 9 – 21 сентября 2020 года.

    Функции языка программирования Java

    Java — межплатформенный язык

    Код Java , написанный на одной платформе ( то есть операционной системе ), можно запустить без изменений на других платформах.

    Для запуска Java используется виртуальная машина Java ( Java Virtual Machine, JVM ). JVM обрабатывает байтовый код, после чего процессор обрабатывает код, полученный от JVM . Все виртуальные машины работают аналогично, поэтому один и тот же код работает одинаково во всех операционных системах, что и делает Java межплатформенным языком программирования.

    Объектно-ориентированный язык программирования

    Существуют различные стили программирования, и один из самых популярных — объектно-ориентированное программирование. При таком подходе сложная проблема разбивается на более мелкие путём создания объектов. Благодаря чему код можно использовать повторно.

    Объектно-ориентированные функции есть во многих языках программирования, включая Java , Python и C++ . Если вы серьёзно настроены освоить программирование, объектно-ориентированный подход стоит включить в план своего обучения.

    Java работает быстро

    Ранние версии языка программирования Java часто критиковали за медленную работу. Но сегодня ситуация кардинально поменялась. Новые версии JVM работают значительно быстрее, а интерпретирующие их процессоры становятся всё шустрее.

    Сегодня Java — один из самых быстрых языков программирования. Хорошо оптимизированный Java-код работает почти так же быстро как низкоуровневые языки программирования, такие как C/C++ и намного быстрее, чем Python , PHP и т.д.

    Java — безопасная платформа

    Java представляет собой :

    • безопасную платформу для разработки и запуска приложений;
    • предоставляет средства для автоматического управления памятью, что снижает уязвимость кода;
    • обеспечивает безопасную передачу данных.

    Обширная базовая библиотека

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

    java.lang – это продвинутые функции для строк, массивов и т.д.

    java.util – библиотека для работы со структурами данных, регулярными выражениями, датой и временем и т.д.

    kava.io — библиотека для ввода/вывода файлов, обработки исключений и т.д.

    Применение платформы Java

    Перед обучением Java программированию с нуля , нужно знать, что на это платформе работает более 3 миллиардов устройств по всему миру. Для чего конкретно можно её применить:

    1. Приложения для Android — для разработки Android-приложений язык программирования Java часто используется в сочетании с Android SDK ( от английского software development kit — комплект разработки программного обеспечения ).
    2. Веб-приложения — Java используется для создания сетевых приложений с помощью серверных программ, фреймворка Struts и JSP . Вот некоторые популярные веб-приложения, написанные на Java: Google.com , Facebook.com , eBay.com , LinkedIn.com .

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

    1. Разработка программного обеспечения – на Java написаны такие программы как Eclipse , OpenOffice , Vuze , MATLAB и многие другие.
    2. Обработка Big Data – для обработки « больших данных » можно воспользоваться фреймворком Hadoop , написанным на Java .
    3. Трейдинговые системы – используя платформу Oracle Extreme Java Trading Platform , можно писать программы для трейдинга.
    4. Встраиваемые устройства – на основе технологии Java Embedded от Oracle сегодня работают миллиарды устройств, таких как телевизоры, SIM-карты , проигрыватели Blu-ray и т.д.

    Также программирование на Java используется для разработки игр, научных приложений ( к примеру, для обработки естественного языка ) и во многих других областях.

    Терминология Java, которую следует знать

    Java – это набор технологий ( язык программирования и компьютерная платформа ), предназначенных для создания и запуска программного обеспечения. Однако термином Java часто обозначают и сам язык программирования.

    Язык программирования Java – межплатформенный объектно-ориентированный язык программирования общего назначения, обладающий широкими возможностями.

    Java 9 – последняя на момент написания данной статьи версия Java .

    Java EE , Java Me и Java SE – эти названия обозначают Java Enterprise Edition , Micro Edition и Standard Edition , соответственно.

    Java EE нацелена на приложения, запускаемые на серверах. Java ME создана для ограниченных по мощности устройств, таких как встраиваемые устройства. Java SE — стандартное издание Java для написания обычных программ.

    Если вы новичок в Java-программировании , рекомендуем начать с Java SE .

    JVM — Java Virtual Machine (« виртуальная машина Java ») — это программа, позволяющая компьютеру запускать программы, написанные на Java .

    JRE – Java Runtime Environment (« среда выполнения Java ») включает в себя JVM , соответствующие библиотеки и другие компоненты, необходимые для запуска программ. Но в JRE нет компилятора, отладчика и других средств разработки.

    JDK – Java Development Kit ( комплект Java разработчика ) содержит JRE и другие инструменты разработки, такие как компиляторы, отладчики и т.д.

    Как запустить Java на своей операционной системе

    Как запустить Java на Mac OS

    Вот что нужно сделать для Java программирование с нуля и установки платформы на Mac OS X или macOS :

    1. Скачайте свежую версию Java ( JDK ) со страницы загрузки Java SE .
    2. Дважды кликните по скачанному DMG-файлу и следуйте инструкциям программы-установщика.
    3. Для верификации установки откройте терминал и введите следующую команду:

    javac –version

    Если Java установлена верно, на экран будет выведена версия программы ( например, javac 1.8.0_60 ).

    Следующим шагом будет установка IDE ( интегрированной среды разработки ) для написания и запуска Java-кода . Мы установим бесплатную версию IntelliJ IDEA и запустим на ней Java . Вот что нужно для этого сделать:

    1. Перейдите на страницу загрузки IntelliJ и скачайте бесплатную версию Community Edition .
    1. Откройте скачанный DMG-файл и следуйте инструкциям по установке. Для быстрого доступа можно переместить IntelliJ IDEA в папку « Программы ».
    2. Откройте IntelliJ IDEA . Выберите опцию « Don ’ t import settings » (« Не импортировать настройки ») и нажмите « Ok » . После этого примите политику приватности Jetbrains , нажав на кнопку « Accept » .
    3. Теперь можно настроить интерфейс под себя. Также можно пропустить этот шаг и оставить всё по умолчанию. Если не уверены, просто пропускайте этот шаг, нажав кнопку « Skip All and Set Defaults » (« Пропустить всё и установить настройки по умолчанию »).
    1. Программа покажет вам страницу приветствия. Нажмите на кнопку « Create New Project » (« Создать новый проект »).
    2. В следующем окне выберите « Java » в левой панели и нажмите « New » вверху окна программы для выбора « JDK » . Здесь надо выбрать место, куда установили JDK , после чего нажать Next .
    1. У вас будет вариант создать проект из шаблона (« Create project from template » ). Игнорируем его и нажимаем кнопку « Next » .
    2. На следующем шаге установки языка программирования Java введите имя проекта и нажмите кнопку « Finish » .
    3. В левой панели вы увидите свой проект. Если панели не видно, перейдите в меню Views > Tool Windows > Project .
    4. Зайдите в Hello > New > Java и задайте имя класса. Мы назвали его First .
    1. Напишите Java-код и сохраните проект.
    2. Для запуска только что написанной программы, зайдите в Run > Run… Нажмите на First ( то есть имя созданного нами файла ) — программа скомпилирует файл и запустит его.

    Как запустить Java на Linux

    Для запуска примеров из уроков программирования с нуля Java на Linux понадобится JAVA SE Development Kit ( JDK ) и IDE для разработки своих проектов. Следуйте инструкции шаг за шагом, чтобы начать работу с Java .

      Откройте терминал и наберите следующую команду для установки Java:

    java –version

    Если выводится текущая версия, установка прошла успешно. Если же нет, сверьтесь со страничкой помощи Oracle .

    Установка IntelliJ >страницу загрузки IntelliJ IDEA .

    1. Скачайте бесплатную версию Community Edition , нажав кнопку « Загрузить ».
    2. После скачивания смените в терминале директорию на директорию загрузок и извлеките tar-файл Java в папку /opt следующей командой:
    1. После распаковки поменяйте директорию на папку bin программы IntelliJ IDEA :
    1. Два раза нажимаем « Next » и создаём проект.
    2. На следующем шаге введите имя проекта и нажмите кнопку « Finish » . Теперь в левой панели вы увидите свой проект. Если этой панели не видно, перейдите в меню Views > Tool Windows > Project .
    3. Добавьте новый класс Java . Выберите src на левой панели правой кнопкой и зайдите в New > Java Class . Задайте имя класса. В имени класса не должно быть пробелов.
    1. Напишите Java-код и сохраните проект.
    2. Для запуска программы, зайдите в Run > Run … Нажмите на HelloWorld ( название проекта ) — программа скомпилирует файл и запустит его.

    Как запустить Java на Windows (XP, 7, 8 и 10)

    Для освоения Java основ программирования и запуска платформы на Windows потребуется JAVA SE Development Kit (JDK) и IDE для разработки проектов. Следуйте пошаговой инструкции, приведенной ниже:

    Установка Java

    • Перейдите на страницу загрузки Java Standard Edition Development Kit .
    1. В разделе Java SE Development Kit вверху таблицы нажмите « Accept License agreement» (« Принять лицензионное соглашение »). Затем кликните по ссылке Windows (x64) , если у вас 64-битная операционная система или Windows (x86) , если у вас 32-битная ОС .
    1. После скачивания запустите установочный файл и следуйте инструкциям, которые будут появляться на экране. Нажмите « Next ». Выберите все функции, нажав « This feature will be installed on local hard drive » и скопируйте место установки ( оно выделено жёлтым ) в « Блокнот », после чего снова нажмите « Next ».
    1. В процессе установки появится запрос об установке JRE . Нажмите « Next » , а затем « Finish » для завершения установки.
    2. Теперь необходимо отредактировать переменную PATH . Перейдите в Панель управления > Система и безопасность > Система . В левой панели выберите « Дополнительные параметры системы».
    1. Нажмите « Переменные среды» . В разделе « Системные переменные» найдите переменную PATH и в следующем окне нажмите « Изменить» .
    1. Выберите весь текст в поле « Значение переменной» и скопируйте его в отдельный текстовый файл. Так будет легче его отредактировать и проверить на наличие ошибок. Посмотрите, есть ли в скопированном тексте строка: C : ProgramData Oracle Java javapath ; . Если да, то можно переходить к следующему шагу. Если нет, то вставьте скопированное ранее место установки в начало переменной и добавьте в конце строки bin вот так: C : Program Files ( x 86) Java jdk 1.8.0_112 bin ; Обратите внимание, что ваша версия JDK ( jdk 1.8.0_112 ) может отличаться. Скопируйте значение переменной и вставьте его в окошко PATH .
    1. Нажмите « ОК », чтобы сохранить внесенные изменения.
    2. Чтобы проверить, правильно ли установлена платформа для введения в программирование Java , откройте командную строку , набрав cmd в строке поиска Windows или через команду « Выполнить… » ( Windows — R ). Введите команду java -version . Если отображается текущая версия Java , значит, установка прошла успешно. Если нет, сверьтесь со страничкой помощи Oracle .

    Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Скачайте бесплатную версию Community Edition , нажав « Загрузить ».
    1. После загрузки запустите файл установки и следуйте инструкциям, которые будут появляться на экране. Затем создайте ярлык на рабочем столе для 64-битной версии и добавьте ассоциации с расширением .java . Нажмите « Next » и продолжайте установку.
    1. После установки откройте IntelliJ IDEA , нажав на значок на рабочем столе.
    2. Выберите « Don ’ t import settings » (« Не импортировать настройки ») и нажмите « OK ». После этого принимаем политику приватности Jetbrains, нажав « Accept ».
    3. Теперь можно настроить интерфейс под себя. Также можно пропустить этот шаг и оставить всё по умолчанию, нажав кнопку « Skip All and Set Defaults » .
    4. Программа покажет страницу приветствия. Нажмите « Create New Project » (« Создать новый проект »).
    1. В следующем окне выберите « Java » в левой панели и нажмите « New » в верхней части окна программы для выбора JDK . Здесь надо выбрать местоположение, куда установили JDK во время установки Java , после чего нажать « Next ».
    2. IntelliJ IDEA найдёт JDK и распознает его. Никакие другие опции отмечать не нужно, просто нажмите « Next » .
    3. На следующем экране введите имя проекта: HelloWorld и нажмите « Finish ». Если программа скажет, что директории не существует, нажмите « ОК ». Если вы не видите левой панели, перейдите в меню Views > Tool Windows > Project .
    4. Чтобы задать имя класса, выберите в левой панели папку src. Кликните по ней правой кнопкой мыши, зайдите в New > Java и задайте имя класса. В имени класса не должно быть пробелов.
    1. Напишите код и сохраните проект Java урока программирования .
    2. Для запуска программы, зайдите в меню Run > Run … Нажмите на HelloWorld — программа скомпилирует файл и запустит его.

    Ваша первая программа на Java

    Чтобы познакомить пользователей с новым языком программирования, используют программу Hello World (« Привет, мир! »). Это простая программа, которая выводит на экран слова Hello, World ! В этом разделе мы научим вас писать данную программу на Java , используя IntelliJ IDEA .

    1. Откройте IntelliJ IDEA .
    2. Перейдите в File > New > Project… > Java ( в левой панели навигации ).
    3. Задайте имя проекта ( Project Name ) из курса программирования J a va . Мы назовём его Hello World и нажмём « Finish ».
    4. Теперь нужно создать новый класс Java .
    5. Выберите папку src в левой панели, после чего перейдите в меню File > New > Java Class и задайте имя нового класса- HelloWorld .
    6. Скопируйте следующий код в файл HelloWorld.java и сохраните его.
    1. Нажмите кнопку запуска ( Run ). Если всё в порядке, вы увидите на экране надпись Hello, World !

    Как выучить Java?

    Официальная документация Java

    Oracle , компания, владеющая Java , публикует качественные уроки. Официальная документация освещает все функции Java и регулярно обновляется.

    Примечание: единственный минус — официальная документация Java не всегда написана самым простым языком.

    Рекомендуемые книги по Java

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

    Java: Полное руководство (10-е издание)

    Отличная книга для тех, кто только начинает изучать Java . Последнее издание включает все функции релиза Java 8 .

    В книге описано всё, что нужно знать о программировании на Java , включая синтаксис, ключевые слова и фундаментальные основы программирования, а также библиотеку API Java , апплеты Java и многое другое.

    Философия Java (4-е издание)

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

    Java 8. Карманный справочник: Скорая помощь Java-программистам

    Эта книга содержит понятные ответы на вопросы, возникающие при обучении J ava программированию с нуля . Она кратко рассказывает обо всех основных концепциях Java ( включая Java 9 ). Не хотите листать сотни страниц в поисках нужной строчки? Купите эту книгу.

    Вместо заключения

    Если начнёте изучать Java , не ошибётесь — это перспективный язык программирования, полный самых разнообразных возможностей.

    Перед тем, как приступить к изучению Java , воспользуйтесь несколькими советами:

    • Не читайте обучающие статьи и примеры как роман. Единственный способ стать хорошим программистом — писать много кода.
    • Если переходите с другого языка программирования ( скажем , C# ), не надо писать код в стиле C# .
    • Найдите онлайн-сообщества, посвященные Java . Когда научитесь писать простые программы на Java , найдите популярные сайты и форумы, посвященные Java . Пробуйте решать проблемы, возникающие у других программистов. Это отличный способ расширить собственные знания. К тому же, если у вас возникнет загвоздка, вы будете знать, где можно попросить помощи.

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

    Данная публикация представляет собой перевод статьи « Learn Java Programming. The Definitive Guide » , подготовленной дружной командой проекта Интернет-технологии.ру

    Почему Java — это не круто

    По мотивам статьи Пола Грэхема «Крутые Хакеры» (http://www.paulgraham.com/gh.html)

    Сачин Хеджип выделил основные причины неприязни которую настоящие хакеры испытывают к java. Вот они:
    — никаких сюрпризов и хитрых фич в языке
    — традиционно считается java тормозит
    — большинство swing-приложений ужасно выглядят
    — строгая типизация это занудно
    — сложно изобрести велосипед (все есть в стандартной библиотеке)
    — java популярна, а это не круто
    — на java нельзя писать драйверы и другие крутые штуки

    Стоит отметить, что крутизна технологии никак не связана с ее практическим применением.

    Re: Почему Java — это не круто

    «строгая типизация это занудно» — попахивает студентами. и при этом «на java нельзя писать драйверы и другие крутые штуки» как-то не вяжутся оба утверждения.

    Re: Почему Java — это не круто

    Э как их корёжит после книги PG :-) PG ФОРЕВА. Вот.

    Re: Почему Java — это не круто

    >традиционно считается java тормозит
    традиционно, щитаецца. тормозит оно пострашному. скока не говори халава — слаще это дерьмо не станет

    Re: Почему Java — это не круто

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

    Re: Почему Java — это не круто

    кстати, на java можно писать драйверы.

    Re: Почему Java — это не круто

    Мне кажется, что новость запостена с единственной целью, развести флеим, что Java -это отстой на, что другие возразят, что Java — это круто.

    Re: Re: Почему Java — это не круто

    Java — это нормально. Для одних задач это круто, для других отстой, как и все остальное (C,C++,Python,Perl,PHP. )

    Re: Почему Java — это не круто

    >Стоит отметить, что крутизна технологии никак не связана с ее >практическим применением.
    Вот именно, а куль калцкеры идут лесом.

    Re: Почему Java — это не круто

    Вроде первое апреля не скоро еще.

    Re: Почему Java — это не круто

    Ява — тормозное гамно, элита не пишет на яве.

    Re: Re: Почему Java — это не круто

    ГЫ. значит LOR гавно ? он весь на яве писан.

    Re: Почему Java — это не круто

    Java не есть плохо! Плохими бывают криворукие разработчики. Слова, что это не прикольно, не фичасто, не маргинально, а поэтому не круто, идут фтоппку и топятся в туалете типа сортиръ. Хотите выглядеть кульхацкером — пишите в гексах (интересно, много ли напишете :-)), хотите делать реальные вещи за реальное время — Java, C/C++, Python, Lisp.

    Re: Почему Java — это не круто

    31337 FuNc710nz couldn7 bee ri77en by JaFFa. =( jaffA fuR K >

    Re: Re: Почему Java — это не круто

    > А например удобнее JDBC, как _унифицированного_ интерфейса доступа к БД, пока ничего нет.

    Эй, студентик, DBI видел?

    Re: Re: Re: Почему Java — это не круто

    При чем тут лор?

    Речь идет про инструменты хакиров.

    Re: Re: Re: Re: Почему Java — это не круто

    А ктонить слышал про проек Jnode? Если нет то это ось написанная на Яве!

    Re: Re: Почему Java — это не круто

    >элита не пишет на яве.

    Угумс.. элита пишет на perl :))))))

    P.S.
    Sun-ch, спасибо за хорошее утреннее настроение :)

    Re: Re: Re: Re: Re: Почему Java — это не круто

    Есть ядро ляликса написаное на перле.

    Re: Re: Почему Java — это не круто

    Есть несколько разработок, одна из которых — Limbo. Язык программирования для ОС Inferno. В нем несколько замечательных идей, плюс реализация компактной виртуальной машины. Один из разработчиков — Ритчи. Inferno включает также все основные идеи Plan9. Вот ссылка : www.vitanuova.com

    Опять ИМХО — это лучшее, что я когда-либо видел.

    Re: Re: Re: Почему Java — это не круто

    DBI, конечно, хорош. Но это Перл, следовательно, наследует все его недостатки. JDBC в этом плане более красиво сделан. Но исключительно по причине достоинств типизированного языка и наличия нормального механизма исключений. Кстати, питоновское двигло для баз данных хорошо. :)

    Я не понимаю, чем кому-то может мешать наличие типизации. Мне кажется, что строгая типизация позволяет вынести отладку части ошибок из runtime во время компиляции. А вот отсутствие типизации ведет зачастую к труднообнаруживаемым ошибкам. ИМХО.

    Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают? Только, пожалуйста, не демонстрируйте тормозящие апплетики, написанные неизвестными студентами. :)

    Re: Re: Re: Почему Java — это не круто

    Прикинь, да. А можно аргументировать, чем он удобнее. Пардон, вашего социального статуса не знаю.

    Re: Re: Re: Re: Почему Java — это не круто

    Инструмент «хакиров» не меняется лет этак 25 с копейками. «Жаба» есть «жаба», я «C» есть «C». Хакиры и на ассемблере не брезговали писать в случае такой необходимости.

    Re: Re: Re: Re: Почему Java — это не круто

    rescue DBI::DatabaseError => e

    puts «An error occurred»

    dbh.disconnect if dbh

    DBI — это не только перл.

    Это тоже DBI, ruby под виндовс.

    Re: Re: Re: Почему Java — это не круто

    Замечено, что чем лучше яп/книга/музыка тем меньше у него шансов на массовом рынке. Inferno на год моложе явы, но ява есть везде а про инферно почти никто не слышал.

    Re: Re: Re: Re: Почему Java — это не круто

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

    Re: Re: Re: Почему Java — это не круто

    >ГЫ. значит LOR гавно ? он весь на яве писан.

    Хм. А судя по урлу — ничего подобного.

    Re: Re: Re: Re: Почему Java — это не круто

    >Я не понимаю, чем кому-то может мешать наличие типизации.

    >Мне кажется, что строгая типизация позволяет вынести отладку части ошибок из runtime во время компиляции

    >Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают?

    tomcat на Pentium’е.

    Re: Re: Re: Re: Почему Java — это не круто

    Re: Re: Re: Re: Почему Java — это не круто

    >>ГЫ. значит LOR гавно ? он весь на яве писан.
    >Хм. А судя по урлу — ничего подобного.

    Смотри внимательней. ЙыСыПы — Йыва Сырвлыт Пага. Самая что ни на есть жаба :-)

    Re: Re: Re: Re: Re: Почему Java — это не круто

    >>Я не понимаю, чем кому-то может мешать наличие типизации. > var1=(sometype)var2;

    И? Чем плохо? В случае отсутствия типизации я могу случайно в коде сделать ошибку и приравнять переменной, которая должна содержать один тип, другой тип. В данной конструкции это случайно уже не сделать. :)

    >>Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают? >tomcat на Pentium’е.

    То есть, найдя тормозящую программу, делаем вывод, что сам язык тормозной? :D Можно тогда привестьи пример «нетормозного» языка? Я уверен, что смогу найти программу, которая написана на нем, и будет тормозить. :)

    Re: Почему Java — это не круто

    Про ЛОР и про тормоза жабы, Вот открыл ссылку на статью и вижу до боли
    знакомые послания:

    ========
    Server Error
    The server encountered an internal error and was unable to complete
    your request.

    JRun Connector Protocol Error.
    ========

    Ф топку адназначна такие языки программирования вместе с их
    программистами! Микрослэшдот эффект — и фсё, умерла жаба.
    В статье детально рассмотрены все соринки в глазах лппонентов, и не
    замечено ни одно бревно в своих собственных. Ссылка на тупейший бенчмарк
    про то, как жаба быстрее С/С++ уже достали конкретно. Они что, всех за
    идиотов держат?

    Re: Re: Re: Re: Re: Re: Почему Java — это не круто

    > Есть ядро ляликса написаное на перле.

    Ну и шутки у тебя, боцман :)

    Re: Re: Re: Re: Re: Почему Java — это не круто

    >Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают?

    более того IntelliJ IDEA вроде правильно написал.

    Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Microsoft бросает вызов Linux на рынке вычислительных кластеров

    не все так просто
    иногда кажется что у ++ «более сильная» типизация
    приблизительно такая конструкция
    Int x;
    UhhTiType y;
    Object z;
    z = x;
    y = (UhhTiType)z;

    ошибка только во время исполнения
    и вообще, если бы в ++ какая бы организация
    угрохала такое же количество средств на создание
    приличной нестандартной библиотеки, применимость java
    была бы под вопросом, просто — полуинтерпретируемый ОО язык
    со связыванием во время компиляции и с общим предком

    Re: Re: Re: Re: Re: Почему Java — это не круто

    >Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают?

    более того IntelliJ IDEA вроде правильно написал.

    Re: Re: Почему Java — это не круто

    > тормозит оно пострашному.

    вот у меня на Sun Fire v60 не тормозит. Что я не так делаю? ;)

    Re: Re: Re: Почему Java — это не круто

    > вот у меня на Sun Fire v60 не тормозит. Что я не так делаю? ;)

    Типа похвастаться захотелось. Из твоих слов следует только то, что «У меня такой крутой Sun, что даже Java на нем тормозит для меня незаметно» :)

    Re: Re: Re: Re: Re: Почему Java — это не круто

    JSP? Java server pages. И что? Вы будет утверждать, что синтаксис этих файлов имеет что-то общее с синтаксисом языка Java?

    Re: Re: Re: Re: Re: Почему Java — это не круто

    >>>ГЫ. значит LOR гавно ? он весь на яве писан. >>Хм. А судя по урлу — ничего подобного.

    >Смотри внимательней. ЙыСыПы — Йыва Сырвлыт Пага. Самая что ни на есть жаба :-)

    Да ну? Покажите мне в спецификации любой версии Java конструкцию типа

    Re: Re: Re: Re: Re: Re: Почему Java — это не круто

    >>>Я не понимаю, чем кому-то может мешать наличие типизации. >>var1=(sometype)var2; >И? Чем плохо?

    Тем, что это уродство _необходимо_. См. Enumeration.nextElement().

    >>>Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают? >>tomcat на Pentium’е. >То есть, найдя тормозящую программу,

    просто взяв первую прешедшую мне на ум _реальную_ программу. А вообще примеров могу накидать массу. И ни одного (из реальной жизни) обратного.

    > делаем вывод, что сам язык тормозной? Тормозная в данном случае строго говоря испольнительная система, а не язык. И она _обязан_ быть тормозным в силу предъявляемых к ней требований (про JIT Трындеть не надо — он тут не причём).

    Отсда одна из _главных_ претензий к жабе — он пытается усидеть на двух стульях — быть эффективной и на стадии разработки и на стадии выполнения. Что взаимно противоречит друг другу.

    Re: Re: Почему Java — это не круто

    >Про ЛОР и про тормоза жабы, Вот открыл ссылку на статью и вижу до боли
    знакомые послания:

    Цукерберг рекомендует:  Создание классного эффекта при наведении мышки на изображение

    >========
    >Server Error
    >The server encountered an internal error and was unable to complete
    >your request.

    >JRun Connector Protocol Error.
    >========

    И причём здесь Java? А если апач раскажет про интернал-еррор, кто будет виноват? Ассемблер?

    Java-то тут, как раз молодец — всё отработала как надо.

    Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто

    >>>Я не понимаю, чем кому-то может мешать наличие типизации.

    >>var1=(sometype)var2; >И? Чем плохо?

    >Тем, что это уродство _необходимо_. См. Enumeration.nextElement().

    Это «уродство» улучшает читабельность кода и избавляет от возможности неправильных присваиваний. Enumeration, Iterator и Vector — это уродства, которые надо было хоронить с самого начала, так как они являются одними из сильных источников run-time ошибок, которые бы при наличии проверки на тип отлавливались бы еще во время компиляции.

    >>>Я не понимаю, неужели до сих пор встречаются люди, которые считают, что Java — самый тормозной язык? :) Если да, то какие тесты это подтверждают?

    >>tomcat на Pentium’е. >То есть, найдя тормозящую программу,

    >просто взяв первую прешедшую мне на ум _реальную_ программу. А вообще примеров могу накидать массу. И ни одного (из реальной жизни) обратного.

    Пожалуйста, хотя бы десяток :)

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

    >> делаем вывод, что сам язык тормозной?

    > Тормозная в данном случае строго говоря испольнительная система, а не язык. И она _обязан_ быть тормозным в силу предъявляемых к ней требований (про JIT Трындеть не надо — он тут не причём).

    Я так понимаю, вообще голое теоретизирование. Java томозная, потому что _обязана_ быть тормозной. Железный аргумент, даже как-то оспорить сложно.

    И как это JIT тут не при чем?

    > Отсда одна из _главных_ претензий к жабе — он пытается усидеть на двух стульях — быть эффективной и на стадии разработки и на стадии выполнения. Что взаимно противоречит друг другу.

    Почему это? Опять теория? Можно аргументацию, почему?

    Re: Re: Re: Re: Re: Re: Почему Java — это не круто

    Саныч, у тебя мозги на перле написаны, а ядро Линуксом называется. Элита хренова. Вроде и не 18, а хрень всякая постоянно проскакивает.

    Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто

    Ява действительно на многих (не на всех) задачах проигрывает по производительности таким языкам, как С, С++. Но из личного опыта могу сказать, что при достижении программой определенного уровня сложности, С и (в меньшей степени)С++ начинают отставать от явы, потому что становится все сложнее и сложнее писать правильный код и грамотно стыковать куски друг с другом (т.е. возникают сложности с разработкой архитектуры системы). К тому же резко увеличивается сложность поддержки системы (в смысле удаления багов и доработки).

    Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто

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

    >- никаких сюрпризов и хитрых фич в языке

    Да ну? :) никаких сюрпризов и хитрых фич? а может мы плохо язык изучили? из теории языков программирования следует что идеальных языков не существует. тем более не существует идеально написанных программ! :) даже в программе на си НеллоВорлд приведенной в К/Р существует десять ошибок. :) не верите — поищите в инете. Ява в данном случае не ислючение. Есть и там приятные и неприятные сюрпризы и фичи, просто знать их надо :)

    > — традиционно считается java тормозит > — большинство swing-приложений ужасно выглядят

    Скажите, а хакерам важна скорость языка и антуражик юзерского интерфейса? Да? А я то думал, что хакерам интересней написать оптимальный код. или реализовать оптимальный алгоритм. Хм.

    > — строгая типизация это занудно

    Опять же спорно. Конечно ради крутизны можно например засунуть строчку в массив даблов, но смысл? Я думаю у хакеров есть другие фишки чтобы пузами меряться. :)

    > — сложно изобрести велосипед (все есть в стандартной библиотеке)

    Ну не скажите. Стандартная библиотека на то и стандартная, чтобы предоставлять функции для работы со стандартными типами данных. Но хакеры-то чаще имеют дело с нестандартными данными :) хотя тоже как на это посмотреть :) любую сложную вещь можно разложить на примитивы. :)

    > — java популярна, а это не круто Визуалвасик тоже популярен, но почему то его используют для написания вирусов :)

    > — на java нельзя писать драйверы и другие крутые штуки ну на это уже ответили :) кстати если будет нормальный ява-процессор то кто мешает написать операционку в терминах явы?

    Кароче Санчес рулит! :)

    Re: Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто

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

    С этим трудно не согласиться. Но мне приходилось долгое время работать с IBM DB2. В поставку DB2 входит «Центр управления» и «Командный центр». Раньше, когда была версия 5.2 эти программы были написаны на Си(возможно C++). Тормозов не было даже на 2-х пнях с 64 метрами мозгов. Клиенты работали под NT 4.0. Далее с появлением DB2 7.0 в IBM ,с целью обеспечения кроссплатформенности, переписали все на Java. Пользоваться этим стало возможно только на машинах с 256М памяти. Загрузка «Центра управления» занимала секунд 10-15. Памяти выжиралось до 96М-128М. Написано все с использованием SWING-а. Закрытие программы занимает иногда до 20 сек. Меня в работе это сильно раздражало. С появлением версии DB2 v 8 вообще пришлось отказаться от графических приблуд и перейти на использование командной строки. Даже на последних пнях тормоза и расход памяти возросли просто до неприличия. Конечно можно предположить, что в IBM просто не умеют писать на Java. Но IBM сама активно продвигала Java и в это трудно поверить. Что касается количества зависаний и «глюков» — при использовании Java их стало больше, а последствия их вообще не предсказуемы.

    P.S. Окончательный вывод делать не буду. Мои слова только стимул к размышлению

    Re: Re: Re: Re: Re: Re: Re: Почему Java — это не круто

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

    >- никаких сюрпризов и хитрых фич в языке

    Да ну? :) никаких сюрпризов и хитрых фич? а может мы плохо язык изучили? из теории языков программирования следует что идеальных языков не существует. тем более не существует идеально написанных программ! :) даже в программе на си НеллоВорлд приведенной в К/Р существует десять ошибок. :) не верите — поищите в инете. Ява в данном случае не ислючение. Есть и там приятные и неприятные сюрпризы и фичи, просто знать их надо :)

    > — традиционно считается java тормозит > — большинство swing-приложений ужасно выглядят

    Скажите, а хакерам важна скорость языка и антуражик юзерского интерфейса? Да? А я то думал, что хакерам интересней написать оптимальный код. или реализовать оптимальный алгоритм. Хм.

    > — строгая типизация это занудно

    Опять же спорно. Конечно ради крутизны можно например засунуть строчку в массив даблов, но смысл? Я думаю у хакеров есть другие фишки чтобы пузами меряться. :)

    > — сложно изобрести велосипед (все есть в стандартной библиотеке)

    Ну не скажите. Стандартная библиотека на то и стандартная, чтобы предоставлять функции для работы со стандартными типами данных. Но хакеры-то чаще имеют дело с нестандартными данными :) хотя тоже как на это посмотреть :) любую сложную вещь можно разложить на примитивы. :)

    > — java популярна, а это не круто Визуалвасик тоже популярен, но почему то его используют для написания вирусов :)

    > — на java нельзя писать драйверы и другие крутые штуки

    ну на это уже ответили :) кстати если будет нормальный ява-процессор то кто мешает написать операционку в терминах явы?

    Как выучить Java с нуля: советы новичкам

    Есть множество причин изучать Java (самостоятельно или записавшись на курсы Java) независимо от того, новичок вы в программировании или специалист по другому языку. Самые очевидные из них связаны с тем, что Java — язык универсальный и надёжный. Он работает почти на любом устройстве, от “умного” утюга и телефона до автомобиля Tesla и суперкомпьютера. У Java — отличная обратная совместимость: это значит, что поддерживать старый Java-код относительно легко, как и переходить на новые версии языка.

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

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

    А теперь — подробнее: почему Java?

    Прежде, чем обсудить подходы к изучению Java, мы должны расставить все точки над i в вопросе, зачем учить Java в принципе.

    Java — отличный выбор для новичков, ориентированных на карьеру. Он занимает первые места в рейтингах популярности (например, TIOBE) и является одним из самых востребованных языков программирования в мире. Только вдумайтесь в это число: три миллиарда устройств используют Java! Это значит, что найти работу или стажировку “джависту” достаточно легко.

    Факты свидетельствуют о том, что 90% компаний из списка Fortune 500 используют Java для создания приложений и серверных систем.

    Кроме того, этот язык — выгоден с финансовой точки зрения: скажем, в США типичный Java-программист зарабатывает 102 514 долларов в год. Для стран постсоветского пространства цифра будет несколько более скромной. И тем не менее, зарплатная планка Java-программистов очень высока даже в России или Украине, особенно по сравнению с оплатой труда других специалистов массовых профессий.

    Вы можете использовать Java для создания различных платформ и приложений для любых устройств — ноутбуков, компьютеров, игровых консолей, автомобильных навигационных систем, проигрывателей Blu-ray, устройств медицинского мониторинга, лотерейных терминалов, парковочных счетчиков и так далее. Благодаря этой универсальности варианты специализации Java-разработчиков стремятся к бесконечности.

    У Java есть библиотеки почти на все случаи программистской жизни. То есть этот язык — отличный инструмент для решения подавляющего большинства задач.

    Особо выделим приложения для Android. Большинство из них также создаются на Java, что открывает возможности ещё и для мобильной разработки во всём её разнообразии. К слову, есть несколько очень удачных курсов Java для Android, и в этой статье мы их упомянём.

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

    • 2-е по величине сообщество StackOverflow
    • 4-е по величине сообщество Meetup (насчитывается более 1400 групп Java Meetup, общее количество участников которых превышает 580 000)
    • 2-й язык с наибольшим количеством тегов на GitHub (более 1,5 миллионов Java-проектов живут на GitHub)

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

    Трудно ли изучать Java?

    И да, и нет. Поначалу вы столкнетесь с простыми “азбучными” понятиями — переменными, методами (функциями), библиотеками. Однако не стоит обольщаться и думать, что и дальше всё будет так же просто. В Java есть и более сложные и абстрактные вещи. Например, новичку не так уж просто сразу осознать объектно-ориентированный стиль программирования, а многопоточность и вовсе способна произвести когнитивный диссонанс в неподготовленном мозгу. Но на самом деле, если правильно подойти к учёбе, освоение Java упрощается на порядок. Тем более, с какого-то момента всё станет проще уже хотя бы потому, что вы обретёте прочный фундамент.

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

    5 главных советов, как изучать Java, чтобы не было мучительно больно

    Если мы вас убедили в том, что изучать Java — отличная идея, постараемся рассказать, как подойти к обучению так, чтобы дорога к освоению языка была наиболее короткой.

    1. Соблюдайте правильный баланс между теорией и практикой

    Теоретические знания, разумеется, нужны. Они помогают понять внутренние процессы, объясняют, почему в программе всё происходит именно так, а не иначе. Однако потреблять теорию нужно умеренно, если речь идёт о столь практической сфере, как программирование. Особенно на первых порах.

    Тем не менее, огромное множество новичков совершает одну и ту же ошибку: они пытаются с самых первых шагов поглубже погрузиться в теорию. Они читают книги и лекции по Java, смотрят видеоролики в надежде, что после этого программы писать будет намного проще. Но дело в том, что так не будет: практическая деятельность по-настоящему познаётся только на практике. Это всё равно, что надеяться научиться плавать или кататься на коньках, в основном читая книги по плаванью и конькам.

    Поэтому совет номер один: создавайте базу знаний за счёт теории постепенно, а концентрируйтесь — на практических занятиях. Если всё время учёбы — это 100%, то практике нужно посвящать примерно 75-80% этого времени.

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

    Тем, кто занимается без ментора, довольно сложно соблюдать этот баланс. Начинающему разработчику непонятно, откуда брать задания, какие задания ему подходят, а за какие следует браться позже. Кроме того, кто проверит корректность кода или поможет, если что-то не получается?

    В сети можно найти хорошие видеокурсы или площадки с заданиями по Java. Один из лучших курсов — JavaRush, поскольку в нём соблюден указанный выше баланс: он на 80% ориентирован на практику и только на 20% — на теорию. В курсе Java Core рассматривается полностью (синтаксис Java, ООП, структуры, многопоточность и т. Д.), но при этом вы не увязнете в теории, а будете познавать её постепенно, прежде всего решая множество упражнений.

    После того, как вы решите все 1200+ задач в JavaRush, у вас будет порядка 500 часов реального опыта программирования.

    2. Создайте расписание учёбы и поставьте чёткие цели

    Скачки от одного к другому крайне редко приносят хороший результат в учёбе. Гораздо эффективнее погрузиться в язык однажды и уже не отвлекаться на другие. Представьте, что вы будете изучать одновременно испанский и итальянский языки. Скорее всего, вы запутаетесь и в конечном итоге будете пользоваться неким гибридом.

    Итак, вы хотите изучить Java. Это — ваша самая первая и общая цель. Теперь следует составить программу и разбить вашу цель на более конкретные “подцели”, чтобы сохранить импульс. Работать над избранной учебной программой лучше каждый день. Даже если вы потратите на учёбу всего полчаса в день, если вы будете каждый день писать код, это закрепит привычку и станет частью вашей жизни гораздо быстрее, чем если занятия будут нерегулярными. И постарайтесь себя убедить, что ваши занятия — это не блажь и не развлечения. Они для вас — обязательны.

    Чтобы оставаться сосредоточенным при низкой мотивации, напоминайте себе, почему вы хотите изучать Java в принципе. Хотите стать профессиональным разработчиком и найти классную работу? Возможно, мечтаете создать собственное приложение? Определите свои цели и сделайте из них “маячки”, а затем — ориентируйтесь на них, как только почувствуете потерю мотивации (а это случается чаще, чем хотелось бы, особенно при самостоятельном обучении).

    Если вам сложно организовать себя самостоятельно, возможно, следует воспользоваться приложением с функциями тайм-менеджмента, которое напоминало бы вам о начале занятия.

    В курсе JavaRush часть этой работы уже проделана за вас. Там есть последовательная программа и уйма задач с автопроверкой правильности решений. А ещё он разбит на небольшие модули, и вы будете чётко видеть прогресс. Так что вам остаётся только задать самому себе темп и — вперёд!

    3. Попробуйте игровой формат в обучении, чтобы успешно учиться, сохраняя мотивацию

    Давайте посмотрим правде в глаза: успешных самоучек в любой отрасли — не очень много. Возможно, один на сотню найдётся. Низкий процент объясняется не чьей-то тупостью или безалаберностью. Чаще всего вполне разумные люди, споткнувшись о неудачи, теряют мотивацию, поскольку не в состоянии оценить свой реальный прогресс. А порой они попросту не понимают, что их усилий было недостаточно для преодоления той или иной трудности.

    Вы наверняка играли в компьютерные игры и сталкивались с ситуацией, когда не могли пройти уровень с первого раза. Тем не менее, если в игре соблюдён разумный баланс сложности, у вас обычно не возникает мысли “я никогда не смогу этого сделать”. Вы просто пытаетесь снова и снова, и в конце-концов уровень поддаётся, вы набираете какое-то количество баллов или получаете нужный предмет для продолжения — чувствуете радость от преодоления и… отправлялись покорять новую вершину!

    Так вот, идея в том, что тот же принцип можно применить в обучении программированию. Если вы вовлечены в игровой процесс, видите результат, получаете поощрение за продвижение от уровня к уровню, вы гораздо охотнее будете садиться за учёбу. Так работает наш мозг — ему нужно поощрение, то есть подтверждение того, что его усилия не тщетны!

    Вот почему JavaRush идеально подходит тем, у кого нет опыта программирования: опыт в играх, хотя бы небольшой, есть практически у всех, а в этом курсе применена геймификация:

    • JavaRush проходится как видеоигра. Когда вы правильно решаете задачу, вы получаете «темную материю» (баллы, которые вам нужны, чтобы открыть следующую лекцию или следующий уровень).
    • Вы играете за антропоморфного робота по имени Амиго, и проходите курс от уровня к уровню, от квеста к квесту, собирая и тратя темную материю.
    • У курса есть сюжет, включающий космические путешествия, инопланетную жизнь и роботов.
    • JavaRush разделен на 40 уровней (4 квеста по 10 уровней), каждый из которых содержит около 15-30 заданий, связанных с написанием кода, 10-20 лекций по Java, а также мотивационные статьи — они помогут вам двигаться вперед, даже когда становится сложно.

    Пройдя эту игру, вы научитесь программировать!…Видеоигры, кстати, написаны программистами, все до единой.

    4. Общайтесь с другими студентами и Java-программистами. Не стесняйтесь задавать вопросы!

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

    Общаясь с другими программистами вы получите не только ответы на вопросы: вы познакомитесь с людьми со схожими интересами, что ускорит ваше обучение и повысит уверенность, что вы всё делаете правильно.

    Когда становится тяжело (а в любом адекватном учебном процессе бывают такие моменты, даже у гениев), заданные вовремя правильные вопросы — это уже половина успешного разрешения проблемы. Не бойтесь спрашивать, даже если вам кажется, что ваш вопрос глупый и вас засмеют. Начинающими были АБСОЛЮТНО все и чего-то не знать или не понимать — естественно. Так что если кто и будет смеяться над вами, это — проблема того, кто будет смеяться, а не ваша.

    Помимо Stack Overflow, задавать вопросы по Java можно в специальном разделе “Помощь” на JavaRush. В этом сообществе студенты просят подсказки, помогают преодолеть препятствия и делятся ответами и советами.

    Кстати, вы тоже можете помогать другим студентам с их вопросами — это очень полезно. Такая взаимопомощь поможет учиться быстрее и запоминать больше информации.

    5. Создайте собственное портфолио

    Один из первых советов начинающему разработчику, который уже выучил азы языка — “создайте собственный проект и дайте возможность другим увидеть вашу работу”. Это отличный совет. Подумайте над своим проектом. Это не обязательно должно быть что-то масштабное, но нечто такое, что позволит оценить ваш уровень владения Java. Например, небольшая игра или приложение по тайм-менеджменту.

    В таком случае, когда вы начнёте рассылать своё резюме на вакансию Java-разработчика или заняться внештатными проектами, у вас уже будет портфолио, которое вы сможете продемонстрировать потенциальным работодателям или заказчикам.

    Сегодня это сделать очень просто. Создайте учетную запись GitHub, прочитайте, как с ним работать (это несложно) и публикуйте там свои проекты.

    Заключение

    Теперь вы вооружены стратегиями и техниками, которые помогут вам правильно изучить Java. Главные ключи к изучению Java — это практика, последовательность шагов, но самое позитивное — ничто вам не мешает сделать своё путешествие увлекательным!

    Начните его с прохождения бесплатных уровней на JavaRush

    Как работает виртуальная машина Java — взгляд изнутри

    Рассказывает Роман Иванов

    Каждому Java-разработчику будет очень полезно понимать, что из себя представляет JVM, как в неё попадает код и как он исполняется. Статья больше подойдёт новичкам, но найти в ней что-то новое смогут и более опытные программисты. В статье вкратце описано, как устроен class-файл и как виртуальная машина обрабатывает и исполняет байт-код.

    Основной задачей разработчиков Java было создание переносимых приложений. JVM играет центральную роль в переносимости — она обеспечивает должный уровень абстракции между скомпилированной программой и базовой аппаратной платформой и операционной системой. Несмотря на этот дополнительный «слой», скорость работы приложений необычайно высока, потому что байт-код, который выполняет JVM, и она сама отлично оптимизированы.

    Рассмотрим схему работы JVM более подробно.

    Структура class-файла

    Напишем простейшее приложение и скомпилируем его. Компилятор заботливо создаст файл с расширением class и поместит туда всю информацию о нашем мини-приложении для JVM. Что мы увидим внутри? Файл поделён на десять секций, последовательность которых строго задана и определяет всю структуру class-файла.

    Granatum, удалённо, средняя по рынку от 60 000 до 150 000 ₽

    Файл начинается со стартового (магического) числа: 0xCAFEBABE. Данное число присутствует в каждом классе и является обязательным флагом для JVM: с его помощью система понимает, что перед ней class-файл.

    Следующие четыре байта class-файла содержат старший и младший номера версий Java. Они идентифицируют версию формата конкретного class-файла и позволяют JVM проверять, возможна ли его поддержка и загрузка. Каждая JVM имеет ограничение версии, которую она может загрузить — более поздние версии будут игнорироваться. Как видно на примере файла выше, у нас major версия 0x34 , что соответствует Java SE 8. Для Java SE 11 будет значение 0x37 .

    С девятого байта идёт пул констант, в котором содержатся все константы нашего класса. Так как в каждом классе их может быть различное количество, то перед массивом находится переменная, указывающая на его длину, то есть пул констант представляет из себя массив переменной длины. Каждая константа занимает один элемент в массиве. Во всём class-файле константы указываются целочисленным индексом, который обозначает их положение в массиве. Начальная константа имеет индекс 1, вторая константа — 2 и т. д.

    Каждый элемент пула констант начинается с однобайтового тега, определяющего его тип. Это позволяет JVM понять, как правильно обработать идущую далее константу. Всего зарезервировано 14 типов констант:

    Тип константы Значение тега
    CONSTANT_Class 7
    CONSTANT_Fieldref 9
    CONSTANT_Methodref 10
    CONSTANT_InterfaceMethodref 11
    CONSTANT_String 8
    CONSTANT_Integer 3
    CONSTANT_Float 4
    CONSTANT_Long 5
    CONSTANT_Double 6
    CONSTANT_NameAndType 12
    CONSTANT_Utf8 1
    CONSTANT_MethodHandle 15
    CONSTANT_MethodType 16
    CONSTANT_InvokeDynamic 18

    Например, если тег указывает, что константа является строкой, JVM получает значение тега 1 и обрабатывает следующее за тегом число как длину массива байт, которые необходимо считать, чтобы получить нужную нам строку полностью.

    Прочитав блок с константами, JVM переходит к следующим двум байтам — флагам доступа, которые определяют, описывает этот файл класс или интерфейс, общедоступный или абстрактный, является ли класс финальным.

    Имена класса и его родительского класса хранятся в массиве констант, на которые указывают последующие 4 байта в файле.

    Немного иначе обстоят дела с интерфейсами. Так как класс может наследоваться от множества интерфейсов одновременно, то хранить необходимо массив ссылок на пул констант. То есть за определением класса и его родительского класса идёт число, характеризующее размер массива интерфейсов, и сам массив. Все возможные значения кодов представлены ниже.

    Имя флага Код Определение
    ACC_PUBLIC 0x0001 Объявлен публичным
    ACC_FINAL 0x0010 Объявлен финальным
    ACC_SUPER 0x0020 Специальный флаг, введённый в версии Java 1.1 для совместимости при вызове методов родителя
    ACC_INTERFACE 0x0200 Объявлен интерфейсом
    ACC_ABSTRACT 0x0400 Объявлен абстрактным
    ACC_SYNTHETIC 0x1000 Зарезервированное определение
    ACC_ANNOTATION 0x2000 Объявлен аннотацией
    ACC_ENUM 0x4000 Объявлен перечислением

    Подобную структуру имеет и следующий блок — Fields.

    Этот блок начинается с двухбайтового параметра количества полей в этом классе или интерфейсе. За ним идёт массив структур переменной длины. Каждая структура содержит информацию об одном поле: имя поля, тип, значение, если это, например, финальная переменная. В списке отображаются только те поля, которые были объявлены классом или интерфейсом, определённым в файле. Поля от родительских классов и имплементированных интерфейсов здесь не присутствуют, они задаются в своих class-файлах.

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

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

    В последнем блоке идёт дополнительная мета-информация, например имя файла, который был скомпилирован. Она может присутствовать, а может и нет. В случае каких-то проблем JVM просто игнорирует этот блок.

    Мы рассмотрели структуру файлов и готовы перейти к следующей части — загрузке class-файла в JVM и последующему выполнению байт-кода из этого класса. В качестве закрепления полученных знаний по структуре class-файла можете воспользоваться встроенным декомпилятором Java и посмотреть результат его выполнения с ключами -c -verbose (javap -c -verbose TestJava.class) .

    Загрузка классов

    Теперь, разобравшись с общей структурой файла, посмотрим, как JVM его обрабатывает.

    Чтобы попасть в JVM, класс должен быть загружен. Для этого существуют специальные классы-загрузчики:

    1. Bootstrap — базовый загрузчик, загружает платформенные классы. Этот загрузчик является родителем всех остальных классов и частью платформы.
    2. Extension ClassLoader — загрузчик расширений, потомок Bootstrap-загрузчика. Загружает классы расширений, которые по умолчанию находятся в каталоге jre/lib/ext .
    3. AppClassLoader — системный загрузчик классов из classpath, который является непосредственным потомком Extension ClassLoader. Он загружает классы из каталогов и jar-файлов, указанных переменной среды CLASSPATH , системным свойством java.class.path или параметром командной строки -classpath .
    4. Собственный загрузчик — у приложения могут быть свои собственные загрузчики.

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

    После загрузки класса начинается этап линковки, который делится на три части.

    1. Верификация байт-кода. Это статический анализ кода, выполняется один раз для класса. Система проверяет, нет ли ошибок в байт-коде. Например, проверяет корректность инструкций, переполнение стека и совместимость типов переменных.
    2. Выделение памяти под статические поля и их инициализация.
    3. Разрешение символьных ссылок — JVM подставляет ссылки на другие классы, методы и поля. В большинстве случаев это происходит лениво, то есть при первом обращении к классу.

    Класс инициализируется, и JVM может начать выполнение байт-кода методов.

    JVM получает один поток байтовых кодов для каждого метода в классе. Байт-код метода выполняется, когда этот метод вызывается в ходе работы программы. Поток байт-кода метода — это последовательность инструкций для виртуальной машины Java. Каждая инструкция состоит из однобайтового кода операции, за которым может следовать несколько операндов. Код операции указывает действие, которое нужно предпринять. Всего на данный момент в Java более 200 операций. Все коды операций занимают только 1 байт, так как они были разработаны компактными, поэтому их максимальное число не может превысить 256 штук.

    В основе работы JVM находится стек — основные инструкции работают с ним.

    Рассмотрим пример умножения двух чисел. Ниже представлен байт-код метода:

    На Java это будет выглядеть так:

    По листингу выше можно заметить, что коды операций сами по себе указывают тип и значение. Например, код операции iconst_1 указывает JVM на целочисленное значение, равное единице. Такие байт-коды определены для самых часто используемых констант. Эти инструкции занимают 1 байт и введены специально для повышения эффективности выполнения байт-кода и уменьшения размера его потока. Подобные короткие константы также присутствуют и для других типов данных.

    Всего JVM поддерживает семь примитивных типов данных: byte, short, int, long, float, double и char.

    Если бы мы хотели положить в переменную а другое значение, например 11112, то нам пришлось бы использовать инструкцию sipush :

    Данные операции выполняются в так называемом фрейме стека метода. У каждого метода есть некоторая своя часть в общем стеке. Таким образом в нашем главном потоке исполнения программы создаются множество подстеков на каждый вызов метода. Более наглядно это представлено на картинке ниже:

    В каждом стек-фрейме хранится массив локальных переменных, который позволяет сохранять и доставать локальные переменные, как мы сделали в примере выше, поместив значения 1 и 5 в переменные 1 и 2. Стоить отметить, что здесь компилятор также оптимизировал байт-код, используя однобайтовые инструкции. Если бы переменных в нашем методе было много, использовался бы код операции сохранения значения вместе с указанием позиции переменной в массиве.

    Чтобы достучаться до пула констант класса и получить нужное значение, используются инструкции lcd и lcd_w . При этом lcd может ссылаться только на константы с индексами от 1 до 255, поскольку размер её операнда составляет всего 1 байт. Lcd_w имеет 2-байтовый индекс, поэтому может ссылаться на более широкий диапазон индексов.

    Вызовы методов

    Java предоставляет два основных вида методов: методы экземпляра и методы класса. Методы экземпляра используют динамическое (позднее) связывание, тогда как методы класса используют статическое (раннее) связывание.

    Виртуальная машина Java вызывает метод класса, выбирая его на основании типа ссылки на объект, который всегда известен во время компиляции. С другой стороны, когда виртуальная машина вызывает метод экземпляра, она выбирает метод для вызова на основе фактического класса объекта, который может быть известен только во время выполнения. Поэтому для вызова методов используются разные инструкции: invokevirtual и invokestatic . Данные функции ссылаются на запись в пуле констант в виде полного пути к необходимой функции. Виртуальная машина снимает нужное количество переменных со стека и передает в метод.

    Возвращаемое методом значение кладётся на стек. Типы возвращаемых значений методов указаны ниже:

    Операция Описание
    ireturn Помещает на стек значение типа int
    lreturn Помещает на стек значение long,
    freturn Помещает на стек значение float
    dreturn Помещает на стек значение double
    areturn Помещает на стек значение object
    return Не изменяет стек

    Циклы

    Осталось рассмотреть последнюю часто используемую конструкцию языка — циклы. Посмотрим, во что превратится код, представленный ниже:

    Каждый раз на стеке оказывается два числа, которые сравниваются, и если i > 9999 , происходит выход из цикла. При этом для создания цикла используется конструкция на основе goto , которая запрещена в самом языке Java, хотя ключевое слово и зарезервировано.

    Заключение

    Изначально байт-код интерпретируется в большинстве JVM, но как только система замечает, что некоторый код используется очень часто, она подключает встроенный компилятор, который компилирует байт-коды в машинный код, тем самым значительно ускоряя работу приложения.

    Таким образом, мы поверхностно рассмотрели жизненный цикл байткода в JVM: class-файлы, их загрузку и выполнение байт-кода и базовые инструкции.

    Связанный список Java, не понимаю

    Поэтому я учился на предстоящем экзамене по Java, и я наткнулся на то, чего я никогда не понимал. Если бы кто-нибудь мог мне это объяснить, я был бы очень признателен.

    Хорошо, проблема, с которой я столкнулась, — это понять, почему работает следующий метод AddToEnd. Мне просто кажется, что все temp — это IntNode, представляющий конечный элемент в списке, так почему же, изменяя темп каким-то образом, изменяется исходный список? Заранее спасибо за вашу помощь!

    Мне просто кажется, что все temp — это IntNode, представляющий последний элемент в списке

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

    Фактически временные точки (или, более точно, ссылаются) на конечный элемент в списке.

    Почему я не могу понять Java? [закрыто]

    Я учусь в 9-м классе и присоединился к команде моей школы робототехники, чтобы научиться кодировать Java и входить в команду программистов. Однако я так растерялся! Даже после первого урока я понятия не имел, о чем говорил учитель. Я не знаю, только ли это я, но я просто не могу понять ни одного из терминов или как собрать их вместе, чтобы сформировать код.

    Мой учитель всегда занят в будние дни, поэтому у меня есть только суббота, чтобы поговорить с ним. До этого я просто сижу перед Netbeans, не имея понятия о том, как кодировать наше первое задание, а именно писать Java-код, который решает вопрос геометрии по моему выбору. Я действительно хочу стать хорошим программистом, но я просто не могу понять Java. Мой учитель и многие веб-сайты говорят, что изучение Java — это как изучение нового языка, и нужно хорошо практиковаться.

    Я изучил HTML, что было очень легко для меня, поэтому у меня есть опыт программирования, но я просто не понимаю Java! Эти два совершенно разные с моей точки зрения.

    Тем не менее, как я должен практиковать, если я понятия не имею, что происходит в мире? Кроме того, нужно ли быть математиком, чтобы быть хорошим программистом?

    2 ответа

    Это правда, что вам нужно практиковать. Но у разных людей разные способы обучения, и не каждый учитель

    • эксперт в том, что они преподают
    • опытный учитель.

    Таким образом, ключевой частью школы является обучение тому, как учиться.

    У меня есть » базовый учебник по Java » для Google. Две верхние ссылки выглядят полезными для вас

    Я предлагаю вам вырезать и вставить пример кода, такого как программа «Hello, World», посмотреть, что он делает и как, затем внести изменения и посмотреть, что они делают.

    Будьте готовы потратить много часов на это. Он учится выражать свои мысли на новом языке.

    Изменить: нужно ли быть математиком, чтобы быть хорошим программистом?

    Нет. Существует множество различных проблемных доменов , и вы изначально столкнетесь с проблемами, о которых вам известно. Но программисты постоянно изучают разные вещи — новые навыки, например, как решать конкретные математические задачи, или какой-то новый язык, или какой-то новый способ мышления. Большая часть программирования включает в себя «Если элемент A — это XYZ, поместите его в корзину B, а если это UVW, поместите его в корзину C».

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

    И одна ветвь математики очень важна: логика. Вы узнаете об этом!

    Ява была моим первым языком, и мне было очень сложно. Я не уверен, сколько это стоит, просто потому, что я был новым программистом (я не понимал, что мне нужно пройти этап обучения, прежде чем я смогу даже запустить программу, которую я хотел написать); сколько было, потому что я следовал официальному учебнику Sun («почему это происходит и о чем идет речь»), и насколько он связан с тем фактом, что Java не является хорошим первым языком (или, по моему мнению, для чего-либо: он делает много вещей сносно, но ничего превосходно ).

    Конечно, я мог заставить вещи происходить , но я не понимал, почему или что я делал в all .

    Я рекомендую Python для самого раннего запуска: * меньше внимания уделяется «объектно-ориентированной» пропаганде, но на самом деле лучше и действительно является объектно-ориентированным * dict , list и set как встроенные типы вместо типов библиотек. * более разумное использование исключений (но, пожалуйста, укажите типы) * более функциональный стиль в отличие от императивного * ответ * не прячет вещи за IDE (есть IDE для python, но вы должны просто использовать текстовый редактор, который предназначен для программистов и явно сохранять и запускать ваш код)

    После того, как вы напишете свои первые несколько программ, вернитесь и напишите их все без использования изменяемых глобальных переменных (вероятно, это самая большая вещь, которую новички слишком часто используют way , а также спросите более опытных программистов на Python о вещи, которые вы пропустили).

    Убедившись в том, что вы можете написать любую программу для малого (среднего) (в вашем понимании масштаба) на Python, вернитесь назад и снова переписайте те же программы на Java. Обучение включает в себя многое из этого: «делай то же самое, но по-другому».

    Это также было бы выгодно, вы немного изучите язык C. Не ожидайте, что в нем будут написаны какие-либо большие программы, но вы должны быть уверены, что у вас нет ошибок, связанных с malloc / свободный, strcpy, ввод / вывод, в котором могут быть ошибки.

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

    Я рекомендую, чтобы ваш первый контроль версий был каким-то децентрализованным, например, git или mercurial, чтобы вам не требовался удаленный сервер. Для новичка самым важным правилом является «совершай рано, делай часто». В конце концов, вы получите лучшее представление о том, когда полезно совершать коммиты, когда вносить поправки или сдавливать (всегда легче начать с множества небольших коммитов и позже превратить их в один больший коммит — если у вас есть причина для этого); и вы также получите навык, позволяющий следовать правилу «каждый коммит должен работать, для некоторого определения работы».

    Не делайте not , совершая ошибку при управлении версиями из IDE. Если вы должны использовать IDE, сделайте вид, что VCS-интеграция не существует, потому что она будет худшей, чем бесполезной, когда что-то малейшее пойдет не так (и часто, когда есть, что-то не так) 2 человека работают над одним проектом). Просто наберите git status и убедитесь, что вы понимаете, почему все красное или зеленое, а затем найдите лучший способ избавиться от красного (некоторые распространенные способы: добавить неотслеживаемые файлы, добавить изменения в отслеживаемый файл (только в git), добавьте в список игнорирования) и запустите git diff и git diff —cached перед выполнением коммита. (Концепция поэтапных и неустановленных изменений является яблоком раздора между git и большинством (всех?) Других DVCS, но я нахожу это гораздо более очевидным, чтобы иметь возможность отдельно говорить об «изменениях, которые я довольно уверенно войдет в коммит без особых изменений «из» изменений, над которыми я все еще работаю «. Но опять же, как новичок, коммитите часто ).

    Вы можете заметить, что я не упомянул явно команды для добавления изменений или коммитов. Это потому, что гораздо важнее знать, как получить информацию из VCS, чем помещать ее в .

    Вы также можете заметить, что я не размещал здесь никаких ссылок. Это осознанное решение, учитесь на Google, и помните, что 90% всего (включая главную страницу Google) — это чушь.

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

    Java. — Не понимаю java

    Совсем скоро у Java юбилей – 25 лет со дня создания. Хоть этому языку уже много лет, он по сей день является одним из фаворитов по востребованности и популярности в мире программистов. Что делает его настолько значимым в среде разработчиков? Нам удалось выделить как минимум 7 основных причин мегапопулярности Java, по которым он держится на вершине рейтинга и будет лидировать ещё долго.

    1. Java, как первый язык программирования

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

    Этот язык имеет массу достоинств, делающих его лидером при изучении информатики. Да, не всем нравится вручную указывать типы данных, считая это чем-то вроде «подушки безопасности». Однако, это хорошая возможность для начинающих понять базовые принципы, на которых устроен ПК. Новичкам невольно приходится задумываться об устройстве операционной системы.

    Многих это раздражает, форматирование скобок занимает лишнее время. Есть много модных языков, в которых не нужно указывать фигурные скобки. В некоторых это действительно неудобно, но начинающим они полезны. С их помощью, проще понять принципы вложений.

    Промежуточный итог: да, язык немного перегружен, если сравнивать с Python, но для начального изучения он подходит идеально.

    2. Кроссплатформенность

    Хоть и не стоял у истоков создания кроссплатформенных программ, но смог завоевать лидирующую позицию. Java не имеет абсолютной совместимости со всеми платформами. Без подходящих библиотек код все равно не заработает. Просто скомпилировав код десктопного приложения и загрузив его на телефон, ничего работать не будет.

    Однако, разработчик может создать полноценное приложение у себя на ПК, а в конце установить его на подходящей платформе. При наличии доступа к нужным библиотекам, код заработает.

    3. Java и Андроид

    Вы знали, что Android полностью написан на Java? Сегодня Андроид-гаджеты остаются лидерами по продажам в мире и их вряд ли подвинет какая-то другая платформа в ближайшие 5 лет.

    На Android сегодня работает масса гаджетов: смартчасы, смартфоны, планшеты, Smart TV, смартбуки, различная бытовая техника и многие другие умные предметы электроники. Уже 4 года, как на Android работают роботы.

    Всё перечисленное вместе только подтверждает доминирующее положение Java.

    4. Groovy

    Надоел классический синтаксис с его недостатками? Появились идеи уйти к новомодным языкам? Такой необходимости нет, ведь можно воспользоваться Groovy. Язык обладает полной интеграцией с Java, позволяет вызывать все библиотеки, написанные под Java прямо из Groovy-кода.

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

    5. Открытый исходный код

    Владельцем и разработчиком Java является Oracle, которая давно занимает лидерство в среде Open Source. Компания всё ещё не отпустила Java в свободное плавание, но это не наложило негативный оттенок на язык. Программисты создали множество библиотек и шаблонов, имеющих свободные лицензии.

    Большинство библиотек обладают открытым исходным кодом. Это лишь увеличивает лояльное отношение к Java.

    6. Java и NoSQL

    Во время революции NoSQL к программистам пришло понимание, что они могут сами создавать базы данных и подстраивать их под собственные нужды. Подавляющее большинство NoSQL-решений разработаны непосредственно на Java.

    В основном такие базы имеют opensource-код, поэтому их легко встраивать в уже существующие проекты. Есть те, кто запускает их в роли независимых сервисов, а другие — используют в качестве библиотек. Независимо от способа применения, использование Java – это гарантия разработчиков, что они смогут разобраться в коде и редактировать его.

    7. Java Virtual Machine

    JVM основана и подстроена под типизированный код, опираясь на статический контекст. Через небольшое время JVM начали применять для запуска кода из других языков, единственное условие – корректная работа компилятора. Разработчики недолго думая создали компиляторы для Haskell, Scala, Clojure.

    В целом многим очень нравится, что Oracle обеспечивает кроссплатформенность языка, а прочее делают разработчики сами (или пользуются чужим кодом).

    Как научиться программировать на Java — полное руководство

    В данном руководстве мы расскажем обо всём, что нужно знать перед началом изучения программирования на Java . Вы узнаете о возможностях платформы, её применении, а также о том, как правильно начать изучение Java .

    Что такое язык программирования Java?

    В 1991 году « Зелёная команда », подразделение Sun Microsystems , возглавляемое Джеймсом Гослингом , создала язык для программирования бытовых электронных устройств. На тот момент он назывался Oak (« Дуб »). Почему « Дуб »? Просто потому, что за окном рабочего кабинета Гослинга росло это дерево.

    « Зелёная команда » продемонстрировала использование Oak в интерактивном телевизоре. Но для цифрового кабельного телевидения тех лет эта технология была слишком передовой. Одновременно с этим набирал популярность интернет, для которого новый язык программирования подходил лучше всего.

    Через некоторое время новый язык переименовали в Green , и уже после этого — в Java , в честь кофе с острова Ява. Поэтому на логотипе Java изображена кружка с кофе.

    Во время разработки Java были популярны C/С++ , поэтому Гослинг сделал синтаксис языка похожим на C/C++ и реализовал для него принцип « написать один раз — запустить где угодно ». В 1995 году Sun Microsystems выпустили первую официальную версию Java . И одновременно с этим было объявлено, что Java войдёт в состав браузера Netscape Navigator .

    В 2010 году компания Sun Microsystems вместе с языком программирования Java была приобретена корпорацией Oracle .

    История версий Java

    1. Июнь 1991 – старт проекта разработки языка программирования Java .
    2. JDK 1.0 – Январь 1996 года.
    3. JDK 1.1 – Февраль 1997 года.
    4. J2SE 1.2 – Декабрь 1998 года.
    5. J2SE 1.3 – Май 2000 года.
    6. J2SE 1.4 – Февраль 2002 года.
    7. J2SE 5.0 – Сентябрь 2004 года.
    8. Java SE 6 – Декабрь 2006 года.
    9. Java SE 7 – Июль 2011 года.
    10. Java SE 8 – 18 марта 2014 года.
    11. Java SE 9 – 21 сентября 2020 года.

    Функции языка программирования Java

    Java — межплатформенный язык

    Код Java , написанный на одной платформе ( то есть операционной системе ), можно запустить без изменений на других платформах.

    Для запуска Java используется виртуальная машина Java ( Java Virtual Machine, JVM ). JVM обрабатывает байтовый код, после чего процессор обрабатывает код, полученный от JVM . Все виртуальные машины работают аналогично, поэтому один и тот же код работает одинаково во всех операционных системах, что и делает Java межплатформенным языком программирования.

    Объектно-ориентированный язык программирования

    Существуют различные стили программирования, и один из самых популярных — объектно-ориентированное программирование. При таком подходе сложная проблема разбивается на более мелкие путём создания объектов. Благодаря чему код можно использовать повторно.

    Объектно-ориентированные функции есть во многих языках программирования, включая Java , Python и C++ . Если вы серьёзно настроены освоить программирование, объектно-ориентированный подход стоит включить в план своего обучения.

    Java работает быстро

    Ранние версии языка программирования Java часто критиковали за медленную работу. Но сегодня ситуация кардинально поменялась. Новые версии JVM работают значительно быстрее, а интерпретирующие их процессоры становятся всё шустрее.

    Сегодня Java — один из самых быстрых языков программирования. Хорошо оптимизированный Java-код работает почти так же быстро как низкоуровневые языки программирования, такие как C/C++ и намного быстрее, чем Python , PHP и т.д.

    Java — безопасная платформа

    Java представляет собой :

    • безопасную платформу для разработки и запуска приложений;
    • предоставляет средства для автоматического управления памятью, что снижает уязвимость кода;
    • обеспечивает безопасную передачу данных.

    Обширная базовая библиотека

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

    java.lang – это продвинутые функции для строк, массивов и т.д.

    java.util – библиотека для работы со структурами данных, регулярными выражениями, датой и временем и т.д.

    kava.io — библиотека для ввода/вывода файлов, обработки исключений и т.д.

    Применение платформы Java

    Перед обучением Java программированию с нуля , нужно знать, что на это платформе работает более 3 миллиардов устройств по всему миру. Для чего конкретно можно её применить:

    1. Приложения для Android — для разработки Android-приложений язык программирования Java часто используется в сочетании с Android SDK ( от английского software development kit — комплект разработки программного обеспечения ).
    2. Веб-приложения — Java используется для создания сетевых приложений с помощью серверных программ, фреймворка Struts и JSP . Вот некоторые популярные веб-приложения, написанные на Java: Google.com , Facebook.com , eBay.com , LinkedIn.com .

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

    1. Разработка программного обеспечения – на Java написаны такие программы как Eclipse , OpenOffice , Vuze , MATLAB и многие другие.
    2. Обработка Big Data – для обработки « больших данных » можно воспользоваться фреймворком Hadoop , написанным на Java .
    3. Трейдинговые системы – используя платформу Oracle Extreme Java Trading Platform , можно писать программы для трейдинга.
    4. Встраиваемые устройства – на основе технологии Java Embedded от Oracle сегодня работают миллиарды устройств, таких как телевизоры, SIM-карты , проигрыватели Blu-ray и т.д.

    Также программирование на Java используется для разработки игр, научных приложений ( к примеру, для обработки естественного языка ) и во многих других областях.

    Терминология Java, которую следует знать

    Java – это набор технологий ( язык программирования и компьютерная платформа ), предназначенных для создания и запуска программного обеспечения. Однако термином Java часто обозначают и сам язык программирования.

    Язык программирования Java – межплатформенный объектно-ориентированный язык программирования общего назначения, обладающий широкими возможностями.

    Java 9 – последняя на момент написания данной статьи версия Java .

    Java EE , Java Me и Java SE – эти названия обозначают Java Enterprise Edition , Micro Edition и Standard Edition , соответственно.

    Java EE нацелена на приложения, запускаемые на серверах. Java ME создана для ограниченных по мощности устройств, таких как встраиваемые устройства. Java SE — стандартное издание Java для написания обычных программ.

    Если вы новичок в Java-программировании , рекомендуем начать с Java SE .

    JVM — Java Virtual Machine (« виртуальная машина Java ») — это программа, позволяющая компьютеру запускать программы, написанные на Java .

    JRE – Java Runtime Environment (« среда выполнения Java ») включает в себя JVM , соответствующие библиотеки и другие компоненты, необходимые для запуска программ. Но в JRE нет компилятора, отладчика и других средств разработки.

    JDK – Java Development Kit ( комплект Java разработчика ) содержит JRE и другие инструменты разработки, такие как компиляторы, отладчики и т.д.

    Как запустить Java на своей операционной системе

    Как запустить Java на Mac OS

    Вот что нужно сделать для Java программирование с нуля и установки платформы на Mac OS X или macOS :

    1. Скачайте свежую версию Java ( JDK ) со страницы загрузки Java SE .
    2. Дважды кликните по скачанному DMG-файлу и следуйте инструкциям программы-установщика.
    3. Для верификации установки откройте терминал и введите следующую команду:

    javac –version

    Если Java установлена верно, на экран будет выведена версия программы ( например, javac 1.8.0_60 ).

    Следующим шагом будет установка IDE ( интегрированной среды разработки ) для написания и запуска Java-кода . Мы установим бесплатную версию IntelliJ IDEA и запустим на ней Java . Вот что нужно для этого сделать:

    1. Перейдите на страницу загрузки IntelliJ и скачайте бесплатную версию Community Edition .
    1. Откройте скачанный DMG-файл и следуйте инструкциям по установке. Для быстрого доступа можно переместить IntelliJ IDEA в папку « Программы ».
    2. Откройте IntelliJ IDEA . Выберите опцию « Don ’ t import settings » (« Не импортировать настройки ») и нажмите « Ok » . После этого примите политику приватности Jetbrains , нажав на кнопку « Accept » .
    3. Теперь можно настроить интерфейс под себя. Также можно пропустить этот шаг и оставить всё по умолчанию. Если не уверены, просто пропускайте этот шаг, нажав кнопку « Skip All and Set Defaults » (« Пропустить всё и установить настройки по умолчанию »).
    1. Программа покажет вам страницу приветствия. Нажмите на кнопку « Create New Project » (« Создать новый проект »).
    2. В следующем окне выберите « Java » в левой панели и нажмите « New » вверху окна программы для выбора « JDK » . Здесь надо выбрать место, куда установили JDK , после чего нажать Next .
    1. У вас будет вариант создать проект из шаблона (« Create project from template » ). Игнорируем его и нажимаем кнопку « Next » .
    2. На следующем шаге установки языка программирования Java введите имя проекта и нажмите кнопку « Finish » .
    3. В левой панели вы увидите свой проект. Если панели не видно, перейдите в меню Views > Tool Windows > Project .
    4. Зайдите в Hello > New > Java и задайте имя класса. Мы назвали его First .
    1. Напишите Java-код и сохраните проект.
    2. Для запуска только что написанной программы, зайдите в Run > Run… Нажмите на First ( то есть имя созданного нами файла ) — программа скомпилирует файл и запустит его.

    Как запустить Java на Linux

    Для запуска примеров из уроков программирования с нуля Java на Linux понадобится JAVA SE Development Kit ( JDK ) и IDE для разработки своих проектов. Следуйте инструкции шаг за шагом, чтобы начать работу с Java .

      Откройте терминал и наберите следующую команду для установки Java:

    java –version

    Если выводится текущая версия, установка прошла успешно. Если же нет, сверьтесь со страничкой помощи Oracle .

    Установка IntelliJ >страницу загрузки IntelliJ IDEA .

    1. Скачайте бесплатную версию Community Edition , нажав кнопку « Загрузить ».
    2. После скачивания смените в терминале директорию на директорию загрузок и извлеките tar-файл Java в папку /opt следующей командой:
    1. После распаковки поменяйте директорию на папку bin программы IntelliJ IDEA :
    1. Два раза нажимаем « Next » и создаём проект.
    2. На следующем шаге введите имя проекта и нажмите кнопку « Finish » . Теперь в левой панели вы увидите свой проект. Если этой панели не видно, перейдите в меню Views > Tool Windows > Project .
    3. Добавьте новый класс Java . Выберите src на левой панели правой кнопкой и зайдите в New > Java Class . Задайте имя класса. В имени класса не должно быть пробелов.
    1. Напишите Java-код и сохраните проект.
    2. Для запуска программы, зайдите в Run > Run … Нажмите на HelloWorld ( название проекта ) — программа скомпилирует файл и запустит его.

    Как запустить Java на Windows (XP, 7, 8 и 10)

    Для освоения Java основ программирования и запуска платформы на Windows потребуется JAVA SE Development Kit (JDK) и IDE для разработки проектов. Следуйте пошаговой инструкции, приведенной ниже:

    Установка Java

    • Перейдите на страницу загрузки Java Standard Edition Development Kit .
    1. В разделе Java SE Development Kit вверху таблицы нажмите « Accept License agreement» (« Принять лицензионное соглашение »). Затем кликните по ссылке Windows (x64) , если у вас 64-битная операционная система или Windows (x86) , если у вас 32-битная ОС .
    1. После скачивания запустите установочный файл и следуйте инструкциям, которые будут появляться на экране. Нажмите « Next ». Выберите все функции, нажав « This feature will be installed on local hard drive » и скопируйте место установки ( оно выделено жёлтым ) в « Блокнот », после чего снова нажмите « Next ».
    1. В процессе установки появится запрос об установке JRE . Нажмите « Next » , а затем « Finish » для завершения установки.
    2. Теперь необходимо отредактировать переменную PATH . Перейдите в Панель управления > Система и безопасность > Система . В левой панели выберите « Дополнительные параметры системы».
    1. Нажмите « Переменные среды» . В разделе « Системные переменные» найдите переменную PATH и в следующем окне нажмите « Изменить» .
    1. Выберите весь текст в поле « Значение переменной» и скопируйте его в отдельный текстовый файл. Так будет легче его отредактировать и проверить на наличие ошибок. Посмотрите, есть ли в скопированном тексте строка: C : ProgramData Oracle Java javapath ; . Если да, то можно переходить к следующему шагу. Если нет, то вставьте скопированное ранее место установки в начало переменной и добавьте в конце строки bin вот так: C : Program Files ( x 86) Java jdk 1.8.0_112 bin ; Обратите внимание, что ваша версия JDK ( jdk 1.8.0_112 ) может отличаться. Скопируйте значение переменной и вставьте его в окошко PATH .
    1. Нажмите « ОК », чтобы сохранить внесенные изменения.
    2. Чтобы проверить, правильно ли установлена платформа для введения в программирование Java , откройте командную строку , набрав cmd в строке поиска Windows или через команду « Выполнить… » ( Windows — R ). Введите команду java -version . Если отображается текущая версия Java , значит, установка прошла успешно. Если нет, сверьтесь со страничкой помощи Oracle .

    Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Скачайте бесплатную версию Community Edition , нажав « Загрузить ».
    1. После загрузки запустите файл установки и следуйте инструкциям, которые будут появляться на экране. Затем создайте ярлык на рабочем столе для 64-битной версии и добавьте ассоциации с расширением .java . Нажмите « Next » и продолжайте установку.
    1. После установки откройте IntelliJ IDEA , нажав на значок на рабочем столе.
    2. Выберите « Don ’ t import settings » (« Не импортировать настройки ») и нажмите « OK ». После этого принимаем политику приватности Jetbrains, нажав « Accept ».
    3. Теперь можно настроить интерфейс под себя. Также можно пропустить этот шаг и оставить всё по умолчанию, нажав кнопку « Skip All and Set Defaults » .
    4. Программа покажет страницу приветствия. Нажмите « Create New Project » (« Создать новый проект »).
    1. В следующем окне выберите « Java » в левой панели и нажмите « New » в верхней части окна программы для выбора JDK . Здесь надо выбрать местоположение, куда установили JDK во время установки Java , после чего нажать « Next ».
    2. IntelliJ IDEA найдёт JDK и распознает его. Никакие другие опции отмечать не нужно, просто нажмите « Next » .
    3. На следующем экране введите имя проекта: HelloWorld и нажмите « Finish ». Если программа скажет, что директории не существует, нажмите « ОК ». Если вы не видите левой панели, перейдите в меню Views > Tool Windows > Project .
    4. Чтобы задать имя класса, выберите в левой панели папку src. Кликните по ней правой кнопкой мыши, зайдите в New > Java и задайте имя класса. В имени класса не должно быть пробелов.
    1. Напишите код и сохраните проект Java урока программирования .
    2. Для запуска программы, зайдите в меню Run > Run … Нажмите на HelloWorld — программа скомпилирует файл и запустит его.

    Ваша первая программа на Java

    Чтобы познакомить пользователей с новым языком программирования, используют программу Hello World (« Привет, мир! »). Это простая программа, которая выводит на экран слова Hello, World ! В этом разделе мы научим вас писать данную программу на Java , используя IntelliJ IDEA .

    1. Откройте IntelliJ IDEA .
    2. Перейдите в File > New > Project… > Java ( в левой панели навигации ).
    3. Задайте имя проекта ( Project Name ) из курса программирования J a va . Мы назовём его Hello World и нажмём « Finish ».
    4. Теперь нужно создать новый класс Java .
    5. Выберите папку src в левой панели, после чего перейдите в меню File > New > Java Class и задайте имя нового класса- HelloWorld .
    6. Скопируйте следующий код в файл HelloWorld.java и сохраните его.
    1. Нажмите кнопку запуска ( Run ). Если всё в порядке, вы увидите на экране надпись Hello, World !

    Как выучить Java?

    Официальная документация Java

    Oracle , компания, владеющая Java , публикует качественные уроки. Официальная документация освещает все функции Java и регулярно обновляется.

    Примечание: единственный минус — официальная документация Java не всегда написана самым простым языком.

    Рекомендуемые книги по Java

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

    Java: Полное руководство (10-е издание)

    Отличная книга для тех, кто только начинает изучать Java . Последнее издание включает все функции релиза Java 8 .

    В книге описано всё, что нужно знать о программировании на Java , включая синтаксис, ключевые слова и фундаментальные основы программирования, а также библиотеку API Java , апплеты Java и многое другое.

    Философия Java (4-е издание)

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

    Java 8. Карманный справочник: Скорая помощь Java-программистам

    Эта книга содержит понятные ответы на вопросы, возникающие при обучении J ava программированию с нуля . Она кратко рассказывает обо всех основных концепциях Java ( включая Java 9 ). Не хотите листать сотни страниц в поисках нужной строчки? Купите эту книгу.

    Вместо заключения

    Если начнёте изучать Java , не ошибётесь — это перспективный язык программирования, полный самых разнообразных возможностей.

    Перед тем, как приступить к изучению Java , воспользуйтесь несколькими советами:

    • Не читайте обучающие статьи и примеры как роман. Единственный способ стать хорошим программистом — писать много кода.
    • Если переходите с другого языка программирования ( скажем , C# ), не надо писать код в стиле C# .
    • Найдите онлайн-сообщества, посвященные Java . Когда научитесь писать простые программы на Java , найдите популярные сайты и форумы, посвященные Java . Пробуйте решать проблемы, возникающие у других программистов. Это отличный способ расширить собственные знания. К тому же, если у вас возникнет загвоздка, вы будете знать, где можно попросить помощи.

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

    Данная публикация представляет собой перевод статьи « Learn Java Programming. The Definitive Guide » , подготовленной дружной командой проекта Интернет-технологии.ру

    В чем разница между java и core java?

    при просмотре вакансий в режиме онлайн я заметил, что некоторые отверстия требуют знания «core Java». Что такое ядро java и чем оно отличается от java?

    15 ответов:

    «Core Java» — это термин Sun, используемый для обозначения Java SE, стандартная версия и набор связанных технологий, таких как Java VM, CORBA и т. д. Это в основном отличается от, скажем, Java ME или Java EE.

    также обратите внимание, что они говорят о наборе библиотек, а не о языке программирования. То есть основной способ написания Java не меняется, независимо от используемых библиотек.

    «Core Java» — это определение Oracle и относится к подмножеству технологий Java SE.

    Это на самом деле не связано с самим языком Java, а скорее с набором некоторых «базовых» пакетов. В результате это сказывается на подходах к развитию.

    В настоящее время ядро Java определяется как следующий набор:

    • базовые технологии
    • описание
    • HotSpot VM
    • интерфейс именования и каталогов Java (JNDI)
    • мониторинг и управление приложениями
    • инструменты API
    • XML

    но, как вы, наверное, понимаете, даже термин «базовые технологии» несколько неясен ;-) так что это не столь строгое определение. Вот официальная страница для этого термина:

    вот еще одна картинка, иллюстрирующая Java Core API / technologies внутри Java SE платформа.

    Я думаю, когда вы видите фразу «ядро Java», они говорят об основах языка и, возможно, некоторые знания Java SE. Я не знаю, почему они потрудились бы поставить «ядро» там.

    некоторые компании поставят «core java», чтобы отличить от Java EE, но это все еще просто ваша базовая Java.

    есть две категории следующим образом

    по мнению некоторых разработчиков, «ядро Java» относится к пакету API java.util.* , который в основном используется при кодировании.

    термин «ядро Java» не определяется Sun, это просто определение сленга.

    J2ME / J2EE по-прежнему зависят от J2SDK API для компиляции и выполнения.

    никто бы не сказал java.util.* отделяется от J2SDK для использования.

    «Core Java» — это термин Sun Microsystem, используемый для обозначения Java SE. И есть Java ME и Java EE (J2EE). Так что это сказано для того, чтобы различать с Java ME и J2EE. Поэтому я чувствую, что ядро Java используется только для упоминания J2SE.

    простой шаг, чтобы понять, что такое java и ядро java.

    найти книгу для Java.

    найти книгу для ядра java.

    сравните содержание обеих книг.

    фактический результат: оба имеют почти одинаковое содержание.

    результат: Java и ядро java одинаковы.

    ядро java-это просто сленг, чтобы подчеркните глубокое знание базового языка java. но если я говорю, что знаю Java, это не значит, что у меня нет глубоких знаний базовой java, или если я знаю все на java.

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

    Это не официальный термин. Я думаю это означает знание самого языка Java и наиболее важных частей стандартного API (java.Лэнг, Ява.Ио, Ява.пакеты utils, в основном), в отличие от множества специализированных API и фреймворков (J2EE, JPA, JNDI, JSTL. ) которые часто требуются для заданий Java.

    «основные Java» является термином солнца, используется, чтобы обратиться к Java SE, в стандартной версии и набор связанных с ними технологий, таких как виртуальная машина Java, CORBA, так и так далее. Это в основном отличается от, скажем, Java ME или Java EE.

    также обратите внимание, что они говорят о наборе библиотек, а не о языке программирования. То есть основной способ написания Java не меняется, независимо от используемых библиотек.

    Java имеет в основном три подкатегории :

    1. Java Standard Edition (JSE) или Core Java
    2. Java Enterprise Edition (JEE)
    3. Java Mobile Edition (JME)

    здесь core java — это первый и основной шаг для запуска или изучения java с самого начала.

    Java-это язык программирования, но ядро java-это только часть java. Ядро java является основным из java. Если вы новичок в JAVA, то вы должны начать с основной java.

    Java в основном категории в 3-х частях:

    1.) J2SE / Core java означает Java 2 standard edition и обычно предназначен для разработки настольных приложений, формирует core/base API.

    2.) J2EE означает Java 2 enterprise edition для приложений, которые работают на серверах, например эти сайты. (Spring, Struts-это Java-фреймворки, в основном используемые для J2EE)

    3.) J2ME означает Java 2 micro edition для приложений, которые работают на устройствах с ограниченными ресурсами (устройства малого масштаба), таких как сотовые телефоны, например игры.

    чтобы узнать J2EE или J2ME, вы должны знать ядро java.

    [java] Почему я не люблю Java

    Только один аспект затрону, никак не другие темы — высокое потребление ресурсов, общая тормознутость и пр.
    Кратко: слишком-многабукв-многафайлов.
    Программы на Java — это 3-4-5 уровней каталогов, причем часто — 1 файл в самом нижнем каталоге. Большая часть кода занимает декларации чего-либо, вызовы-перевызовы, абстрактные классы и т.д.
    В итоге если очень хочется понять, что и как работает, то начинается хождение по многим файлам сразу. Кропотливо, ты идёшь в функцию, из которой что-то должно делаться. Потом ты понимаешь, что там одна строчка, которая на самом деле делает что-то другое. Ты идёшь в другой файл, и видишь там, что это от чего-то там наследуется, идёшь в третье место. И так, шаг за шагом ты распутываешь клубок.
    Возможно, тебе помогает IDE, так как там есть инструменты быстро по файлам переключаться.
    В других языках — всё не так запущено. Конечно, вся эта фигня тем больше пожирает исходники, чем больше неуместного ООП в проекте. Но Java — тут без вариантов.
    Не бывает так, что простая программа и 3 файла в каталоге src.
    На Питоне — бывает. На PHP — бывает. На C++ тоже бывает.
    На Java — всегда будет на одну строчку смысла строчек двадцать белиберды.

    тсс, не говорите ему про рефлексию.

    чтобы тормоза еще раньше были: при компиляции

    зато весь проект может жить в одной папке
    И лучше тормоза при компиляции, чем тормоза при кодогенерации.

    Я бы добавил, что java-опухоль постоянно пытается дать метастазы в другие, еще здоровые платформы. По моим ощущениям, PHP уже заражен безнадежно, под него уже наклепали джаваподобных фреймворков по типу такого и среднестатистический пхпшник уже боится самостоятельно, без фреймворка, какой-то код написать. Javascript пока держится, например java-подобный фреймворк angular был отринут javascript-сообществом.
    Какую-то попытку анализа ситуации я встречал в эссе Java Shop Politics, там java рассматривается в контексте организационной структуры компаний, которые ее применяют.

    Я, конечно, не веб программист, но хабре регулярно пишут про angular. Как-то он не похож на сдохший проект. По поводу опухоли. Там scala.js зреет. Сам компилятор уже вылез из беты, скоро бету перешагнёт инфраструктура. Тогда среднестатистический пользователь узнает, что такое 20 метров ява скрипта на страничке.

    Тогда среднестатистический пользователь узнает, что такое 20 метров ява скрипта на страничке.

    фреймворк angular был отринут javascript-сообществом.

    Я что-то пропустил, на скале пишут для среднестатистического пользователя?

    Я что-то пропустил, на скале пишут для среднестатистического пользователя?

    На Питоне — бывает. На PHP — бывает. На C++ тоже бывает.
    На Java — всегда будет на одну строчку смысла строчек двадцать белиберды.

    А теперь у них случился тот же загон, что и у node.js — давайте на одном языке писать как для server side, так и для client side.

    Если же в проекте нужно сделать больше одного уровня сложности

    Программа начинает сыпаться в произвольном месте с ни о чём не говорящим исключением, какая-нибудь библиотека после обновления может ожидать получать вместо содержимого файла ссылку на него или делать половину работы в зависимости от погоды на марсе и других подключенных модулей, через месяц после работы на продакшне программа может упасть с ошибкой компиляции.

    Только один аспект затрону, никак не другие темы — высокое потребление ресурсов, общая тормознутость и пр.

    ООП угробит проганье, потому что их всемером не удержишь

    Тут важно отметить, что никаких отладочных инструментов нет, джава-приложение — монструозный непрозрачный ком, который живет своей богатой внутренней жизнью.

    Иногда я отлаживал незнакомые программы таким способом — заменял какой-то скрипт на обертку, которая логировала аргументы и передавала их в оборачиваемый скрипт, после этого можно было легко понять, с правильными ли агрументами вызывается скрипт, и подобрать нужные аргументы, вызывая скрипт просто из командой строки. Джаве такой уровень интроспекции и не снился.

    Самые загадочные падения в рантайме я встречал у джавы как раз.

    > Я бы добавил, что java-опухоль постоянно пытается дать метастазы в другие, еще здоровые платформы. По моим ощущениям, PHP уже заражен безнадежно
    Звучит убедительно. Пошёл учить таблицы ==, === и isNone для разных типов

    Давай разберем твою жаба-психотравму по пунктам:

    Например, бывает забавная ошибка X cannot be cast to X, вот результаты в гугле по этой проблеме.

    На это есть ряд причин, основная — инфраструктура написана бесноватыми индусами.

    Например, есть такой скачиватель зависимостей Maven, есть проблема diamond зависимостей — либа A зависит от C версии 1.1, а B — от C версии 1.2. Maven решает эту проблему так, что скачивает и добавляет обе версии в classpath, а какая версия будет подхвачена, решается уже в рантайме, в зависимости от порядка итерации по файлам в файловой системе.
    Помню, дедлайн, надо что-то делать, а у меня вылетает этот странный ClassCastException. У всех работает, а у меня нет.

    Джаве такой уровень интроспекции и не снился.

    А можешь рассказать немного о своих проектах? Лично я привык отлаживать её прям в IDE, если надо вообще подключаясь к удалённой машине с подхватом кода, очевидно.

    Букварная ошибка, как жаль что ты работал жаба погромистом и не прочел букварь. Плохая жаба, плохая.

    Кстати, почему ты все не переделал там, как нужно, по правильному, а вместо этого пассивно страдал?

    Там проблема явно в каком-то коде работы с класслоадерами, или какой-то класс грузится не из того джара, что ты увидишь в дебаггере?

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

    Ну и конечно дебаггер — это вообще неудобно. Например, у тебя есть код какого-то обхода дерева (пример жизненный, потому что например класслоадеры в джаве образуют дерево), как выглядит твоя работа в дебаггере? Как я себе представляю, надо сидеть много раз жать Step Over / Step Into, все время рискуя промахнуться и начинать все заново.

    Все нормально в жабе с интроспекцией, начиная с jstack/jmap и далее везде,

    По-правильному, нужно было бы джаву вообще удалить, но это было бы слишком радикально.

    Кстати пользуясь случаем вопрос: питон\js погромисты, вы какой IDE пользуетесь?

    питон\js погромисты, вы какой IDE пользуетесь?

    Брейкпоинты — это инструмент который не скриптуется

    На основе чего сделан такой вывод?

    в джаве, если использовать Eclipse/Idea, то нет

    Брейкпоинты — это инструмент который не скриптуется, поэтому в нем приходится совершать нудную тупую работу — ходить кнопочками по дереву вызовов.

    И что ты делаешь, если нужно поменять сигнатуру метода? Какие есть возможности стат проверки кода и рефакторинга?

    А накатывать непонятно как работающий скрипт напродакшн можешь?

    Джава — другая, да. Она не подходит для скриптов и заставляет тебя писать поддерживаемый код: сразу думать как ты хочешь обрабатывать ошибки, поддерживает его связность и заставляет тебя думать о куче других вещей. Зато более сложные проекты работают без особых проблем.

    В питоне внешняя библиотека — это просто текстовые файлы, без всяких zip-архивов, открыл в тектовом редакторе и навставлял принтов.

    Я бы весь тред переименовал в «К — Компетентность». Не, серьёзно. У меня нехило бомбит. И даже не из-за нападок на жаву, здесь, в общем-то, так принято, и надо признать, аргументы обычно весомые. Но конкретно в этом треде творится какой-то икспердный трололо. Во что превратился этот раздел? Где программисты-то? Вам самим не стыдно писать-то такую херню?

    И что ты делаешь, если нужно поменять сигнатуру метода?

    Какие есть возможности стат проверки кода и рефакторинга?

    strace делать кстати тоже никто не запрещает

    запустил strace -f на джава апликуху, работающую на холостом ходу без нагрузки. так эта сволочь мне так забила мне узенький канал до сервера, что мне пришлось ждать пока ssh-сервер на том конце не сдетектирует что сессия накрылась и не убьёт strace.

    Меняю сигнатуру и прохожусь по всем местам вызова.

    а если твоя IDE в одном месте Class.method подцепит из одного jar-а, а вдругом — из другого — она сообразит, что это на самом деле один и тот же Class только подцелпенный из разных мест?
    или ты спокойно отрефакторишь а потом будешь ловить точно так же в продакшне?

    питон программисты, вы какой IDE пользуетесь?

    Как ты это себе представляешь? Если нет актуальной версии кода, то покажет предупреждение.

    яхз как
    если прога на джаве может сделать это в проде, то почему IDE, которая тоже наверняка на джаве, не может поступить так же?

    Если у тебя есть несколько версий одной библиотеки, то подгрузится только одна. Если ты грузишь одну библиотеку двумя класслоадерами (зачем?), то ты получишь то, как настроишь.
    Кстати картинка в тему сегодняшняя:

    Да нифига это не загадочное падение, человек просто документацию не читал. Я когда увидел строчку гугла, первым делом подумал, а classloader у них одинаковый? Потом открываю stackoverflow — так и есть. Не найти для ява дебагера — это пять. Там даже ретродебаг есть.
    Но вообще, автор подтвердил мой тезис, один язык для всех случаев жизни — не очень. Для маленьких скриптов нужен маленький скриптовый язык. А для параллельности — уже нормальная виртуальная машина, python, php, javascript — и прочие скриптоязыки в параллельность не умеют.

    Если ты грузишь одну библиотеку двумя класслоадерами (зачем?)

    И что ты делаешь, если нужно поменять сигнатуру метода? Какие есть возможности стат проверки кода и рефакторинга?

    Ну добиться этого не так-то легко

    Во что превратился этот раздел? Где программисты-то? Вам самим не стыдно писать-то такую херню?

    ещё раз обращу внимание, что сервер работал без нагрузки.
    Вот например приложение на go (умный прокси с авторизацией).
    А вот его предыдущая версия на джаве почти полностью с той же функциональностью.

    Ну или вот с твоим грепом.

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

    на хабре регулярно пишут про angular

    надо уметь пользоваться, знать про mvn depency:analyze / mvn depency:tree / maven-enforcer-plugin. Ты не знал, бяда.

    Да, мавеном, как любым инструментом, надо уметь пользоваться, знать про mvn depency:analyze / mvn depency:tree / maven-enforcer-plugin. Ты не знал, бяда

    Особенно убивает вот это — порог вхождения.
    Если ты не знаешь 100500 каких-то говняных штук, типа что можно где-то какую-то галку поставить и оно ВНЕЗАПНО начинает работать.
    В итоге знание Java == на 10% знание Java и на 90% умение тыкать нужные штуки в окошках IDE и прочих дебаггерах.
    В питоне ты изучаешь язык и сразу начинаешь писать. В том редакторе, в котором тебе удобно. Сам под себя начинаешь подбирать тулзы и IDE какие тебе нравятся. Тебе не надо погружаться в правила неведомые и выбирать монастырь, в который со своим уставом не ходят.

    Ну справедливости ради, в питоне не меньше ебалы с зависимостями: эта либа работает только со второй версией, эта — тока с третьей, эта зависит от сишной части, которая на этой платформе не собирается и танцуешь с бубном, чтобы заставить все это вместе работать (это с моей непитоньей высоты)

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

    Написать самый простой Hello-World без IDE — это очень и очень много всего надо заботать. Если подключить ещё либу, то ещё часа 2-3 убьёшь.
    Собственно об этом и речь, Java сама по себе на 90% состоит из этого всего говноинструментария, без которого ты вообще никак не сможешь начать работать.

    Написать самый простой Hello-World без IDE — это очень и очень много всего надо заботать. Если подключить ещё либу, то ещё часа 2-3 убьёшь.

    Написать самый простой Hello-World без IDE — это очень и очень много всего надо заботать. Если подключить ещё либу, то ещё часа 2-3 убьёшь.
    Собственно об этом и речь, Java сама по себе на 90% состоит из этого всего говноинструментария, без которого ты вообще никак не сможешь начать работать.

    Особенно убивает вот это — порог вхождения.
    Если ты не знаешь 100500 каких-то говняных штук, типа что можно где-то какую-то галку поставить и оно ВНЕЗАПНО начинает работать.

    Видимо, победила толерантность.
    Когда-то программистов PHP за людей не считали просто.

    В итоге знание Java == на 10% знание Java и на 90% умение тыкать нужные штуки в окошках IDE и прочих дебаггерах.

    В джава мире до сих пор не смогли повторить make

    у меня в свое время пригорело от type erasure и отсутствия yield-ов, хотя бы в варианте c#
    кстати, а сейчас mvn все еще используется? есть же gradle, удобно и настраиваемо

    Не гони херню. Даже наши ПХПшники осилили весь стек технологий за месяц, не говоря уже о Hello-World.

    Наш релиз был постепенным и успешным. Мы на старом сайте зафигачили плашку «перейти на новый сайт». Как половина пользователей переползла, поменяли DNS, и уже на новом сайте запилили плашку «перейти на старую версию».

    Джава — другая, да. Она не подходит для скриптов и заставляет тебя писать поддерживаемый код: сразу думать как ты хочешь обрабатывать ошибки, поддерживает его связность и заставляет тебя думать о куче других вещей. Зато более сложные проекты работают без особых проблем.

    ну хз, если придерживаться хорошего стиля написания кода, как там прям можно выстрелить себе в ногу чаще, чем в других языках? Если писать, как попало, то конечно, закопаешься в отладках.

    Зачем вообще нужна джава, если есть с++ с неплохой поддержкой кроссплатформенности в виде с++11 и буста, плюс с заведомо бОльшей скоростью работы программы и с бОльшими возможностями?

    4. Про сборщик мусора — в C++ уже умеют эффективно дефрагментировать память?

    В плюсах тоже может быть сборщик, или ты о чем?

    Ну и да, вся сущность С++ препятствует эффективной работе GC: http://www.stroustrup.com/C++11FAQ.html#gc-abi

    Да вроде не всё так радужно. Дефрагментировать без stw научились относительно недавно, только в G1. И это вовсе не основная причина, почему она жрёт много памяти. Реально GC хорошо работает только в предположении гипотезы о жизни объектов, что, во-первых, не всегда так, а во-вторых, это подстраивается только в рантайме и не очень быстро, т.е. первые сборки будут очень неэффективными. Совсем без фризов умеет только azule (из мне известных), но за счёт read-барьеров, что аффектит производительность. Возможно, что-то есть у RT, но я хз. Кароче, неочевидно, что это один огромный плюс

    Ну зависит от способа использования конечно. Java оптимизируется под долгое выполнение программы, тут и компиляция после прогрева и настройка остальных частей. Идеала нет и ты в любом случае меняешь производительность на надежность и оптимальность работы с другими ресурсами (ака память).
    Если тебе нудна производительность ты, кстати, можешь настроить другой gc, несжимающий.
    Так что есть свои особенности, но ИМХО плюс внушительный.
    А что, по твоему мнению, главная причина прожорливости по памяти?

    Сейчас написал две одинаковые программы на тест gc, одну на ноде другую на джаве:

    Отсутствие value-типов, отсутствие аллокации на стеке (частично должно компенсироваться escape-анализом, насколько реально — хз), ну, и принцип работы самого сборщика. CMS-у для комфортной работы нужно вдвое больше памяти на OldGen, чем реально требуется программе. А вот дефрагментацию он не обеспечивает

    А remove(0) это реально то же самое, что и shift()? И сколько, по-твоему занимает сама сборка?

    Посмотрел. Говорят, что там список, а не массив. Давай то же самое с LinkedList

    Посмотрел. Говорят, что там список, а не массив.

    Вот здесь http://javascript.ru/Array/shift
    Это не так? Я js не знаю, честно говоря.

    И здесь вроде также http://developer.mozilla.org/ru/docs/Web/JavaScript/Referen.
    А вот на твоём примере, если в жаве сделать список, он cстановится в 5 раз быстрее, чем js

    Я это понимаю, хочу до DDD ещё донести

    А вот на твоём примере, если в жаве сделать список, он cстановится в 5 раз быстрее, чем js

    Не уверен, но даже если это так, ты ведь понимешь, что тестируешь вовсе не gc?
    И я сейчас проверил не на 4000, а на 40000 и 400, время не изменилось. Это еще больше склоняет в сторону списков.
    Кароче, пруф, что там массив.

    Отсутствие value-типов, отсутствие аллокации на стеке (частично должно компенсироваться escape-анализом, насколько реально — хз), ну, и принцип работы самого сборщика.

    Я это понимаю, хочу до DDD ещё донести

    При этом на реальных, не игрушечных скоростях эффективный GC начинает сыпаться — и на этой стадии Java-программеры приступают к изобретению велосипедов для его объезда.

    Вывод то какой? Выкинуть gc, только ручная работа с памятью, только хардкор?

    А вывод-то простой: из того кода, что нагородили на Java авторы, когда увидели как он работает на высоких нагрузках, можно выжать некое подмножество, которое почти полностью отображается в аналогичную программу на C++

    если в жаве сделать список, он cстановится в 5 раз быстрее, чем js

    А доказать-то ты теперь чего хочешь?

    А доказать-то ты теперь чего хочешь?

    Тезис: производительность java на уровне скриптов для анимации веб-страничек, с C++ смешно сравнивать.

    А нахера ты тогда сравниваешь с js? И кто-то сравнивает разве? Блин, сюр продолжается. Я же хотел навсегда здесь замолчать

    Тезис: производительность java на уровне скриптов для анимации веб-страничек, с C++ смешно сравнивать.

    я знаю, что он там может быть, просто в Java уже давно не просто сборщик мусора . GC в Java занимается ещё такой хорошей вещью, как дефрагментация памяти.

    А в С++ есть аллокаторы, выделяющие память так, чтобы дефрагментации не было. Ну точнее не в самом С++, но в сторонних библиотеках их уже немало написано.

    Да, описался.
    Вот такие штуки используют обычно при написании системы, работающей в реальном времени 24/7 http://en.m.wikipedia.org/wiki/Memory_pool

    А вывод-то простой: из того кода, что нагородили на Java авторы, когда увидели как он работает на высоких нагрузках, можно выжать некое подмножество, которое почти полностью отображается в аналогичную программу на C++

    Я кстати до поры до времени думал, что тыкание кнопок в визардах осталось в 90-x, типа как UML или что-то такое. Но знакомясь со скалой, я с удивлением обнаружил, что официальные туториалы предлагают скачать визард для генерации проекта. Инсталлер визарда весит 500Мб, что намекает на легковесность потенциальных приложений.

    Хотел сначала Eclipse поставить на старый ноут ( linux mint 17 ), но Eclipse съел всю оперативку, так даже хром не поступал.

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

    Наибольшая сложность была с настройкой IDE
    Хотел сначала Eclipse поставить на старый ноут ( linux mint 17 ), но Eclipse съел всю оперативку, так даже хром не поступал.
    Поставил на мак Intellij — проблемы возникли. После начал ставить по видео-инструкции.
    Оказалось, что у меня версия JDK не совпадает, курс рассчитан на более старую. Поменял и все заработало.
    P.S: Курс интересный, Scala вообще огонь, но инструментарий слишком громоздкий.

    Стесняюсь спросить, а сколько там памяти? На 2Gb вполне можно _работать_ (не просто учиться хэлоуворды писать, а именно работать — Java-Web на JSF, Eclipse RCP) даже с запущенным рядом FF с 10-20-30 вкладками и это всё на KDE 4!

    А что, на других языках есть идеальное решение, которое работает при любой модели данных и на любой нагрузке?

    Активатор не пробовал?

    нахера, спрашивается, нужна эта производительность при вычислении пи?

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

    Чтобы объяснять криворуким макакам, что это они программировать не умеют, а не джава не умеет считать

    Ваша Ява не обещает вообще никакое разумное время отклика

    Если вас тошнит, зачем вы её трахаете?
    UPD. Ты, оказывается, не тролль, у тебя реально полыхает. У меня есть немножко аргументов к тому, что ты написал, но я так понял, тебя это не особо интересует.

    У меня есть немножко аргументов к тому, что ты написал,

    Он как раз эти вопросы не поднимает. Вообще, у меня было ощущение, что еще чуть-чуть и все в этом треде вскроются как жырные тролли, а я один здесь останусь полыхать.
    Но если по порядку
    > Ваша Ява не обещает вообще никакое разумное время отклика.
    Именно, что не обещает. Не надо её использовать для RT-задач. Пианист, кажется, попытался, всё обосралось, а виноват оказался язык. На самом деле, можно попробовать Azul, или Javolution, но я не уверен, что оно даёт какие-то гарантии, надо изучить сначала.
    > Там запросто может проснуться ваш сраный гарбедж коллектор и на несколько минут приложение становится раком.
    Что ты там такое пишёшьк? У нас на 16 гигах в худшие времена фриз был 30 секунд. Мы конечно, вместо того, чтобы посмотреть, что у нас с памятью, тоже сразу сказали, что наше приложение идеально, виновата JVM.
    > немеренное количество говнобукв, которые не несут смысловой нагрузки.
    Да, некоторые языки более лаконичны, некоторые менее. IDE спасает, например, тем, что скрывает часть избыточной информации от пользователя. Про 3/4 он, конечно, загнул, но согласен, некоторые кострукции слишком громоздки. Странно, что в пример приводится C++, который гораздо сильнее этим страдает.

    Странно, что в пример приводится C++, который гораздо сильнее этим страдает.

    и на несколько минут приложение становится раком

    ну одно дело один клиент ждёт минуту, другое дело весь сервер ждёт минуту (или даже менее минуты — всего 59 секунд)

    Я не о времени, а о размытости формулировки «несколько минут», измеренных ощущениями. Когда подгорает, то и 20 секунд могут показаться минутами.

    Есть индийская история. Там типа один чувак запустил какую-то операцию в энтерпрайзном приложении, а она всё не завершалась и не завершалась. Ну он задолбался ждать, пошёл прогуляться, встретил прекрасную девушку, спустя некоторое время они поженились, семья, дети, то сё. Ещё там вроде война началась, или переезд, или что-то такое. Они терпели всяческие лишения, но чудом выкарабкались. И вот прошла вся его жизнь, он лежит при смерти, окружённый любящими родственниками, и вдруг слышит звук нотификейшона, смотрит на этот дашборд, а там — «Нет записей удовлетворяющих данному запросу. Обработка заняла 20 секунд».

    ну одно дело один клиент ждёт минуту, другое дело весь сервер ждёт минуту (или даже менее минуты — всего 59 секунд)

    Java читается, если уложить в голове суть фабрик, интерфейсов, паттернов

    Тут смешная история произошла. У нас есть тестировщик, который пишет автотесты на Selenium. Я ему помогаю иногда, пользуясь своими знаниями джавы.
    Сегодня у него возникла задача — для каждого из нескольких возможных статусов написать тест, которые будет пытаться применить статус, и проверять что все сработало верно.
    Как бы это выглядело в любом разумном языке (возьмем к примеру javascript)? Есть либа для юнит-тестов под названием jasmine. Там есть функция it, которая создает тест-спеку, например

    Теперь задача — для каждого возможного статуса сгенерить отдельную спеку:

    Теперь посмотрим, как это делается в джаве. Тестировщик показал мне эту страницу в документации по JUnit. Он все сделал по аналогии, но код не работал.
    Я бегло посмотрел, на заметил никаких ошибок, и залез в код JUnit, желая посмотреть, можно ли там что-то отдебажить. Я начал с класса Parameterized и натолкнулся на запутанный код полный рефлекшена, фабрик и паттернов, вот пример:

    Я потратил минут десять, не смог ничего понять, и оставил коллегу ни с чем (надо было уходить срочно).
    Мне кажется, этот пример отлично раскрывает суть джавы. В любом другом языке, если мне надо сделать повторяющееся действие, я пишу цикл, и все, задача решена.
    Но джава смеется над моими знаниями в области программирования. Тут недостаточно уметь писать циклы, надо сидеть и для простейшей задачи изучать какой-то безумный DSL.

    Но джава смеется над моими знаниями в области программирования.

    Блин, где вы такую жесть про gc находите про 30 секунд и больше — он же даже до G1 обычно только молодых вычищает, т.е. просто физически не на чем ему столько стоять.
    5 лет назад на low latency проекте была максимум на

    100мсек за день остановка — и мы gc тюнили.
    Чтобы 30 секунд получить, надо
    1. Заставить gc перераспределять ВСЮ память. Т.е. так что даже в old gen места не хватает, а операционка больше не даёт.
    2. Чтобы при этом часть памяти была на диске.
    Ну т.е. это ситуация, когда на другом бы языке приложения уже бы умерли, да и на джаве скоро OOM выпадет.

    Тут недостаточно уметь писать циклы, надо сидеть и для простейшей задачи изучать какой-то безумный DSL.

    Именно, что не обещает. Не надо её использовать для RT-задач. Пианист, кажется, попытался, всё обосралось, а виноват оказался язык. На самом деле, можно попробовать Azul, или Javolution, но я не уверен, что оно даёт какие-то гарантии, надо изучить сначала.

    А что тебе мешает цикл написать спрашивается?

    Это не больше чем пожелание.

    > Как это сделать в рамках JUnit?
    http://www.tutorialspoint.com/junit/junit_parameterized_test.
    В методе, аннотированном @Parametrized.Parameters можешь использовать свои любимые циклы.
    А в TestNG, например, можешь этот список предоставлять в виде xml-разметки

    Речь про STW для FullGC. Более мелкие (сборка YoungGen, Mark and Sweep для CMS и, хз, как оно зовётся для G1) происходят чаще, и вот их длину уже можно контролировать разными параметрами. В CMS это пара десятков циферек, а в G1 решили в параметры вынести таргеты, откуда и появилось ощущение, что оно умеет. Но, во-первых, он будет только пытаться, а во-вторых, защиты от FullGC всё равно не будет. Единственный способ, не затрагивающий модификацию самого приложения — увеличить память. Это почти всегда работает

    Что ты имеешь в виду? Что ты делаешь с явой, если она не выполняет твоих пожеланий? Демонстративно деинсталлишь jvm?

    Берешь и делаешь цикл. И всё.
    С параметрами (рефлексия — не твоя забота) предлагают на случай если ты супер экономишь код и тебе нужно сделать массу однотипных тестов.

    Ну на full gc нарваться сложно. Хотя если вы увеличиваете память, то я понимаю почему таки нарываетесь.

    Ну на full gc нарваться сложно

    Я правильно понял, что ява не должна собирать мусор?

    Сборка мусора (полная) — нештатная ситуация?

    То есть никаких аптаймов в несколько месяцев?

    Ты здесь рефлекшин нашёл?

    > Хотя если вы увеличиваете память, то я понимаю почему таки нарываетесь.
    И почему же?

    Сборщики сейчас умеют чистить память без FullGC. Но не всегда выходит. И вот если не выходит, надо что-то делать

    Сборщики сейчас умеют чистить память без FullGC.

    Почитай, как устроен CMS, и всё поймёшь

    Для жавы CMS и G1

    Да, под FullGC здесь понимается STW сборка. Раньше была только она, но сейчас почти всегда есть возможность собрать мусор в параллель с работой приложения

    Но он, насколько я помню, на стандартный. В том смысле что по умолчанию используется более простой и менее требовательный Parallel GC. Видимо оверхед от сборки в фоне зашкаливает.

    А еще по умолчанию память стомт 128 мб. Значит ли это, что больше низзя? Parallel GC он да, быстрый и при малых объёмах памяти работает очень быстро. Поэтому в большинстве случаев его хватает. А так все они вполне себе стандартные. К тому же, он был дефолтом в 1.5, а дальше я не помню, может и перекоючили

    А на мой взгляд Java — лучший язык программирования для реального бизнеса, для промышленной разработки ПО. Когда проект, который используют сотни реальных пользователей, разрабатывают в течении года и более разные программисты среднего интеллектуального уровня, то простота языка, его прямолинейность и защита от ошибок (статическая типизация) имеют первостепенное значение. Поддержка со стороны IDE, которая лучше всего развита в Java-мире, тоже очень важна.
    Программисту приходится читать и предельно ясно понимать код других разработчиков среднего уровня, чтобы добавить новую фичу. Удобнее всего это делать как раз при использовании Java. По этой причине, например, Scala плохо подходит для промышленной разработки. На мой взгляд, было бы лучше, чтобы вместо изобретения этого монстра, сделали Яву еще строже и прямолинейней.

    Что значит вместо? Каждый занимается своим делом. Одни пилят яву, другие скалу. Цели и финансирование у них отдельно. Меня вот вполне устраивает скала. Её всегда можно использовать только как яву на стероидах. К тому же скала не одинока. Из похожих проектов я могу назвать как минимум kotlin, ceylon (спасибо доброфоруму за ссылку) и ещё nemerle, но он для укрощения другого монстра создавался.
    Кстати, я так и не понимаю, чем java лучше для посредственного разработчика чем тот же питон. Контролируемые исключения? Практика очень спорная, многие предлагают эту фичу выкинуть из явы целиком. Простота конструкций? Так у питона тоже.

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

    чем java лучше для посредственного разработчика чем тот же питон

    внешний контроль — это система типиов? Ну так у java прогеров любимое развлечение — завернуть всё слишком сложное и непонятное в Object, а потом скастить. Перехватить все эксепшны и продолжить. Контроль не сильно помогает.
    К тому же промышленная разработка — это про сетевое взаимодействие, а типы проверять в нём уже не получается. Однофигственно, что питон посылает и обрабатывает данные через сеть, что ява, и тот и другой не имеют контроль над типами. Только устные соглашения о протоколе. Что в нём может передаваться и что нет.

    внешний контроль — это система типиов?

    Недавняя статья, поднимающая схожую проблему:
    Срезаем углы: почему rails может убить ruby
    Статья о том, как отсутствие средств контроля в языке приводит к тому, что одна библиотека убивает экосистему всего языка.

    В яве можно также сделать с помощью инструментария. Правда восторженные пользователи питона-руби, применяющие без лишней мысли monkey-patch, начнут говорить фуууу, рефлексия.

    В яве можно также сделать с помощью инструментария. [..] начнут говорить фуууу, рефлексия

    С помощью рефлексии в Java такое не сделаешь.

    Питон больше предназначен для пользователей (финансовых аналитиков, ученых), чем для разработчиков ПО в промышленном масштабе.

    Как можно разрабатывать на питоне что-то серьёзное для ынтырпрайза, если у него постоянно большие проблемы с обратной совместимостью? Впрочем это беда есть и у ruby, и у php. Бизнесу надо, чтобы код проработал и 5, и 10, и даже 20 лет. А на актуальной версии питона код для 2.x почти наверняка работать не будет. При этом java код конца 90-х вполне себе заведётся и будет работать на Java 8.

    Ну вон из джавы исчезает sum.misc.unsafe. Обратная совместимость рушится. А появление типов-параметров?

    Sun, Карл. Саму sun уже 5 лет как купили, на мисках депрекейт лет 10 висел.

    во втором javafx до сих пор живёт sun в названии внутренних классов.

    Я правильно понял, что ява не должна собирать мусор? Сборка мусора (полная) — нештатная ситуация? То есть никаких аптаймов в несколько месяцев?

    Ну так старый живёт, а не новый делают.

    С параметрами (рефлексия — не твоя забота) предлагают на случай если ты супер экономишь код и тебе нужно сделать массу однотипных тестов.

    Да, я сразу и написал что мне надо сделать массу однотипных тестов. В js я просто вызываю функцию в цикле, в java мне надо изучать запутанный фреймворк для вызывания функций в цикле.

    Из-за такого подхода программисты теряют веру в свои возможности и не могут ни шагу ступить без фреймворка. Выше пользователь Ss пишет:

    А в TestNG, например, можешь этот список предоставлять в виде xml-разметки

    Из-за такого подхода программисты теряют веру в свои возможности

    Concurrent Mode Failure
    The CMS collector uses one or more garbage collector threads that run simultaneously with the application threads with the goal of completing the collection of the tenured generation before it becomes full. As described previously, in normal operation, the CMS collector does most of its tracing and sweeping work with the application threads still running, so only brief pauses are seen by the application threads. However, if the CMS collector is unable to finish reclaiming the unreachable objects before the tenured generation fills up, or if an allocation cannot be satisfied with the available free space blocks in the tenured generation, then the application is paused and the collection is completed with all the application threads stopped. The inability to complete a collection concurrently is referred to as concurrent mode failure and indicates the need to adjust the CMS collector parameters. If a concurrent collection is interrupted by an explicit garbage collection (System.gc()) or for a garbage collection needed to provide information for diagnostic tools, then a concurrent mode interruption is reported.

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

    Что тут мало информативного?

    Или вариант через индексы:

    Но тогда память может фрагментироваться. Что весьма вероятно.

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

    Для old gen это обычно не проблема — используется несжимающий gc. Если это проблема, то нужно тюнить.

    А каким способом работают юнит тесты в шарпе? Если киданием исключения, то это не аналог и упадёт на первой же ошибке.
    И да, за for без <> надо руки отрывать.

    это не аналог и упадёт на перво

    И да, за for без <> надо руки отрывать.

    Для old gen это обычно не проблема — используется несжимающий gc

    5 лет назад на low latency проекте была максимум на

    100мсек за день остановка

    если только в энтерпрайзной java

    За день, не за раз.

    И что значит «тюнить» — гадать на кофейной гуще без всяких гарантий? Ведь ты не имеешь доступа к управлению памяти. Ты можешь попытаться подобрать путём многочисленных запусков подходящие параметры, но ты никогда не получишь гарантий, что желательное поведение системы будет сохраняться при всех возможных сочетаниях внешних факторов

    Ты знаешь, что хочешь получить. Не знаешь как. И знать не можешь.
    Кстати о cms. Как объяснить jvm, что каждый день в четыре часа утра ты хочешь сделать full GC с компактированием?

    Рестартани её! Я видел как пацаны так в продакшене делали.

    Ты знаешь, что хочешь получить. Не знаешь как. И знать не можешь.

    каждый день в четыре часа утра ты хочешь сделать full GC с компактированием?

    > Кстати о cms. Как объяснить jvm, что каждый день в четыре часа утра ты хочешь сделать full GC с компактированием?
    Вроде гарантированно никак. Можно посоветовать. И обычно она его таки сделает. А можно извне. Кажется, jmap умеет, профилировщики тоже.

    > Ты не хочешь делать full gc, ты хочешь просто почистить память.
    Вопрос же про CMS. Конечно, он именно этого и хочет

    на почти любом языке кроме python, при любом адекватном code review

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

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

    устроить ад дебаггинга — это хорошо, да. Ещё стоит контроллабл квери внедрить, чтобы наверняка

    приказать сжать несжимающему нельзя

    расскажи о своих страхах дебагинга
    что тебя беспокоит?

    Давай ты для начала расскажешь, зачем. Если тебе безопасно делать полную дефрагментацию, то тебе безопасно (и ещё эффективней) делать перезапуск этого модуля.

    то тебе безопасно (и ещё эффективней) делать перезапуск

    Рестартани её! Я видел как пацаны так в продакшене делали.

    А что, держать аптайм ради аптайма? У тебя он в любом случае прерывается, если ты останавливаешь все потоки.

    я же сказал — нужен инструментарий. ASM крайне упрощает этот процесс.

    Да. Класс меняет инструментарий. java.lang.instrument.*

    Да. Класс меняет инструментарий. java.lang.instrument.*

    Ну да. Простым способом это не сделать.

    Ну да. Простым способом это не сделать.

    Ну вон из джавы исчезает sum.misc.unsafe. Обратная совместимость рушится. А появление типов-параметров?

    В питоне тоже есть ряд багов, которые использовать не рекомендуется. А их используют. Отсюда и несовместимость между версиями.

    Это не баги, это внутреннее служебное апи Java, стабильность которого никто не гарантирует. И даже больше — официально рекомендуется не использовать это api.

    С багами та же история. Их не рекомендуют использовать

    кстати, фреймворки берут на себя большую часть забот пользователя, можешь оценить:

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих