Luigi Lo Iacono
Stephan Wiefling
Michael Schneider
Programmieren trainieren
Mit über 130 Workouts in Java und Python
2., erweiterte Auflage
Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht. Ebenso übernehmen Autoren und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Bibliografische Information der Deutschen Nationalbibliothek:
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt.
Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) auch nicht für Zwecke der Unterrichtsgestaltung reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.
© 2020 Carl Hanser Verlag München, www.hanser-fachbuch.de
Lektorat: Sylvia Hasselbach
Copy editing: Walter Saumweber, Ratingen
Herstellung: Irene Weilhart
Layout: le-tex publishing services GmbH
Umschlagdesign: Marc Müller-Bremer, www.rebranding.de, München
Umschlagrealisation: Max Kostopoulos
Print-ISBN: 978-3-446-45911-3
E-Book-ISBN: 978-3-446-46057-7
E-Pub-ISBN: 978-3-446-46494-0
Titelei
Impressum
Inhalt
Vorwort
Danksagung
1 Einleitung
1.1 Wozu sollte ich programmieren lernen?
1.2 Wie kann mir dieses Buch dabei helfen?
1.3 Was muss ich mitbringen?
1.4 Wie geht das vonstatten?
1.5 Was muss ich sonst noch wissen?
2 Einführung in die Programmierung
2.1 Warmup
2.2 Workout
W.2.1 Three-Two-One –Mein erstes Programm
W.2.2 Weihnachtsbaum
W.2.3 Perlenkette
W.2.4 Die erste Zeichnung
W.2.5 Raupe Allzeitappetit
W.2.6 Klötzchen-Kunst
W.2.7 Nachteule
W.2.8 Ghettoblaster
W.2.9 Hallo Bello!
W.2.10 Haus
W.2.11 Daumen
3 Variablen, Datentypen, Operatoren und Ausdrücke
3.1 Warmup
3.2 Workout
W.3.1 Einfache Rechenaufgaben
W.3.2 Perlenkette 2.0
W.3.3 Blutalkoholkonzentration
W.3.4 Stoffwechselrate
W.3.5 Baumstammvolumen
W.3.6 Körperoberfläche
W.3.7 RGB nach CMYK
W.3.8 Tic-Tac-Toe-Spielfeld
W.3.9 Haus mit Garage
W.3.10 Fußballtor
4 Kontrollstrukturen
4.1 Warmup
4.2 Workout
W.4.1 Maximumbestimmen
W.4.2 Summe berechnen
W.4.3 Tippspiel
W.4.4 PIN-Code-Generator
W.4.5 Dominosteine
W.4.6 Radialer Farbverlauf
W.4.7 Ladevorgang-Rädchen
W.4.8 Windrad
W.4.9 Rotierte Dreiecke
W.4.10 Moderne Kunst
W.4.11 Schachbrett
W.4.12 Sinuskurve
W.4.13 Zahlen-Palindrom
W.4.14 Interaktiver Button
W.4.15 Ebbe und Flut berechnen
W.4.16 Titschender Ball
5 Funktionen
5.1 Warmup
5.2 Workout
W.5.1 Endliches Produkt
W.5.2 Fakultät
W.5.3 Konfektionsgröße
W.5.4 Schaltjahr Prüfung
W.5.5 Literzahlen umwandeln
W.5.6 LKW-Maut
W.5.7 Analoger Uhrzeiger
W.5.8 Körperoberfläche 2.0
W.5.9 Sportwetten
W.5.10 GPS-Luftlinie
W.5.11 IBAN-Generator
W.5.12 Sanduhr
W.5.13 Der faire Würfel
W.5.14 Quadrat mit Kreisausschnitten
W.5.15 Wurfparabel
W.5.16 Bogenschießen-Spiel
W.5.17 Mondphase berechnen
W.5.18 Tortendiagramm
W.5.19 Pendelanimation
6 Arrays
6.1 Warmup
6.2 Workout
W.6.1 Wochentag
W.6.2 Tankfüllung
W.6.3 Rückwärtsausgabe
W.6.4 Bildvergrößerung
W.6.5 Partnervermittlung
W.6.6 Sitzplatzreservierung
W.6.7 Platztausch
W.6.8 Minimale Distanz
W.6.9 Morsecode
W.6.10 Endlose Animation
W.6.11 Spiegeln
W.6.12 Reflexion
W.6.13 Greenscreen
W.6.14 Bild umdrehen und invertieren
W.6.15 Bild mit Schatten
W.6.16 Bild rotieren
W.6.17 Bildverkleinerung
W.6.18 Minimale Punktdistanz
W.6.19 Glatte Kurven
W.6.20 Bildausschnitt
W.6.21 Bild mit Rahmen
W.6.22 Memory-Spielfeldgenerator
W.6.23 Sudoku-Check
W.6.24 Medianfilter
W.6.25 Geldautomat
W.6.26 Postleitzahlen visualisieren
W.6.27 Dreiecksfilter
7 Strings und Stringverarbeitung
7.1 Warmup
7.2 Workout
W.7.1 String-Kompression
W.7.2 Split-Funktion
W.7.3 Geldschein-Blütencheck
W.7.4 Starkes Passwort
W.7.5 E-Mail-Check
W.7.6 Prüfen auf eine korrekte Klammerung
W.7.7 Sternchenmuster
W.7.8 URL-Encoding
W.7.9 Telefonbuch bearbeiten
W.7.10 Webserver-Antwort verarbeiten
W.7.11 IMDB-Einträge verarbeiten
W.7.12 Geheimsprache
W.7.13 Ähnlich klingende Wörter
W.7.14 Textrahmen
W.7.15 JSON-Array
W.7.16 Barcode-Generator
W.7.17 Kennzeichenverarbeitung
8 Objektorientierung
8.1 Warmup
8.2 Workout
W.8.1 Schrittzähler
W.8.2 Body-Mass-Index
W.8.3 Songtextsuche
W.8.4 Passwortklasse
W.8.5 Kopffitness
W.8.6 Fernbedienung
W.8.7 Stoppuhr
W.8.8 Druckerwarteschlange
W.8.9 Tic Tac Toe
W.8.10 Zwischenablage
W.8.11 Temperaturgraph
W.8.12 Ambient Light
W.8.13 Verschlüsselung
W.8.14 Mastermind
W.8.15 Parteistimmen
9 Referenzdatentypen
9.1 Warmup
9.2 Workout
W.9.1 Kreis-Klasse
W.9.2 Mathematischer Bruch
W.9.3 Highscore-Liste
W.9.4 Adressbuch
W.9.5 Digitaler Bilderrahmen
W.9.6 Musikalbenanwendung
W.9.7 Koch-Website
W.9.8 Hotelzimmerverwaltung
W.9.9 Flughafen-Check-in
W.9.10 Polygonzug
W.9.11 Twitterwall
W.9.12 Fototagebuch
W.9.13 Partygäste
W.9.14 Raumbelegung
10 Vererbung
10.1 Warmup
10.2 Workout
W.10.1 Online-Shop
W.10.2 Gewässer
W.10.3 To-do-Liste
W.10.4 Lampen
W.10.5 Meeting-Protokoll
W.10.6 E-Book
W.10.7 Zoo
W.10.8 Audioeffekt-Player
W.10.9 Fahrtenbuch
W.10.10 Webseitengenerator
A Lösungen in Java
A.1 Download und Verwendung der elektronischen Lösungen
A.1.1 Download von GitHub
A.1.2 Öffnen der Programme
A.1.3 Tipp: Debugger
A.2 Einführung in die Programmierung
A.2.1 Three-Two-One –Mein erstes Programm
A.2.2 Weihnachtsbaum
A.2.3 Perlenkette
A.2.4 Die erste Zeichnung
A.2.5 Nachteule
A.2.6 Raupe Allzeitappetit
A.2.7 Klötzchen-Kunst
A.2.8 Ghettoblaster
A.2.9 Hallo Bello!
A.2.10 Haus
A.2.11 Daumen
A.3 Variablen, Datentypen, Operatoren und Ausdrücke
A.3.1 Einfache Rechenaufgaben
A.3.2 Perlenkette 2.0
A.3.3 Blutalkoholkonzentration
A.3.4 Stoffwechselrate
A.3.5 Baumstammvolumen
A.3.6 Körperoberfläche
A.3.7 RGB nach CMYK
A.3.8 Tic-Tac-Toe-Spielfeld
A.3.9 Haus mit Garage
A.3.10 Fußballtor
A.4 Kontrollstrukturen
A.4.1 Maximum bestimmen
A.4.2 Summe berechnen
A.4.3 Tippspiel
A.4.4 PIN-Code-Generator
A.4.5 Dominosteine
A.4.6 Radialer Farbverlauf
A.4.7 Ladevorgang-Rädchen
A.4.8 Windrad
A.4.9 Rotierte Dreiecke
A.4.10 Moderne Kunst
A.4.11 Schachbrett
A.4.12 Sinuskurve
A.4.13 Zahlen-Palindrom
A.4.14 Interaktiver Button
A.4.15 Ebbe und Flut berechnen
A.4.16 Titschender Ball
A.5 Funktionen
A.5.1 Endliches Produkt
A.5.2 Fakultät
A.5.3 Konfektionsgröße
A.5.4 Schaltjahr Prüfung
A.5.5 Literzahlen umwandeln
A.5.6 LKW-Maut
A.5.7 Analoger Uhrzeiger
A.5.8 Körperoberfläche
A.5.9 Sportwetten
A.5.10 GPS-Luftlinie
A.5.11 IBAN-Generator
A.5.12 Sanduhr
A.5.13 Der faire Würfel
A.5.14 Quadrat mit Kreisausschnitten
A.5.15 Wurfparabel
A.5.16 Bogenschießen-Spiel
A.5.17 Mondphase berechnen
A.5.18 Tortendiagramm
A.5.19 Pendelanimation
A.6 Arrays
A.6.1 Wochentag
A.6.2 Tankfüllung
A.6.3 Rückwärtsausgabe
A.6.4 Bildvergrößerung
A.6.5 Partnervermittlung
A.6.6 Sitzplatzreservierung
A.6.7 Platztausch
A.6.8 Bestimmung minimale Distanz
A.6.9 Morsecode
A.6.10 Endlose Animation
A.6.11 Spiegeln
A.6.12 Reflexion
A.6.13 Greenscreen
A.6.14 Bild umdrehen und invertieren
A.6.15 Bild mit Schatten
A.6.16 Bild rotieren
A.6.17 Bildverkleinerung
A.6.18 Minimale Punktdistanz
A.6.19 Glatte Kurven
A.6.20 Bildausschnitt
A.6.21 Bild mit Rahmen
A.6.22 Memory-Spielfeldgenerator
A.6.23 Sudoku-Check
A.6.24 Medianfilter
A.6.25 Geldautomat
A.6.26 Postleitzahlen visualisieren
A.6.27 Dreiecksfilter
A.7 Strings und Stringverarbeitung
A.7.1 String-Kompression
A.7.2 Split-Funktion
A.7.3 Geldschein-Blütencheck
A.7.4 Starkes Passwort
A.7.5 E-Mail-Check
A.7.6 Prüfen auf eine korrekte Klammerung
A.7.7 Sternchenmuster
A.7.8 URL-Encoding
A.7.9 Telefonbuch bearbeiten
A.7.10 Webserver-Antwort verarbeiten
A.7.11 IMDB-Einträge verarbeiten
A.7.12 Geheimsprache
A.7.13 Ähnlich klingende Wörter
A.7.14 Textrahmen
A.7.15 JSON-Array
A.7.16 Barcode-Generator
A.7.17 Kennzeichenverarbeitung
A.8 Objektorientierung
A. 8.1 Schrittzähler
A.8.2 Body-Mass-Index
A.8.3 Songtextsuche
A.8.4 Passwortklasse
A.8.5 Kopffitness
A.8.6 Fernbedienung
A.8.7 Stoppuhr
A.8.8 Druckerwarteschlange
A.8.9 Tic Tac Toe
A.8.10 Zwischenablage
A.8.11 Temperaturgraph
A.8.12 Ambient Light
A.8.13 Verschlüsselung
A.8.14 Mastermind
A.8.15 Parteistimmen
A.9 Referenzdatentypen
A.9.1 Kreis-Klasse
A.9.2 Mathematischer Bruch
A.9.3 Highscore-Liste
A.9.4 Adressbuch
A.9.5 Digitaler Bilderrahmen
A.9.6 Musikalbenanwendung
A.9.7 Koch-Website
A.9.8 Hotelzimmerverwaltung
A.9.9 Flughafen-Check-in
A.9.10 Polygonzug
A.9.11 Twitterwall
A.9.12 Fototagebuch
A.9.13 Partygäste
A.9.14 Raumbelegung
A.10 Vererbung
A.10.1 Online-Shop
A.10.2 Gewässer
A.10.3 To-do-Liste
A.10.4 Lampen
A.10.5 Meeting-Protokoll
A.10.6 E-Book
A.10.7 Zoo
A.10.8 Audioeffekt-Player
A. 10.9 Fahrtenbuch
A.10.10 Webseitengenerator
B Lösungen in Python
B.1 Download und Verwendung der elektronischen Lösungen
B.1.1 Download von GitHub
B.1.2 Öffnen der Programme
B.2 Einführung in die Programmierung
B.2.1 Three-Two-One -Mein erstes Programm
B.2.2 Weihnachtsbaum
B.2.3 Perlenkette
B.2.4 Die erste Zeichnung
B.2.5 Nachteule
B.2.6 Raupe Allzeitappetit
B.2.7 Klötzchenkunst
B.2.8 Ghettoblaster
B.2.9 Hallo Bello!
B.2.10 Haus
B.2.11 Daumen
B.3 Variablen, Datentypen, Operatoren und Ausdrücke
B.3.1 Einfache Rechenaufgaben
B.3.2 Perlenkette 2.0
B.3.3 Blutalkoholkonzentration
B.3.4 Stoffwechselrate
B.3.5 Baumstammvolumen
B.3.6 Körperoberfläche
B.3.7 RGB nach CMYK
B.3.8 Tic-Tac-Toe-Spielfeld
B.3.9 Haus mit Garage
B.3.10 Fußballtor
B.4 Kontrollstrukturen
B.4.1 Maximum bestimmen
B.4.2 Summe berechnen
B.4.3 Tippspiel
B.4.4 PIN-Code-Generator
B.4.5 Dominosteine
B.4.6 Radialer Farbverlauf
B.4.7 Ladevorgang-Rädchen
B.4.8 Windrad
B.4.9 Rotierte Dreiecke
B.4.10 Moderne Kunst
B.4.11 Schachbrett
B.4.12 Sinuskurve
B.4.13 Zahlen-Palindrom
B.4.14 Interaktiver Button
B.4.15 Ebbe und Flut berechnen
B.4.16 Titschender Ball
B.5 Funktionen
B.5.1 Endliches Produkt
B.5.2 Fakultät
B.5.3 Konfektionsgröße
B.5.4 Schaltjahr Prüfung
B.5.5 Literzahlen umwandeln
B.5.6 LKW-Maut
B.5.7 Analoger Uhrzeiger
B.5.8 Körperoberfläche
B.5.9 Sportwetten
B.5.10 GPS-Luftlinie
B.5.11 IBAN-Generator
B.5.12 Sanduhr
B.5.13 Der faire Würfel
B.5.14 Quadrat mit Kreisausschnitten
B.5.15 Wurfparabel
B.5.16 Bogenschießen-Spiel
B.5.17 Mondphase berechnen
B.5.18 Tortendiagramm
B.5.19 Pendelanimation
B.6 Arrays
B.6.1 Wochentag
B.6.2 Tankfüllung
B.6.3 Rückwärtsausgabe
B.6.4 Bildvergrößerung
B.6.5 Partnervermittlung
B.6.6 Sitzplatzreservierung
B.6.7 Platztausch
B.6.8 Bestimmung minimale Distanz
B.6.9 Morsecode
B.6.10 Endlose Animation
B.6.11 Spiegeln
B.6.12 Reflexion
B.6.13 Greenscreen
B.6.14 Bild umdrehen und invertieren
B.6.15 Bild mit Schatten
B.6.16 Bild rotieren
B.6.17 Bildverkleinerung
B.6.18 Minimale Punktdistanz
B.6.19 Glatte Kurven
B.6.20 Bildausschnitt
B.6.21 Bild mit Rahmen
B.6.22 Memory-Spielfeldgenerator
B.6.23 Sudoku-Check
B.6.24 Medianfilter
B.6.25 Geldautomat
B. 6.26 Postleitzahlen visualisieren
B.6.27 Dreiecksfilter
B.7 Strings und Stringverarbeitung
B.7.1 String-Kompression
B.7.2 Split-Funktion
B.7.3 Geldschein-Blütencheck
B.7.4 Starkes Passwort
B.7.5 E-Mail-Check
B.7.6 Prüfen auf eine korrekte Klammerung
B.7.7 Sternchenmuster
B.7.8 URL-Encoding
B.7.9 Telefonbuch bearbeiten
B.7.10 Webserver-Antwort verarbeiten
B.7.11 IMDB-Einträge verarbeiten
B.7.12 Geheimsprache
B.7.13 Ähnlich klingende Wörter
B.7.14 Textrahmen
B.7.15 JSON-Array
B.7.16 Barcode-Generator
B.7.17 Kennzeichenverarbeitung
B.8 Objektorientierung
B. 8.1 Schrittzähler
B.8.2 Body-Mass-Index
B.8.3 Songtextsuche
B.8.4 Passwortklasse
B.8.5 Kopffitness
B.8.6 Fernbedienung
B.8.7 Stoppuhr
B.8.8 Druckerwarteschlange
B.8.9 Tic Tac Toe
B.8.10 Zwischenablage
B.8.11 Temperaturgraph
B.8.12 Ambient Light
B.8.13 Verschlüsselung
B.8.14 Mastermind
B.8.15 Parteistimmen
B.9 Referenzdatentypen
B.9.1 Kreis-Klasse
B.9.2 Mathematischer Bruch
B.9.3 Highscore-Liste
B.9.4 Adressbuch
B.9.5 Digitaler Bilderrahmen
B.9.6 Musikalbenanwendung
B.9.7 Koch-Website
B.9.8 Hotelzimmerverwaltung
B.9.9 Flughafen-Check-in
B.9.10 Polygonzug
B.9.11 Twitterwall
B.9.12 Fototagebuch
B.9.13 Partygäste
B.9.14 Raumbelegung
B.10 Vererbung
B.10.1 Online-Shop
B.10.2 Gewässer
B.10.3 To-do-Liste
B.10.4 Lampen
B.10.5 Meeting-Protokoll
B.10.6 E-Book
B.10.7 Zoo
B.10.8 Audioeffekt-Player
B. 10.9 Fahrtenbuch
B.10.10 Webseitengenerator
C Installation Processing
C.1 Einleitung
C.2 Windows
C.3 macOS
C.4 Linux
C.5 Aktivierung des Python Mode
D Howto: Buch-Aufgaben ohne Processing lösen
D.1 Java
D.2 Python
D.3 Fazit
Vorwort |
„Jede hinreichend fortschrittliche Technologie ist von Magie nicht zu unterscheiden.“
Arthur C. Clarke
Wir sind Programmierer. Wir sind Magier. Das MIT ist unser Hogwarts, der Google Campus ist unsere Unsichtbare Universität, Cupertino ist unser Narnia. Steve Jobs ist unser David Copperfield, Larry Page und Sergey Brin sind unsere Ehrlich Brothers und Frank Thelen ist immerhin vielleicht noch sowas wie unser Vincent Raven. Wir sind Siegfried und Roy und aus Versehen programmierte Endlosschleifen sind unsere weißen Tig. . . strapazieren wir die Allegorie mal nicht über. Jedenfalls: Wir sind Magier.
Oder wenigstens wirken wir für unser Umfeld so. Der Onkel dritten Grades, der im Atomkraftwerk arbeitet, würde uns selbst dann anrufen, wenn AssetWise mal hakt, weil wir eben Informatiker sind und uns dementsprechend mit allem auskennen, was irgendwie mit Computern zusammenhängt. Dabei ist es auch egal, wie komplex oder unterkomplex die Aufgabe ist. Wir werden angerufen, wenn ein Teilchenbeschleuniger angesteuert werden muss, aber auch, wenn es im Fachgeschäft für Strickzubehör „Woll im Leben“ einer Freundin des Freundes deiner Tante väterlicherseits in der alten Fußgängerzone der Kleinstadt, in der du geboren wurdest, nicht mehr ganz so gut läuft und sie jetzt „mal eben“ einen Shop braucht, um den Globalisierungseffekt besser für sich zu nutzen und das Wollgeschäft im Sturm zu erobern. Gestrickt wird ja wohl überall und sie ist sogar bereit, dir für die 3 Wochen Arbeit noch 100 € in die Hand zu drücken. Dafür müsstest du dann aber auch die nächsten 3 Jahre zu jeder Tages- und Nachtzeit für Support zur Verfügung stehen.
Doch wir steuern nicht nur die Stromversorgung und das weltweite Woll-Business. Wir halten Banken am Laufen, das Transportwesen und die Kommunikation, ohne uns läuft gar nichts mehr heutzutage. Wir können Welten erschaffen und wir können sie auch zerstören, je nachdem, ob wir Harry Potter oder Lord Voldemort sein wollen.
Welchen Weg du einschlagen willst – und jeder, der schon mal programmiert hat und behauptet, niemals auf die dunkle Seite geschaut zu haben, lügt – entscheidest du selbst und auf dem Weg zu deiner Entscheidung ist dieses Buch dein Hogwarts Express und du musst nicht mal gegen eine Mauer rennen, um hinein zu gelangen. Du hast die erste Seite aufgeschlagen und das Vorwort gelesen und die Richtung, in der du weiterblätterst, ist deine rote und deine blaue Pille.
Schlag es wieder zu – dann endet die Geschichte hier, du wachst auf in deinem Bett und glaubst, was immer du glauben möchtest. Blätter weiter, bleib im Wunderland und das Buch zeigt dir, wie tief der Kaninchenbau geht. Nerd today, boss tomorrow.
Patrick Stenzel (@rock_galore), im Januar 2020
Vorwort zur ersten Auflage |
Nerds sind in. Diese liebenswerten Zeitgenossen mit dem vielen Spezialwissen und den kindlichen Vorlieben für Superhelden werden lange nicht mehr nur komisch beäugt. Im Gegenteil. Sie selbst sind nunmehr Stars in vielen Fernsehserien, und ihr modischer Stil ist allgemein akzeptiert. Diese Entwicklung kommt auch der Programmierung zugute. Lange Zeit galt diese Fertigkeit als ein Gebiet, das den Nerds vorbehalten ist. Dem ist nicht so! Es muss nur der Mut aufgebracht werden, sich damit auseinanderzusetzen. Dann wird schnell klar, was mit der Programmierung alles umgesetzt werden kann. Die Bandbreite ist groß und wird durch aktuelle Trends stetig befeuert. Insbesondere durch die Digitalisierung und Vernetzung vieler Alltagsgegenstände finden sich Softwareprogramme vermehrt jenseits gängiger Anwendungsfälle im betrieblichen Kontext von Unternehmen wieder. Also, keine Scheu und ran ans Programmieren!
Mir selbst bereitet das Programmieren viel Freude. Zudem ist es mir eine Herzensangelegenheit, mein Programmier-Knowhow und meine Erfahrung an andere weiterzugeben. Ich weiß aus vielen Schulungen sehr genau, was es für Hürden und Stolpersteine beim Programmieren lernen gibt und wie diesen zu begegnen ist. Gutem Trainingsmaterial kommt dabei eine zentrale Rolle zu.
Die Autoren Lo Iacono, Wiefling und Schneider schließen hier eine wichtige Lücke. Sie versorgen dich mit vielen Trainingsaufgaben, die dir helfen werden, die wesentlichen Programmierkonzepte wirklich zu verstehen. Und mehr noch. Du kannst und solltest so lange mit den vielen Aufgaben trainieren, bis der Groschen tatsächlich gefallen ist. Das ist wichtig. Denn erst dann wirst Du in der Lage sein, mit dem erlernten Handwerkszeug auch selbstständig Entwicklungsaufgaben bewältigen und lösen zu können. Genau da sollst du hin. Viele Lehrformate gehen hier nicht weit genug. Die falsche Annahme ist dabei häufig, dass ein Beispiel und eine Übungsaufgabe zum Verständnis ausreichen. Weit gefehlt. Es fängt schon damit an, dass nicht jeder mit dem gegebenen Beispiel oder der gestellten Übungsaufgabe etwas anfangen kann. Hier schafft das vorliegende Buch Abhilfe, und es gehört damit in die „Einstieg in die Programmierung“-Ecke deines Bücherregals.
Dirk Louis, Januar 2018
Danksagung |
Ein Buchprojekt ist harte Arbeit. Ohne die Unterstützung vieler helfender Hände geht es nicht. Wir können uns gar nicht genug bei euch allen bedanken, versuchen es aber dennoch, so gut wir können.
Zeit ist wohl das Kostbarste, was wir haben. Darum bin ich umso dankbarer, dass meine liebe Familie mir diese für derartige und andere Projekte einräumt. Danke Barbara, Giuliana, Antonio und Fabio.
Danke an Brigitte und Frank, Christian, Stephan, Viet, Peter und allen, die mich bei der Arbeit an diesem Buch unterstützt haben. Außerdem danke ich allen Förderern, besonders meinem damaligen Informatiklehrer Herr Schepanek.
Ich danke meiner Frau Sabrina und meinen Kindern Juli und Lana für ihre Unterstützung und die mir für dieses Projekt eingeräumte Zeit. Außerdem möchte ich mich bei den vielen Kollegen sowie Auszubildenden bedanken, die mich auf meinem beruflichen Weg begleitet haben.
Gemeinsam möchten wir uns bei Christian Ullenboom bedanken. Er hat das Buch kritisch durchgearbeitet und uns viele wertvolle Anmerkungen dazu gegeben. Gleiches gilt für Dirk Louis, der uns zudem freundlicherweise das Vorwort zur Erstauflage des Buches geschrieben hat. Bei Patrick Stenzel möchten wir uns für das Vorwort zu dieser zweiten Auflage bedanken. Dem Hanser Verlag und insbesondere Frau Sylvia Hasselbach möchten wir für die viele Geduld mit uns und die ungebrochene Unterstützung bedanken. Ein derartiger Rückhalt ist unverzichtbar.
Außerdem bedanken wir uns bei Lars Wildeshaus und Jens Schönbohm, die uns auf kleine Fehler in der Erstauflage aufmerksam gemacht haben, welche wir in dieser Auflage korrigieren konnten.
Schließlich wollen wir uns an dieser Stelle bei den vielen Freiwilligen da draußen bedanken, die ihre wertvolle Zeit dafür aufwenden, um der Allgemeinheit viele nützliche Dinge kosten- und diskriminierungsfrei zur Verfügung zu stellen. Unser Buch bedient sich viel aus der Public Domain, wofür wir uns gerne durch Benennung der wesentlichen Bausteine bedanken wollen. Zunächst sind hierzu die beiden zugrunde gelegten Programmiersprachen zu nennen. Java (https://www.java.com/de/) wird von Oracle Corporation und Python (https://www.python.org/) von der Python Software Foundation bereitgestellt. Beide gehören aktuell zu den am meisten eingesetzten Sprachen und können auf vielfältigste Weise verwendet werden. Um die Hürden gerade für (fachfremde) Einsteiger in die Programmierung weitestgehend zu eliminieren, stellt die Processing Foundation die gleichnamige Entwicklungsumgebung zur Verfügung (https://processing.org/). Processing basiert dabei von Hause aus auf Java. Im Laufe der Zeit sind weitere Programmiersprachen hinzugekommen, darunter neben JavaScript auch Python (http://py.processing.org/). Wir verwenden im Buch zudem Piktogramme, um die Aufgaben durch kleine Icons visuell zu unterstreichen. Iconify.it stellt unter https://iconify.it/downloads/iconify-650-free-icons/ eine Sammlung von 650 freien Glyphicons bereit, aus der wir uns hierzu bedient haben. Schließlich verwenden wir in einigen Programmieraufgaben Bilder, die durch das Programmverarbeitet werden sollen. Hier haben wir auf die Public-Domain-Cliparts von clker.com (http://clker.com/) zurückgegriffen.
Last, but not least wollen wir uns bei dir bedanken. Wir freuen uns, dass wir dein Interesse geweckt und es schon mal bis in deine Hände geschafft haben. Jetzt bleibt uns nur noch, dir beim Trainieren viel Erfolg zu wünschen.
Luigi Lo Iacono, Stephan Wief ling und Michael Schneider
April 2020
1 | Einleitung |
1.1 | Wozu sollte ich programmieren lernen? |
Weil Du es kannst und weil die Programmierung das Werkzeug des 21. Jahrhunderts ist. Die Bundeskanzlerin Frau Angela Merkel hat in einem Interview mit YouTubern das Programmieren auf eine Stufe mit den Grundfertigkeiten Lesen, Schreiben und Rechnen gestellt (https://youtu.be/Uq2zIzscPgY?t=12m18s). Programmieren ist lange nicht mehr nur etwas für Experten, die das studiert haben. Durch den Einzug des Digitalen in alle Branchen und den Alltag können viele andere als nur Informatiker von der Programmierung profitieren und damit ihre Ideen erproben und verwirklichen. Beispiele kannst du unzählige finden. Lass’ uns hier nur einige zur Verdeutlichung kurz anreißen. Dir fallen dann bestimmt selbst viele weitere Beispiele ein.
Angenommen, du bist Künstler und hast bisher mit den klassischen Materialien und Techniken deiner Disziplin gearbeitet. Für deine neueste Projektidee möchtest du mit regelmäßigen Formen und Farben experimentieren, wie es z. B. Sol LeWitt in seinem künstlerischen Schaffen getan hat (https://de.wikipedia.org/wiki/Sol_LeWitt). Das erfordert viel Fleiß, Geduld und Präzision. Da du deine Zeit lieber damit verbringen möchtest, an spannenden neuen Konstruktionen und deren Wirkung zu experimentieren, anstatt diese in langwierigen und teils monotonen Arbeitsschritten erst erstellen zu müssen, wünschst du dir einen Automatismus dafür, der das für dich erledigt. Dies kann ein eigens geschriebenes Computerprogrammleisten. Ist ein solches geschrieben, liegen die Vorteile auf der Hand. Veränderungen an den Farben, der Größe sowie Anordnungen der Formen usw. sind umgehend gemacht. Auch das Ausgabeformat kann leicht angepasst werden, um das Kunstwerk in vielfältiger Art und Weise zu drucken oder aus einem Rohling zu fräsen. Pioniere der computergenerierten Kunst sind z. B. Manfred Mohr, Joseph Nechvatal, Olga Kisseleva und John Lansdown.
Als Veranstaltungstechniker sieht man sich heute immer stärker mit Anforderungen von Kunden konfrontiert, die nach noch nicht dagewesenen Hinguckern verlangen. Hierfür gibt es naturgemäß keine fertigen Lösungen, die man aus dem Regal ziehen kann. Somit siehst du dich auf der einen Seite immer mit neuen spannenden Entwicklungsaufgaben konfrontiert, musst dafür aber auf der anderen Seite adäquate Lösungen entwickeln. Diese bedingen eigentlich immer auch Software, die es zu programmieren gilt.
Im letzten fiktiven Szenario wollen wir ins Internet der Dinge abtauchen. Mit diesem Schlagwort wird der allgemeine Trend bezeichnet, mit dem die Digitalisierung und die Vernetzung im Gewand des Internets stetig in Gegenstände des alltäglichen Gebrauchs diffundieren. Der smart gewordene Fernseher ist ein Paradebeispiel hierfür. Einige neue Anwendungen findest du toll, willst aber noch nicht in neue Produkte investieren. Die alten tun es ja noch. So findest du es z. B. praktisch, im Supermarkt einen Blick in deinen Kühlschrank werfen zu können, um zu sehen, ob es genügend Frühstückseier fürs Wochenende gibt. Der Kühlschrank ist schnell für diesen Anwendungsfall erweitert. Mit einer batteriebetriebenen Kamera, einem LED-Licht und etwas Programmierung kannst du bald via Smartphone-App in deinen Kühlschrank gucken.
Das soll zeigen, was dir alles an Möglichkeiten offen steht, wenn du die Programmierung als ein Werkzeug verstehst und dich dessen bemächtigst.
1.2 | Wie kann mir dieses Buch dabei helfen? |
Vor den Erfolg haben die Götter allerdings den Schweiß gesetzt. Diese Tatsache hat der griechische Dichter und Geschichtsschreiber Hesiod bereits vor langer Zeit festgestellt und dann so zutreffend formuliert. Dieser Ausspruch trifft unseres Erachtens kaum besser auf etwas zu als die Programmierung. Es gehört eine ordentliche Portion Arbeit dazu, bis der Groschen fällt und man die wesentlichen Programmierkonzepte verstanden hat. Erst dann wird man in der Lage sein, Aufgabenstellungen jeglicher Couleur selbstständig angehen und erfolgreich bewältigen zu können. Wir wollen dir diese notwendigen Mühen nicht verschweigen. Unserer Erfahrung nach scheitert so mancher Einstieg genau an dieser Hürde.
Unser Ansatz ist deshalb, durch viele spannende Programmieraufgaben das nötige Material zum Trainieren bereitzustellen. Du wirst in diesem Buch im Wesentlichen Aufgabenstellungen von uns bekommen, an denen du Aufgabe für Aufgabe alle relevanten Programmierkonzepte üben kannst. Damit dir dabei nicht die Laune vergeht, haben wir uns viel Mühe beim Zusammenstellen der Aufgaben gegeben. Es wird deutlich über die meisten „Lehrbuchaufgaben“ hinausgehen und sich, soweit möglich, erheblich näher an praktischen Anwendungsszenarien orientieren. Der klassische Lehrbuchstil hangelt sich meist an Aufgabenstellungen aus der Mathematik entlang. Das ist wichtig, und daher haben auch wir das ab und an mit dir vor. Wir können aber auch verstehen, wenn derartige Aufgaben nicht jedem liegen, um etwas Neues zu lernen. Daher programmierst du eher Anwendungen, die etwas Nützliches tun oder etwas hübsch Anzuschauendes generieren. Als Appetitanreger haben wir im nachfolgenden Bild 1.1 schon mal drei Beispiele aus dem Buch für dich.
Diese drei Bilder zeigen exemplarisch, was du mit unserem Trainingsprogramm programmieren sollst und auch können wirst, wenn du fleißig am Ball bleibst. Es lohnt sich!
1.3 | Was muss ich mitbringen? |
Nicht viel! Mit diesem Buch können wir es nicht leisten, dir die Basics beizubringen. Das musst du halt selbst tun oder du bekommst es in irgendeiner Form gezeigt. Wir erklären zu Beginn eines jeden Kapitels nochmal kurz die im Fokus stehenden Übungsschwerpunkte. Das ist mehr eine Gedächtnisstütze und soll als Warm-up dienen, falls du es überhaupt brauchst. Wir gehen dabei nochmals kurz auf die wesentlichen Konzepte ein und erläutern Besonderheiten in den Programmierumgebungen, für die wir Beispiellösungen bereitstellen.
Bild 1.1
1.4 | Wie geht das vonstatten? |
Wie schon gesagt, ist das hier ein Trainingsbuch fürs Programmieren. Wir stellen dir über 120 Übungsaufgaben mit Lösungsvorschlägen zum Training bereit. Die grundlegende Struktur gleicht dabei derer gängiger Ressourcen zur Einführung in die Programmierung. Es geht mit dem Aufbau erster einfacher Programme los und wird durch das Hinzukommen von Programmierkonzepten wie Variablen, Datentypen, Operatoren, Ausdrücke, bedingte Anweisungen, Wiederholungsanweisungen, Funktionen, Arrays, Strings bis hin zur Objektorientierung stetig erweitert. Damit wir uns – ohne unnötiges Störfeuer und Ablenkung – auf das Kernthema des jeweiligen Kapitels konzentrieren können, bestehen die ersten Programme der Kapitel 2, 3 und 4 zunächst aus Anweisungen. Erst in den nachfolgenden Kapiteln 5 bis 9 kommen dann Strukturelemente für den Programmcode in Form von Funktionen sowie Klassen und Objekten hinzu. Wir werden dir Kapitel für Kapitel Trainingsaufgaben stellen, für die du dir ein passendes Programmüberlegen und dieses dann in einer Programmiersprache vollständig angeben sollst.
Jede Trainingsaufgabe ist nach einem festen Schema aufgebaut (siehe Bild 1.2). Um jede Aufgabe eindeutig identifizieren zu können, haben wir diese mit einem eindeutigen Namen, einer eindeutigen Nummer und einem Piktogramm versehen. Das wird dir insbesondere dabei helfen, dich mit Freunden, Mitschülern, Kommilitonen, Kollegen oder der Community über die Aufgaben auszutauschen. Auch unsere Lösungsvorschläge im Anhang und online wirst du auf diese Weise spielend der jeweiligen Aufgabe zuordnen können. Die Identifizierungsnummer ist dem jeweiligen Buchkapitel zugeordnet. Das einfache Zurückspringen zur Aufgabenstellung im Buch ist damit auch gewährleistet.
Die Aufgaben haben wir unserem Dafürhalten nach in den Kategorien Schwierigkeit, Kreativität und Zeitaufwand bewertet und sortiert. Einfachere Aufgaben, die im Vergleich eher wenig Zeit und kreative Eigenleistung erfordern, findest du eher am Anfang eines jeden Kapitels. Du bist aber völlig frei in deiner Entscheidung, welcher Aufgabe du dich in welcher Reihenfolge widmen möchtest. Du musst auch längst nicht alle Aufgaben durchackern. Wenn der Groschen in Bezug auf die in einem Kapitel fokussierten Programmierkonzepte gefallen ist, kann es ans nächste Kapitel gehen.
Bild 1.2
Wir haben schon eingangs gesagt, dass wir mit dir und den Aufgaben eines jeden Kapitels bestimmte Programmierkonzepte trainieren möchten. Auf welche Themen sich eine jeweilige Aufgabe dabei im Besonderen fokussiert, geben wir dir kurz stichwortartig an. Dies soll ein zusätzliches Kriterium sein, wonach du entscheiden kannst, ob du eine bestimmte Aufgabe bearbeiten möchtest.
Worum es sich in einer Aufgabe dreht, erläutert eine kurze Beschreibung. Hier wird der Kontext gesetzt und ggf. auch ein Praxisbezug hergestellt, damit du weißt, wo sich in der Praxis etwas Derartiges finden lässt. Was du dann tatsächlich tun musst, geben wir dir im anschließenden Abschnitt mit dem passenden Namen Aufgabenstellung an. Du solltest beide Abschnitte aufmerksam und eventuell mehrmals lesen, um sicherzustellen, dass du deinen Auftrag richtig verstanden hast.
Zur Überprüfung, ob dein Programm tatsächlich funktioniert, geben wir dir Testfälle mit entsprechenden Testdaten an die Hand. Zudem haben wir zu jeder Aufgabe eine ausführlich kommentierte Lösung in den Programmiersprachen Java und Python beigefügt. Bevor du dir die aber anguckst, solltest du wirklich lange Zeit selbst an der Erarbeitung einer Lösung werkeln.
Wenn du völlig auf dem Schlauch stehst und gar keinen Zugang findest, sind am Ende einer jeden Aufgabe algorithmische Tipps aufgelistet, die dich einem möglichen Lösungsansatz näherbringen sollen. Bitte nutze diese Tipps und versuche unbedingt, selbst eine Lösung herzustellen, bevor du dir unsere Lösungsvorschläge im Anhang des Buchs anschaust. Nur auf diese Weise kommst du genügend ins Schwitzen, um nachher wirklich behaupten zu können, das Programmieren auch selbstständig zu beherrschen.
1.5 | Was muss ich sonst noch wissen? |
Damit du möglichst effektiv und fokussiert trainieren kannst, haben wir die Trainingsumgebung für dich von unnötigem Ballast entschlackt. Du sollst nicht schon bei der Installation, Konfiguration und Verwendung der Programmierumgebung die Lust am Programmieren bzw. die Sicht auf das Wesentliche verlieren. Wir stützen uns daher auf ein einziges Werkzeug, mit dem du in Java und Python das Programmieren trainieren kannst. Es handelt sich dabei um das frei und kostenlos verfügbare Tool mit dem Namen Processing, das du unter der Web-Adresse https://processing.org/ abrufen kannst. Hier findest du auch viele weitere Informationen und Dokumentationen rund um Processing. Im Anhang C haben wir Installationsanleitungen für die gängigen Betriebssysteme Windows, macOS und Linux beigefügt.
Dass wir auf Processing abstellen, soll aber nicht heißen, dass du mit dem Erlernten in der Praxis nicht viel anfangen kannst. Ganz im Gegenteil! Die Programmiersprachen Java und Python gehören zu den am weitesten verbreiteten Sprachen, und schließlich kommt es im Wesentlichen auf die Programmierkonzepte an. Wenn du diese intensiv trainiert und dadurch verinnerlicht hast, dann bist du bereit, alle möglichen Aufgabenstellungen programmatisch zu lösen. Dann haben wir unser gemeinsames Ziel erreicht. Die Verwendung professionellerer Programmierumgebungen wie z. B. Eclipse, IntelliJ oder PyCharm ist dann ein Klacks. Darüber müssen wir dann nicht mehr viele Worte verlieren. Wenn Du so gar keine Lust auf Processing haben solltest und unsere Aufgaben lieber mit anderen Programmierumgebungen für Java oder Python bearbeiten möchtest, dann findest Du im Anhang D Anleitungen für den Aus- und Umstieg.
Die Quelltexte zum Buch – unsere Lösungsvorschläge – haben wir auf dem Onlinedienst GitHub für dich bereitgelegt. Du findest sie unter der Adresse https://github.com/protrain. Wie du damit umgehst, erklären wir für alle gängigen Desktop-Betriebssysteme im Anhang A.1 (für Java) bzw. im Anhang B.1 (für Python).
Mit dem Kauf des Buches soll aber noch nicht Schluss sein. Wir würden uns sehr freuen, von dir zu hören. Über GitHub kannst du uns z. B. auf Fehler im Buch oder in den Lösungen aufmerksam machen. Wir tragen das dann in die Errata-Liste ein bzw. korrigieren die Programme. Außerdem kannst du uns auch deine Lösung(en) bereitstellen. Wenn diese einen eigenen Lösungsweg zeigen, nehmen wir sie mit in das Repositorie auf. Selbiges gilt für Lösungen in anderen Programmiersprachen. Achte aber bitte hierbei darauf, dass es für die Sprache eine ähnliche einfache und umfangreiche Programmierumgebung gibt, wie es Processing für Java und Python ist. Wenn du sonstige Anregungen zur Verbesserung hast oder Ideen für weitere Aufgaben beisteuern möchtest, freuen wir uns von dir zu hören.
Hoffentlich konnten wir dein Interesse wecken und dir unseren Ansatz zum Programmieren lernen schmackhaft machen. Jedenfalls würden wir uns sehr freuen, gemeinsam mit dir das Programmieren zu trainieren.
2 | Einführung in die Programmierung |