diff -r 3350cc06804b -r ecec79b9ab25 slides/slides01.tex --- a/slides/slides01.tex Thu Nov 09 16:34:08 2017 +0000 +++ b/slides/slides01.tex Fri Nov 10 00:56:12 2017 +0000 @@ -55,7 +55,7 @@ \begin{tabular}{l} \mbox{}\hspace{-1mm}\includegraphics[scale=0.36]{../pics/twitter.png}\\[-1mm] \includegraphics[scale=0.30]{../pics/linked.png}\\ -\includegraphics[scale=0.30]{../pics/guardian.jpg}\\[-3mm] +%\includegraphics[scale=0.30]{../pics/guardian.jpg}\\[-3mm] \mbox{}\hspace{-2mm}\includegraphics[scale=0.38]{../pics/morgan.png}\\[-3mm] \includegraphics[scale=0.30]{../pics/suisse.png}\\ {\large\bf ...} @@ -93,7 +93,7 @@ \small alternatives:\\ -Elm, Haskell, Ocaml, F\sharp, Erlang, ML, Lisp (Racket), \ldots +Elm, Haskell, Ocaml, F$\sharp$, Erlang, ML, Lisp (Racket), \ldots \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -114,8 +114,6 @@ \textbf{\large Java} \end{textblock} - - \begin{textblock}{6}(13,13.4) \textbf{\large Scala} \end{textblock} @@ -148,7 +146,7 @@ % \mbox{}\\[3.5cm] \small -Scala, Elm, Haskell, Ocaml, F\sharp, Erlang, ML, Lisp (Racket), \ldots +Scala, Elm, Haskell, Ocaml, F$\sharp$, Erlang, ML, Lisp (Racket), \ldots \only<3>{ \begin{textblock}{6}(2,6.2) @@ -289,10 +287,10 @@ \end{textblock}} \only<3>{ - \begin{textblock}{5}(1,8) - \begin{bubble}[2.1cm] - \footnotesize{}in Java or C++\\ - \end{bubble} + \begin{textblock}{14.2}(1,12.3) + In FP: Once a variable is created, it is assigned a value and then + never changed again $\Rightarrow$ no synchronisation\smallskip\\ + \small\textcolor{gray}{(Andrew's second favourite feature of C++)} \end{textblock}} \end{frame} @@ -380,23 +378,219 @@ {\lstset{language=Java}\fontsize{7}{8}\selectfont \texttt{\lstinputlisting{URLReader.java}}} -\only<2>{ -\begin{textblock}{5}(12,2) -\includegraphics[scale=0.50]{../pics/skeleton.jpg}\\ -\end{textblock}} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c] +\frametitle{Coursework} + +\begin{itemize} +\item sorry, I might have been a bit wordy:\\ + CW description is 7 pages, but + I only needed \mbox{< 100} loc for all the CW\bigskip + +\item there is email feedback when pushing code to github\bigskip + +\item we want you to learn FP: \alert{no vars}, no mutable + datastructures, e.g.~\texttt{ListBuffer} +\end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[c, fragile] +\frametitle{The Joy of Immutability} + +\begin{itemize} +\item If you need to manipulate some data in a list say, then you make + a new list with the updated values, rather than revise the original + list. Easy!\medskip + + {\small + \begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm] + val old_list = List(1, 2, 3, 5) + val new_list = 0 :: old_list + \end{lstlisting}} + +\item You do not have to be defensive about who can access the data + (concurrency, lazyness). +\end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] +\frametitle{Email: Hate 'val'} + +\mbox{}\\[-25mm]\mbox{} + +\begin{center} + \begin{bubble}[10.5cm] + Subject: \textbf{Hate '\textbf{\texttt{val}}'}\hfill 01:00 AM\medskip\\ + + Hello Mr Urban,\medskip\\ + + I just wanted to ask, how are we suppose to work + with the completely useless \textbf{\texttt{val}}, that can’t be changed ever? Why is + this rule active at all? I’ve spent 4 hours not thinking on the + coursework, but how to bypass this annoying rule. What’s the whole + point of all these coursework, when we can’t use everything Scala + gives us?!?\medskip\\ + + Regards.\\ + \mbox{}\hspace{5mm}\textcolor{black!50}{<>}\\ + \end{bubble} +\end{center} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[c] + +\mbox{}\\[-25mm]\mbox{} + +\begin{center} + \begin{bubble}[10.5cm] + Subject: \textbf{Re: Hate '\textbf{\texttt{val}}'}\hfill 01:02 AM\bigskip\bigskip\\ + + \textcolor{black!70}{ + \textit{\large<>}}\bigskip\bigskip\bigskip + + PS: What are you trying to do where you desperately want to use \texttt{var}? + \end{bubble} +\end{center} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[c,fragile] + +\begin{textblock}{6}(0.5,0.5) +\begin{bubble}[11.5cm] + \small + Subject: \textbf{Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 01:04 AM\medskip\\ + + \textbf{Right now my is\_legal function works fine:} + +\footnotesize\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm] + def is_legal(dim: Int, path: Path)(x: Pos): Boolean = { + var boolReturn = false + if(x._1 > dim || x._2 > dim || x._1 < 0 || x._2 < 0) { + else { var breakLoop = false + if(path == Nil) { boolReturn = true } + else { for(i <- 0 until path.length) { + if(breakLoop == false) { + if(path(i) == x) { + boolReturn = true + breakLoop = true + } + else { boolReturn = false } + } else breakLoop + } + } + boolReturn + } +\end{lstlisting} +\end{bubble} +\end{textblock} + +\begin{textblock}{6}(8.2,11.8) +\begin{bubble}[5.5cm]\footnotesize\bf +\ldots{}but I can’t make it work with boolReturn being val. What approach would +you recommend in this case, and is using var in this case justified? +\end{bubble} +\end{textblock} + +\only<2>{ +\begin{textblock}{6}(0.3,11.8) + \begin{bubble}[3.1cm] + \textbf{Me:} + \raisebox{-12mm}{\includegraphics[scale=0.08]{../pics/throwup.jpg}} + \end{bubble} +\end{textblock}} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t,fragile] + +\mbox{}\\[-25mm]\mbox{} + +\begin{textblock}{6}(0.5,2) + \begin{bubble}[11.5cm] + Subject: \textbf{Re: Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 01:06 AM\bigskip\\ + \small + + OK. So you want to make sure that the \texttt{x}-position is not outside the + board....and furthermore you want to make sure that the \texttt{x}-position + is not yet in the path list. How about something like\bigskip + +\footnotesize\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm] + def is_legal(dim: Int, path: Path)(x: Pos): Boolean = + ...<>... && !path.contains(x) +\end{lstlisting}\bigskip + + \small Does not even contain a \texttt{val}. + \end{bubble} +\end{textblock} + +\begin{textblock}{6}(7,12) +\footnotesize\textcolor{black!50}{(This is all on one line)} +\end{textblock} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t,fragile] + +\mbox{}\\[-15mm]\mbox{} + +\begin{textblock}{6}(1,3) + \begin{bubble}[10.5cm] + Subject: \textbf{Re: Re: Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 11:02 AM\bigskip\bigskip\\ + + THANK YOU! You made me change my coding perspective. Because of you, + I figured out the next one\ldots + \end{bubble} +\end{textblock} + +\only<2>{ +\begin{textblock}{6}(0.3,11.8) + \begin{bubble}[3.1cm] + \textbf{Me:} + \raisebox{-12mm}{\includegraphics[scale=0.15]{../pics/happy.jpg}} + \end{bubble} +\end{textblock}} + +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[c] \frametitle{Conclusion} \begin{itemize} \item Scala is still under heavy development\\ (the compiler is terribly slow)\medskip \item {\bf\url{http://www.scala-lang.org/}}\bigskip -\item it is a rather \textbf{\alert{deep}} language\ldots i.e.~gives you a lot of - rope to shoot yourself\bigskip\bigskip + +\item it is a rather \textbf{\alert{deep}} language\ldots i.e.~gives + you a lot of rope to shoot yourself\bigskip +\item learning functional programming is not easy\ldots{}when you have + spent all of your career thinking in a procedural way it is hard to + change\bigskip\medskip + \item hope you have fun with the coursework \end{itemize} \end{frame} @@ -404,9 +598,18 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[c] -\frametitle{\begin{tabular}{c}\\[3cm]\alert{Questions?}\end{tabular}} +\frametitle{\begin{tabular}{c}\\[0cm]\alert{Questions?}\end{tabular}} -\mbox{} +\begin{center} + \begin{tabular}[t]{@{}l@{}l@{}} + \includegraphics[scale=0.1]{../pics/mand4.png} & + \raisebox{1.2mm}{\includegraphics[scale=0.1]{../pics/mand3.png}} + \end{tabular} +\end{center} + +\begin{center} +My Scala Office Hours: Thursdays 11 -- 13 +\end{center} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{document} @@ -419,3 +622,10 @@ %%% TeX-master: t %%% End: + +“Functional programming is often regarded as the best-kept secret of +scientific modelers, mathematicians, artificial intelligence +researchers, financial institutions, graphic designers, CPU designers, +compiler programmers, and telecommunications engineers.” + +The Wikipedia F# page \ No newline at end of file