Конспект лекции 1: Введение в программирование (Java)
Преподаватель: Георгий Корнеев
1. Организационные вопросы
1.1. Контактная информация
- Преподаватель: Георгий Корнеев
- Связь:
- Основные вопросы → чат курса
- Сложные/долгие вопросы → email преподавателя
1.2. Структура курса
Последовательность предметов:
- 1 курс: Введение в программирование (Java)
- 2 курс 1 семестр: Парадигмы программирования
- 2 курс 2 семестр: Технологии Java
2. Организация учебного процесса
2.1. Структура занятий
Лекции
- Теоретический материал
- Live coding
- Демонстрации примеров
Домашние задания
- Выдаются после каждой лекции
- Срок выполнения: около недели (чуть меньше, т.к. практики перед лекциями)
- Все последующие ДЗ (кроме первого) требуют самостоятельно написанного кода на Java
Практические занятия
- Сдача модификации домашнего задания (не самого ДЗ!)
- Модификация тесно связана с домашним заданием
- Пример: ДЗ - скомпилировать Hello World, практика - скомпилировать другую программу
3. Система оценивания
3.1. Версии домашних заданий
- Простая версия → НЕ нужно делать
- Сложная версия → ОБЯЗАТЕЛЬНО делать
3.2. Попытки сдачи
- Количество попыток: 3 (три вторника подряд)
- Если за 3 попытки не сдано → ДЗ не засчитывается
3.3. Система задержек (delay)
Фиксируется момент ПЕРВОЙ демонстрации рабочей программы преподавателю:
- Сдача в первую неделю → delay = 0
- Сдача во вторую неделю → delay = 1
- Сдача в третью неделю → delay = 2
⚠️ Важно: Задержка определяется моментом первой демонстрации работающей программы, а не финальной сдачи!
3.4. Система минусов
Начисление минусов:
- Преподаватель проверяет код
- За найденные проблемы назначаются минусы
- Минусы накапливаются при каждой попытке
Пример расчёта:
- 1 попытка: 3 минуса
- 2 попытка: 2 минуса
- 3 попытка: 0 минусов (успешно)
- Итого: 5 минусов, delay = 0 (т.к. начали с первой недели)
3.5. Бонусные баллы
Бонусы за скорость сдачи
- Условие: Первый студент, сдавший ДЗ преподавателю в первую неделю
- Количество: До 5 человек (по числу преподавателей)
Бонусы за найденные ошибки
- За обнаруженные ошибки и опечатки в материалах курса
- Сообщать в специальный раздел чата
4. Зачёт
4.1. Условия
- Проводится при неудовлетворительных баллах
- Если баллов достаточно → зачёт не обязателен
4.2. Варианты сдачи
- Досрочная сдача: конец декабря
- Стандартная сдача: во время сессии
5. Особенности первого домашнего задания
5.1. Уникальные условия
- Несложное (т.к. не было лекций)
- Срок сдачи: только первая практика
- Больше не принимается
6. Почему Java?
6.1. Популярность
- Индекс TIOBE: Java в топе популярных языков
- В плотной группе с C, C++, Python
- Python вырвался вперёд в последние 2-3 года
6.2. Преимущества Java
Простота и безопасность
- Достаточно простой язык
- Сложно создать код, который:
- Убьёт компьютер
- Приведёт к непредсказуемому поведению
- Не воспроизводится на других машинах
Содержательность
- Простой, но весьма содержательный язык
- Широкий спектр возможностей
Области применения
- Серверные приложения
- Desktop-приложения
- Android-разработка
- JVM-языки (Kotlin, Scala и др.)
7. Основы Java
7.1. Концепция Java
Виртуальная машина (JVM)
- Java компилируется не в машинный код, а в байт-код
- Байт-код исполняется на виртуальной машине Java (JVM)
- Преимущество: кроссплатформенность (Write Once, Run Anywhere)
Процесс выполнения программы
- Написание кода на Java (.java файлы)
- Компиляция в байт-код (.class файлы)
- Выполнение на JVM
7.2. Установка и настройка
Java Development Kit (JDK)
- Что включает:
- Компилятор Java
- JVM
- Стандартная библиотека
- Инструменты разработки
Проверка установки
java -version # Проверка установленной версии JVM
javac -version # Проверка версии компилятора
7.3. Первая программа: Hello World
Структура программы
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Ключевые элементы
public class HelloWorld- объявление публичного класса- Имя класса должно совпадать с именем файла
public static void main(String[] args)- точка входа в программуSystem.out.println()- вывод в консоль
Компиляция и запуск
javac HelloWorld.java # Компиляция → создаёт HelloWorld.class
java HelloWorld # Запуск (БЕЗ расширения .class!)
8. Основы синтаксиса Java
8.1. Типы данных
Примитивные типы
Целочисленные:
byte- 8 бит (-128 до 127)short- 16 бит (-32768 до 32767)int- 32 бита (-2³¹ до 2³¹-1)long- 64 бита (-2⁶³ до 2⁶³-1)
Вещественные:
float- 32 бита (одинарная точность)double- 64 бита (двойная точность)
Другие:
boolean- true/falsechar- 16 бит (символ Unicode)
Ссылочные типы
- Строки:
String - Массивы
- Объекты классов
8.2. Переменные
Объявление и инициализация
int x; // Объявление
x = 10; // Инициализация
int y = 20; // Объявление с инициализацией
Константы
final int MAX_VALUE = 100; // Константа (нельзя изменить)
8.3. Операторы
Арифметические операторы
+- сложение-- вычитание*- умножение/- деление%- остаток от деления
Операторы сравнения
==- равно!=- не равно>,<- больше, меньше>=,<=- больше или равно, меньше или равно
Логические операторы
&&- логическое И (AND)||- логическое ИЛИ (OR)!- логическое НЕ (NOT)
Операторы присваивания
=- присваивание+=,-=,*=,/=- составное присваивание
8.4. Управляющие конструкции
Условный оператор if
if (условие) {
// код
} else if (другое_условие) {
// код
} else {
// код
}
Оператор switch
switch (переменная) {
case значение1:
// код
break;
case значение2:
// код
break;
default:
// код по умолчанию
}
Цикл while
while (условие) {
// код
}
Цикл do-while
do {
// код
} while (условие);
Цикл for
for (инициализация; условие; инкремент) {
// код
}
// Пример:
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
Цикл for-each
for (тип элемент : коллекция) {
// код
}
9. Ввод и вывод
9.1. Вывод в консоль
System.out.println("текст"); // Вывод с переводом строки
System.out.print("текст"); // Вывод без перевода строки
9.2. Ввод из консоли
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt(); // Чтение целого числа
String line = scanner.nextLine(); // Чтение строки
double d = scanner.nextDouble(); // Чтение вещественного числа
9.3. Работа с аргументами командной строки
public static void main(String[] args) {
// args[0] - первый аргумент
// args[1] - второй аргумент
// args.length - количество аргументов
}
10. Массивы
10.1. Одномерные массивы
Объявление и создание
int[] array; // Объявление
array = new int[10]; // Создание массива на 10 элементов
int[] array2 = new int[5]; // Объявление с созданием
// Инициализация значениями
int[] array3 = {1, 2, 3, 4, 5};
Обращение к элементам
array[0] = 10; // Присваивание
int x = array[0]; // Чтение
Длина массива
int length = array.length; // Поле length (НЕ метод!)
10.2. Многомерные массивы
int[][] matrix = new int[3][4]; // 3 строки, 4 столбца
int[][] matrix2 = {{1,2}, {3,4}, {5,6}};
11. Строки (String)
11.1. Создание строк
String s1 = "Hello";
String s2 = new String("World");
11.2. Основные методы
int len = s.length(); // Длина строки
char ch = s.charAt(0); // Символ по индексу
String sub = s.substring(0, 5); // Подстрока
String upper = s.toUpperCase(); // В верхний регистр
String lower = s.toLowerCase(); // В нижний регистр
11.3. Конкатенация
String result = s1 + s2;
String result2 = s1.concat(s2);
11.4. Особенности строк
- Строки в Java неизменяемые (immutable)
- Все операции создают новые строки
- Сравнение строк: использовать
equals(), НЕ==
if (s1.equals(s2)) { // ПРАВИЛЬНО
// строки равны
}
if (s1 == s2) { // НЕПРАВИЛЬНО (сравнивает ссылки)
// это не то, что вы думаете
}
12. Работа с тестами
12.1. Репозиторий с тестами
- Тесты выкладываются в отдельный репозиторий
- Доступны исходный код и скомпилированная версия (.jar файлы)
12.2. Запуск тестов
Шаги для запуска
- Скачать .jar файл с тестами
- Скомпилировать свою программу
- Проверить наличие .class файла
- Запустить тесты командой
Пример команды запуска
java -cp <путь_к_тестируемому_классу>:<путь_к_тест.jar> <название_теста>
Рекомендация: Создать скрипт для автоматизации запуска тестов
12.3. Требования к решениям
- Для второго ДЗ: промежуточные результаты должны помещаться в
int - Использовать можно всё из стандартной поставки Java
- Неправильное использование → минусы при сдаче
13. Дополнительное задание: Run.me
13.1. Описание
- Необязательное задание для тех, кому "нечего делать"
- Содержит как простые, так и откровенно сложные задачи
- Предназначено для дополнительной практики
13.2. Рекомендации
- ✅ Посмотреть полчасика
- ✅ Получить доступные плюсики
- ✅ Перейти к основному ДЗ
- ⚠️ НЕ закапываться в Run.me - это плохая стратегия!
13.3. Оценивание
- Максимум баллов не больше, чем за обычное ДЗ
- Выполнить обычное ДЗ гораздо полезнее
- Сложность оценивается по количеству решивших
- Оценка: коэффициент × количество решённых задач
13.4. Технические детали
- Можно использовать всё что угодно
- Проверяется только правильность URL результата
- Код НЕ проверяется (в отличие от обычных ДЗ)
- Каждая строка = отдельное число (не склеиваются)
- Не надо показывать код преподавателю
14. Система баллов и оценок
14.1. Начисление очков
- Очки начисляются за сдачу домашних заданий
- Видны в специальной таблице (НЕ в БАРСе)
- Несдача ДЗ = 0 очков
14.2. Важные замечания
- ⚠️ Нельзя сравнивать очки за разные ДЗ
- ⚠️ Нельзя сравнивать очки между группами
- ✅ Гарантируется локальная справедливость внутри группы
14.3. Локальная справедливость
Правило:
Если студент A и студент B:
- Решили одинаковые ДЗ
- У A не больше задержки, чем у B
- У A не больше минусов, чем у B
→ То у A точно не меньше баллов, чем у B
14.4. Конвертация в БАРС
- Конвертация происходит в конце курса
- Очки нормируются относительно группы
- Чем больше очков относительно коллег → выше оценка
14.5. Критерии оценок
- Для 5 (отлично): > 90 баллов в БАРСе
- За каждое ДЗ гарантируется минимальный процент баллов
- Сдать ДЗ всегда строго лучше, чем не сдать
- Разница между "сдано" и "не сдано" существенная
14.6. Причины разброса баллов
- Результаты Run.me (различия в решённых задачах)
- Задержки при сдаче
- Количество минусов
- Относительный перформанс в группе
14.7. Интерпретация статуса
- 🟢 Зелёный → всё хорошо
- 🔴 Красный → проблемы, нужно подтянуться
15. Практические рекомендации
15.1. Стратегия успешной сдачи
- ✅ Начинать делать ДЗ сразу после выдачи
- ✅ Стремиться сдать в первую неделю (delay = 0)
- ✅ Тщательно проверять код перед демонстрацией
- ✅ Использовать тесты для самопроверки
- ✅ Создать скрипты для автоматизации
15.2. Работа с кодом
- Можно использовать линтеры для Java
- Следить за качеством кода
- Исправлять замечания преподавателя
- Помнить о накоплении минусов
15.3. Что НЕ стоит делать
- ❌ Откладывать ДЗ на последнюю неделю
- ❌ Закапываться в Run.me вместо основного ДЗ
- ❌ Игнорировать замечания преподавателя
- ❌ Сравнивать свои баллы с другими группами
16. Обратная связь
16.1. Если недоволен результатом
- Использовать кнопку 👎 (thumbs down) под ответами
- Написать в чат курса
- Отправить email преподавателю
16.2. Если что-то непонятно
- Задавать вопросы в чате
- Подходить к преподавателю после лекции
- Писать на email для сложных вопросов
Резюме первой лекции
Ключевые выводы
- Организация: Лекции → ДЗ → Практика (сдача модификаций)
- Оценивание: Очки → конвертация в БАРС → итоговая оценка
- Java: Популярный, простой, безопасный, кроссплатформенный язык
- Стратегия: Сдавать быстро, качественно, регулярно
Что делать дальше
- Настроить среду разработки (JDK установлен)
- Начать второе домашнее задание
- Скачать и настроить тесты
- Стремиться сдать в первую неделю
Важные даты
- Сдача ДЗ: каждый вторник (3 попытки)
- Досрочный зачёт: конец декабря
- Стандартный зачёт: сессия
Полезные ссылки
- Чат курса (основные вопросы)
- Email преподавателя (сложные вопросы)
- Репозиторий с тестами
- Материалы курса
- Раздел "Ошибки и опечатки" в чате
Успехов в изучении Java! 🚀