How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml...

53
How To Train Your Programmer Michael Sperber @sperbsen

Transcript of How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml...

Page 1: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

How To TrainYour Programmer

Michael Sperber@sperbsen

Page 2: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Feedback

Page 3: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

• Individualsoftware• viele Branchen• Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml• Schulungen, Architekturberatung

www.active-group.defunktionale-programmierung.de

Page 4: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

bobkonf.de

Call offen bis 8.11.!

Page 5: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Ich und die Lehre

• AP Computer Science 1987/1988Radford High School

• Informatik I Haupt-/Nebenfach 1999-2011Uni Tübingen

• Programmieren für Geisteswissenschaftler1997-1999

• Schulungen für Active Group2012-

• (Kollegen, Freunde, Kinder)

Page 6: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Einfach ...

Page 7: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 8: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 9: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

https://de.m.wikipedia.org/wiki/Datei:Scratch_2.0_Default_screen.png

Page 10: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 11: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

https://commons.wikimedia.org/wiki/File:SPAWAR_sponsors_LEGO_robotics_STEM_event_151115-N-UN340-003.jpg

Page 12: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

https://commons.wikimedia.org/wiki/File:Frustration.jpg https://commons.wikimedia.org/wiki/File:Cable_salad.jpg

Page 13: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Page 14: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

?U

Page 15: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

?U

Page 16: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

REQUIREMENTS, ANYONE?

Page 17: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Digital storytelling using Scratch: Engaging children towards digital storytelling

Vinayakumar R1, K.P Soman1 and Pradeep Menon2

1Centre for Computational Engineering and Networking (CEN), Amrita School of Engineering, Coimbatore, Amrita Vishwa Vidyapeetham,

Amrita University, India.

2Lakhshya Cyber Security Labs Pvt Ltd,.

Page 18: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

wdrmaus.de

Page 19: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 20: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 21: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

1987

Page 22: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 23: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Lernen durch Beispiel

2B U I L D A

H I - L O G U E S S I N G G A M E A P P !

Let’s begin by coding a fun, playable game in Java: the Hi-Lo guessing game.

We’ll program this game as a command line application, which is just a fancy way of saying

it’s text based (see Figure 2-1). When the program runs, the prompt will ask the user to guess a number between 1 and 100. Each time they guess, the pro-gram will tell them whether the guess is too high, too low, or correct.

2017

Page 24: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Lernen durch Beispiel

Build a Hi-Lo Guessing Game App! 21

user to guess again as long as their guess isn’t equal to the secret number theNumber. When the user’s guess is equal to the secret number, the user wins and the game is over, so the loop should stop.

To create a while loop, we need to insert a while statement before the last three lines of code and then wrap the three lines for guessing inside a new pair of braces, as follows:

int guess = 0; while(guess != theNumber) { System.out.println("Guess a number between 1 and 100:"); guess = scan.nextInt(); System.out.println("You entered " + guess + "."); } }}

We use the keyword while to let Java know we’re building a while loop, and then we put the appropriate condition inside parentheses. The part inside the parentheses, guess != theNumber, means that while the value stored in guess is not equal to (!=) the value stored in theNumber, the loop should repeat whatever statement or set of statements immediately follow this line of code. The operator != is a comparison operator—in this case, it compares guess and theNumber and evaluates whether they’re different, or not equal. You’ll learn about other comparison operators in the next sec-tion, but this is the one we need for the guessing while loop.

