21
Kapitel 1: Zweck der Vorlesung GP1 Grundlagen der Programmierung 1 Holger Karl Wintersemester 2018/2018 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2 1.1 Überblick ............................... 3 1.2 GP1 im Studienverlauf ....................... 3 1.3 Denken in Algorithmen und Datenstrukturen .......... 5 1.4 Programmierparadigma ....................... 10 1.5 Welche Programmiersprache? ................... 13 1.6 Werkzeuge .............................. 15 1.7 Programmierung im Kontext .................... 17 1.8 Material ............................... 19 1

Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

Kapitel 1: Zweck der Vorlesung GP1Grundlagen der Programmierung 1

Holger Karl

Wintersemester 2018/2018

Inhaltsverzeichnis

Inhaltsverzeichnis 1

Abbildungsverzeichnis 2

Liste von Definitionen u.ä. 21.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 GP1 im Studienverlauf . . . . . . . . . . . . . . . . . . . . . . . 31.3 Denken in Algorithmen und Datenstrukturen . . . . . . . . . . 51.4 Programmierparadigma . . . . . . . . . . . . . . . . . . . . . . . 101.5 Welche Programmiersprache? . . . . . . . . . . . . . . . . . . . 131.6 Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.7 Programmierung im Kontext . . . . . . . . . . . . . . . . . . . . 171.8 Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1

Page 2: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 20

Abbildungsverzeichnis

1.1 Was ist Programmierung? . . . . . . . . . . . . . . . . . . . . . 31.2 One does not simply walk into programming . . . . . . . . . . . 51.3 Einfaches Ausführungsmodell . . . . . . . . . . . . . . . . . . . 81.4 Beispiele für Programmierparadigmen . . . . . . . . . . . . . . 111.5 TIOBE Index 2018 . . . . . . . . . . . . . . . . . . . . . . . . . . 141.6 Hartnäckigkeit kann sich auszahlen . . . . . . . . . . . . . . . . 15

Liste von Definitionen u.ä.

1.1 Zitat (Laut Modulhandbuch) . . . . . . . . . . . . . . . . . . . 41.1 Definition (Algorithmus) . . . . . . . . . . . . . . . . . . . . . 51.2 Definition (Datenstrukur) . . . . . . . . . . . . . . . . . . . . . 61.3 Definition (Zustand) . . . . . . . . . . . . . . . . . . . . . . . . 71.4 Definition (Ausführungsmodell) . . . . . . . . . . . . . . . . . 81.5 Definition (Programmiersprache) . . . . . . . . . . . . . . . . . 9

2

Page 3: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.1. Überblick 3

1.1 Überblick

1.1.1 Dieses Kapitel

• Übersicht: Was beinhaltet Programmieren?• Was macht eine gute Programmiererin aus?• Was soll in dieser VL erreicht werden?• Warum machen wir das so?

1.2 GP1 im Studienverlauf

1.2.1 Was ist Programmierung?

Abbildung 1.1: Was ist Programmierung?

1.2.2 Vorlesungsinhalt Programmierung

Von allem ein bisschen, insbesondere:

• Grundlegende Programmierparadigmen– Imperativ– Objektorientiert– Dynamisch vs. statisch typisiert

Page 4: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

4 Liste von Definitionen u.ä.

• Coding– Entwicklung– Wiederbenutzung– Test– Werkzeuge

Programmierparadigmen

Mit dem Begriff Programmierparadigmen klassifiziert man Programmierspra-chen in Familien. Innerhalb einer Familie kommen ähnliche Konzepte undGrundannahmen zur Geltung. Das betrifft zum Beispiel Annahmen über dasAusführungsmodell, über die Reihenfolgen von Ausführungen, und ähnliches.Andere Aspekte sind die Organisation des Codes in kleinere oder größereEinheiten. Stilfragen zählen ebenfalls dazu.

1.2.3 VL Programmieren im Modulhandbuch

Zitat 1.1 (Laut Modulhandbuch). • Faktenwissen, unter anderem– die wesentlichen Konstrukte einer Programmiersprache (derzeitPython, in geringem Umfang auch Java),

– die Grundkonzepte von Komposition und Abstraktion in der Pro-grammierung zu verstehen

