Wie fange ich programmieren an?

Post on 11-Aug-2015

35 views 1 download

Transcript of 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)