More than Just Lines on a Map: Best Practices for U.S Bike Routes
Wie fange ich programmieren an?
1. Wie fange ich mit dem Programmieren an?
Jugend hackt, 9.7.2015
Hubert Hesse (@hubx)
2. 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
3. ● 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
4. Variablen
>>> (1 + 4) * 2
10
>>> x = 1
>>> x
1
>>> x = x + 4
>>> x *= 2
>>> x
10
a = int(input(“Seitenlänge?”))
A = a * a
u = 4 * a
print (“Fläche:”, A)
print (“Umfang:”, u)
● Veränderbarer Platzhalter für Werte
● Adresse im Speicher
Typen (10 == “10”)?
5. 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
6. Funktionen II
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))
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
7. 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
8. Schleifen
Wiederholen von Anweisungen
namen = “Alex,Trevor,Alice”.split(“,”)
for name in namen:
print(“Willkommen “ + name)
total = 0
for i in 1, 1, 2, 3, 5, 7, 11, 13:
print(i)
total += i
print(total) #43
9. Verzweigungen if-Ausdrücke
def rechner(a, b, op):
if op == "+":
return a + b
elif op == "-":
return a - b
else:
return a
total = 0
while 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
10. Listen
def quadriere(liste):
b = []
for a in liste:
b.append(a*a)
return b
quadriere([1, 2, 3, 4, 5])
liste = [0,1,2,3,4,5]
b = [a*a for a in liste] # Kürzere Schreibweise: List comprehension
b[5] # Direkter Zugriff auf das 6. Element = 25
(Zwischen-)ergebnisse aufsammeln
18. Versionierung
● Das Backup der Programmierenden
● “Wie war nochmal der Stand den ich gestern
hatte?”
● Automatisches Zusammenführen von
Änderungen
Versionskontrolle mit Git
https://try.github.io/
19. 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 -> Wert
Gebe alle Fakultäten bis 1000 aus
Wikipedia [De]: Fakultät (Mathematik)
5! = 4! * 5
20. Algorithmen & Datenstrukturen
● Deutsche Sprache> 5 Mio
Wörter
● Immer die Wörterliste
durchlaufen zu dauert lange!…
vorsichtigem
vorsichtiger
vorsichtigere
vorsichtigerem
vorsichtigerer
vorsichtigeres
vorsichtiges
vorsichtigstem
vorsichtigsten
vorsichtigster
vorsichtshalber
vorsieht
vorsingen
...
23. 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)