• methodisches Wissen– die gelernten Sprachkonstrukte sinnvoll und mit Verständnis anzu-wenden,

– Software zu testen sowie Fehlerursachen zu finden und zu beseiti-gen,

– objektorientierte Grundkonzepte zu verstehen und anzuwenden,– Software aus objektorientierten Bibliotheken wiederzuverwenden

• Transferkompetenz– praktische Erfahrungen in der Programmentwicklung auf neueAufgaben zu übertragen

• normativ-bewertenden Kompetenzen– den Aufwand und die Durchführbarkeit von Programmieraufgabenzu beurteilen

1.2.4 VL Programmiersprachen

• Partnervorlesung (letztes Drittel dieses Semesters)

[Laut Modulhandbuch]

Die Studierenden können Grundkonzepte von Programmier- undAnwendungssprachen erläutern. Sie können typische Eigenschaf-

Page 5: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.3. Denken in Algorithmen und Datenstrukturen 5

ten nicht-imperativer Sprachen erklären. Sie sind in der Lage,einfache Grammatiken, Typenspezifikationen und funktionaleProgramme zu entwickeln. Sie sind in der Lage, praktische Er-fahrungen in der Programmentwicklung auf neue Aufgaben zuübertragen. Sie besitzen die Fähigkeit, neue Programmier- undAnwendungssprachen selbstständig zu erlernen.

1.2.5 Programmieren?

• Irgendwie dem Computer erklären was er machen soll?• Irgendwie zusammen hacken. . . ?

Wirklich?

Abbildung 1.2: One does not simply walk into programming

1.3 Denken in Algorithmen und Datenstrukturen

1.3.1 Grobe Vorstellung

• Algorithmus: Was wird wie verarbeitet?• Datenstruktur: Wie werden Daten repräsentiert?

1.3.2 Algorithmus

Definition 1.1 (Algorithmus). Ein Algorithmus ist eine endliche, eindeuti-ge, unmissverständliche Handlungsvorschrift zur Lösung eines Problems.

1.3.3 Algorithmus

Historisch

• Erste Ideen, Abu Dscha’far Muhammad ibn Musa al-Chwarizmi, ca. 825n.u.Z.

• Ada Lovelace, 1843, Berechnung von Bernoullizahlen

Page 6: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

6 Liste von Definitionen u.ä.

Wie?

• Wie stellen wir das sicher?• Natürliche Sprache?

1.3.4 Datenstruktur

• Welche Daten verwendet?• Wie repräsentiert?• Wie manipulierbar?

Formalisiert:

• Abstrakter Datentyp• Siehe VL Modellierung

1.3.5 Datenstruktur

Definition 1.2 (Datenstrukur). Eine Datenstruktur legt fest, wie Daten ineinem Rechner repräsentiert werden und wie sie verarbeitet oder manipuliertwerden können.

1.3.6 Algorithmus/Datenstrukturen in Isolation?

Kann man sich das beliebig ausdenken?

Nein!

• Hängt entscheidend vomMaschinenmodell ab

Beispiele:

• Normaler Rechner• Abstrakt: Turing-Maschine

– Siehe VL Modellierung, VL EBKfS• Quantencomputer

1.3.7 Maschinenmodell für diese VL?

Wir gehen von normalen Rechnern aus:

• Speicher• Verarbeitung• Programm

1.3.8 Speicher

• Enthält Daten

Page 7: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.3. Denken in Algorithmen und Datenstrukturen 7

– Unterteilt in kleinere Einheiten, Speicherstellen– Einfachster Fall: Speicherstellen durchnummeriert

• Inhalte der Speicherstellen zu einem Zeitpunkt: Zustand– Zentraler Begriff!

Definition 1.3 (Zustand). Der Zustand eines Rechners ist ein Element einerdiskreten Menge. Er wird gebildet durch den Inhalt aller (veränderlichen)Speicherstellen des Rechners.

1.3.9 Verarbeitungseinheit

• Central Processing Unit (CPU)• Manipuliert Daten im Speicher

– Manipuliert Zustand• Hält sich dabei an Anweisungen• Es gibt nur endlich viele, wenige Anweisungen

