diff --git a/build/j-spec.pdf b/build/j-spec.pdf index c74586a..5266492 100644 Binary files a/build/j-spec.pdf and b/build/j-spec.pdf differ diff --git a/j-spec.tex b/j-spec.tex index e6d8df9..2963617 100644 --- a/j-spec.tex +++ b/j-spec.tex @@ -12,17 +12,20 @@ \usepackage{enumitem} \usepackage{multicol,multirow} \usepackage{float,adjustbox} -\usepackage{fontawesome} +%\usepackage{fontawesome} \usepackage{longtable} \usepackage{tikz} \usepackage{hyperref} \usepackage{forest} +\usepackage{nomencl,imakeidx} \usetikzlibrary{mindmap,trees} \input{fancy-listings-preamble} \titlelabel{\thetitle. \quad} \setcounter{tocdepth}{1} - +\renewcommand{\nomname}{Термины, определения и сокращения} +\makeindex +\makenomenclature \babelfont{rm}{PT Astra Serif} \babelfont{sf}{PT Astra Serif} \babelfont{tt}{PT Mono} @@ -30,7 +33,6 @@ \newcounter{slidenum} \setcounter{slidenum}{1} % set to 2 if want to exclude title page of presentation - \newcommand{\showslide}[1]{ \noindent\makebox[\linewidth]{\rule{.90\paperwidth}{1.4pt}} \begin{center} @@ -42,6 +44,7 @@ \newcommand\hRf[1]{\hyperref[#1]{\nameref{#1}}} \newcommand{\wordcount}{\input{/tmp/wordcount.tex}} \newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize} +\newcommand*{\nom}[2]{#1\nomenclature{#1}{#2}} \renewcommand\labelitemi{\textemdash} \newenvironment{frm} { \begin{center} \begin{tabular}{|p{0.9\textwidth}|} \hline\\ } @@ -53,8 +56,8 @@ \lhead{\includegraphics[height=5mm]{logo.png}} \rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}} \chead{\thepage} - \cfoot{\faRocket} - \rfoot{Всего слов: \wordcount} +% \cfoot{\faRocket} +% \rfoot{Всего слов: \wordcount} } \geometry{ @@ -82,10 +85,23 @@ \chapter{Java Core} \section{Платформа: история и окружение} +\subsection{На этом уроке} +Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; +\begin{itemize} +\item \nom{UTF-8}{- (от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит») — распространённый стандарт кодирования символов, позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой ASCII. Кодировка UTF-8 сейчас является доминирующей в веб-пространстве. Она также нашла широкое применение в UNIX-подобных операционных системах.} +\item \nom{ОС}{- (операционная система) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны — предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений.} +\item \nom{IDE}{- (от англ. Integrated Development Environment) – это интегрированная, единая среда разработки, которая используется разработчиками для создания различного программного обеспечения. IDE представляет собой комплекс из нескольких инструментов, а именно: текстового редактора, компилятора или интерпретатора, средств автоматизации сборки и отладчика.} +\item \nom{JDK}{- (от англ. Java Development Kit) — комплект разработчика приложений на языке Java, включающий в себя компилятор, стандартные библиотеки классов, примеры, документацию, различные утилиты и исполнительную систему. В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки.} +\item \nom{JRE}{- (от англ. Java Runtime Environment) — минимальная (без компилятора и других средств разработки) реализация виртуальной машины, необходимая для исполнения Java-приложений. Состоит из виртуальной машины Java Virtual Machine и библиотеки Java-классов.} +\item \nom{JVM}{- (от англ. Java Virtual Machine) — виртуальная машина Java, основная часть исполняющей системы Java. Виртуальная машина Java исполняет байт-код, предварительно созданный из исходного текста Java-программы компилятором. JVM может также использоваться для выполнения программ, написанных на других языках программирования.} +\item \nom{SDK}{- (от англ. software development kit, комплект для разработки программного обеспечения) — это набор инструментов для разработки программного обеспечения в одном устанавливаемом пакете. Они облегчают создание приложений, имея компилятор, отладчик и иногда программную среду. В основном они зависят от комбинации аппаратной платформы компьютера и операционной системы.} +\item \nom{JIT}{- (англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции.} +\item \nom{CLI}{- (англ. Command line interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».} +\end{itemize} \subsection*{Конспект лекции} \subsubsection{Краткая история (причины возникновения)} \begin{itemize} -\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного ПО; +\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного \nom{ПО}{- программное обеспечение}; \item Популярен из-за скорости исполнения и полного абстрагирования от исполнителя кода; \item Часто используется для программирования бэк-энда веб-приложений из-за изначальной нацеленности на сетевые приложения. \end{itemize} @@ -107,7 +123,7 @@ \subsubsection{Что нужно скачать, откуда (как выбрать вендора, выбор версии)} Для разработки понадобится среда разработки (IDE) и инструментарий разработчика (JDK). JDK выпускается несколькими поставщиками, большинство из них бесплатны и полнофункциональны, то есть поддерживают весь функционал языка и платформы. -В последнее время, с развитием контейнеризации приложений, часто устанавливают инструментарий в Docker-контейнер и ведут разработку прямо в контейнере, это позволяет не захламлять компьютер разработчика разными версиями инструментария и быстро разворачивать свои приложения в CI или на целевом сервере. +В последнее время, с развитием контейнеризации приложений, часто устанавливают инструментарий в Docker-контейнер и ведут разработку прямо в контейнере, это позволяет не захламлять компьютер разработчика разными версиями инструментария и быстро разворачивать свои приложения в \nom{CI}{- (англ. Continious Integration) практика разработки программного обеспечения, которая заключается в постоянном слиянии рабочих копий в общую основную ветвь разработки и выполнении частых автоматизированных сборок проекта для скорейшего выявления потенциальных дефектов и решения интеграционных проблем.} или на целевом сервере. \begin{frm} В общем случае, для разработки на любом языке программирования нужны так называемые SDK (Software Development Kit, англ. - инструментарий разработчика приложений или инструментарий для разработки приложений). Частный случай такого SDK - инструментарий разработчика на языке Java - Java Development Kit. \end{frm} @@ -368,14 +384,11 @@ Here is your number: 4. \item \code{{@code "public"}} вставка кода в описание \end{itemize} -\subsection*{Задания к семинару} +\subsection*{Домашнее задание} \begin{itemize} \item Создать проект из трёх классов (основной с точкой входа и два класса в другом пакете), которые вместе должны составлять одну программу, позволяющую производить четыре основных математических действия и осуществлять форматированный вывод результатов пользователю. \item Скомпилировать проект, а также создать для этого проекта стандартную веб-страницу с документацией ко всем пакетам. \end{itemize} -\subsection*{Сценарий лекции} -%\subfile{scenarios/jc-1-c} - \section{Управление проектом: сборщики проектов} Управление проектом: Jar-файлы; Gradle/Maven: зависимости, выгрузка артефакта, публичные репозитории, свойства проекта, приватные репозитории (хостинг); Bazel @@ -503,16 +516,14 @@ Socket, ServerSocket, Многопоточность, абстрагирован \newpage \appendix +\sloppy +\addcontentsline{toc}{chapter}{Термины, определения и сокращения} +\printnomenclature[20mm] + \chapter*{Приложения} \addcontentsline{toc}{chapter}{Приложения} \renewcommand{\thesection}{\Asbuk{section}} -\section{Термины, определения и сокращения} -\begin{itemize} -\item \textbf{UTF-8} (от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит») — распространённый стандарт кодирования символов, позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой ASCII. Кодировка UTF-8 сейчас является доминирующей в веб-пространстве. Она также нашла широкое применение в UNIX-подобных операционных системах. -\item Операционная система, сокр. \textbf{ОС} (англ. operating system, OS) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны — предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений. -\item \textbf{IDE} (Integrated Development Environment) – это интегрированная, единая среда разработки, которая используется разработчиками для создания различного программного обеспечения. IDE представляет собой комплекс из нескольких инструментов, а именно: текстового редактора, компилятора или интерпретатора, средств автоматизации сборки и отладчика. -\end{itemize} \end{document} diff --git a/scenarios/build/jc-1-b.pdf b/scenarios/build/jc-1-b.pdf index 9674180..f0776ad 100644 Binary files a/scenarios/build/jc-1-b.pdf and b/scenarios/build/jc-1-b.pdf differ diff --git a/scenarios/build/jc-1-c.pdf b/scenarios/build/jc-1-c.pdf index cd73f9b..e1556cc 100644 Binary files a/scenarios/build/jc-1-c.pdf and b/scenarios/build/jc-1-c.pdf differ diff --git a/scenarios/jc-1-b.tex b/scenarios/jc-1-b.tex index a16657f..6e62b90 100644 --- a/scenarios/jc-1-b.tex +++ b/scenarios/jc-1-b.tex @@ -45,6 +45,12 @@ \end{frame} \note{...} +\begin{frame} + \frametitle{О курсе} + и об уркое +\end{frame} +\note{...} + \begin{frame} \frametitle{Краткая история} \includegraphics[width=12cm]{../pics/jc-01-tiobe.png} @@ -292,7 +298,8 @@ \note{...} \begin{frame} - \frametitle{title} + \frametitle{итоги} + что изучили и домашка \end{frame} \note{...} diff --git a/scenarios/jc-1-c.tex b/scenarios/jc-1-c.tex index b872969..5e0a876 100644 --- a/scenarios/jc-1-c.tex +++ b/scenarios/jc-1-c.tex @@ -8,6 +8,20 @@ \showslide{build/jc-1-b.pdf} Здравствуйте, меня зовут Иван, я разработчик программного обеспечения в Российских космических системах, начальник группы программистов, автор и преподаватель нескольких курсов в направлении программирования на портале GeekBrains. Пара слов обо мне, почему я нахожусь здесь и планирую Вам что-то рассказывать про язык Java? Для этого придётся вынести за скобки мой опыт работы в цифровой схемотехнике и других языках, в том числе создание бортовой аппаратуры, которая прямо сейчас летает у нас над головами или продолжает доставлять другие полезные грузы в космос. С точки зрения языка Java, обо мне можно сказать, что я являюсь разработчиком нескольких отраслевых информационных систем поддержки единой наземной инфраструктуры российского космического агентства. На моём счету также участие в межотраслевых проектах по созданию единых баз данных космического применения. +% ----------------------------------------------------------------------------------- +\showslide{build/jc-1-b.pdf} +Данный курс, первый из специализации, направлен на первое знакомство со внутренним устройством языка и фреймворком разработки приложений с его использованием. Курс демонстрирует механизмы работы знакомых студенту концепций на примере языка Java. В рамках курса будут рассмотрено устройство языка Java и сопутствующих технологических решений, платформы для создания и запуска приложений на JVM-языках (Groovy, Kotlin, Scala, и др). Будут рассмотрены некоторые базовые пакеты ввода-вывода, позволяющие манипулировать данными за пределами программы. В результате прохождения курса у вас, слушатели, должно появиться знание принципов работы платформы Java, понимание того, как язык выражает принципы программирования, его объектную природу. Вы научитесь писать базовые терминальные приложения и утилиты, решать задачи (в том числе алгоритмические, не требующие подключения сложных библиотек) с использованием языка Java и с учётом его особенностей. + +На этом уроке мы поговорим о +\begin{itemize} +\item краткой истории и причинах возникновения язка +\item что нужно скачать, откуда и как это всё выбирать +\item из чего всё состоит +\item изучим простую структуру проекта и способы его запуска +\item коротко рассмотрим утилиту джавадок +\end{itemize} +Рассмотрим примитивный инструментарий и базовые возможности платформы для разработки приложений на языке Java. + % ----------------------------------------------------------------------------------- \showslide{build/jc-1-b.pdf} Итак язык Java. Согласно википедии, Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems. Разработка ведётся сообществом; язык и основные реализующие его технологии распространяются по лицензии GPL. @@ -151,4 +165,14 @@ javadoc -locale ru_RU -encoding utf-8 -docencoding cp1251 \ \end{verbatim} Поскольку я сейчас не с виндоусом, то такие настройки наоборот, сломают отображение. +% ----------------------------------------------------------------------------------- +\showslide{build/jc-1-b.pdf} +На этом уроке мы рассмотрели историю и причины создания языка, его окружение и структуру проекта, узнали, что скрывают в себе такие аббревиатуры как JDK JRE JVM SDK JIT CLI. Рассмотрели базовое применение утилит java, javac и javadoc. В качестве домашнего задания попробуйте +\begin{itemize} +\item Создать проект из трёх классов (основной с точкой входа и два класса в другом пакете), которые вместе должны составлять одну программу, позволяющую производить четыре основных математических действия и осуществлять форматированный вывод результатов пользователю. +\item Скомпилировать проект, а также создать для этого проекта стандартную веб-страницу с документацией ко всем пакетам. +\end{itemize} + +На следующей лекции мы поговорим о том как осуществлять управление более сложными проектами: Jar-файлы; сборщики Gradle/Maven; чтоб такое репозитории и как ими пользоваться. + \end{document} \ No newline at end of file