24
Introduction to the project Goals and setup for an introductory course Developing a Clojure graphical library Our graphical library Conclusions and future work Developing a Graphical Library for a Clojure-based Introductory CS Course Paul Schliep, Max Magnuson, Elena Machkasova Midwest Instruction and Computing Symposium University of Minnesota, Morris April 25, 2014 1 / 24

Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Developing a Graphical Library for a Clojure-basedIntroductory CS Course

Paul Schliep, Max Magnuson, Elena Machkasova

Midwest Instruction and Computing SymposiumUniversity of Minnesota, Morris

April 25, 2014

1 / 24

Page 2: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Outline

1 Introduction to the project

2 Goals and setup for an introductory course

3 Developing a Clojure graphical library

4 Our graphical library

5 Conclusions and future work

2 / 24

Page 3: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

The Project

Contributing to ClojureEd on adapting to Clojure for anintroductory course

Objective is to develop a graphical library for Clojure

We hope this graphical library can be useful for theintroductory course

Work in progress

3 / 24

Page 4: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Introduction to Clojure

Developed by Rich Hickey in 2007

Functional programming language in the Lisp family

Runs on the JVM

Immutable data structures and first class functions

Data structures such as lists, vectors, hashmaps

4 / 24

Page 5: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

UMM’s introductory CS course

Students are not expected to have prior programmingknowledge

The course currently utilizes Racket to help teach keyconcepts

Racket is a functional language similar to Clojure

Functional languages help students learn concepts likerecursion and higher order functions

The course makes use of Racket’s graphical library

5 / 24

Page 6: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Racket graphical library game example

6 / 24

Page 7: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Benefits and limitations of Clojure

Benefits:

Gaining traction in the industry

Offers better parallel processing

Integration with Java

Limitations:

Unintuitive error messages

Lacks a graphical library

Lack of an IDE suitable for beginner CS students

7 / 24

Page 8: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Clojure Syntax

Prefix notation

(<name of function> <argument 1> <argument 2> ...)

(+ 2 2)

-> 4

Defn

(defn square[x] (* x x))

Anonymous functions

(fn [x] (* x x))

First class functions

(map square [1 2 3 4])

-> [1 4 9 16]

Hashmaps

{:a 1 :b 2 :c 3}

8 / 24

Page 9: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Introduction to functional approaches

Stylistic choice for programming

Immutable data types

Less dependency on order

First class functions

9 / 24

Page 10: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Requirements for a graphical library

Reinforce functional approaches from Clojure

Accessible to introductory studentsImplement Model-view-controller (MVC) similar to Racket’sgraphical library

Checkers example

10 / 24

Page 11: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Overview of Quil

Open source graphical library for Clojure

Provides functionality suitable for introductory-level projects

Built on top of Java Swing

Continuously being developed

11 / 24

Page 12: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Developing programs with Quil

Defsketch

Works using frames and frame rate

Draws in layers

Supports input from keyboard and mouse

(defsketch example

:title "Example"

:setup setup-example

:draw draw-example

:size [400 300])

12 / 24

Page 13: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Example of a Quil program

Example Code:

(defn setup-example []

(frame-rate 1)

(background 200))

(defn draw-example []

(ellipse

(random (width))

(random (height))

100 100))

Our Image

13 / 24

Page 14: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Issues with Quil

Imperative approaches

Often requires direct manipulation of stateDependencies on orderInconsistent with introductory course goals

Underdocumented API

14 / 24

Page 15: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Development of the graphical library

Abstracted over Quil’s functions

DefsketchShapesColorsText

Handling state in a functional approach

Models MVC

15 / 24

Page 16: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

How our graphical library works

Separates handling of state

MVCupdatedisplay

16 / 24

Page 17: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

An example made using our graphical library

(def states

{:snake [450 450 450 470 450 490 450 510],

:snake-head [450 450],

:food [150 150],

:snake-direction "north", :score 0})

(def updates

{:setup-drawing setup

:snake update-snake

:food update-food})

(def display-order

[draw-canvas draw-food draw-snake])

17 / 24

Page 18: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Snake Example

18 / 24

Page 19: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Differences in handling state in Racket

Racket gives entire state to user

19 / 24

Page 20: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Diagram of handling state in our graphical library

Our system breaks state down for the user

20 / 24

Page 21: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Conclusions

Good start for abstracting over Quil’s functions

More functional approach

Graphical library shows promise

21 / 24

Page 22: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Future Work

This is still work in progress

Create our own macro to abstract over defsketch

Abstract over more functions in Quil

Develop an API with examples for students

22 / 24

Page 23: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Selected references

Selected references:

Quil https://github.com/quil/quil

Filleisen, M., Findler, R. B., Flatt, M. and Krishnamurthi, S.How to design programs: an introduction to programming andcomputing. MIT Press, Cambridge, MA, USA 2001.

Hickey, R. The clojure programming language. In Proceedingsof the 2008 symposium on Dynamic languages(NewYork,NY,USA,2008),DLS’08,ACM,pp.1:1-1:1.

23 / 24

Page 24: Developing a Graphical Library for a Clojure-based ...cda.morris.umn.edu/~elenam/publications/MICSintroclass...Developing a Clojure graphical library Our graphical library Conclusions

Introduction to the projectGoals and setup for an introductory course

Developing a Clojure graphical libraryOur graphical library

Conclusions and future work

Acknowledgements

The authors would like to thank

Nick Skube and Niccolas Ricci

Developers of Quil

Friends and Family

24 / 24