– Der Instruktionssatz

1.3.10 Programm

• Eine Folge von Anweisungen, das Programm• Anweisungen entstammen Instruktionssatz

1.3.11 Instruktionssatz: Beispiele

Beispiele für Anweisungen:

• Übertrage Daten von beliebiger Stelle des Speichers in CPU• Übertrage Daten von CPU in beliebige Stelle des Speichers• Addiere zwei Daten• Vergleiche zwei Daten

1.3.12 Ausführungsmodell

Mit Speicher, CPU, Instruktionssatz ergibt sich ein Ausführungsmodell:

• CPU bearbeitet, zu jedem Zeitpunkt, eine aktuelle Anweisung aus demProgramm

• Bearbeitung dieser Anweisung führt ggf. zur Veränderung der Daten• Dann wird nächste Anweisung ausgeführt

Page 8: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

8 Liste von Definitionen u.ä.

1.3.13 Ausführungsmodell

Definition 1.4 (Ausführungsmodell). Ein Ausführungsmodell legt fest,wie aus einem gegebenen Zustand der Folgezustand entsteht. Für jede Anwei-sung aus dem Instruktionssatz.

1.3.14 Ausführung

• Ausführung beginnt mit einem Zustand• Jede Anweisung überführt einen Zustand in seinen Folgezustand• Ausführung insgesamt also: Folge von Zuständen

1.3.15 Ausführungsmodell

Abbildung 1.3: Einfaches Ausführungsmodell

1.3.16 Langweiliges Ausführungsmodell

Immer die nächste Anweisung?

• Langweilig. . .

Flexibel?

• Die nächste auszuführende Anweisung kann von Vergleichen abhängen• Vorstellung eines Sprungs in der Folge der Anweisungen

1.3.17 Welcher Zustand ändert sich bei Sprung?

• Wichtiger Teil des Zustands:– Welche Anweisung wird gerade bearbeitet?– Welche Anweisung wird als nächstes bearbeitet?

• Normale Ausführung: Als nächstes wird die Anweisung in der folgendenZeile bearbeitet

• Sprung: Als nächstes wird die Anweisung in einer anderen Zeile bear-beitet

Page 9: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.3. Denken in Algorithmen und Datenstrukturen 9

1.3.18 Fertig?

• Im Prinzip wären wir jetzt mit der Vorlesung fertig:– Instruktionssatz genau beschreiben– Details Ausführungsmodell genau beschreiben

• Praktikabel? Nein!– Zu feingranular– Für Menschen schlecht verständliche Darstellung

• Wie programmieren?

1.3.19 Programmieren

• Basteln bis es tut??• Gutes Programmieren

– Systematisches Nachdenken, Entwurf, Planung, Verständnis– Auch: Ästhetik

• Systematik? – Im Laufe der Vorlesung

1.3.20 Programmiersprachen

• Heben das Abstraktionsniveau– Mächtigere Anweisungen– Einfacher für Menschen

• Also: Definiere neuen Instruktionssatz, neue Vorstellung von Zustand,. . .

• Eine Programmiersprache

1.3.21 Programmiersprache – Definition

Definition 1.5 (Programmiersprache). • Eine Programmiersprachedient der Definition von Algorithmen und der in Algorithmen benutztenDatenstrukturen.

• Sie definiert ggf. Begriff des Zustandes und der Übergänge zwischenZuständen. Hierfür wird meist der Begriff der Anweisung verwendet.Dadurch wird die Semantik der Sprache festgelegt.

• Zusätzlich legt eine Programmiersprache fest, wie Anweisungen undDatenstrukturen notiert werden. Dies bestimmt die Syntax der Sprache.

Anmerkung: Zwei Sprachen

Eigentlich besteht (nahezu) jede Programmiersprache aus zwei Teilsprachen:

• Einer Sprache, die Daten beschreibt: wie sehen sie aus, wie sind siebenannt, welche Eigenschaften haben sie, wie können einfache Datenzu komplexeren Daten kombiniert werden?

Page 10: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

10 Liste von Definitionen u.ä.

