Programmieren / Algorithmen und Datenstrukturen 1 Reiner Nitsch 06151/16-8471 oder 0157 782 045 34 reiner.nitsch@h-da.de Homepage: www.fbi.h-da.de/~r.nitsch Raum: D14/2.07
Was ist Programmieren Teil eines systematischen Entwurfsprozesses Planung, Definition, Entwurf, Implementierung, Abnahme und Einführung, Wartung und Pflege Kreative Tätigkeit Studium der Programme erfahrener Entwickler Learning by doing and errors Handwerk Beherrschung (mindestens) einer Programmiersprache Dienstleistung Kundenorientierung 24.03.2013 Einführung 2
Bild des Programmierers Früher: Hacker, Guru Hauptsache der Compiler versteht mich! "Es funktioniert doch!" reicht nicht Beispiel für grotesken Programmierstil (Quelle: The International Obfuscated C Code Contest http://www.ioccc.org/ ) // Berechnung und Ausgabe der Eulerschen Zahl e auf 10000 Stellen #include <iostream> int a[3302], b=3301, *c=a, d, e, f;void main(){for(e=b ; --e ; *c++ = 1); *c = 2;for(d = 2001 ; d-- ; printf("%05d",f),fflush(stdout) ) for (c = a, e = b ; e ; f /= e--){f += *c * 1e5;*c++ = f%e;}} So nicht!!!! 24.03.2013 Einführung 3
Bild des Programmierers Heute: Informatiker Teamwork, kein Einzelkampf Meinen Code verstehe nicht nur ich! Wiederverwendung von Code Verwendung von Software-Bibliotheken Fehlerfreie & sichere Software Softwarefehler verursachen in Europa jährlich einen wirtschaftlichen Schaden von weit über 100 Milliarden Euro. Weil bei der Entwicklung von Software die Anforderungen oft falsch eingeschätzt werden und die existierende Technologie der Fehlersuche sehr aufwändig ist, wenden Hersteller heute 70-80 Prozent ihrer Arbeit für das Entfernen von Softwarefehlern auf. [Quelle: BMBF 2007] ET-Ingenieure haben ihre Hardware besser im Griff. Informatiker, mehr Ehrgeiz!!! Laut ADAC sind ein Drittel aller Autopannen auf Mängel in der Elektronik zurückzuführen, rund 80 Prozent davon sind Softwarefehler. 24.03.2013 Einführung 4
Softwarefehler Beispiele, Fakten, Statistik 1984: Autopilot eines Airbus A330 fällt aus -> Absturz bei Toulouse, 7 Tote 1996: Europäische Trägerrakete Ariane 5 explodiert beim Start (Softwaremodul zur Konvertierung von Zahlenwerten war fehlerhaft -> Schaden ca. $500 Mio.) 2000: Programm zur Berechnung von Bestrahlungen im Medizinbereich gab inkorrekte Werte aus -> 8 Tote, 20 Schwerstverletzte 2008: Fehlerhafte Anzeigen im Cockpit, 2 ungewollte Sturzflugmanöver 2012: Falscher Algorithmus einer Börsenhandelssoftware kaufte und verkaufte Aktien in großer Menge -> Verlust: $450 Mio. in 45 Minuten. Anfang 2013: T-Mobile-Kunden können mehrere Stunden weder telefonieren noch SMS senden (Softwarefehler im Homelocationregister) Navi-Ansage auf Autobahn: "Bitte wenden!" Smartphone: ca. 200 000 LoC mit ca. 600 Fehlern Windows XP: ca. 40 Mio. LoC (ca. 60m hoher Papierstapel) mit ca. 800 000 Bugs Automobil: Software und Elektronik -> bis zu 40% des Wertes Softwaretests: heute ca. 40 60% der Projektkosten 24.03.2013 Einführung 5
Jetzt bin ich neugierig! Wer hat kein Notebook? Wer von diesen hat auch keinen PC? Wer hat im Studierzimmer keinen Internetanschluss? Wer hat noch nie programmiert? Wer hatte in der Schule keinen Informatikunterricht? Wer hat schon objektorientiert programmiert? Wer hat C++ Kenntnisse? 24.03.2013 Einführung 6
Regeln zum Praktikum Umfang: Testat: Bewertung: Zulassung zum LN: Anmeldung: Gruppeneinteilung Termine: Aufgabenstellung: Durchführung: 6 Praktikumstermine nur zum jeweiligen Termin mit Erfolg teilgenommen 6 von 6 Testaten während der Belegphase (vorbei) danach Restplatzbelegung durch mich durch OBS (bereits erfolgt) siehe meine Homepage http://www.fbi.h-da.de/~r.nitsch siehe meine Homepage eigenes Notebook (mit Maus) mitbringen 2er Gruppen, aber: keine Arbeitsteilung, d.h. jeder hat die gestellte Aufgabe auf seine Weise implementiert jeder kann die Implementierung des Teampartners erklären Autofahren lernt man auch nicht als Beifahrer Abschreiben und Kopieren ist verboten! 24.03.2013 Einführung 7
Gruppeneinteilung und Termine siehe http://www.fbi.h-da.de/~r.nitsch 24.03.2013 Einführung 8
Ablauf einer Praktikumsübung 1. Ausgabe der Aufgabenstellung (Download von Homepage) 2. Vorbesprechung und evtl. Vorentwurf als Hörsaalübung 3. Zu Hause: Programmcode entwerfen, eintippen, übersetzen, testen Nur die in der Vorlesung besprochenen Sprachelemente verwenden 4. Praktikumstermin: Zeitrahmen: max. 3 Std! Restarbeiten Kennenlernen der Implementierung des Teampartners Abnahme durch Betreuer 24.03.2013 Einführung 9
Offenes Labor "Programmieren" Betreuung durch Tutoren (Studierende mit Programmiererfahrung) Hilfe beim Bearbeiten von Praktikumsaufgaben Nachhilfeunterricht (kostenlos) Öffnungszeiten: s. www.fbi.h-da.de 24.03.2013 Einführung 10
Leistungsnachweis am Semesterende Zulassungsvoraussetzung: Testate von allen Praktika des PG1-Labors Prüfungsleistung: Praktische Prüfung am PC (max. 2 Wiederholungen) Achtung: keine mündl. Ergänzungsprüfung nach dem 3.Versuch Termin: 09.07.2013, 8:30 12:00 Uhr, D14/004 Dauer: 180 Minuten Zul. Hilfsmittel: s. nächste Seite 24.03.2013 Einführung 11
Leistungsnachweis - Hilfsmittel Erlaubte Hilfsmittel: Bücher, Ausdrucke, Notizen (geheftet oder in einem Ordner). Lose Blätter werden von der Aufsicht konfisziert. Zur Verfügung gestellte Hilsmittel Das Vorlesungsskript (auf dem Klausurrechner) Das Lehrbuch "Breymann: Der C++ Programmierer" (auf dem Klausurrechner) Ein lokales Abbild der Webseite cplusplus.com ohne Suchfunktion (auf dem Klausurrechner) Verboten ist: Die Benutzung eigener Datenträger (Diskette, USB-Stick etc.); insbesondere dürfen keine Programme oder sonstige Daten auf Datenträgern mitgebracht werden. Die Benutzung eines anderen Rechners (Taschenrechner, PDA, Notebook,... ) als des zur Verfügung gestellten. Jegliche Kommunikation (mündlich, schriftlich, elektronisch, per Handy, übers Netz, wie auch immer...) mit anderen Personen, ausgenommen der Aufsicht. Login unter einem anderen Account, als dem für die Klausur angegebenen. Zugriff auf andere Verzeichnisse eines Servers, als die ausdrücklich zugelassenen. WS 2011/2012 PAD2 Einführung 12
Stellung von PG1 im Studium Legende: TP: PG1-Prakt. bestanden (PG1): LN PG1 mind. 1 mal angetreten PG1: LN PG1 bestanden Modul Voraussetzung zur Belegung Prüfungsvorleistung Prüfungsform Programmieren 1 (PG 1) - TP P Programmieren 2 (PG 2) (PG 1) TP P Objektorientierte Analyse und Design (OOAD) (PG 1) TP K Mikroprozessorsysteme (MPS) (PG 1) TP K Entwicklung nutzerorientierter Anwendungen PG 1, (PG 2) TP K (ENA) Software Engineering (SE) PG 1, (PG2) TP M Datenbanken (DB) PG 1, (PG 2), TP K Betriebssysteme (BS) PG 1, (PG 2) TP K Graphische Datenverarbeitung (GDV) PG1, PG 2 TP K Entwicklung webbasierter Anwendungen (EWA) PG1, PG 2 TP K Verteilte Systeme (VS) PG1, PG 2 TP K Projektmanagement Projekt Systementwicklung (PSE) PG1, PG2 TP, Projektstudienarbeit 24.03.2013 Einführung 13 Prä