365 lines
25 KiB
TeX
365 lines
25 KiB
TeX
\documentclass[../j-spec.tex]{subfiles}
|
||
|
||
\begin{document}
|
||
\sloppy
|
||
\section{Семинар: компиляция и интерпретация кода}
|
||
\subsection{Инструментарий}
|
||
\begin{itemize}
|
||
\item \href{https://docs.google.com/presentation/d/1LPMWfXpjkJDOMR4lv7y5Ss6_ABSocZtoc7nVEVs6FQo}{Презентация для преподавателя}, ведущего семинар;
|
||
\item \href{https://drive.google.com/file/d/1LWyE8aEy4-1gsognqhXIXwDcoLviVge4/view}{Фон} GeekBrains для проведения семинара в Zoom;
|
||
\item \href{https://jupyter.org/install}{Jupyter Notebook} для практики и примеров используется Jupyter notebook (потребуется установить \href{https://www.python.org/downloads/}{Python} и ядро \href{https://github.com/SpencerPark/IJava}{IJava}) и любой терминал операционной системы (bash, zsh, cmd);
|
||
\item JDK любая 11 версии и выше;
|
||
\item \href{https://docs.docker.com/get-docker}{Docker}, \href{https://www.gnu.org/software/automake/}{make}.
|
||
\end{itemize}
|
||
|
||
\subsection{Цели семинара}
|
||
\begin{itemize}
|
||
\item Закрепить полученные на лекции знания, касающиеся компиляции, интерпретации кода и создания программной документации;
|
||
\item Получить практический навык настройки терминала ОС для компиляции и исполнения кода, установки сторонних библиотек для интерпретации;
|
||
\item Попрактиковаться в написании терминальных команд и простых проектов. Лучше понять принцип импортирования кода и сборки проекта.
|
||
\end{itemize}
|
||
|
||
\subsection{План-содержание}
|
||
\noindent
|
||
\begin{spreadtab}{{longtable}{|p{37mm}|l|l|p{90mm}|}}
|
||
\hline
|
||
@ Что происходит & @ Время & @ Слайды & @ Описание \\
|
||
\hline
|
||
\endhead
|
||
@ Организационный момент & 5 tag(beg) & @ 1-4 & @ Преподаватель ожидает студентов, поддерживает активность и коммуникацию в чате, озвучиает цели и планы на семинар. Важно упомянуть, что выполнение домашних заданий с лекции является, фактически, подготовкой к семинару \\
|
||
\hline
|
||
@ Quiz & 5 & @ 3-14 & @ Преподаватель задаёт вопросы викторины, через 30 секунд демонстрирует слайд-подсказку и ожидает ответов (4 вопроса, по минуте на ответ) \\
|
||
\hline
|
||
@ Рассмотрение ДЗ & 15 & @ 15-18 & @ Преподаватель демонстрирует свой вариант решения домашнего задания с лекции, возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов \\
|
||
\hline
|
||
@ Вопросы и ответы & 10 & @ 19 & @ Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы \\
|
||
\hline
|
||
@ Задание 1 & 10 & @ 20-22 & @ Создать, скомпилировать, запустить и продемонстрировать простой проект без использования среды разработки. Показать выполненные терминальные команды, результат компиляции. (* отделить исходный код от скомпилированных файлов, ** сложить исходный код в пакет) \\
|
||
\hline
|
||
@ Перерыв (если нужен) & 5 & @ 26 & @ Преподаватель предлагает студентам перерыв на 5 минут (студенты голосуют) \\
|
||
\hline
|
||
@ Задание 2 & 10 & @ 23-25 & @ Настроить окружение Jupyter Notebook с ядром Java, создать одну ячейку с переменной, а вторую с выводом значения этой переменной стандартным способом. Дополнить ячейки описанием markdown. (* осуществить форматированный вывод, ** сохранить форматирующую строку в ячейке с переменной) \\
|
||
\hline
|
||
@ Задание 3 & 15 & @ 27-29 & @ К проекту из задания 1 добавить ещё один класс в соседнем пакете, как это было показано на лекции и комментарии в стиле Javadoc. Комментарии необходимо добавить как к методам, так и к классам. Сгенерировать программную документацию. (* создать документацию на каждый пакет по отдельности) \\
|
||
\hline
|
||
@ Домашнее задание & 5 & @ 39 & @ Объясните домашнее задание, подведите итоги урока \\
|
||
\hline
|
||
@ Рефлексия & 10 tag(end) & @ 40-42 & @ Преподаватель запрашивает обратную связь \\
|
||
\hline
|
||
@ Длительность & sum(cell(beg):cell(end)) & & \\
|
||
\hline
|
||
\end{spreadtab}
|
||
|
||
\subsection{Подробности}
|
||
\subsubsection{Организационный момент}
|
||
\begin{itemize}
|
||
\item \textbf{Цель этапа:} Позитивно начать урок, создать комфортную среду для обучения.
|
||
\item \textbf{Тайминг:} 3-5 минут.
|
||
\item \textbf{Действия преподавателя:}
|
||
\begin{itemize}
|
||
\item Презентует название курса (первый раз) и семинара;
|
||
\item Рассказывает немного о себе;
|
||
\item Запрашивает активность от аудитории в чате;
|
||
\item Презентует цели курса и семинара;
|
||
\item Презентует краткий план семинара и что студент научится делать.
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Quiz}
|
||
\begin{itemize}
|
||
\item \textbf{Цель этапа:} Вовлечение аудитории в обратную связь.
|
||
\item \textbf{Тайминг:} 5-7 минут (4 вопроса, по минуте на ответ).
|
||
\item \textbf{Действия преподавателя:}
|
||
\begin{itemize}
|
||
\item Преподаватель задаёт вопросы викторины, представленные на слайдах презентации;
|
||
\item через 30 секунд демонстрирует слайд-подсказку и ожидает ответов.
|
||
\end{itemize}
|
||
\item \textbf{Вопросы и ответы:}
|
||
\begin{enumerate}
|
||
\item Какой механизм используется для непосредственного исполнения скомпилированного кода? (3)
|
||
\begin{enumerate}
|
||
\item JDK;
|
||
\item JRE;
|
||
\item JVM.
|
||
\end{enumerate}
|
||
\item Какая сущность только объединяет классы по смыслу? (1)
|
||
\begin{enumerate}
|
||
\item Пакеты;
|
||
\item Библиотеки;
|
||
\item Фреймворки.
|
||
\end{enumerate}
|
||
\item Основная единица исходного кода программы -- это? (2)
|
||
\begin{enumerate}
|
||
\item Функция;
|
||
\item Класс;
|
||
\item Файл.
|
||
\end{enumerate}
|
||
\item Какой ключ используется для указания папки назначения? (1)
|
||
\begin{enumerate}
|
||
\item \code{-d};
|
||
\item \code{-out};
|
||
\item \code{-to}.
|
||
\end{enumerate}
|
||
\end{enumerate}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Рассмотрение ДЗ}
|
||
\begin{itemize}
|
||
\item \textbf{Цель этапа:} Пояснить неочевидные моменты в формулировке ДЗ с лекции, синхронизировать прочитанный на лекции материал к началу семинара.
|
||
\item \textbf{Тайминг:} 15-20 минут.
|
||
\item \textbf{Действия преподавателя:}
|
||
\begin{itemize}
|
||
\item Преподаватель демонстрирует свой вариант решения домашнего задания из лекции;
|
||
\item возможно, по предварительному опросу, демонстрирует и разбирает вариант решения одного из студентов.
|
||
\end{itemize}
|
||
\item \textbf{Домашнее задание из лекции:}
|
||
\begin{itemize}
|
||
\item Создать проект из трёх классов (основной с точкой входа и два класса в другом пакете), которые вместе должны составлять одну программу, позволяющую производить четыре основных математических действия и осуществлять форматированный вывод результатов пользователю.
|
||
|
||
\textbf{Вариант решения}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=100mm]{sem-01-struct.png}
|
||
\caption{Структура проекта}
|
||
\end{figure}
|
||
|
||
\lstinputlisting[language=Java,style=JCodeStyle,caption={Код основного класса}]{src/s01-h01-Main.java}
|
||
|
||
\lstinputlisting[language=Java,style=JCodeStyle,caption={Код считающего класса}]{src/s01-h01-OtherClass.java}
|
||
|
||
\lstinputlisting[language=Java,style=JCodeStyle,caption={Код декоратора}]{src/s01-h01-Decorator.java}
|
||
\item Скомпилировать проект, а также создать для этого проекта стандартную веб-страницу с документацией ко всем пакетам.
|
||
|
||
\textbf{Вариант решения}
|
||
|
||
\begin{lstlisting}[language=bash,style=ASMStyle,caption={Команды компиляции}]
|
||
javac -sourcepath ./src -d out src/ru/gb/jcore/sample/Main.java
|
||
java -classpath ./out ru.gb.jcore.sample.Main
|
||
\end{lstlisting}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=60mm]{sem-01-hw2-compile.png}
|
||
\caption{Результат компиляции}
|
||
\end{figure}
|
||
|
||
\begin{lstlisting}[language=bash,style=ASMStyle,caption={Команда создания документации}]
|
||
javadoc -d docs -sourcepath ./src -cp ./out -subpackages ru
|
||
\end{lstlisting}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=120mm]{sem-01-hw2-doc.png}
|
||
\caption{Результат создания документации}
|
||
\end{figure}
|
||
|
||
\item Создать Makefile с задачами сборки, очистки и создания документации на весь проект.
|
||
|
||
\textbf{Вариант решения}\footnote{Обратите внимание, что все отступы сделаны не пробелами, а табуляцией, иначе Makefile не работает}
|
||
|
||
\lstinputlisting[style=CCodeStyle,caption={Makefile}]{src/s01-h03-Makefile}
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=80mm]{sem-01-hw03.png}
|
||
\caption{Результат выполнения тасков}
|
||
\end{figure}
|
||
|
||
\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере пользователя, а второй забирать скомпилированные классы и исполнять их.
|
||
|
||
\textbf{Вариант решения}
|
||
|
||
Для упрощения был использован docker compose, вместо чистого Docker. Файлы, компилирующие и исполняющие программу представлены в листингах ниже. Оба эти файла запускаются из корня папки проекта командами
|
||
|
||
\begin{verbatim}
|
||
docker compose -f docker-compose-class.yml up
|
||
docker compose -f docker-compose-exec.yml up
|
||
\end{verbatim}
|
||
соответственно.
|
||
|
||
\lstinputlisting[style=CCodeStyle,caption={docker-compose-class.yml}]{src/s01-h04-docker-compose-class.yml}
|
||
|
||
\lstinputlisting[style=CCodeStyle,caption={docker-compose-exec.yml}]{src/s01-h04-docker-compose-exec.yml}
|
||
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Вопросы и ответы}
|
||
\begin{itemize}
|
||
\item \textbf{Ценность этапа} Вовлечение аудитории в обратную связь, пояснение неочевидных моментов в материале лекции и другой проделанной работе.
|
||
\item \textbf{Тайминг} 5-15 минут
|
||
\item \textbf{Действия преподавателя}
|
||
\begin{itemize}
|
||
\item Преподаватель ожидает вопросов по теме прошедшей лекции, викторины и продемонстрированной работы;
|
||
\item Если преподаватель затрудняется с ответом, необходимо мягко предложить студенту ответить на его вопрос на следующем семинаре (и не забыть найти ответ на вопрос студента!);
|
||
\item Предложить и показать пути самостоятельного поиска студентом ответа на заданный вопрос;
|
||
\item Посоветовать литературу на тему заданного вопроса;
|
||
\item Дополнительно указать на то, что все сведения для выполнения домашнего задания, прохождения викторины и работы на семинаре были рассмотрены в методическом материале к этому или предыдущим урокам.
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Задание 1}
|
||
\begin{itemize}
|
||
\item \textbf{Ценность этапа} Создание, компиляция и запуск проектов без использования среды разработки.
|
||
\item \textbf{Тайминг} 10-20 минут.
|
||
\item \textbf{Действия преподавателя}
|
||
\begin{itemize}
|
||
\item Пояснить студентам ценность этого опыта (запуск приложений на сервере, в контейнерах, настройка CI/CD в пет-проектах);
|
||
\item Выдать задание группам студентов, показать где именно следует искать терминал ОС;
|
||
\item Если группа студентов справилась с заданием, а времени осталось более 5 минут, выдавать группе задания «со звёздочкой».
|
||
\end{itemize}
|
||
\item \textbf{Задания}:
|
||
\begin{itemize}
|
||
\item Создать, скомпилировать, запустить и продемонстрировать простой проект без использования среды разработки.
|
||
|
||
\textbf{Вариант решения}
|
||
\begin{lstlisting}[language=Java,style=JCodeStyle,caption={Простейший проект}]
|
||
public class Main {
|
||
public static void main(String[] args) {
|
||
System.out.println("Hello, world!");
|
||
}
|
||
}
|
||
\end{lstlisting}
|
||
|
||
\begin{lstlisting}[language=bash,style=ASMStyle,caption={Команды компиляции}]
|
||
javac Main.java
|
||
java Main
|
||
\end{lstlisting}
|
||
|
||
\item [$*_1$] отделить исходный код от скомпилированных файлов
|
||
|
||
\textbf{Вариант решения}
|
||
\begin{lstlisting}[style=ASMStyle]
|
||
javac -d out Main.java
|
||
java -classpath ./out Main
|
||
\end{lstlisting}
|
||
|
||
\item [$*_2$] сложить исходный код в пакет с глубиной иерархии не менее 3.
|
||
|
||
\textbf{Вариант решения}
|
||
|
||
Вручную создать соответствующие вложенные папки, переместить в них файл с исходным кодом \code{Main.java} и написать оператор \code{package} первой строкой файла \code{Main.java}.
|
||
\begin{lstlisting}[style=ASMStyle]
|
||
javac -d out ru/gb/jcore/Main.java
|
||
java -classpath ./out ru.gb.jcore.Main
|
||
\end{lstlisting}
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Задание 2}
|
||
\begin{itemize}
|
||
\item \textbf{Ценность этапа} Настройка и изучение дополнительного инструментария для создания проектов и описания работы фрагментов кода в виде Jupyter notebook.
|
||
\item \textbf{Тайминг} 10-15 минут.
|
||
\item \textbf{Действия преподавателя}
|
||
\begin{itemize}
|
||
\item Пояснить студентам ценность этого опыта (использование скриптовых возможностей среды разработки, таких как написание простых фрагментов кода без необходимости создавать большой проект в тяжеловесной среде разработки);
|
||
\item Пояснить студентам в каком виде выполнять и сдавать задания;
|
||
\item Выдать задание группам студентов, показать где и как скачивать необходимый инструментарий, если он ещё не установлен;
|
||
\item Если группа студентов справилась с заданием, а времени осталось более 5 минут, выдавать группе задания «со звёздочкой».
|
||
\end{itemize}
|
||
\item \textbf{Задания}
|
||
\begin{itemize}
|
||
\item Настроить окружение Jupyter Notebook с ядром IJava, создать одну ячейку с переменной, а вторую с выводом значения этой переменной стандартным способом. Дополнить ячейки описанием markdown.
|
||
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=120mm]{sem-01-t2-1.png}
|
||
\caption{Вариант решения}
|
||
\end{figure}
|
||
|
||
\item [$*_1$] осуществить форматированный вывод
|
||
\begin{lstlisting}[language=Java,style=JCodeStyle,caption={Вариант решения (вторая ячейка)}]
|
||
System.out.print("Your number is " + a);
|
||
\end{lstlisting}
|
||
|
||
\item [$*_2$] сохранить форматирующую строку в ячейке с переменной
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=120mm]{sem-01-t2-2.png}
|
||
\caption{Вариант решения}
|
||
\end{figure}
|
||
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Задание 3}
|
||
\begin{itemize}
|
||
\item \textbf{Ценность этапа} Закрепление навыков создания стандартной программной документации.
|
||
\item \textbf{Тайминг} 15-20 минут
|
||
\item \textbf{Действия преподавателя}
|
||
\begin{itemize}
|
||
\item Пояснить студентам ценность этого опыта (описание пет-проектов для потенциальных соисполнителей, создание базы знаний по проекту на случай длительных пауз в работе)
|
||
\item Выдать задание группам студентов
|
||
\item Если группа студентов справилась с заданием, а времени осталось более 5 минут, выдать группе задание «со звёздочкой».
|
||
\end{itemize}
|
||
\item \textbf{Задания}
|
||
\begin{itemize}
|
||
\item К проекту из задания 1 добавить ещё один класс в соседнем пакете, как это было показано на лекции, и комментарии в стиле Javadoc. Комментарии необходимо добавить как к методам, так и к классам. Сгенерировать общую программную документацию.
|
||
|
||
\textbf{Вариант решения}
|
||
\begin{figure}[H]
|
||
\centering
|
||
\includegraphics[width=80mm]{sem-01-t3-1.png}
|
||
\caption{Иерархия получившегося проекта}
|
||
\end{figure}
|
||
|
||
\lstinputlisting[language=Java,style=JCodeStyle,caption={Основной класс}]{src/s01-t3-Simple.java}
|
||
|
||
\lstinputlisting[language=Java,style=JCodeStyle,caption={Вспомогательный класс}]{src/s01-t3-Complex.java}
|
||
|
||
\begin{lstlisting}[language=bash,style=ASMStyle,caption={Команды компиляции и создания документации}]
|
||
javac -sourcepath . -d out ru/gb/Simple.java
|
||
java -classpath ./out ru.gb.Simple
|
||
javadoc -d doc -sourcepath . -cp ./out -subpackages ru
|
||
\end{lstlisting}
|
||
|
||
\item [$*_1$] создать документацию на каждый пакет по отдельности
|
||
|
||
\begin{lstlisting}[language=bash,style=ASMStyle,caption={Вариант решения}]
|
||
javadoc -d doc_gb -sourcepath . -cp ./out ru.gb
|
||
javadoc -d doc_bg -sourcepath . -cp ./out ru.bg
|
||
\end{lstlisting}
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Домашнее задание}
|
||
\begin{itemize}
|
||
\item \textbf{Ценность этапа} Задать задание для самостоятельного выполнения между занятиями.
|
||
\item \textbf{Тайминг} 5-10 минут.
|
||
\item \textbf{Действия преподавателя}
|
||
\begin{itemize}
|
||
\item Пояснить студентам в каком виде выполнять и сдавать задания
|
||
\item Уточнить кто будет проверять работы (преподаватель или ревьювер)
|
||
\item Объяснить к кому обращаться за помощью и где искать подсказки
|
||
\item Объяснить где взять проект заготовки для дз
|
||
\end{itemize}
|
||
\item \textbf{Задания}
|
||
\begin{enumerate}
|
||
\item [5-25 мин] Решить все задания (в том числе «со звёздочкой»), если они не были решены на семинаре, без ограничений по времени;
|
||
|
||
Все варианты решения приведены в тексте семинара выше
|
||
\item [10-15 мин] Создать docker-контейнер для формирования полной документации по проекту
|
||
|
||
\lstinputlisting[style=CCodeStyle,caption={docker-compose-class.yml}]{src/s01-hw2-docker-compose-docs.yml}
|
||
|
||
\end{enumerate}
|
||
\end{itemize}
|
||
|
||
\subsubsection{Рефлексия и завершение семинара}
|
||
\begin{itemize}
|
||
\item \textbf{Цель этапа:} Привести урок к логическому завершению, посмотреть что студентам удалось, что было сложно и над чем нужно еще поработать
|
||
\item \textbf{Тайминг:} 5-10 минут
|
||
\item \textbf{Действия преподавателя:}
|
||
\begin{itemize}
|
||
\item Запросить обратную связь от студентов.
|
||
\item Подчеркните то, чему студенты научились на занятии.
|
||
\item Дайте рекомендации по решению заданий, если в этом есть необходимость
|
||
\item Дайте краткую обратную связь студентам.
|
||
\item Поделитесь ощущением от семинара.
|
||
\item Поблагодарите за проделанную работу.
|
||
\end{itemize}
|
||
\end{itemize}
|
||
|
||
\end{document}
|