• Einer Sprache, die Operationen auf Daten beschreibt: wie können Datenmanipuliert werden, wie können neue Daten berechnet werden, unterwelchen Bedingungen soll das geschehen?

In Praxis sind diese beiden Teile einer Sprache oft nicht unterscheidbar undeng mit einander verwoben. Es gibt aber durchaus Beispiele, in denen nur einAspekt auftritt, etwa bei Spezifikationssprachen für Typen.

Anmerkung: Syntax und Semantik

Mit Syntax werden die Regeln bezeichnet, die ein Text einhalten muss, umin einer gegebenen Programmiersprache als gültig angesehen zu werden –man spricht dann von einem syntaktisch korrektem Programm. Die VL Mo-dellierung (und im weiteren Studienverlauf die VL Formale Sprachen) stelltunterschiedliche formale Techniken vor, solche Syntaxregeln zu formulieren.

Die Semantik beschreibt, wie ein syntaktisch korrektes Programm Eingabenauf Ausgaben abbildet. Insbesondere auch, wie die Semantik eines Programmsaus der Semantik von Teilen des Programms – bis zu einzelnen Anweisungen– erklärt werden kann. Die mathematisch präzise Definition einer Sprachse-mantik ist dabei anspruchsvoll und wird in GP1 nicht weiter formal behandelt.Wir beschränken uns hier auf intuitive Beschreibungen dieses Begriffs.

1.3.22 Ausführung?

• Aber: Solche Programme sind nicht mehr direkt durch reale Maschinenausführbar

Das macht nichts!

• Wir stellen uns einfach eine irrealeMaschine vor, die entsprechend fähigist

• Später: von irrealer Maschine zu realer Maschine?!– Interpreter– Compiler

1.4 Programmierparadigma

1.4.1 Gute Programmiersprachen?

• Was ist das richtige Abstraktionsniveau?• Wie Sprachen gestalten, damit

Page 11: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.4. Programmierparadigma 11

– für Menschen einfach nutzbar?– für reale Maschinen gut umsetzbar?

Grundlegende Ideen

• Ideen in Programmierparadigmen beschreiben• Gruppieren Programmiersprachen zu Familien

1.4.2 Programmierparadigma

Sprachen eines Paradigmas gleichen sich in:

• Was sind statische Aspekte der Sprache?– Konstanten? Daten? Typen? Code? Variablen? . . . ?

• Was sind dynamische Aspekte der Sprache?– Variableninhalte? Variablen? Folge von Anweisungen?– Woher stammt Dynamik?

* Eingaben? Zeitablauf? Ereignisse? Zufall? . . . ?

1.4.3 Programmierparadigmen: Beispiele

Abbildung 1.4 zeigt Beispiele für Programmierparadigemn, die wir hier kurzbetrachten.

Abbildung 1.4: Beispiele für Programmierparadigmen

1.4.4 Programmierparadigma: Imperativ

• Älteste Sprachfamilie• Niedrige Abstraktionsebene

Page 12: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

12 Liste von Definitionen u.ä.

• Sehr nahe am realen Maschinenmodell• Einfach zu erlernen, aber schlecht für große Anwendungen geeignet• Beispiele: BASIC, C, Pascal, . . .

1.4.5 Programmierparadigma: Objektorientiert

• Beobachtung bei imperativen Sprachen: Zusammenhang zwischen Da-ten und Anweisungen oft schwer zu sehen– Insbesondere bei großen Programmen unübersichtlich

• Idee: Zusammenfassen!– Daten und der darauf anwendbare Code werden gemeinsam be-schrieben

• Beispiele: Smalltalk, C++, Java, Python

1.4.6 Programmierparadigma: Funktional

• Vermeidung der Vorstellung eines Zustands– Keine Seiteneffekte– Programm ist eigentlich nur ein große Funktion

• Programm selbst kann zum Gegenstand des Programms werden– Schlagwort: Functions as first-class citizens

• Beispiele: Lambda-Kalkül, Lisp, Haskell, F#

1.4.7 Programmierparadigma: Logisch

• Ein Programm beschreibt Fakten und Schlussregeln• Maschine konstruiert durch Anwendung der Regeln auf Fakten neueFakten

