\documentclass[a4paper]{article} \usepackage[dutch]{babel} \usepackage{geometry} \usepackage[hidelinks]{hyperref} \title{Academisch Schrijven\\\large{Opdracht 3}} \author{Camil Staps} \usepackage{pdfpages} \begin{document} \maketitle \begin{abstract} Van drie artikelen uit het domein van het functioneel programmeren worden de inleidende alinea's bestudeerd. Wat zijn de doelgroep en de boodschap, hoe blijkt dit uit het abstract en de inleiding, en hoe effectief zijn die teksten dan? \end{abstract} \section{Why Functional Programming Matters \cite{whyfp}} \subsection*{Doelgroep} Dit artikel is geschreven voor programmeurs. Het leesdoel is afhankelijk van het type programmeur: functioneel programmeurs zullen het paper vooral lezen om meer inzicht te krijgen in de unieke eigenschappen van hun talen, om die uiteindelijk beter te kunnen benutten. Voor niet-functioneel programmeurs kan dit artikel een inleiding tot functioneel programmeren zijn, waardoor ze de afweging kunnen gaan maken of ze al dan niet over moeten stappen naar dit (op het moment van schrijven) relatief nieuwe paradigma. \begin{quote} This paper is an attempt to demonstrate to the larger community of (non-functional) programmers the significance of functional programming, and also to help functional programmers exploit its advantages to the full by making it clear what those advantages are. \end{quote} Verder is het duidelijk dat de auteur uit gaat van enige kennis van programmeren in het algemeen en gestructureerd programmeren in het bijzonder. Dit blijkt uit de vele vergelijkingen tussen functioneel en gestructureerd programmeren. Bijvoorbeeld: \begin{quote} Functional programs contain no assignment statements, so variables, once given a value, never change. More generally, functional programs contain no side-effects at all. A function call can have no effect other than to compute its result. \end{quote} \subsection*{Boodschap} De auteur wil de voordelen van functioneel programmeren duidelijk maken. Dit heeft twee doelen: enerzijds het inzichtelijk maken van de eigenschappen van dit paradigma, om functioneel programmeurs te helpen `betere' code te schrijven; anderzijds, aangeven welke voordelen functioneel programmeren heeft ten opzichte van gestructureerd programmeren om gestructureerd programmeurs over te halen ook functioneel te gaan programmeren. Het uiteindelijke doel hiervan is het maken van beter gestructureerde software, omdat dit gemakkelijk te schrijven en te debuggen is: \begin{quote} Well-structured software is easy to write and to debug, and provides a collection of modules that can be reused to reduce future programming costs. In this paper we show that two features of functional languages in particular, higher-order functions and lazy evaluation, can contribute significantly to modularity. [..] We conclude that since modularity is the key to successful programming, functional programming offers important advantages for software development. \end{quote} \subsection*{Effectiviteit van het abstract en de inleiding} Zoals hierboven duidelijk is geworden zijn zowel de doelgroep als de boodschap gemakkelijk uit de inleiding en het abstract af te leiden. De inleiding is wellicht enigszins aan de lange kant, maar leest snel weg. De taal is niet technisch en de zinnen lopen goed. Ook is er een duidelijke structuur aanwezig: na een korte algemene uitleg over wat functioneel programmeren precies inhoudt, beschrijft de schrijver wat er mis is met de conventionele `elevator pitch' voor dit paradigma. Hiermee geeft hij direct ook aan wat de relevantie van zijn artikel is: deze elevator pitch verbeteren. In het abstract geeft de auteur heel globaal aan waarom functioneel programmeren belangrijk is. Dit is op zich verwacht, gezien de titel van het artikel. De inleiding heeft twee functies: de lezer van meer context voorzien, en articuleren waarom een artikel over dit onderwerp nodig is. We kunnen concluderen dat zowel het doel als de inhoud van het abstract en de inleiding duidelijk zijn en de lezer goed kunnen helpen bij het bepalen of het interessant zou kunnen zijn bij zijn onderzoek. \section{Why Functional Programming Matters To Me \cite{fpbeauty}} Dit artikel verschilt van de anderen in de zin dat het verscheen in het boek \emph{The Beauty of Functional Code -- Essays Dedicated to Rinus Plasmeijer on the Occasion of His 61st Birthday} \cite{fpbeauty}. De volgende beschrijving van het boek komt van Peter Achtens webpagina \cite{peter88} en moet hierom bekend worden verondersteld bij de lezer: \begin{quote} This festschrift has been compiled on the combined occasion of Rinus' 61st birthday and the 25th IFL symposium meeting. It consists of 19 scientific essays written by former PhD students and co-authors of Rinus. The theme of the book is the beauty of functional code and the influence it has or had on the author's work. The festschrift was offered to Rinus on the first evening of the 25th IFL. \end{quote} \subsection*{Doelgroep} Gezien het bovenstaande moeten we doelgroep zoeken als deelverzameling van de groep mensen die ge\"interesseerd zijn in de schoonheid en impact (voornamelijk op academici) van functioneel programmeren. Door te refereren naar bepaalde papers, zoals het hierboven bestudeerde Why Functional Programming Matters To Me \cite{whyfp}, en het gebruiken van bepaalde vaktermen, maakt de auteur duidelijk welke voorkennis verondersteld wordt: \begin{quote} I learned to appreciate the beauty of functional programming (languages) and the semantic beauty of \emph{term graph rewriting} of which \emph{Clean} was and still is an implementation. [..] As a starting point, I refer to John Hughes’ seminal 1984 paper in which he argues that functional programming matters because it offers glue with which to structure programs in an improved modular and reusable way, through the use of higher order functions and lazy evaluation. \end{quote} Het wordt ons duidelijk dat de lezer bekend wordt verondersteld met functioneel programmeren, haar eigenschappen en voordelen. Behalve dit valt er weinig over de doelgroep op te maken uit het abstract en de inleiding. We moeten dus concluderen dat de doelgroep dezelfde is als die van het boek: mensen die ge\"interesseerd zijn in de schoonheid en impact van functioneel programmeren. \subsection*{Boodschap} Allereerst neemt Peter een historische inslag: \begin{quote} \emph{Trax}\textsuperscript{\textsc{TM}} is an attractive case because it has interesting computational problems, for which I use classical functional techniques, but also because it is a distributed multi-user application, for which I use the more recently developed iTask formalism. \end{quote} Vervolgens geeft hij duidelijk aan wat hij wil doen in zijn artikel: \begin{quote} I demonstrate the style of functional programming by showing how to implement the game \emph{Trax}\textsuperscript{\textsc{TM}}, which was brought to my attention by Rinus a couple of years ago. \end{quote} Op basis hiervan kunnen we zeggen dat naast het uiteenzetten van de schoonheid van functioneel programmeren, en articuleren waarom dit paradigma voor de auteur belangrijk is geweest (wat de algemene doelen van het boek zijn), dit specifieke artikel de lezer middels een case-study met sommige ontwikkelingen in het onderzoeksveld bekend wil maken. \subsection*{Effectiviteit van het abstract en de inleiding} Hierboven merkten we dat er weinig in het abstract en de inleiding staat waar we de doelgroep uit kunnen afleiden. Het enige dat we over de doelgroep te weten kwamen moesten we zelf, indirect, afleiden. Dit maakt deze inleidende tekst enigszins ongeschikt voor zelfstandige publicatie: het artikel moet binnen de context van het boek waarin het verscheen gelezen worden. Hetzelfde geldt voor de boodschap, maar in mindere mate. De auteur sluit de inleiding af met een korte, duidelijke opmerking over wat hij met zijn artikel wil bereiken: \begin{quote} Finally, in Sect. 5, I hope to have explained to you why functional programming matters to me. \end{quote} \section{Monads for functional programming \cite{monads}} \subsection*{Doelgroep} Uit het abstract blijkt dat de auteur affiniteit met functioneel alsook gestructureerd (`other languages') programmeren van zijn lezers verwacht: \begin{quote} The use of monads to structure functional programs is described. Monads provide a convenient framework for simulating effects found in other languages, such as global state, exception handling, output, or non-determinism. \end{quote} Aan het eind van de inleiding geeft hij duidelijk aan welke voorkennis precies nodig is: \begin{quote} No knowledge of category theory is required to read these notes. The examples will be given in Haskell, but no knowledge of that is required either. What is required is a passing familiarity with the basics of pure and impure functional programming; \end{quote} De doelgroep kan dus als volgt worden samengevat: zij die ge\"interesseerd zijn in het simuleren van effecten uit gestructureerde talen in een pure functionele taal, en een basiskennis hebben van de idee\"en achter zowel zuivere als onzuivere functionele talen. \subsection*{Boodschap} De auteur begeeft zich in het onderzoeksveld dat de voordelen van enerzijds zuiver en anderzijds onzuiver functioneel programmeren probeert samen te brengen: \begin{quote} Pure languages are easier to reason about and may benefit from lazy evaluation, while impure languages offer efficiency benefits and sometimes make possible a more compact mode of expression. Recent advances in theoretical computing science, notably in the areas of type theory and category theory, have suggested new approaches that may integrate the benefits of the pure and impure schools. These notes describe one, the use of monads to integrate impure effects into pure functional languages. \end{quote} In die laatste zin geeft de auteur precies aan welke bijdrage hij hier zelf aan zal leveren. De schrijver van dit artikel wil de lezer dus bekend maken met een techniek om effecten uit onzuivere functionele of zelfs gestructureerde talen te integreren in een pure functionele taal, zodat de voordelen van de puurheid (bewijsbaarheid en luie evaluatie) benut blijven. \subsection*{Effectiviteit van het abstract en de inleiding} Van de drie artikelen die ik hier bekijk heeft dit paper veruit de effectiefste inleidende teksten. Hoewel de inleiding korter is dan die van beide andere artikelen, krijgt de lezer genoeg informatie om te bepalen of het artikel voor hem van belang is. Door expliciet aan te geven wat de doelgroep is kan hier geen misverstand over bestaan. Ook het doel van schrijven en de inhoud van het paper zijn relatief expliciet in de tekst genoemd. \begin{thebibliography}{9} \bibitem{whyfp} Hughes, J.: \emph{Why Functional Programming Matters}. Computer Journal 32(2) (1989) 98--107 \bibitem{fpbeauty} Achten, P. en Koopman, P. Eds.: \emph{The Beauty of Functional Code -- Essays Dedicated to Rinus Plasmeijer on the Occasion of His 61st Birthday}. Springer, Festschrift, LNAI 8106, augustus 2013, ISBN 978-3-642-40354-5 79--96 \bibitem{monads} Wadler, P.: \emph{Monads for functional programming}. In Broy, M. Ed.: \emph{Marktoberdorf Summer School on Program Design Calculi}, Springer Verlag, NATO ASI Series F: Computer and systems sciences, volume 118, augustus 1992. \bibitem{peter88} Papers by Peter Achten. \url{http://www.cs.ru.nl/~peter88/papers/MyPapers.html}. Opgehaald 21 april 2016. \end{thebibliography} \appendix \section{Inleidingen van de artikelen} De bestudeerde alinea's van de bestudeerde artikelen \cite{whyfp,fpbeauty,monads} kunnen hieronder worden gevonden. \includepdf[pages=1-2]{../papers/Why-Functional-Programming-Matters-Hughes-1989.pdf} \includepdf[pages=1-2]{../papers/Why-Functional-Programming-Matters-To-Me-Achten-2013.pdf} \includepdf[pages=1-2]{../papers/Monads-For-Functional-Programming-Wadler-1992.pdf} \end{document}