1000+ часов видео по Java на русском / Хабр

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

  1. Java Core
  2. Junior Java Developer: Servlet API, JDBC, Maven, JUnit, Mockito, Log4J, основы Spring/SpringMVC, основы JPA/Hibernate, шаблоны/архитектуры MVC/IoC/DAO.
  3. Multicore programming in Java.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

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

(GolovachCourses.com)

Здесь собраны несколько вариантов записи моего курса Java Core.
Модуль #1 (Procedural Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4

Набор октябрь 2012: #1, #2, #3, #4.

Модуль #2 (Exceptions in Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4, #5 (???)
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4
Набор октябрь 2012: #1, #2, #3.
Модуль #3 (Java I/O):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #0 (???), #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4, #5
Набор январь 2013: #1, #2, #3, #4
Набор октябрь 2012: #1, #2, #3, #4, #5.
Модуль #4 (Multithreading in Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3
Набор октябрь 2012: #1, #2, #3.
Модуль #5 (Collections API, java.util.*):
Набор апрель 2013: #1, #2, #3, #4, #5
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4, #5
Набор октябрь 2012: #1, #2, #3, #4, #5.
Модуль #6 (Java OOP):
Набор апрель 2013: #1, #2, #3, #4.
Набор февраль 2013: #1, #2, #3, #4.
Набор январь 2013: #1, #2, #3, #4.
Набор октябрь 2012: #1, #2, #3, #4.
Summary:
Набор январь 2013: итоговая лекция
Набор октябрь 2012: итоговая лекция

Юрий Ткач

Курс «Java для тестировщиков» (видео на youtube.com + скачать c rutracker.org).
Курс учит базовому программированию на языке Java, объясняет основные понятия, знакомит с наиболее популярными библиотеками и средствами, которые могут пригодиться тестировщикам. Курс расcчитан на слушателей, которые слабо подготовлены в программировании.
Программа, расположенная тут, не соответствует наименованию лекций
Урок 1 — Введение
Урок 2 — Синтаксис языка

Урок 3 — ООП
Урок 4 — ООП
Урок 5 — ООП
Урок 6 — ООП
Урок 7 — Enum, Number, String
Урок 8 — Eclipse IDE
Урок 9 — Exceptions
Урок 10 — Generics, Collections
Урок 11 — Annotations, I/O, Properties
Урок 12 — Threads
Урок 13 — Swing
Урок 14 — Swing
Урок 15 — JDBC
Урок 16 — JUnit
Урок 17 — Spring
Урок 18 — EasyMock
Урок 19 — Ant и Maven

Курс «Java практика» (видео на youtube. com).
Данный курс уделяет основное внимание практическому применению языка Java и основывается на предыдущем курсе Java для тестировщиков, который имел теоретическую направленность. В этом курсе рассматриваются различные прикладные задачи, а также проводится их решение с помощью Java. В конце каждого занятия озвучивается задание для самостоятельной работы. Курс расчитан на слушателей, которые слабо подготовлены в программировании.

Занятие 1. «Синтаксис и конструкции языка».
Занятие 2. «Функции (методы)».
Занятие 3. «ООП, классы и объекты».
Занятие 4. «ООП, наследование, классы».
Занятие 5. «Коллекции».
Занятие 6. «ООП, интерфейсы».
Занятие 7. «Файлы, ввод/вывод».
Занятие 8. «XML».
Занятие 9. «Ant».

Курс «Advanced Java» (видео на youtube.com + описание от автора).
1. Concurrency

— Deadlock
— Неблокирующая синхронизация
— Сервис запуска потоков
— Синхронизаторы
— ThreadLocal
2. Collections
— HashSet и TreeSet
— Реализации интерфейса Map
— Queue и приоритетная очередь
— Многопоточные коллекции
— Блокирующая очередь
3. Generics
— Сырые типы
— Наследование и расширители обобщений
— Рекурсивное расширение типа
4. Annotations/Reflection
— Создание собственных аннотаций
— Использование Reflection API

Курс «Технологии проектирования программных систем» (видео на youtube.com).
Юрий Ткач: «Работая преподавателем в Черниговском государственном технологическом университете на кафедре Информационных и компьютерных систем, я читал курс лекций по предмету ТППС (Технологии проектирования программных систем). В основном я старался делать упор на проектирование систем, рассказывая про разные шаблоны, подходы, многослойную архитектуру и т.п. Материал свой я основывал на замечательной книге Мартина Фаулера „Архитектура корпоративных программных приложений“. Однако, без рассказа о технологиях, которые применяются для создания систем уровня предприятия, этот курс был бы не таким интересным. Весь курс основывался на технологиях J2EE и связанными с ними, и поэтому включал в себя такие темы как Spring, AOP, JPA, Hibernate, JSF.»