We need to tell Java what statements to repeat in the while loop, so I’ve added an opening brace, {, on the line after the while statement. In the same way that braces group all the statements together in the main() method, these braces group statements together inside the while loop.

There are three statements that we want to include inside the loop. First we need the println() statement that prompts the user to guess a number. Then we need the statement that scans the keyboard and records the guess with the nextInt() method. Finally, we need the println() statement that tells the user what they entered. To turn this set of statements into a block of code that will be run repeatedly in the while statement, we write the while statement and condition first, then an opening brace, then all three state-ments, and finally, a closing brace. Don’t forget the closing brace! Your pro-gram won’t run if it’s missing.

One good programming practice that will help you keep your code organized and readable is using tab spacing correctly. Highlight the three statements inside the braces for the while statement and then press the TAB key to indent them.

The result should look like the following code:

int guess = 0; while(guess != theNumber) { System.out.println("Guess a number between 1 and 100:"); guess = scan.nextInt();

Page 25: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Referenzen

Page 26: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Referenzen

www.deinprogramm.de

Page 27: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

KONSTRUKTIONS-ANLEITUNGEN

Page 28: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Schritte

1. Kurzbeschreibung2. Datenanalyse3. Signatur4. Tests5. Gerüst6. Schablone7. Rumpf

Page 29: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 30: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 31: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Gürteltier

hat die folgenden Eigenschaften:• lebendig oder tot• Gewicht

ZUSAMMEN-GESETZTE DATEN

Page 32: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 33: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Beispiele

(define d1 (make-dillo #t 10)); Gürteltier, lebendig, 10kg

(define d2 (make-dillo #f 12)); Gürteltier, lebendig, 12kg

Page 34: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Signaturen

(: make-dillo (boolean number -> dillo))(: dillo-alive? (dillo -> boolean))(: dillo-weight (dillo -> number))

Page 35: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Leben auf dem texanischen Highway

; Gürteltier überfahren

Kurzbeschreibung

Page 36: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Leben auf dem texanischen Highway

; Gürteltier überfahren(: run-over-dillo (dillo -> dillo))

Signatur

Page 37: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Leben auf dem texanischen Highway

; Gürteltier überfahren(: run-over-dillo (dillo -> dillo))

(check-expect (run-over-dillo d1) (make-dillo #f 10))

(check-expect (run-over-dillo d2) (make-dillo #f 12))

Tests

Page 38: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Leben auf dem texanischen Highway

; Gürteltier überfahren(: run-over-dillo (dillo -> dillo))

(check-expect (run-over-dillo d1) (make-dillo #f 10))

(check-expect (run-over-dillo d2) (make-dillo #f 12))

(define run-over-dillo(lambda (d)

...)) Gerüst

Page 39: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Schablone

(: run-over-dillo (dillo -> dillo))

(define run-over-dillo(lambda (d)

(make-dillo ... ...)... (dillo-alive? d) ...... (dillo-weight d) ...)))

Page 40: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Rumpf

(define run-over-dillo(lambda (d)

(make-dillo #f(dillo-weight d))))

Page 41: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Klapperschlange

; Klapperschlange hat folgende Eigenschaften:; - Dicke; - Länge(define-record-functions rattlesnake

make-rattlesnake(rattlesnake-thickness number(rattlesnake-length number))

(: make-rattlesnake (number number -> rattlesnake))(: rattlesnake-thickness (rattlesnake -> number))(: rattlesnake-length (rattlesnake -> number))

Page 42: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Leben auf dem texanischen Highway

; Klapperschlange überfahren(: run-over-rattlesnake

(rattlesnake -> rattlesnake))

(check-expect (run-over-rattlesnake r1)(make-rattlesnake 0 150))

(check-expect (run-over-rattlesnake r2)(make-rattlesnake 0 200))

Page 43: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Gemischtes Leben auf dem texanischen Highway

Ein Tier ist eins der folgenden:• Gürteltier• Klapperschlange

GEMISCHTE DATEN

Page 44: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Gemischtes Leben auf dem texanischen Highway

(define animal(signature(mixeddillorattlesnake)))

Page 45: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

... und sein Ende

; Tier überfahren(: run-over-animal (animal -> animal))

(check-expect (run-over-animal d1) (make-dillo #f 10))

(check-expect (run-over-animal r1) (make-rattlesnake 0 150))

Page 46: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Funktion mit gemischten Daten als Eingabe

(define run-over-animal(lambda (a)(cond

((dillo? a)...)

((rattlesnake? a)...))))

Page 47: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Funktion mit gemischten Daten als Eingabe

(define run-over-animal(lambda (a)(cond

((dillo? a)(run-over-dillo a))

((rattlesnake? a)(run-over-rattlesnake a)))))

Page 48: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 49: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!
Page 50: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Funktioniert bei ...

• Schülerinnen ab 5. Klasse• Programmieranfängern• professionellen Programmiererinnen

Page 51: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Program by Design / DeinProgramm

• Konstruktionsanleitungen• Programmiersprachen für Lernende• Programmierumgebung für Lernende

www.deinprogramm.de

Page 52: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

How To Train Your Programmer

• Anforderungen präzisieren• Werkzeuge auswählen• iterativ verbessern• von Erfahrungen anderer profitieren

Page 53: How To Train Your Programmer · •Scala, Clojure, Erlang, Elixir, Haskell, F#, OCaml •Schulungen, Architekturberatung funktionale-programmierung.de. bobkonf.de Call offen bis 8.11.!

Feedback