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

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

Почему компьютеру нужны точные инструкции

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

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

Представьте просьбу “сделай красиво”. Человеку можно объяснить контекст, показать пример, договориться о вкусе. Компьютеру такая просьба сама по себе бесполезна. Ему нужны действия: взять это значение, сложить с другим, проверить условие, вывести строку, повторить блок кода несколько раз.

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

Как компьютер выполняет команды

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

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

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

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

Зачем нужны языки программирования

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

В Java простая арифметическая мысль может выглядеть так:

5 + 3

Для нас такая запись понятна: есть два числа и операция сложения. Но процессор не выполняет этот текст напрямую. Сам по себе фрагмент 5 + 3 — это ещё не готовая программа для процессора, а часть исходного кода на высокоуровневом языке.

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

Как это устроено в Java

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

Разработчик пишет исходный код в файле с расширением .java. Затем компилятор Java, команда javac, переводит этот текст в bytecode. Bytecode сохраняется в файлах .class. После этого JVM читает bytecode и выполняет его на конкретной системе.

В Java компилятор не превращает код сразу в окончательные команды конкретного процессора. Он создаёт bytecode — промежуточный формат. Именно поэтому Java-программа обычно проходит такой путь:

  1. человек пишет код в файле .java;
  2. компилятор javac переводит код в bytecode;
  3. появляется файл .class;
  4. JVM выполняет bytecode на конкретном компьютере.

Смысл этой цепочки простой: человек работает с понятным Java-кодом, а инструменты Java постепенно доводят его до выполнения. На следующем уроке мы установим эти инструменты и проверим, что команды java и javac доступны на вашем компьютере.

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

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

Java — высокоуровневый язык. Мы пишем исходный код в файлах .java, компилятор javac переводит его в bytecode, а JVM выполняет этот bytecode на конкретной машине.

Практическая работа. Что такое программа

Теперь закрепим базовую карту: программа — это точные инструкции, а Java-код проходит путь от исходного файла к bytecode и выполнению на JVM.

Что такое программа

Начнём с главного определения. Программа — это не просто значок, окно или файл на рабочем столе.

13

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

23

Почему инструкция для компьютера должна быть точной?

33

Зачем нужны языки программирования вроде Java?

Понятия урока

Теперь соединим основные термины с их ролями в цепочке выполнения Java-программы.

Соотнесите понятие и объяснение.

Программа
Язык программирования
Компилятор
JVM
Последовательность точных инструкций для компьютера
Формальный язык, на котором разработчик записывает инструкции
Программа, которая переводит исходный код в другую форму
Виртуальная машина, которая выполняет Java bytecode
Подсказка

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

Путь Java-кода

В Java между исходным кодом и выполнением есть несколько этапов. Соберите их в правильном порядке.

Расположите этапы выполнения Java-программы по порядку.

Разработчик пишет исходный код в файле .java
Компилятор javac переводит код в bytecode
Появляется файл .class
JVM выполняет bytecode на конкретном компьютере
Подсказка

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

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.