Лекция 5. Слой сервисов
Лекция 6. Spring
Лекция 7. АОП.
Лекция 8. Слой интеграции.
Лекция 9. JPA Введение.
Лекция 10. JPA. Связи и наследование.
Лекция 11. JPA. Состояния и запросы.
Лекция 12. JPA. DAO.
Лекция 13. JPA. Транзакции.
Лекция 14. Слой представления.
Лекция 15. JSF. Введение.
Лекция 16. JSF. Навигация и beans.
Лекция 17. JSF. H-library and templates.
Лекция 18. JSF. Tables, Spring connect.
Лекция 19. JSF. Validators and Converters.
Лекция 20. JSF. Собственные компоненты.
Слой сервисов с JPA и Spring.
Программирование и тестирование слоя сервисов.
Facelets Templates — создание страниц в JSF.

Игорь Мирончик

Курс Основы Java (30 часов) (на канале youtube.com/MironchikVideo):
1. «Основы программирования на языке Java» [1-1]
2. «Основы программирования на языке Java» [1-2]
3. «Основы программирования на языке Java» [2]

4. «Основы программирования на языке Java» [3]
5. «Основы программирования на языке Java» [4]
6. «Основы программирования на языке Java» [5]

Курс Oracle Java, разработка приложений JEE (34 часа).
Курс был прочитан для группы разработчиков с серьезным опытом работы в технологиях .Net, MIDAS, в среде Delphi, МVC. Задачей курса был обзор технологий, входящих в состав платформы JEE, работающие на базе Oracle Weblogic сервер.:
1. «Разработка приложений в технологии JEE» [1-1]
2. «Разработка приложений в технологии JEE» [1-2]
3. «Разработка приложений в технологии JEE» [2]
4.

«Разработка приложений в технологии JEE» [3]
5. «Разработка приложений в технологии JEE» [4]
6. «Разработка приложений в технологии JEE» [5]

Алексей Владыкин

Лекция 1 «Знакомство с языком и интрументами» (история и эволюция Java, особенности Java, разновидности Java, экосистема Java, неформальное знакомство с языком, стандартные инструменты JDK) + презентация
Лекция 2 «Примитивные и ссылочные типы» (примитивные и ссылочные типы, тип boolean, тип char, целочисленные типы, вещественные типы, преобразование типов) + презентация
Лекция 3 «Массивы и строки в Java» (Массивы: объявление, создание, инициализация, индексация, одномерные и многомерные, представление в памяти, java.util.Arrays. Строки: строковые литералы, операции со строками, StringBuilder, поддержка различных кодировок, регулярные выражения) + презентация

Лекция 4 «Объекты, классы и пакеты в Java» (основы ООП, объявление класса, использование класса, наследование, пакеты, модификаторы доступа, вложенные классы) + презентация
Лекция 5 «Управляющие конструкции и исключения в JAVA» + презентация + презентация (условные операторы (if, switch), циклы (for, while, do), операторы break и continue, метки, исключения, типы исключений, конструкция try/catch/finally, try с ресурсами, multicatch)
Лекция 6 «Java I/O, Java NIO, File» (Доступ к файловой системе: java.
io.File и java.nio.file.*, потоки байт: InputStream, OutputStream, потоки символов: Reader, Writer, java.io.StreamTokenizer и java.util.Scanner) + презентация
Лекция 7 «Стандартная библиотека: java.util» (Collections Framework, списки, множества, ассоциативные массивы, generics) + презентация
Лекция 8 «Стандартная библиотека: java.lang, reflect, Reflection API» + презентация
Лекция 9 ««Разработка многопоточных приложений на Java, часть 1»» (общие сведения о параллелизме, управление потоками, синхронизация потоков, модель памяти) + презентация
Лекция 10 ««Разработка многопоточных приложений на Java, часть 2» (атомарные типы, примитивы синхронизации, коллекции, ExecutorService, ForkJoinPool) + презентация
Лекция 11 «Модульное тестирование на Java» (основные идеи, JUnit, Mockito, Java Logging API) + презентация
Лекция 12 «Разработка сетевых приложений на Java» (cокеты, URI и URL, библиотека Netty) + презентация

Георгий Корнеев

