-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy path030_solution.tex
187 lines (161 loc) · 21.7 KB
/
030_solution.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
% !TeX spellcheck = ru_RU
% !TEX root = vkr.tex
\section{Описание решения}
Реализация в широком смысле: что таки было сделано.
Часто это на самом деле несколько отдельных разделов, по одному на каждую \enquote{реализационную} задачу из постановки.
Например, \enquote{Архитектура} и \enquote{Особенности реализации}, либо по разделу на каждую крупную подзадачу.
Если разделы получились недостаточно эпичными (меньше пары страниц), сделайте их подразделами одного большого раздела, как тут.
Если программной реализации нет, тут пишутся Ваши теоретические наработки, если есть, хоть в каком-то виде, то опишите, даже если серьёзно кодом надо будет заняться только в следующей части.
Если работа на текущем этапе предполагает \emph{только} обзор, то
\begin{itemize}
\item но всё равно же надо было попробовать воспроизвести чужие результаты, напишите про это сюда;
\item если нет, то, наверное, обзор получился годным и ценным сам по себе, источников 40--50 было рассмотрено%
\footnote{Это не шутка, в хороших работах, где целый семестр делался только обзор, оно примерно так и выходит.},
тогда ладно, раздел \enquote{Описание решения} можно не делать.
\end{itemize}
Для понимания того, как отчёт по учебной практике должен писаться, можно посмотреть видео ниже.
Они про научные доклады и написание научных статей.
Учебные практики и ВКР отличаются тем, что тут есть требования отдельных глав (слайдов) со списком задач и списком результатов.
Но даже если Вы забьёте на требования, специфичные для ВКР, и соблюдете все рекомендации ниже, получившиеся скорее всего будет лучше, чем первая попытка 99\% ваших однокурсников.
\begin{enumerate}
\item \enquote{Как сделать великолепный научный доклад} от Саймона Пейтона Джонса~\cite{SPJGreatTalk} (на английском).
\item \enquote{Как написать великолепную научную статью} от Саймона Пейтона Джонса~\cite{SPJGreatPaper} (на английском).
\item \enquote{Как писать статьи так, чтобы люди их смогли прочитать} от Дэрэка Драйера~\cite{DreyerYoutube2020} (на английском).
По предыдущим ссылкам разбирается, что должно быть в статье, т.е. как она должна выгля\-деть на высоком уровне.
Тут более низкоуровнево изложено, как должны быть устроены параграфы и т.п.
\item Или на русском от С.~Григорьева~\cite{SemenI,SemenII}.
\item Ещё можно посмотреть How to Design Talks~\cite{JhalaYoutube2020} от Ranjit Jhala, но мы думаем, что первых ссылок всем хватит.
\end{enumerate}
Можно глянуть примеры хороших работ прошлых лет на сайте кафедры системного программирования%
\footnote{Сайт кафедры СП, архив практик и ВКР: URL: \url{https://se.math.spbu.ru/theses.html} (дата обращения: \DTMdate{2024-01-15}).}.
Например, работа Москаленко Ивана Николаевича за 3-й курс%
\footnote{\enquote{Создание базы данных изображений для глобальной локализации в пространстве}, URL: \url{https://se.math.spbu.ru/thesis_download?thesis_id=1199} (дата обращения: \DTMdate{2024-01-15}).}.
\subsection{Первая задача}
\label{subsec:task1}
\subsection{Вторая задача}
\label{subsec:task2}
\subsection{Третья задача}
\label{subsec:task3}
\subsection{Некоторые типичные ошибки}
Здесь мы будем собирать основные ошибки, которые случаются при написании текстов.
В интернетах тоже можно найти коллекции типич\-ных косяков%
\footnote{\href{https://www.read.seas.harvard.edu/~kohler/latex.html}{https://www.read.seas.harvard.edu/\textasciitilde kohler/latex.html} (дата обращения: \DTMdate{2022-12-16}).}.
Рекомендуется по-умол\-ча\-нию использовать красивые греческие бук\-вы $\sigma$ и $\phi$, а именно $\phi$ вместо $\varphi$.
В данном шаблоне команды для этих букв переставлены местами по сравнению с ванильным \TeX'ом.
Также, если работа пишется на русском языке, необходимо, чтобы работа была написана на \textit{грамотном} русском языке даже если автор из ближнего зарубежья%
\footnote{Теоретически, возможен вариант написания текстов на английском языке, но это необходимо обсудить в первую очередь с научным руководителем.}.
Это включает в себя:
\begin{itemize}
\item разделы должны оформляться с помощью \verb=\section{...}=, а также \verb=\subsection= и т.~п.; не нужно пытаться нумеровать вручную;
\item точки после окончания предложений должны присутствовать;
\item пробелы после запятых и точек, в конце слова перед скобкой;
\item неразрывные пробелы там, где нужны пробелы, но переносить на другую строку нельзя, например \verb=т.~е.=, \verb=А.~Н.~Терехов=, \verb=что-то~\cite{?}=, \verb=что-то~\ref{?}=;
\item дефис там, где нужен дефис (обозначается с помощью одиночного \enquote{минуса} (англ. dash) на клавиатуре);
\item двойной дефис там, где он нужен; а именно при указании проме\-жутка в цифрах: в 1900--1910 г.~г., стр. 150--154;
\item тире (т.~е. \verb=---=~--- тройной минус) на месте тире, а не что-то другое; в русском языке тире не может \enquote{съезжать} на новую строку, поэтому стоит использовать такой синтаксис: \verb=До~--- после=;
\item даты стоит писать везде одинаково; чтобы об этом не следить, можно пользоваться заклинанием \verb=\DTMdate{2022-12-16}=;
\item правильные кавычки должны набираться с помощью пакета \texttt{csquotes}: для основного языка в \texttt{polyglossia} стоит использовать команду \verb=\enquote{текст}=, для второго языка стоит использовать \verb=\foreignquote{язык}{текст}=; правильные кавычки в русской типографии~--- \verb=<<ёлочки>>=, ни в коем случае не \verb="скандинавские лапки"=;
\item все перечисления должны оформляться с помощью \verb=\enumerate= или \verb=\itemize=; пункты перечислений должны либо начинаться с заглавной буквы и заканчиваться точкой, либо начинаться со строчной и закачиваться точкой с запятой; последний пункт пере\-числений всегда заканчивается точкой.
\item Перед выкладыванием финальной версии необходимо просмотреть лог \LaTeX'a, и обратить внимание на сообщения вида \emph{Overfull \textbackslash hbox (1.29312pt too wide) in paragraph}. Обычно, это означает, что текст выползает за поля, и надо подсказать, как правильно разделять слова на слоги, чтобы перенос произошел автоматически.
Это делается, например, так: \verb=соломо\-волокуша=.
\item \emph{Обязательно используйте инструменты автоматической проверки правописания!}
Не посылайте текст даже научному руководителю на проверку, если не прогнали спеллчекер%
\footnote{Например, для браузера можно использовать плагин LanguageTool, для VS Code --- Code Spell Checker с расширением для русского (но он вроде не умеет пунктуацию, так что следите за запятыми).}%
, желательно, умеющий проверять пунктуацию~--- у научника куча времени уйдёт на комментарии вида \enquote{тут нужна запятая} и не останется сил посоветовать что-нибудь по делу.
А ещё научник будет шокирован уровнем грамотности современной молодёжи, впадёт в депрессию и не будет отвечать вам неделю.
\end{itemize}
\subsection{Листинги, картинка и прочий \enquote{не текст}}
Различный \enquote{не текст} имеет свойство отображаться не там, где он написан в текстовом виде в \LaTeX{}, поэтому у него должна быть самодостаточ\-ная понятная подпись \verb=\caption{...}=, уникальная метка \verb=\label{...}=, чтобы на неё можно было бы ссылаться в тексте с помощью \verb=\ref{...}= (более того, ссылка из текста обязательна).
Ниже Вы сможете увидеть таблицу \ref{time_cmp_obj_func}, на которую мы сослались буквально только что.
\enquote{Не текста} может быть довольно много~--- чтобы не засорять корневую папку, хорошим решением будет складывать весь \enquote{не текст} в папку \texttt{figures}.
Заклинание \verb=\includegraphics{}= уже знает этот путь и будет искать там файлы без указания папки.
Команда \verb=\input{}= умеет ходит по путям, например \verb=\input{figures/my_awesome_table.tex}=.
Кроме того, листинги кода можно подтягивать из файла с помощью команды \verb=\inputminted{file}=.
%% Вставка кода с помощью listings
% \begin{lstlisting}[caption={Название для листинга кода. Достаточно длинное, чтобы люди, которые смотрят картинку сразу после названия статьи (т.~е. все люди), смогли разобраться и понять к чему в статье листинги, картинки и прочий \enquote{не текст}.}, language=Caml, frame=single]
% let x = 5 in x + 1
% \end{lstlisting}
%% Вставка кода с помощью minted
\begin{listing}
\caption{Название для листинга кода. Достаточно длинное, чтобы люди, которые смотрят картинку сразу после названия статьи (т.~е. все люди), смогли разобраться и понять к чему в статье листинги, картинки и прочий \enquote{не текст}.}
\begin{minted}[frame=single]{ocaml}
let x = 5 in x + 1
\end{minted}
\end{listing}
\subsubsection{Выделение куска листинга с помощью tikz}
Это бывает полезно в текстах, а ещё чаще~--- в презентациях.
Пример сделан на основе вопроса на \textsc{StackExchange}%
\footnote{Вопрос про рамку вокруг листинга на StackExchange, \url{https://tex.stackexchange.com/questions/284311} (дата обращения: \DTMdate{2022-12-16}).}.
Заодно тут показывается альтернативный minted пакет, lstlistings, если не хотите ставить Python и пакет pygments.
В этом случае закомментируйте всё, что связано с minted, в matmex-diploma-custom.cls.
И внимательно следите за тем, чтобы везде использовался либо только lstlistings, либо minted~--- смешивание их в одном документе приведёт к странным ошибкам.
\begin{figure}
% TODO(Kakadu): Сделать \lstset глобально, чтобы не выписывать все опции листингов каждый раз
\begin{lstlisting}[ escapechar=!, keepspaces=true, extendedchars=\true, texcl=true
, basicstyle=\ttfamily, commentstyle=\color{eclipseGreen}\ttfamily\itshape, language=c ]
#include <stdio.h>
#include <math.h>
/** A comment in English */
int main(void)
{
double c = -1;
double z = 0;
// Это комментарий на русском языке
printf ("For c = %lf:\n", c);
for (int i = 0; i < 10; i++ ) {
printf( !\tikzmark{a}!"z %d = %lf\n"!\tikzmark{b}!, i, z);
z = pow(z, 2) + c;
}
}
\end{lstlisting}
\begin{tikzpicture}[use tikzmark]
\draw[fill=gray,opacity=0.1]
([shift={(-3pt,2ex)}]pic cs:a)
rectangle
([shift={(3pt,-0.65ex)}]pic cs:b);
\end{tikzpicture}
\caption{Пример листинга c помощью пакета \texttt{listings} и \textsc{TIKZ} декорации к нему, оформленные в окружении \texttt{figure}.
Обратите внимание, что рисунок отображается не там, где он в документе, а может \enquote{плавать}.}
\end{figure}
\subsection{Некоторые детали описания реализации}
Описание реализации~--- очень важный раздел для будущих программных инженеров, т.е. почти для всех.
Важно иметь всегда, даже если Вы написали прототип на коленке или немного скриптов.
В процессе работы можно сделать огромное количество косяков, неполный список которых ниже.
\begin{enumerate}
\item Реализация должна быть.
На публично доступную реализацию обязательна ссылка (в заключении, но можно продублировать тут).
Если код под \textsc{NDA}, то об этом, во-первых, должно быть сказано явно,
во-вторых, на защиту должны выно\-ситься другие результаты (например, архитектура), чтобы комис\-сия имела возможность оценить хоть что-то,
и, в третьих, должна быть справка от работодателя, что Вы правда что-то сделали.
\begin{itemize}
\item Рецензент обязан оценить код (о возможности должен побеспо\-коиться обучающийся).
\end{itemize}
\item Код реализации должен быть написан защищающимся целиком.
\begin{itemize}
\item Если проект групповой, то нужно явно выделить, какие части были модифицированы защищающимся.
Например, в преды\-дущих разделах на картинке архитектуры нужно выделить цветом то, что Вы модифицировали.
\item Нельзя пускать в негрупповой проект коммиты от других людей, или людей не похожих на Вас.
Например, в 2022 году защищающийся-парень делал коммиты от сценического псев\-донима, который намекает на женский \enquote{гендер}.
(Нет, это не шутка.)
На тот момент в российской культуре это выглядело странно.
\item Возможна ситуация, что вы используете конкретный ник в интернете уже лет пять, и желаете писать ВКР под этим ником на \GitHub{}.
В принципе, это допустимо, но если Вы встретите преподавателя, который считает наоборот, то Вам придется грамотно отмазы\-ваться.
В Вашу пользу могут сыграть те факты, что к нику на \GitHub{} у Вас приписаны настоящие имя и фамилия; что в репозитории у вас видна домашка за первый курс;
и что Ваш преподаватель практики сможет подтвердить, что Вы уже несколько лет используете это ник; и т.п.
\end{itemize}
\item Если Вы получаете диплом о присвоении квалификации программиста, код должен соответствовать.
\begin{enumerate}
\item Не стоит выкладывать код одним коммитом.
\item Не стоит выкладывать код аккурат перед защитой.
\item Лучше хоть какие-то тесты, чем совсем без них.
В идеале нужно предъявлять процент покрытия кода тестами.
\item Лучше сделать \textsc{CI}, а также \textsc{CD}, если оно уместно в Вашем проекте.
\item Не стоит демонстрировать на защите, что Вам даже не пришло в голову напустить на код линтеры и т.п.
\end{enumerate}
\item Если ваша реализация по сути является прохождением стандартного туториала,
например, по отделению картинок кружек от котиков с помощью машинного обучения, то необходимо срочно сообщить об этом руководителю практики/ВКР,
иначе Государственная Экзаменацион\-ная Комиссия \enquote{порвёт Вас как Тузик грелку}, поставит \enquote{единицу},
а все остальные Ваши сокурсники получат оценку выше.
(Это не шутка, а реальная история 2020 года.)
\end{enumerate}
\noindent Если Вам предстоит защищать учебную практику, а эти рекомендации видятся как более подходящие для защиты ВКР, то ... отмаза не засчиты\-вается, сразу учитесь делать нормально.