• Wenn eine Frage als Fakt konstruiert werden kann, ist sie wahr• Beispiele: Prolog

1.4.8 Welches Paradigma für diese VL?

• Anforderungen– Leicht erlernbar– Praxisrelevant– Ausgangspunkt für weitere Ausbildung

• Hier: 30% imperativ, 60% objektorientiert, 10% funktional• Mehr Details, Beispiele: VL Programmiersprachen

1.4.9 Paradigma und Sprache?

• Meist keine 1:1 Beziehung– Kein Paradigma mit nur einer Beispielsprache– (Fast) keine Sprache folgt nur einem Paradigma exklusiv

Page 13: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.5. Welche Programmiersprache? 13

• Meist Mischkonzepte, Überlappungen, . . .

1.5 Welche Programmiersprache?

1.5.1 Anforderungen

• Leicht erlernbar, gut strukturiert• Praxisrelevant• Deckt wesentliche Paradigmen ab• Ausgangspunkt für weitere Ausbildung• Portierbar zwischen Betriebssystemen, Architekturen• Spass!

1.5.2 Auswahl?

• Keine Sprache erfüllt alle Anforderungen :-(• Kandidaten: C/C++, Java, Python

– Alle praxisrelevant, wesentlich im weiteren Studienverlauf• Oder Exoten: Javascript, Kotlin, Go, Rust, Scala, . . . ?

1.5.3 C/C++ ?

• Nahe am Maschinenmodell– Es passiert nichts überraschendes

• Wenig Abstraktion• Wenig fehlerverzeihend• Alte Sprache: viel historischer Ballast

– Durch gewünschte Rückwärtskompatibilität– Insbesondere bei C++

• (Nahezu) keine funktionalen Aspekte

Rückwärtskompatibilität

Rückwärtskompatibilität ist eine Eigenschaft, die bei neuen Versionen eines Sy-stems – hier: einer Programmiersprache – auftritt. Rückwärtskompatibilitätliegt vor, wenn die neue Version in der Lage ist, Eingaben (hier: Program-me) korrekt und unverändert zu verarbeiten, die für die alte Version erstelltwurden.

Beispiel: Benzinmotoren sind rückwärtskompatibel zu einander, da sie alleBenzin verarbeiten. Mit der Einführung des Katalysators war dies aber nichtder Fall, da verbleites Benzin nicht mehr verarbeitet werden konnte.

Page 14: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

14 Liste von Definitionen u.ä.

1.5.4 Java?

• Hohe Abstraktion• Komplexes Ausführungsmodell

– VielMagie• Moderne Sprache, die viele Trends integriert

– Dadurch auch unübersichtlich– Beispiel: Funktional möglich, aber offensichtlich aufgepfropft

• Hoher Einarbeitungsaufwand zu Beginn

1.5.5 Python?

• Moderne Sprache, strikt verwaltet• Weniger komplex als Java• Sehr gut lesbar, kompakt

– Typischerweise: 1/3 – 1/5 vergleichbaren Java-Codes• Geringer Einarbeitungsaufwand• Interpretiert, dadurch einfach zu experimentieren• Vor-/Nachteil: Keine statischen Typen• Schnell wachsend

1.5.6 Vergleich: TIOBE Index

• TIOBE Index: Welche Sprachen werden am Arbeitsmarkt nachgefragt?

Ranking:

1. Java2. C, C++3. Python

1.5.7 Vergleich: TIOBE Index

From Tiobe Index 2018:

Abbildung 1.5: TIOBE Index 2018

Page 15: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.6. Werkzeuge 15

1.5.8 Konsequenz?

• Beginn: Python – ca. 3/4 der Vorlesung– Grundlegende imperative, objektorientierte, funktionale Aspekte

• Zum Ende: Java – ca. 1/4– Einführung statischer Typisierung

(und C kommt im vierten Semester. . . )

Vorteil?

• Einfacher Einstieg & breiter Horizont• Zwei Sprachen sind kein Hexenwerk!

1.5.9 Alle Sprachen?

Abbildung 1.6: Hartnäckigkeit kann sich auszahlen

1.6 Werkzeuge

1.6.1 Werkzeuge

• Programmierer brauchen Werkzeuge, je nach Sprache• Wesentlich:

– Editor– Debugger– Profiler– (IDE)– Dokumentation– Versionsverwaltung

1.6.2 Editor

• Programmtext eintippen. . .

Page 16: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

16 Liste von Definitionen u.ä.

• Einfacher Editor– Komfortabel– Aber keine spezifische Unterstützung für gewählte Programmier-sprache

• Programmier-Editor– Unterstützt editieren in gewählter Sprache– Versteht Programmiersprache– Kann Vorschläge machen, Ergänzungen, . . .

1.6.3 Editor für diese VL?

• Prinzipiell: Nutzen Sie, was Sie wollen!• Abgaben durch Browser-basiertes System

– Jupyter, Projekt Webseiten– Insbesondere: Editor im Browser

1.6.4 Debugger

• Niemand programmiert fehlerfrei• Debugger hilft bei Fehlersuche

– Programm gezielt anhalten– Variablenwerte anschauen, verändern– . . .

1.6.5 Profiler

• Laufzeit eines Programms untersuchen• Wo ist es unnötig langsam?• Statistiken für viele Läufe erheben

1.6.6 Dokumentation

• Innerhalb eines Programms: Dokumentation, Kommentare– Notizen was, warum und wie geschieht

• In Programm verteilt• Werkzeug: Dokumentation extrahieren und in kompakter Form bereitstellen

• Beispiele: javadoc, doxygen (mit Abarten), pydoc, autodoc, . . .

1.6.7 Versionsverwaltung

• Kein Programm ist direkt perfekt– Verfeinert, Fehler behoben, . . .– Es entstehen Versionen eines Programms

• Handhabung?

Page 17: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.7. Programmierung im Kontext 17

– Kopien in Ordnern? MyProgram/v17.3_after_midnight ?

1.6.8 Werkzeuge für Versionsverwaltung

• Nutzen Sie spezialisierte Werkzeuge!• Nur eine Version des Programms in Bearbeitung• Ältere Versionen, Alternativen zugreifbar• Beispiele:

– svn, git (mit Zusatzfunktionen wie etwa github )– Jupyter: einfaches Abspeichern und Wiederbenutzen älterer Ver-sionen (sog. checkpoint)

Versionsverwaltung – aktueller Stand

Es gibt eine große Anzahl unterschiedlicher Versionsverwaltungswerkzeuge.Aktuell ist git vermutlich am weitesten verbreitet; es ist sehr flexibel undfunktionsreich.

In dieser VL werden wir allerdings auf explizite Versionsverwaltungswerkzeu-ge verzichten.

1.6.9 Integrierte Entwicklungsumgebung

• Integrated Development Environment (IDE)• Fasst viele Werkzeuge in einem Programm zusammen• Problem: Meist sehr komplex

– Bedienung, Nutzung einer IDE zu lernen ist sehr zeitaufwändig• IDE-Bedienung ist nicht programmieren!

Empfehlung

• Tun Sie es nicht• Jedenfalls nicht gleich!

1.7 Programmierung im Kontext

1.7.1 Alles alleine?

• Schreiben Sie alle Programme von Grund auf (from scratch)?

Natürlich nicht

• Sie nutzen Arbeit anderer

Page 18: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

18 Liste von Definitionen u.ä.

– Allgemein verfügbar– Aus Ihrem Team

• Sie nutzen Erfahrungen anderer

1.7.2 Allgemein verfügbar: Bibliotheken

• Bibliothek– Programmcode der vielen Zwecken dienen kann– Teil der Sprache: Standard-Bibliothek– Oder zusätzlich verfügbar

• Stark unterschiedliche Ansätze zwischen Sprachen– C: fast leere Standardbibliothek– Python: sehr umfangreich (batteries included)

Effizienz des Programmierers

• Gute Programmiersprache mit guter Bibliothek!

1.7.3 Technisch: Package management systems

• Wie findet man, installiert man zusätzliche Bibliotheken?– Bibliothek: Package– Package management system

• Stark unterschiedliche Ansätze zwischen Sprachen– C: ???– Python: Python Package Index (PIP), Conda, u.a.

• Beispiele: Später

1.7.4 Team-Arbeit: Versionsverwaltung

• Versionsverwaltung auch (insbesondere) für Team-Arbeit gedacht• Gemeinsame Arbeit an größerem Projekt• Wiederverwendung!• Beispiele: Später

1.7.5 Hilfe finden

Wo finden Sie Hilfe? Bei allgemeinen Fragen?

• StackExchange– Mit spezialisierten Unterseiten für einzelne Gebiete– stackOverflow – 4.7 million programmers, helping each other– AskUbuntu– System adminstration– TEX/LaTex StackExchange – Textverarbeitung für ernsthafte Text-verarbeiter

Page 19: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.8. Material 19

– emacs – Editor für ernsthafte Programmierer

1.7.6 Hilfe finden (2)

• Spezifisch: Sprache, Entwicklungsumgebung, . . .– Beispiel C++: C++ Reference Site– StackExchange : Spezifische Seiten, z.B.

1.7.7 Gute Programmierer

. . . wissen, wie man google/stackoverflow die richtigen Fragen stellt

1.8 Material

1.8.1 Programmierung

• Programmierung allgemein– Felleisen et al., How to design programs, An introduction to pro-gramming and computing, MIT Press (online verfügbar).

• Online– CodeCademy: Große Sammlung von Kursen zu unterschiedlichenThemen; interaktiv

– CodeWars: Lernen durch Herausforderungen– s. a. Übersichtswebsite; meist kommerzielle Angebote

1.8.2 Python

• Python, die Sprache– Python Dokumentation– Mark Lutz, Learning Python, 5th ed., O’Reilly

* Auch als eBook in der UniBib– Jason Briggs, Python for Kids– Bernd Klein, Einführung in Python 3: In einer Woche programmie-ren lernen

– Thomas Theis, Einstieg in Python

1.8.3 Python, Umgebungen

• Jupyter– Jupyter Projekt Webseiten

• Texteditor

Page 20: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

20 Liste von Definitionen u.ä.

– Atom– Emacs

* Mit Abarten je nach Betriebssystem– und viele, viele andere . . .

• IDEs– (Vorsicht, sehr komplex)– Kommerziell: PyCharm– Open Source: Eclipse, insbes. PyDev

1.8.4 Java

• Bücher– Hanspeter Mössenböck, Sprechen Sie Java? dpunkt Verlag– Reinhard Schiedermeier, Programmieren mit Java, Pearson Studi-um

• Java Tutorial

1.8.5 Java, Umgebungen

• IDEs– (Vorsicht, sehr komplex)– Open Source: Eclipse

1.9 Zusammenfassung

1.9.1 Aber das kann ich doch alles

• Vorkenntnisse vorhanden? Super!• Keine? Auch gut!• Selbsteinschätzung – brauche ich die Vorlesung?

– Variablen: Referenztypen vs. normale Typen– Statisch vs. dynamisch typisierte Sprachen– Kontrollstrukturen: if, while, formit Iteratoren– Algorithmenentwurf mit rekursiven Funktionen– Funktionen: Closures, Generatoren– Objektorientierung

* Mehrfachvererbung,MethodResolutionOrder durchC3-Algorithmus* Einfachvererbung: Abstrakte Klassen vs. Interfaces

– Debugging: Konzepte und Werkzeuge

Page 21: Kapitel 1: Zweck der Vorlesung GP1 - uni-paderborn.degroups.uni-paderborn.de/fg-karl/lehre/ws1819/gp1/...• Weniger komplex als Java • Sehr gut lesbar, kompakt – Typischerweise:

1.9. Zusammenfassung 21

1.9.2 Übung auch bei Vorkenntnissen

• Siemüssen selbst bei perfekten Vorkenntnissen Übungsaufgaben abge-ben

• Zulassungsvoraussetzung für Klausur!• Aber das ist dann ja kein Aufwand für Sie!

1.9.3 Zusammenfassung

• Programmieren ist– mehr als nur Coding– ein systematischer Prozess– spielt sich in einem gewählten Paradigma ab

• Gute Programmierer– sind analytisch und stilistisch sicher– beherrschen wesentliche Werkzeuge– kennen den Entwicklungskontext