Найдено на Лекториум, Computer Science Center, rutracker.
Также есть страница автора и библиография/ссылки от автора.
Лекция 1 «Введение в Java»
Лекция 2 «Введение в ООП на Java (1)»
Лекция 3 «Введение в ООП на Java (2)»
Лекция 4 «Обработка ошибок и исключения»
Лекция 5 «Синтаксис Java»
Лекция 6 «Ввод-вывод»
Лекция 7 «Collections Framework»
Лекция 8 «Новые возможности Java 5»
Лекция 9 «Reflection»
Лекция 10 «Введение в многопоточное программирование»
Лекция 11 «Задачи и средства многопоточного программирования»

Продвинутый материал

Глеб Смирнов, «Расчленяя многопоточность».
Алексей Шипилёв, «О чём молчат Heap Dump-ы»
Роман Елизаров, «Факты и заблуждения о Java-сериализации»
Алексей Шипилёв, «Прагматика Java Memory Model»
Сергей Куксенко, «JDK8: Stream style»
Владимир Иванов, «Invokedynamic: роскошь или необходимость?»
Алексей Шипилёв, «ForkJoinPool в Java 8»
Дмитрий Чуйко, «Новинки в java. util.concurrent»
Андрей Паньгин, «Java Runtime: повседневные обязанности виртуальной машины Java»
Александр Макаров, «Исследование возможностей и ограничений JVM по оптимизации памяти»
Руслан Черёмин, «Модель памяти Java: близкие контакты третьей степени»
Сергей Куксенко, «Quantum Performance Effects»
Алексей Шипилёв, Сергей Куксенко «Оптимизация производительности Java-приложений: теория»
Алексей Шипилёв, Сергей Куксенко, «Оптимизация производительности Java-приложений: детали»
Алексей Шипилёв, Сергей Куксенко, «Оптимизация производительности Java-приложений: ещё детали»
… и много других «вкусностей» канала youtube.com/JUGRuVideo

Заключение

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

От имени всех коллег, которые занимаются преподаванием и выкладывают видео бесплатно, прошу простить нас за естественные «дефекты», возникающие при 3-4 часах преподавания в день: оговорки, неправильное произношение, не всегда удачные импровизации.

В описаниях курсов использованы оригинальные описания от авторов.

Контакты

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

skype: GolovachCourses
email: [email protected]

7 курсов для Java-разработчиков

Образование

Александр Яковлев

бэкенд-разработчик

Профиль автора

Лада Кошман

разработчик списка

Профиль автора

Меня зовут Саша, я руководитель одной из бизнес-линий в Тинькофф.

Я начал учить язык Java еще в университетские годы по видео на «Ютубе». Со временем прошел несколько профессиональных курсов, благодаря одному из них сумел найти работу, а теперь преподаю сам. О своем опыте в Java-разработке и управлении командами я рассказал в материале Тинькофф Журнала.

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

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

Несколько сервисов в России сейчас не работают — надеемся, вы знаете, что делать.

ЗАКРЕПИТЬ ОСНОВЫ

Introduction to Computer Science от edX

Сколько стоит: бесплатно
Когда старт: в любое время
Сколько длится: около 12 недель по 6—18 часов в неделю, проходить можно в своем темпе
Подробнее: на сайте

Кроме лекций по информатике в курсе есть выступление Стива Балмера, бывшего гендиректора «Микрософт», о его пути в индустрии и развитии ИТ

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

Программа начинается с основ структур данных и заданий на базовые алгоритмические программы, например на подсчет слов в книге. После студенты переходят к веб-разработке: она включает в себя написание кода на C, SQL, Python, JavaScript, а также CSS и HTML.

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

Кто ведет. Курс записали сотрудники Гарварда. Дэвид Мэлан — профессор, харизматичный спикер, выступления которого есть и на «Ютубе»: к примеру, вот его лекция об абстракции. Даг Ллойд и Брайан Ю — старшие наставники по компьютерным наукам.

ЗАКРЕПИТЬ ОСНОВЫ

Смена Тинькофф по iOS- и Java-разработке в «Сириусе»

Сколько стоит: бесплатно
Когда старт: курс нерегулярный, но отбор обычно идет в феврале, а программа проходит летом
Сколько длится: в 2021 году смена проходила с 6 по 16 апреля, дедлайн подачи заявки в феврале, в 2022 году смена пройдет летом
Подробнее: на сайте

Чтобы попасть на смену, нужно пройти отбор

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

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

Занятия длятся 8 часов в день, как правило, это 1—2 лекции и работа над проектом: студенты вместе разрабатывают мобильное приложение. На направлении Java учат использовать фреймворк Spring в промышленной разработке, запускать в продакшен веб-сервисы и API с авторизацией и хранением данных, решать задачи в agile-команде. На направлении iOS — создавать и масштабировать приложения, писать понятный код.

