diff --git a/build/j-spec.pdf b/build/j-spec.pdf index d29ddf3..e18f290 100644 Binary files a/build/j-spec.pdf and b/build/j-spec.pdf differ diff --git a/fancy-listings-preamble.tex b/fancy-listings-preamble.tex new file mode 100644 index 0000000..6bed2e7 --- /dev/null +++ b/fancy-listings-preamble.tex @@ -0,0 +1,133 @@ +\usepackage{listings} + +\definecolor{codekeywords}{rgb}{0.1,0.4,0.4} +\definecolor{codecomments}{rgb}{0,0.6,0} +\definecolor{codenumbers}{rgb}{0.4,0.4,0.4} +\definecolor{codestring}{rgb}{0.85,0.2,0.1} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} +\definecolor{codefine}{rgb}{0.7,0.5,0.3} +\definecolor{dkgreen}{rgb}{0,0.6,0} +\definecolor{gray}{rgb}{0.5,0.5,0.5} +\definecolor{mauve}{rgb}{0.58,0,0.82} + +\lstdefinestyle{JCodeStyle}{ + frame=single, + language=Java, + aboveskip=3mm, + belowskip=3mm, + showstringspaces=false, + columns=flexible, + basicstyle=\scriptsize\ttfamily, + numbers=left, + numberstyle=\tiny\color{gray}, + keywordstyle=\color{blue}, + commentstyle=\color{dkgreen}, + stringstyle=\color{mauve}, + breaklines=true, + breakatwhitespace=true, + tabsize=4, + escapeinside={<@}{@>} +} + +\lstdefinestyle{PyCodeStyle}{ + frame=single, + commentstyle=\color{codecomments}, + numberstyle=\tiny\color{codenumbers}, + stringstyle=\color{codestring}, + basicstyle=\ttfamily\footnotesize, + keywordstyle=\color{codekeywords}, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=4, + escapeinside={<@}{@>} +} + +% \DeclareCaptionFormat{listing}{ +% \parbox{\textwidth}{\centering#1 - #3} +% } +% \captionsetup[lstlisting]{ format=listing, singlelinecheck=false, margin=0pt } + +\lstdefinestyle{CCodeStyle}{ + frame=single, + commentstyle=\color{codecomments}, + morecomment=[l][\color{codefine}]{\#}, + numberstyle=\tiny\color{codenumbers}, + stringstyle=\color{codestring}, + basicstyle=\ttfamily\footnotesize, + keywordstyle=\color{codekeywords}, + emph={int,char,double,float,unsigned,void,bool}, + emphstyle={\color{blue}}, + breakatwhitespace=false, + breaklines=true, + captionpos=t, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=4, + escapeinside={<@}{@>} +} + +\lstdefinestyle{ASMStyle}{ + frame=single, + numberstyle=\tiny\color{codenumbers}, + commentstyle=\color{codecomments}, + keywordstyle=\color{codekeywords}, + morecomment=[l]{;}, % l is for line comment + morecomment=[s]{/*}{*/}, % s is for start and end delimiter + basicstyle={\ttfamily\footnotesize}, + morekeywords={ + bset, macr, + add,addi,and,andi, + bge,beq,bne,br, + cmpeqi,cmpgei,cmplti,cmpnei, + ldhu,ldw,ldwio, + mov,movi,movhi,muli, + nop,nor, + ret, + slli,srai,srli,stw,stwio}, + breakatwhitespace=false, + breaklines=true, + captionpos=t, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showtabs=false, + tabsize=4, + escapeinside={<@}{@>} +} + +\lstdefinestyle{VerilogStyle}{ + frame=single, + numberstyle=\tiny\color{codenumbers}, + commentstyle=\color{codecomments}, + keywordstyle=\color{codekeywords}, + morecomment=[l]{//}, % l is for line comment + morecomment=[s]{/*}{*/}, % s is for start and end delimiter + basicstyle={\ttfamily\footnotesize}, + morekeywords={ + logic, always_ff, always_comb + }, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showtabs=false, + tabsize=2, + escapeinside={<@}{@>} +} + +\lstset{escapeinside={<@}{@>}} diff --git a/j-spec.tex b/j-spec.tex index 0dd5d8b..4befe99 100644 --- a/j-spec.tex +++ b/j-spec.tex @@ -1,4 +1,5 @@ -\immediate\write18{texcount -sum -1 prog-draft.tex > /tmp/wordcount.tex} +\immediate\write18{texcount -sum -1 j-spec.tex > /tmp/wordcount.tex} +%\immediate\write18{texcount -sum -1 scenarios/jc-1-c.tex > /tmp/wordcount.tex} \documentclass[12pt, a4paper]{report} \usepackage[english,russian]{babel} % локализация и переносы \usepackage{fancyhdr} @@ -18,11 +19,24 @@ \usetikzlibrary{mindmap,trees} \titlelabel{\thetitle. \quad} +\setcounter{tocdepth}{1} + \babelfont{rm}{PT Astra Serif} \babelfont{sf}{PT Astra Serif} \babelfont{tt}{PT Mono} \graphicspath{{./pics/}} + +\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} + \framebox{\includegraphics[page=\arabic{slidenum},width=.95\textwidth]{#1}} + \stepcounter{slidenum} + \end{center} +} \newcommand{\wordcount}{\input{/tmp/wordcount.tex}} \newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize} \renewcommand\labelitemi{\textemdash} @@ -60,34 +74,59 @@ \begin{document} \maketitle \tableofcontents +\pagestyle{plain} \chapter{Java Core} \section{Платформа: история и окружение} -Краткая история (причины возникновения); JDK, JRE, JVM, выбор версии; CLI: сборка, множественные источники, пакеты, запуск; структура проекта: пакеты, классы, метод main, комментарии, документирование; -\subsection{Задания к семинару} +\subsection*{Конспект лекции} +\subsubsection{Краткая история (причины возникновения)} +\begin{figure}[H] + \centering + \includegraphics[width=17cm]{jc-01-tiobe.png} + \caption{График популярности языков программирования TIOBE} + \label{pic:java-in-tiobe} +\end{figure} + +\subsubsection{Базовый инструментарий, который понадобится (выбор IDE)} \begin{itemize} -\item [C-1] Скомпилировать проект из трёх классов, находящихся в двух пакетах, а также создать для этого проекта стандартную веб-страницу с документацией +\item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком; +\item Eclipse - для поклонников Eclipse Foundation и швейцарских ножей с полусотней лезвий; +\item IntelliJ IDEA - стандарт де-факто, используется на курсе и в большинстве современных компаний; +\item Android Studio - если заниматься мобильной разработкой. \end{itemize} +\subsubsection{Что нужно скачать, откуда (как выбрать вендора)} +\subsubsection{Из чего всё состоит (JDK, JRE, JVM, выбор версии)} +\subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)} +\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)} +\subsubsection{Документирование (Javadoc)} + +\subsection*{Задания к семинару} +\begin{itemize} +\item Скомпилировать проект из трёх классов, находящихся в двух пакетах, а также создать для этого проекта стандартную веб-страницу с документацией +\end{itemize} +\subsection*{Сценарий лекции} +%\subfile{scenarios/jc-1-c} + \section{Управление проектом: сборщики проектов} Управление проектом: Jar-файлы; Gradle/Maven: зависимости, выгрузка артефакта, публичные репозитории, свойства проекта, приватные репозитории (хостинг); Bazel -\subsection{Задания к семинару} +\subsection*{Задания к семинару} \begin{itemize} -\item [C-2] Создать загружаемый артефакт с функцией суммирования двух чисел и загрузить его в локальный кэш артефактов; +\item Создать загружаемый артефакт с функцией суммирования двух чисел и загрузить его в локальный кэш артефактов; \end{itemize} \section{Специализация: данные и функции} Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); Функции: параметры, возвращаемые значения, перегрузка функций; -\subsection{Задания к семинару} +\subsection*{Задания к семинару} \begin{itemize} -\item [C-3] Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода); -\item [C-3] Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд; +\item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода); +\item Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд; \end{itemize} \section{Специализация: ООП} Инкапсуляция: Классы и объекты (внутренние классы, вложенные классы, static, private/public, final, интерфейс взаимодействия с объектом), перечисления (создание, конструкторы перечислений, объекты перечислений, дополнительные свойства); Наследование: extends, Object (глобальное наследование), protected, преобразование типов, final; Полиморфизм: override, abstract, final; -\subfile{scenarios/jc-4} +%\subfile{scenarios/jc-4} \section{Специализация: Тонкости работы} Файловая система и представление данных; Пакеты \code{java.io}, \code{java.nio}, \code{String}, \code{StringBuilder}, string pool, ?JSON/XML? diff --git a/pics/jc-01-tiobe.png b/pics/jc-01-tiobe.png new file mode 100644 index 0000000..074b9de Binary files /dev/null and b/pics/jc-01-tiobe.png differ diff --git a/scenarios/build/jc-1-b.pdf b/scenarios/build/jc-1-b.pdf new file mode 100644 index 0000000..a802b2e Binary files /dev/null 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 new file mode 100644 index 0000000..a79e259 Binary files /dev/null and b/scenarios/build/jc-1-c.pdf differ diff --git a/scenarios/jc-1-b.tex b/scenarios/jc-1-b.tex new file mode 100644 index 0000000..ae97e32 --- /dev/null +++ b/scenarios/jc-1-b.tex @@ -0,0 +1,95 @@ +\documentclass[russian]{beamer} + +\usepackage{multicol} +\usepackage{babel} +\usepackage{fontspec} +\input{../fancy-listings-preamble} + +\makeatletter +\def\beamer@framenotesbegin{% at beginning of slide + \usebeamercolor[fg]{normal text} + \gdef\beamer@noteitems{}% + \gdef\beamer@notes{}% +} +\makeatother + +% \setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote} +% \setbeameroption{show notes on second screen=right} + +\usetheme{Madrid} +\usecolortheme{seahorse} +\setmainfont{IBM Plex Sans} +\setsansfont{IBM Plex Sans} + +\title{Платформа: история и окружение} +\author{Иван Игоревич Овчинников} +\institute[GB: Java]{GeekBrains. Java Core.} +\date{2022} + +\begin{document} +\setbeamertemplate{enumerate items}[circle] + +\frame{\titlepage} +\note{...} + + +\begin{frame} +\frametitle{Введение и знакомство (о себе)} +Иван Овчинников. НПО ИТ, РКС, GB. +\begin{block}{Используемые технологии} +Много и с удовольствием C, C++, Java, Verilog. C\# и Python даже не считаем. +\end{block} +Для GB более 20 потоков по разным направлениям, более двух тысяч студентов. +\end{frame} +\note{...} + +\begin{frame} + \frametitle{Краткая история} + \includegraphics[width=12cm]{../pics/jc-01-tiobe.png} +\end{frame} +\note{...} + +\begin{frame} + \frametitle{Базовый инструментарий} + \begin{enumerate} + \item Eclipse + \item NetBeans + \item IntelliJ IDEA + \item BlueJ + \item Oracle JDeveloper + \item MyEclipse + \item Greenfoot + \item jGRASP + \item JCreator + \item DrJava + \end{enumerate} +\end{frame} +\note{...} + +\begin{frame} + \frametitle{Что нужно скачать} + \begin{enumerate} + \item ждк + \item среду + \end{enumerate} +\end{frame} +\note{...} + +\begin{frame} + \frametitle{Что нужно скачать} + \begin{enumerate} + \item оракл ждк + \item опен ждк + \item либерика ждк + \item гост жаба + \item экзотические истории поискать надо + \end{enumerate} +\end{frame} +\note{...} + +\begin{frame} + \frametitle{title} +\end{frame} +\note{...} + +\end{document} \ No newline at end of file diff --git a/scenarios/jc-1-c.tex b/scenarios/jc-1-c.tex new file mode 100644 index 0000000..1b97ac1 --- /dev/null +++ b/scenarios/jc-1-c.tex @@ -0,0 +1,44 @@ +\documentclass[../j-spec.tex]{subfiles} + +\begin{document} +\showslide{build/jc-1-b.pdf} +Добро пожаловать на специализацию Java, лучшую из всех специализаций Java, что вы сможете найти. + +% ------------------------------------------------------------------------------------------------ +\showslide{build/jc-1-b.pdf} +Здравствуйте, меня зовут Иван, я разработчик программного обеспечения в Российских космических системах, начальник группы программистов, автор и преподаватель нескольких курсов в направлении программирования на портале GeekBrains. Пара слов обо мне, почему я нахожусь здесь и планирую Вам что-то рассказывать про язык Java? Для этого придётся вынести за скобки мой опыт работы в цифровой схемотехнике и других языках, в том числе создание бортовой аппаратуры, которая прямо сейчас летает у нас над головами или продолжает доставлять другие полезные грузы в космос. С точки зрения языка Java, обо мне можно сказать, что я являюсь разработчиком нескольких отраслевых информационных систем поддержки единой наземной инфраструктуры российского космического агентства. На моём счету также участие в межотраслевых проектах по созданию единых баз данных космического применения. + +%------------------------------------------------------------------------------------------------ +\showslide{build/jc-1-b.pdf} +Итак язык Java. Согласно википедии, Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems. Разработка ведётся сообществом; язык и основные реализующие его технологии распространяются по лицензии GPL. + +Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, для которой существует реализация виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года. Традиционно занимает высокие места в рейтингах популярности языков программирования (3-е место в рейтинге TIOBE (на август 2021)). На графике отлично видно, что с 2002 года язык уверенно держится в тройке популярных, значительную часть времени возглавляя его. + +Но это всё - сухие факты, ничего не говорящие нам о том, чем руководствовались разработчики языка и что нам, программистам, с этим делать. + +Существует, интересная версия происхождения названия языка, связанная с аллюзией на кофе машину как пример бытового устройства, для программирования которого изначально язык создавался. Кстати, в результате работы проекта мир увидел принципиально новое устройство, карманный персональный компьютер, который опередил своё время более чем на 10 лет, но из-за большой стоимости не смог произвести переворот в мире технологии и был забыт. Устройство Star7 не пользовалось популярностью, в отличие от языка программирования Java и его окружения. С середины 1990-х годов язык стал широко использоваться для написания клиентских приложений и серверного программного обеспечения. Тогда же некоторое распространение получила технология Java-апплетов — графических Java-приложений, встраиваемых в веб-страницы; с развитием возможностей динамических веб-страниц технология стала применяться редко и язык стал применяться для бэк-энда. + +Итак Язык программирования Java занял свою нишу в системном и прикладном программировании из-за своей высокой скорости работы, и веб-программировании, из-за удобного сетевого окружения, ставшего основой для создания бэк-энда веб-сервисов. Java очевидно испытал влияние языков C, C++, Pascal и других, так что многое в этих языках достаточно досконально изучить один раз, чтобы иметь возможность понимать все связанные. + +% ------------------------------------------------------------------------------------------------ +\showslide{build/jc-1-b.pdf} +Мы привыкли к тому, что для программирования нужна некоторая среда, которая будет удобно подсказывать нам, что делать, как писать программу, запускать написанный код и помогать нам отлаживать его. Чаще всего это так, но я призываю вас не останавливаться на единственном инструменте, ведь если быть всегда сосредоточенным на отвёртке, вы никогда не узнаете, что люди придумали очень удобный шуруповёрт. + +Я не планирую рекламировать ту или иную среду, скорее всего не буду даже много говорить о плюсах и минусах той или иной среды, просто покажу список и коротко расскажу о главных действующих лицах: +\begin{enumerate} +\item NetBeans - если коротко, то эта среда с нами из уважения к истории, она была первой, созданной для разработки на языке Java. Долгое время разработка этой среды не велась, но в последние несколько лет разработчики как будто бы вспомнили о ней и активно взялись за дело, сейчас есть версии под все популярные ОС, поддерживается весь популярный современный функционал, есть прикольные самобытные моменты, вроде расширенных клавиатурных макросов для написания функций с передаваемыми в них массивами; +\item Eclipse - проще, наверное, назвать язык или технологию, под которую нет плагина для этой весьма расширяемой и дополняемой среды программирования. Долгое время, вплоть до недавнего, а где-то и до сих пор, является корпоративным стандартом для написания Enterprise приложений и прочих сложных корпоративных приложений. Весьма гибкая среда и-за того, что разрабатывается Eclipse Foundation к ней можно подключить плагины, решающие почти любые задачи разработки. Из того что я видел своими глазами, Siemens использует Eclipse для разработки своих систем поддержки жизненного цикла изделий; +\item IntelliJ IDEA - стандарт де-факто примерно десять последних лет. Не уверен, можно ли назвать эту среду российской разработкой, но у компании, разрабатывающей эту среду, три русских учредителя. Да и сама эта компания началась именно с этой среды. В этой среде можно настроить почти любую деталь, что часто бывает очень удобно. Среда расширяется плагинами на почти все случаи жизни разработчика. Часто входит в экосистему JetBrains, развёрнутую на предприятии, поэтому тесно интегрируется в другие сферы деятельности компании. Существует как бесплатная, так и платная версия с расширенным функционалом, например, доступа к базам данных. +\end{enumerate} + +Отдельно стоит обговорить такую среду, как Android Studio, как мог заметить внимательный зритель, её нет в списке на слайде, но не потому, что в ней нельзя разрабатывать Java-приложения, а потому что если не разрабатывать в ней именно Android приложения, следует отказаться от её использования из-за некоторой избыточности. Среда снабжена значительным количеством надстроек и эмуляторов мобильных устройств, которые попросту будут вам мешать, если вы не используете их в своей профессиональной деятельности. С другой стороны, если ваша цель - это именно мобильная разработка под Android, то и выбора у вас особо нет, только Android Studio. + +% ------------------------------------------------------------------------------------------------ +\showslide{build/jc-1-b.pdf} +О средах программирования дополнительно поговорили, нужно выбрать какую-нибудь, и скачать. В курсе, кроме этого урока будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK, и вот сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак. + +% ------------------------------------------------------------------------------------------------ +\showslide{build/jc-1-b.pdf} + + +\end{document} \ No newline at end of file