Download - Wie fange ich programmieren an?
Wie fange ich mit dem Programmieren an?
Jugend hackt, 9.7.2015
Hubert Hesse (@hubx)
Vom Problem zum Programm● Eingabe/Ausgabe (Spezifikation)● Vereinfachen
○ “Ich will ein Antivirus implementieren”■ Dateien erkennen die “AAAA” enthalten■ Was passiert wenn AAAA verschleiert ist
● Unterprobleme/”Teile-Und-Herrsche”○ Computer fernsteuern
■ Bildschirm aufnehmen, alle 5s, versenden■ Verbindung aufbauen■ Tastenanschläge weiterleiten
● Ziel: Quelltext schreiben und ausführen können● Editor: z.B: Sublime (http://www.sublimetext.com/)
● Compiler (Quelltext -> Ausführbaren Datei)
● Interpreter (Anweisungen beim Programmstart übersetzen)
● Wie kann ich das Programm starten?
Hello World Installiere Voraussetzungen<
>>> print("Hello world")Hello World!
public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World!"); }}
C++/Java: Keine gute EinstiegssprachePython
Variablen
>>> (1 + 4) * 210>>> x = 1>>> x1>>> x = x + 4>>> x *= 2>>> x10
a = int(input(“Seitenlänge?”))A = a * au = 4 * aprint (“Fläche:”, A)print (“Umfang:”, u)
● Veränderbarer Platzhalter für Werte● Adresse im Speicher
Typen (10 == “10”)?
Funktionen (parameter)
def bereche_flaeche(a) return a * a
def berechne_umfang(a) return 4 * a
a = int(input(“Seitenlänge?”))print (“Fläche:”, berechne_flaeche(a))print (“Umfang:”, bereche_umfang(a))
● In Teilprobleme zerlegen, auf eine Sache konzentrieren● Quelltextabschnitte benennen, wiederverwenden
int bereche_flaeche(int a) { return a*a}
C++/Java: Klammern statt Einrückung
Funktionen IIdef bereche_flaeche(a) return a * a
def berechne_umfang(a) return 4 * a
a = int(input(“Seitenlänge?”))print (“Fläche:”, berechne_flaeche(a))print (“Umfang:”, bereche_umfang(a))print (“Doppelte Seitenfläche => Fläche:”, berechne_flaeche(2 * a))print (“Doppelte Seitenfläche => Umfang:”, bereche_umfang(2 * a))
● Wiederverwendung von Code mit Funktionen möglich
Eingebaute Funktionen
mein_string = “ ICH bIn Groß ”print(mein_string.strip().lower()) # ”ich bin groß” <- Kommentar
● Vorher schauen ob Funktion schon mit der Standardbibliothek mitkommen
SchleifenWiederholen von Anweisungen
namen = “Alex,Trevor,Alice”.split(“,”)for name in namen: print(“Willkommen “ + name)
total = 0for i in 1, 1, 2, 3, 5, 7, 11, 13: print(i) total += i
print(total) #43
Verzweigungen if-Ausdrücke
def rechner(a, b, op): if op == "+": return a + b elif op == "-": return a - b else: return a
total = 0while True: op = input("+/-?") i = int(input("i?")) total = rechner(total, i, op) print (total)
● Testen von Variablen auf Inhalte ○ <,>, ==, (i % 2 == 0)○ str.endswith(),str.islower()
● Wahrheitswert (Boolean)○ True, False
Listen
def quadriere(liste): b = [] for a in liste: b.append(a*a) return bquadriere([1, 2, 3, 4, 5])
liste = [0,1,2,3,4,5]b = [a*a for a in liste] # Kürzere Schreibweise: List comprehensionb[5] # Direkter Zugriff auf das 6. Element = 25
(Zwischen-)ergebnisse aufsammeln
Lerntipps● Selber tippen trainiert Muskelgedächtnis● Mit Freunden programmieren● Hilfe suchen (online/offline)● Spaß
OpenTechSchool Konzepte ausführlicher https://opentechschool.github.io/python-beginners/de/index.html
CodeCombatMulltiplayer Programmierspiel (http://codecombat.com/)
“Die Programmierstunde”https://code.org/learnhttp://lightbot.com/
Let’s Code - ProgrammiervideosJava für Einsteiger - https://open.hpi.de/courses/javaeinstieg2015
Python - https://open.hpi.de/courses/pythonjunior2014
khanacademy.org: Zeichnen mit JavaScripthttps://de.khanacademy.org/video?lang=de&format=lite&v=h25CyONlPdM
Youtube: Android Apps programmieren (JaDaHB1)https://www.youtube.com/playlist?list=PL13I0cBsOJUc0OTlv09DG7_m2T0Si0Wbx
Projektideen● Text: Wörter zählen, Palindrom-Check, Cäsar-
Chiffre/Enigma● Datei/Netzwerk: Verzeichnis auflisten, Datei
erkennen/ablehnen, Passwort-Check, Webserver der immer die gleiche Webseite ausliefert
● Spiele: Hangman, Pong
Programmieren lernen - CommunitiesOpenTechSchool: http://learn.opentechschool.org/ (D/Eng...)
Coder Dojos:https://zen.coderdojo.com/
Internet: https://www.reddit.com/r/learnprogramming/wiki/faq (Eng)
PauseZwischenfragen?
Versionierung● Das Backup der Programmierenden● “Wie war nochmal der Stand den ich gestern
hatte?”● Automatisches Zusammenführen von
Änderungen
Versionskontrolle mit Githttps://try.github.io/
Dictionaries Zuordnung speichern
fak = {0:1, 1:1, 2:2, 3:6, 4:24, 5:120}def fakultaet(n): if n == 0: return 1 if n in fak: return fak[n] fak[n] = fakultaet(n-1) * n return fak[n]
Zuordnung Index -> WertGebe alle Fakultäten bis 1000 aus
Wikipedia [De]: Fakultät (Mathematik)
5! = 4! * 5
Algorithmen & Datenstrukturen● Deutsche Sprache> 5 Mio
Wörter● Immer die Wörterliste
durchlaufen zu dauert lange! …vorsichtigemvorsichtigervorsichtigerevorsichtigeremvorsichtigerervorsichtigeresvorsichtigesvorsichtigstemvorsichtigstenvorsichtigstervorsichtshalbervorsiehtvorsingen...
Algorithmen & Datenstrukturen● Trie (Prefixbaum) speichern
Wörterbücher effizienter● Schneller durchsuchbar● Braucht weniger Speicher
https://de.wikipedia.org/wiki/Trie#/media/File:Trie.svg
Algorithmen & DatenstrukturenÜbungen:Bundeswettbewerb Informatik (alte Aufgaben) https://www.bwinf.de/
USA Computing Olympiad (Automatisierte Bewertung)
http://usaco.org/
Frameworks● Rails maßgeschneidert für den Anwendungsfall
dynamischer Webseitenbau
● Code in vorgefertigtes Schema (Modell, View, Controller)● “Wissen wo was hinkommt”
● Rails for Zombies (http://railsforzombies.org)