«Потратил 500 часов только на Java»: как я решил уйти в ИТ и написал свое первое приложение

У заметных и активных участников есть шанс попасть на образовательные программы в Тинькофф или на собеседование в штат.

Кто ведет. Я лично курирую этот курс. На направлениях iOS и Java примерно по шесть педагогов, все они разработчики и тимлиды в Тинькофф.

РАЗВИТЬ АЛГОРИТМИЧЕСКОЕ МЫШЛЕНИЕ

Algorithms от Coursera в двух частях

Сколько стоит: бесплатно
Когда старт: в любое время
Сколько длится: примерно 54 часа на выполнение заданий первой части и около 63 часов — второй
Подробнее: на сайте (часть 1 и часть 2)

В курсе есть субтитры на русском

Знаменитый курс Принстона по работе с алгоритмами подходит как новичкам, так и опытным разработчикам со стажем 5—10 лет. Для учебы достаточно разбираться в азах Java.

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

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

«Учился в выходные, на работе, после работы»: как сменить профессию после онлайн-курсов

Кто ведет. Курс читают Кевин Вейн и Роберт Седжвик — профессора Принстонского университета, авторы пособий по информатике «Информатика: междисциплинарный подход» и «Алгоритмы».

РАЗВИТЬ АЛГОРИТМИЧЕСКОЕ МЫШЛЕНИЕ

Старт в спортивном программировании от Stepik

Сколько стоит: бесплатно
Когда старт: в любое время
Сколько длится: 4 недели по 2—5 часов в неделю
Подробнее: на сайте

Программу реализует МФТИ

Курс для новичков, которые хотят освоить спортивное программирование и участвовать в соревнованиях. На мой взгляд, программа также пригодится в освоении алгоритмов — о них спрашивают в развитых ИТ-компаниях с отлаженными процессами. Для участия необходимо владеть основами языков С, С++, Java, Pascal, Delphi или Python: писать циклы, массивы, процедуры и функции. Программа подойдет для школьников старших классов и начинающих студентов технических специальностей.

Кто ведет. На курсе четыре преподавателя:

  1. Олег Христенко — технический координатор олимпиадных школ и международных сборов по программированию для подготовки к ICPC.
  2. Филипп Рухович — кандидат наук, преподаватель и тренер МФТИ.
  3. Владислав Невструев — автор олимпиадных задач и преподаватель олимпиадных школ.
  4. Илья Степанов — бронзовый призер чемпионата мира по программированию ICPC в 2019 году.

НАБРАТЬСЯ ФУНДАМЕНТАЛЬНЫХ ЗНАНИЙ

Фундаментальная подготовка Java-разработчиков от GetJavaJob

Сколько стоит: оплата обучения — первая зарплата ученика, до трудоустройства нужно платить по 10 000 Р в месяц
Когда старт: в любое время
Сколько длится: от 6 до 12 месяцев в зависимости от начальных знаний и уделяемого времени, учиться можно по удобному для себя графику
Подробнее: на сайте

На сайте опубликован список трудоустроенных выпускников

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

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

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

Мнение: любой человек может войти в ИТ, если не бросит дело на полпути

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

Кто ведет. На момент публикации на курсе один преподаватель — Виталий Северин. Раньше он работал в Luxoft, а сейчас занимается разработкой на заказ.

НАБРАТЬСЯ ФУНДАМЕНТАЛЬНЫХ ЗНАНИЙ

Java Web Developer от Udacity

Сколько стоит: 399 $ в месяц или 1356 $ при оплате доступа сразу на 4 месяца
Когда старт: ближайшая дата для записи — 29 июня
Сколько длится: 4 месяца по 5—10 часов в неделю
Подробнее: на сайте

Программа дает фундаментальную подготовку в сфере разработки, но для прохождения курса нужно разбираться в Java на среднем уровне

Курс посвящен основам Spring Boot, веб-сервисов и API, хранилищам данных и персистентности, безопасности и DevOps. Ученики поработают над несколькими прикладными проектами, один из них — разработка бэкенд-системы для сайта об автомобилях. Студентов сопровождают технические менторы: отвечают на вопросы, следят за прохождением и мотивируют продолжать учебу при необходимости.

Я бы отметил высокую сложность курса и его структуру: подача дробная, лекции даются отрезками по 1—2 минуты, между ними, как правило, предлагают пройти интерактивные задания или ответить на вопрос. За счет этого информация быстро усваивается. Думаю, он даст достаточно знаний, чтобы устроиться на первую работу.

Кто ведет. На курсе преподают практикующие разработчики из крупных компаний:

  1. Кеша Уильямс — менеджер программной инженерии в сети ресторанов быстрого питания Chick-fil-A с опытом более 20 лет в индустрии.
  2. Сарита Панда — сениор-разработчик в сфере электронной торговли в Walmart.
  3. Питер Заступил — enterprise-разработчик и технический администратор.
  4. Алекс Причард — старший инженер-программист в CPA Global.

ПРОКАЧАТЬСЯ В ПРОФЕССИИ

Финтех Мидл от Тинькофф

Сколько стоит: бесплатно
Когда старт: отбор проходит в январе — феврале, учеба начинается в феврале — марте
Сколько длится: полуторачасовые лекции в «Зуме» по четвергам в течение 3 месяцев
На сайте: на сайте

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

Курс подойдет для разработчиков — студентов и выпускников, у которых есть опыт промышленной разработки на Java больше года, а также знания Git и Maven. Программа позволит дорасти до уровня мидл-разработчика, прокачать знания по Java, Spring и разработке веб-сервисов.

Перед учебой кандидаты проходят входное тестирование по Java с вариантами ответов и заполняют анкету: рассказывают о мотивации, прикладывают портфолио. Конкурс на последний поток был где-то 10 человек на место: из 500 человек взяли примерно 50.

Ученики решают кейсы из реальной практики и изучают все, что нужно мидл-разработчику: Generics, многопоточность, чистый код, Spring Core, взаимодействие с СУБД, основы ORM на примере Hibernate, создание веб-сервисов на Java и реактивное программирование на базе Spring.

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

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

Лекции


На этой странице представлена ​​информация об онлайн-лекциях и слайды лекций для использования в преподавании и изучении книги Информатика: междисциплинарный подход . Эти лекции подходит для использования инструкторами в качестве основы для «перевернутого» класса по данному вопросу или для самостоятельного изучения отдельными лицами.

Перевернутый класс.

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

  • Каждую неделю рассылайте электронное письмо всем учащимся в классе, кратко описывает мероприятия на эту неделю (лекции, чтение, и задания по программированию, взятые из книги или с этого книжного сайта).
  • Студенты смотрят видео лекции в своем собственном темпе, делают чтение, и работать над заданиями по программированию.
  • Запланируйте еженедельное «собрание класса» для обсуждения материала, обзоры к экзаменам, неформальное общение со студентами, и любой дополнительный материал, который вы, возможно, пожелаете осветить.

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

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

Самостоятельное обучение.

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

Доступные лекции.

Весной 2020 года видеозаписи лекций находятся в свободном доступе.

При просмотре видео лекции очень важно выбрать соответствующую скорость. Если он слишком медленный, вам, вероятно, будет скучно; если это слишком быстро, вы, вероятно, заблудитесь. Также обязательно сделайте либеральное использование паузы и перемотки.

Видеозаписи лекций доступны по адресу CUвиды; слайды лекций в формате pdf.

  • Лекция 0: Пролог — простая машина. Эта лекция знакомит с фундаментальными идеями вычислений в контексте знакомого и важного приложения из области криптографии. История побуждает к изучению компьютерных наук, но рассматриваемые концепции немного продвинуты, поэтому новички могут захотеть просмотреть ее еще раз после просмотра других лекций курса.
  • Лекция 1: Основы. Почему программа? Эта лекция посвящена этому основному вопросу. Затем он описывает анатомию вашей первой программы и процесс разработки программы на Java с использованием либо виртуальных терминалов, либо среды разработки программ с некоторым историческим контекстом. Большая часть лекции посвящена подробному описанию встроенных типов данных Java с примерами программ для каждого из них.
  • Лекция 2: Условные операторы и циклы. Операторы if, while и for являются основными управляющими структурами Java. Эта лекция построена вокруг коротких программ, которые используют эти конструкции для решения важных вычислительных задач. Примеры включают сортировку, вычисление квадратного корня, разложение на множители и моделирование случайного процесса. Лекция завершается подробным примером, иллюстрирующим процесс отладки программы.
  • Лекция 3: Массивы. Вычисления с большой последовательностью значений одного и того же типа чрезвычайно распространены. В этой лекции описывается встроенная в Java структура данных массива, которая поддерживает такие приложения, с несколькими примерами, включая перетасовку колоды карт, проверку случайности сборщика купонов и случайное блуждание по сетке.
  • Лекция 4: Ввод и вывод. Для взаимодействия с нашими программами нам нужны механизмы для получения информации из внешнего мира и представления информации во внешний мир. В этой лекции описаны несколько таких механизмов: для текста, рисунков и анимации. Подробные примеры включают фрактальные рисунки, моделирующие природные явления, и анимацию мяча, подпрыгивающего в окне дисплея.
  • Лекция 5: Функции и библиотеки. Модульное программирование — это искусство и наука разбивать программу на части, которые можно разрабатывать индивидуально. Эта лекция знакомит с функциями (методами Java) — фундаментальным механизмом, обеспечивающим модульное программирование. Мотивирующие примеры включают функции для классического распределения Гаусса и приложение для создания цифровой музыки.
  • Лекция 6: Рекурсия. Рекурсивная функция — это функция, которая вызывает сама себя. Эта лекция знакомит с концепцией, подробно рассматривая функцию линейки и (связанные с ней) классические примеры, включая головоломку «Ханойские башни», H-дерево и простые модели реального мира, основанные на рекурсии. Мы показываем распространенную ловушку при использовании рекурсии и простой способ ее избежать, который вводит другую (родственную) парадигму программирования, известную как динамическое программирование.
  • Лекция 7: Производительность. При разработке программы необходимо учитывать ее потребности в ресурсах. В этой лекции мы описываем научный подход к пониманию производительности, когда мы разрабатываем математические модели, описывающие время работы наших программ, а затем проводим эмпирические тесты для их проверки. В конце концов мы приходим к простому и эффективному подходу, который можно использовать для прогнозирования времени выполнения собственных программ, требующих значительных объемов вычислений.
  • Лекция 8: Абстрактные типы данных. В Java вы можете создавать свои собственные типы данных и использовать их в своих программах. В этой и следующей лекциях мы покажем, как эта способность позволяет нам рассматривать наши программы как абстрактные представления реальных понятий. Сначала мы покажем механизм написания клиентских программ, использующих типы данных. Наши примеры включают абстракции, такие как цвет, изображения и гены. Этот стиль программирования известен как объектно-ориентированное программирование, потому что наши программы оперируют объектами, которые содержат значения типов данных.
  • Лекция 9: Создание типов данных. Создание собственных типов данных является центральным занятием в современном программировании на Java. Эта лекция охватывает механику (переменные экземпляра, конструкторы, методы экземпляра и тестовые клиенты), а затем разрабатывает несколько примеров, кульминацией которых является программа, использующая типичную математическую абстракцию (комплексные числа) для создания визуальных представлений знаменитого множества Мандельброта.
  • Лекция 10: Языки программирования. Мы завершаем курс обзором важных вопросов, связанных с языками программирования. Чтобы убедить вас, что ваше знание Java позволит вам изучать другие языки программирования, мы покажем реализации типичной программы на C, C++, Python и Matlab. Мы описываем важные различия между этими языками и затрагиваем фундаментальные вопросы, такие как сборка мусора, проверка типов, объектно-ориентированное программирование и функциональное программирование, с некоторым кратким историческим контекстом.
  • Лекция 11: Поиск и сортировка. Основываясь на научном подходе, разработанном в лекции 7, мы вводим и изучаем классические алгоритмы для решения двух фундаментальных задач в контексте реальных приложений. Наш посыл заключается в том, что эффективные алгоритмы (в данном случае бинарный поиск и сортировка слиянием) являются ключевым компонентом решения вычислительных задач с помощью масштабируемых решений, способных обрабатывать огромные экземпляры.
  • Лекция 12: Стеки и очереди. Наше введение в структуры данных — это тщательный взгляд на фундаментальные абстракции стека и очереди, включая спецификации производительности. Затем мы представим концепцию связанных структур и сосредоточимся на их полезности для разработки простых, безопасных, понятных и эффективных реализаций стеков и очередей.
  • Лекция 13: Таблицы символов. Абстракция таблицы символов — один из самых важных и полезных инструментов программиста, что мы проиллюстрируем несколькими примерами в этой лекции. Расширяя научный подход предыдущих двух лекций, мы вводим и изучаем бинарные деревья поиска, классическую структуру данных, поддерживающую эффективные реализации этой абстракции.
  • Лекция 14: Введение в теорию вычислений. Теория вычислений помогает нам решать фундаментальные вопросы о природе вычислений и в то же время помогает нам лучше понять, как мы взаимодействуем с компьютером. В этой лекции мы познакомим вас с формальными языками и абстрактными машинами, сосредоточив внимание на простых моделях, которые на самом деле широко используются в практических приложениях.
  • Лекция 15: Машины Тьюринга. В 1936 году Алан Тьюринг опубликовал статью, которую многие считают одной из самых важных научных работ 20-го века. Эта лекция посвящена двум далеко идущим центральным идеям статьи: все вычислительные устройства имеют эквивалентную вычислительную мощность, и эта мощность имеет ограничения.
  • Лекция 16: Непокорность. По мере расширения компьютерных приложений ученые-компьютерщики и математики поняли, что требуется уточнение идей Тьюринга. Какие вычислительные задачи мы можем решить с ограничениями ресурсов, которые неизбежны в реальном мире? Как описано в этой лекции, этот вопрос принципиально остается без ответа.
  • Лекция 17: Вычислительная машина. Каждый программист должен понимать основные характеристики используемого процессора компьютера. К счастью, фундаментальная конструкция компьютерных процессоров мало изменилась с 1960-х годов. В этой лекции мы даем представление о том, как ваш Java-код на самом деле выполняет свою работу, представляя воображаемый компьютер, который похож как на мини-компьютеры 1960-х годов, так и на микропроцессорные чипы, используемые в современных ноутбуках и мобильных устройствах.
  • Лекция 18: Машины фон Неймана. Продолжая наше описание конструкции процессора и низкоуровневого программирования, мы представляем контекст, восходящий к 1950-м годам, и обсуждаем будущие последствия машины фон Неймана, в которой программы и данные хранятся в одной и той же памяти. Мы подробно изучаем идею о том, что мы проектируем новые компьютеры, моделируя их на старых, что, согласно теории Тьюринга, всегда будет эффективным.
  • Лекция 19: Комбинационные схемы. Начав с нескольких простых абстракций (проводов, которые могут передавать значения включения/выключения, и переключателей, которые могут управлять значениями, передаваемыми по проводам), в этой лекции мы рассмотрим проектирование схем, реализующих компьютерные процессоры. Мы рассматриваем вентили, реализующие простые логические функции и компоненты для функций более высокого уровня, таких как сложение. Лекция завершается полным циклом арифметико-логического устройства.
  • Лекция 20: ЦП. В этой лекции мы даем последнюю часть нашего ответа на вопрос «Как работает компьютер?» путем разработки полной схемы для компьютерного процессора, где каждый переключатель и провод видны. Несмотря на то, что эта схема значительно отличается по масштабу, с точки зрения дизайна она имеет многие из тех же характеристик, что и схемы, используемые в современных вычислительных устройствах.

Copyright © 2000–2019 и . Все права защищены.

Лекция 1: Java: Основы

6.8

     ← пред  вверх  следующая → 

Лекция 1: Java: Основы
Обзор
    9001 2

    Программы вообще и в этом курсе

  • Сохранение значений в полях

  • Запуск программы из командной строки

  • Чтение вывода библиотеки тестера

  • Java как калькулятор

  • Важность синтаксиса и простые ошибки

Примечание: в этих конспектах лекций вы увидите следующее:

Делайте сейчас!

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

Упражнение

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

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

1.1 Программы (в этом курсе)

В этом курсе мы будем писать, тестировать и запускать программы на языке под названием Java. Это означает (в очень прямом смысле), что мы поместим кучу текста в файл с расширением .java и используйте инструменты для его запуска и проверки выход. Мы собираемся использовать специальный инструмент, называемый библиотекой Tester, для запуска наши программы. Пока что большая часть деталей скрыта от вас, вы просто выполните два шага, чтобы написать и запустить программу:

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

Вот наша первая простая программа:

class ExamplesLecture1 {
int theNumberFive = 5;
}

Первая строка, run ExamplesLecture1, указывает тестировщику загрузить создайте указанный вами файл с помощью Java и запустите его.

Когда мы сохраняем его в файле с именем ExamplesLecture1 и запускаем его, мы смотрим примерно так:

$ run ПримерыLec

Tester Prima v.2.3

——————— —————

Тесты, определенные в классе: ExamplesLecture1:

————— ————

ПримерыЛекция1:

—————

 

 новые примерыLecture1:1(

  this. theNumberFive = 5

)

———————

Не обнаружены методы испытаний.

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

Неплохой результат! Мы будем объяснять это по частям по ходу лекций. на. А пока просто сосредоточьтесь на этой части:

901 90

 

ExamplesLecture1:

—————

новинка ExamplesLecture1:1(

  this.theNumberFive = 5

 )

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

1.2 Дополнительные поля и Java как калькулятор

Первый написанный нами пример был довольно простым. Давайте строить на этом.

1.2.1 Определение дополнительных полей

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

class ExamplesLecture1 {
int theNumberFive = 5;
int theNumberEight = 8;
}

Запуск программы (опять же с помощью команды запуска) дает это неудивительный вывод:

ExamplesLecture1:

—————

 

новые примерыЛекция 1: 1(

  this. theNumberFive = 5

  this.theNumberEight = 8)

Действительно, мы можем объявить произвольное количество полей и свободно выбирать их имена и значения; вот еще несколько примеров:

class ExamplesLecture1 {
int theNumberFive = 5;
int theNumberEight = 8;
inttheNumberTwo = 4;
инт х = 58;
интервал у = 73;
}

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

1.2.2 Java как калькулятор

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

class ExamplesLecture1 {
int theAnswer = 5 + 2 * 45;
}

Если мы запустим это с помощью команды make, мы получим:

ExamplesLecture1:

 

 новые примерыLecture1:1(

  this.theAnswer = 95)

При этом использовалось умножение (с оператором *) и сложение (с оператором +) для вычисления значения 95 для поля theAnswer. В этом простом примере стоит отметить несколько моментов:

  • Java правильно обрабатывает порядок операций в соответствии с правило умножения перед сложением – мы не получили 315 (результат 7 * 45) в качестве ответа, например

  • Есть разница между программой, которая указала операции для выполнения (5 + 2 * 45) и полученное значение, что равно 95. В поле сохраняется только результирующее значение и печатается, а не вся программа или расчет.

Если нам нужна версия программы, которая оценивается как 315, мы можем вставить скобки вокруг части, которую мы хотим оценить первой, как в математике:

class ExamplesLecture1 {
int theAnswer = (5 + 2) * 45;
}

Вместо этого будет напечатано:

ExamplesLecture1:

—————

 

 новые примерыLecture1:1(

  this. theAnswer = 315)

Упражнение

Добавьте поле с именем AnotherAnswer, значение которого вычисляется с помощью (5 + 2) — 3 * 9. Запустите программу с make, чтобы убедиться, что она работает должным образом. Затем отредактируйте его, чтобы получить результат ((5 + 2) — 3) * 9 вместо этого, и снова убедитесь, что он работает так, как вы ожидаете.

Обратите внимание, что в именах theAnswer или theAnswer нет ничего особенного. другой ответ; если бы мы выбрали другие имена, такие как x или someReallyLongFieldName, программы все равно будут выполнять расчет и распечатать его просто отлично.

Упражнение

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

1.2.3 Не совсем математика

В приведенных выше примерах упоминается сложение с +, умножение с * и вычитание с -. Деление явно отсутствует; в сначала это кажется простым в использовании, если мы знаем оператор деления в java — это косая черта (/), как в этом примере:

class ExamplesLecture1 {
int theAnswer = (5 + 3) / 2;
}

Получается:

9 0190

—————

ПримерыЛекция1:

 

 новые примерыЛекция1:1(

  это.ответ = 4)

Поскольку мы вычисляем 8/2, это должно быть то, что мы ожидаем. Но, если мы немного изменим пример:

class ExamplesLecture1 {
int theAnswer = (5 + 4) / 2;
}

мы получаем удивительный ответ ниже!

ПримерыЛекция1:

—————

 

 new ExamplesLecture1:1(

  this. theAnswer = 4)

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

Упражнение

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

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

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

1.3 Синтаксис

Во всех приведенных выше примерах программа была определена просто как последовательность символов в текстовом файле. Некоторые из них, такие как {, ; и = и арифметические операторы являются специальными символами, которые имеют определенные значение для Java. Другие, такие как class и int, являются нормальными. Английские слова, которые означают что-то конкретное для Java — мы называем их ключевые слова. Мы выбрали другие, такие как NumberFive или x, и мы могли бы использовать любое слово там.

Java ожидает чрезвычайно специфический порядок для всех этих слов и символов в годная программа. Мы называем эти правила синтаксисом Java. Например, требуется, чтобы после ключевого слова class шло имя (во всех примеры выше, это имя было ExamplesLecture1). На данный момент это имя будет всегда сопровождаться открывающей фигурной скобкой ({). Затем идет последовательность полей, разделенных точкой с запятой. Затем идет закрывающая фигурная скобка (}).

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

class ExamplesLecture1
int theNumberFive = 5;

}

Если мы запустим это, мы получим:

9019 2 9019

⤇ make

9000 2 javac -cp ../../../lib/tester.jar:. ExamplesLecture1.java

ExamplesLecture1.java:1: ошибка: ‘{‘ ожидаемый

class ExamplesLecture1

1 ошибка

make: *** [ExamplesLecture1. class] Ошибка 1

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

Упражнение

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

Упражнение

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