Krautkanal.com

Veröffentlicht am 2016-06-30 12:31:57 in /prog/

/prog/ 9011: Hauslehrer

1markiz Avatar
1markiz:#9011

Sehr geehrter Bernd,

es ist an der Zeit, den Sohn (Alter bildrelatiert) das Programmieren zu lehren. Nur die Anfangsgründe - mehr steht mir als Maschinenbauer nicht zu. Dabei sollte ein Sog entstehen, welcher ohne mein Zutun anhält. Wie muß ich vorgehen?


Zu mir: Mitte der 80er begann ich mit Fortran. Es folgten Basic und das schöne Pascal. Heute fummle ich gelegentlich mit dem unschönen C herum und seinem häßlichen Kinde, welches regelgemäß hier nicht genannt werden darf.

keyuri85 Avatar
keyuri85:#9012

>Fortran, Basic, Pascal
Bester Weg um deinem Spross für immer das Programmieren zu vergraulen :3

Antwort ist Python, am besten in Verbindung mit einem praktischen Projekt (Spiel, Roboter, Mikrocontroller)

RussellBishop Avatar
RussellBishop:#9014

Sekundiere Python. Mit pygame hat man auch eine Bücherei, mit der man eigentlich in kürzester Zeit ein gammeliges 2D-Spiel hinkriegt.

syntetyc Avatar
syntetyc:#9015

Danke für Eure Empfehlung. Man hört tatsächlich nur gutes über Python. Vermutlich läuft es darauf hinaus und hoffentlich ist es mindestens so schön und rein wie Pascal.

Was spricht gegen Android-Apps, z. B. mittels "App Inventor"? Ein sichtbarer, vorzeigbarer Erfolg dürfte sich damit schneller einstellen.

shadowfreakapps Avatar
shadowfreakapps:#9016

Das einzige, was ich bei Python immer kritisiere, ist die dynamische Typisierung. Das ist meiner Meinung nach einfach Krebs und wenn man dann auch noch mit Python anfängt, wird einfach ein wichtiges Konzept beim Programmieren nicht vermittelt. Müsstest du dann mal sehen.

Mit Schlaufon-Entwicklung kenne ich mich nicht aus, aber das Prinzip ist wohl, dass man sich GUI-Elemente per Drag&Drop zusammenDAUiert und dann Programmstrukturen daran bindet. Das finden manche gut als Einstieg, weil bunt, andere würden sagen, dass es das eigentliche "Programmiererdenken" nicht repräsentiert. In anderen Fällen fängt man nunmal, Text und Zahlen über das schwarze Terminalfenster auszugeben.

Ich denke, das größte Problem ist, einer jungen Person die nötige Motivation zu geben, damit das auch Spaß macht. Und dafür muss es auch cool sein. Bernd hier ist Tutor für Zweitsemester und vermittelt Assembler und C. Es ist ein einziger Kampf, sich jeden Tag anzuhören, dass das nutzloser Scheiß ist.

chatyrko Avatar
chatyrko:#9018

>>9016
> Müsstest du dann mal sehen.
Läßt sich die statische Typisierung in Python erzwingen? Per Compiler-Anweisung o.s.ä.?

> einer jungen Person die nötige Motivation zu geben
ist heute viel schwieriger als früher.

Den ersten Rechner sah ich mit 17 während eines Badeurlaubs am Schwarzen Meer, einen Apple II mit Basic-Interpreter. Daß die Wundermaschine Dinge tat, welche ich ihr befohlen hatte, haute mich um. Es war so neu und unfaßbar, niemand mußte motivieren. Zwei Apple-Kisten in einem ungemütlichen Klubraum genügten.

artcalvin Avatar
artcalvin:#9019

>>9018
>Läßt sich die statische Typisierung in Python erzwingen? Per Compiler-Anweisung o.s.ä.?

Es gibt wohl eine zusätzliche Lib, die da was implementiert, habe ich aber nie ausprobiert. Gurgel sagt die heißt "mypy", aber das liest sich auch nicht wie "erzwingen", sondern irgendwas mit optional.

Ansonsten weiß ich, dass Python "Type-Hinting" hat, d.h. du kannst die Types schon angeben, musst aber nicht. Finde ich jetzt auch nicht so schön, aber macht es etwas benutzbarer, wenn man weiß, wann die Anwendung sinnvoll ist.

yassiryahya Avatar
yassiryahya:#9020

>>9011
>Wie muß ich vorgehen?

...setz dich mit ihm zusammen hin und arbeite über eine langen Zeitraum an einem umfangreichen und interessanten Projekt wo er Stück für Stück, je nach Powerlevel kompliziertere Teile beiträgt - das, mit dir zusammen etwas gemacht haben und es erfolgreich abgeschlossen zu haben ist das Ausschlaggebende, also nicht mitten drin abbrechen weil du keinen Bock mehr hast!!!

Wichtig ist das du geduldig bist wenn es anfangs nicht auf Anhieb funktioniert und zuerst dich selbst hinterfragst ob du ihm den Sachverhalt richtig erklärt hast - Sachverhalte selbst verstanden zu haben heißt nicht sie anderen auch erfolgreich erklären zu können, ganz besonders Kindern.

Da du Maschinenbauer bist würde ich dir raten einen Robotor mit ihm zu bauen der von euch später auch programmiert wird -> den Stolz den er verspüren wird und der positive Zuspruch wenn er ihn seinen Freunden zeigt wird die von dir gewünschte Dynamik in Gang setzen ... wichtig ist das du diesen Impuls immer wieder neuen Schwung mit neuen Projekten verleihst bis er sich selbst eigene Projekte sucht um dir zu imponieren.

>Antwort ist Python

...die Sprache ist egal, da eine Sprache(Deutsch/Englisch) allein dich auch nicht zu einem Schriftsteller macht. Wichtig ist das der Junge lernt wie ein Programmierer zu denken, kann er das, ist die Sprache nur noch Formsache, kann er das nicht, ist selbst die einfachste Sprache nicht in der Lage ihn dazu zu befähigen ein lauffähiges und nützliches Programm zu schreiben!

polarity Avatar
polarity:#9021

>>9020
> nicht mitten drin abbrechen weil du keinen Bock mehr hast!!!
Wahre Worte.

Roboter wirken. Bei der letzten "Langen Nacht der Wissenschaften" durften Lego-Roboter programmiert werden, graphisch mit Funktionsblöcken. Am liebsten wäre er die ganze Nacht nur dort geblieben.

Wirken frei programmierbare Roboter am Anfang nicht riesengroß und unübersichtlich? Da kommt einiges an Quelltext zusammen, bevor er den ersten Piep sagt.

http://www.retas.de/thomas/raspberrypi/pibot-b/
https://www.piborg.org/diddyborg
https://developer-blog.net/raspberry-pi-roboter/
oder
http://www.finchrobot.com/

syswarren Avatar
syswarren:#9023

Stimme >>9020 zu.
Ist natürlich ein bisschen teuer, aber ich finde auch mindstorms sind ein guter Einstieg.
Ich mag eigentlich auch http://scratched.gse.harvard.edu/. Kontrollstrukturen werden sehr schnell klar und man kann innerhalb einer Stunde ein nettes Spiel basteln.
Python mit Arduino oder Raspberry Pi ist auch super. Man muss halt die richtigen Bausteine für das gewünschte Projekt finden. Auf jeden Fall ist es gut wenn die Hardware auch ein Thema ist. Das macht es viel einfacher später einen Zugang zum lowlevel Kram zu haben. Und das ist gut, egal was man gerne damit machen will.
Ich finde man kann Kindern auch gut frühzeitig schon Alternativen aufzeigen und die Wahl lassen. Wer weiß welche Sprache oder Rahmenwerk genau das hat, was dieses Kind an den Haken bekommt.
Wenn das Interesse für Computerspiele schon da ist, ist es natürlich auch ein guter Ansatzpunkt, aber Spiele haben eine zusätzliche Abstraktionsebene, die "physisches" zu programmieren nicht hat.
Bin bei meinen Nichten auch immer am überlegen wie man am Besten Interesse weckt.
Viel Erfolg jedenfalls.

andrewgurylev Avatar
andrewgurylev:#9025

Vorweg: Tu das nicht, du wirst ihn verbernden!

Bernd fing in dem Alter mit Delphi also Pascal an. Das ist auch noch nicht soooo lange her. Bernd findet das als Lehrsprache eigentlich immer noch ziemlich gut und benutzt es in Form von FreiPascal sogar heute noch für manche Projekte.

Bernd würde es aber heute zugegebenermaßen wahrscheinlich auch niemandem mehr neu beibringen, weil leider doch eine ziemliche Nische.

Eine dynamisch typisierte Skriptsprache wie Python findet Bernd aber auch nicht gut für den Einstieg.

C auch nicht, zu viele Fußangeln für Anfänger und außerdem gibt es schon zu viele Leute, die zu sehr in C denken und nicht offen für anderes sind.

Java und PHP auf keinen Fall, weil einfach nur ekelhaft.

Keine Ahnung, was da noch bleibt. Vielleicht Go oder Rust? Bernd hat sich mit diesen Sprachen selber noch nicht so genau befasst, deshalb keine Ahnung ob das für Einsteiger besser geeignet ist.

C# findet Bernd als Sprache auch noch ganz gut. Die Implementierung eher nicht so.

joshuapekera Avatar
joshuapekera:#9026

Mach doch das Hauptprogramm des Roboters in C (C kann man wirklich immer gebrauchen) und später dann eine hübsches GUI zur Fernsteuerung des Roboters in einer anderen Sprache, z.B. Java.

raquelwilson Avatar
raquelwilson:#9027

>>9025
>Vorweg: Tu das nicht, du wirst ihn verbernden!

/Faden

ryhanhassan Avatar
ryhanhassan:#9032

Das Problem mit Python meiner Meinung nach ist, dass es sehr stark einen bestimmten Weg der Problemlösung erzwingt ("there should be only one way to do something"). Ist ja schön wenn man es einfach benutzen will, aber wenn man Programmieren und verschiedene Paradigmen erlernen will, ist es halt beengend, da Features fehlen. Um einen Eindruck vom Programmieren zu kriegen ist Python aber sicher in Ordnung.

Optimal wär aber, abgesehen von aller Memetik, Scheme. Es ist konzeptuell simpel implementiert, die Syntax und spezielle Formen passen auf eine Briefkarte. Scheiße, die Spezifikation hat ~80 Seiten. Durch die Simplizität kann man dann erlernte Konzepte sehr einfach auf andere Sprachen anwenden. Würde Racket nehmen, das ist zwar nicht 100% spec-konform, hat aber großartige Dokumentation und umfangreiche Standardbibliothek. Oder so. Fühl mich wie ein Straßenprediger, hört mir ja doch niemand zu.

yehudab Avatar
yehudab:#9035

Haskell. Er ist noch nicht vorbelastet durch andere imperative Sprachen, sodass es ihm leichter fallen wird, die wunderschönste aller Programmiersprachen zu erlernen.

joe_black Avatar
joe_black:#9036

Kann nur aus meinen Erfahrungen berichte. Aber der Anfang meines Weges zum leidenschaftlichen Programmierer, begann auch mit Zielen, die nicht das reinen Erlernen des Proggens waren. Anfangs, als Zockier, wollte ich Mod's für Spiele bauen. Dann kam der Wunsch, ein eigenständiges Spiel auf die Beine zu bringen. Dann kam die 1337Hacksierer-Zeit und ich habe mich an Trojanern und co. versucht, war aber eher ein Skript Kindie. Trotzdem habe ich über solche Umwege immer mehr Einblicke in die Welt der Progger erhalten und mit dem Spaß am reinen Proggen, begann mein Weg erst richtig.

ntfblog Avatar
ntfblog:#9037

>>9035
> nicht vorbelastet
Korrekt. Ein absolut weißes Blatt Papier.

> Haskell
https://de.wikipedia.org/wiki/Haskell_%28Programmiersprache%29
WzF, funktionale Programmiersprachen?

Ist man danach für normale Sprachen nicht endgültig verloren?

ripplemdk Avatar
ripplemdk:#9038

>>9037
Naja, Haskell ist schon eine beschissene Wahl, ganz egal ob funktional oder nicht. Es ist viel zu kompliziert um einfach einzusteigen und Programmieren zu lernen, stattdessen würden die meisten Anfänger wohl schon beim Haskell-Lernen aufgeben. Darüber hinaus ist es halt doch eher eine experimentelle Sprache mit ungewöhnlichem Zeug wie async I/O, und scheißt einen gern mit abstrakten pseudomathematischen Konzepten zu. Kann man ja halten von was man will, aber das ist ungefähr so wie mit C++ anzufangen, viel zu viel Komplexität und neue Konzepte, als dass man einfach Programmieren an sich erlernen kann. Haskell als erste Programmiersprache zu empfehlen ist absurd.

thomasgeisen Avatar
thomasgeisen:#9039

>>9038
> beschissen
Hmm. Warst Du nicht der mit Scheme und Racket, welche in meinen alterstrüben Augen dasselbe sind.

https://www.youtube.com/watch?v=RqvCNb7fKsg
Eine spielerische Erforschung der Sprache scheint möglich.

Daneben fand ich einen langatmigen Berliner Lehrer- und Schülerbericht, in welchem drei Schüler äußerten, daß Haskell sich sehr schnell erlernen ließ.

davidsasda Avatar
davidsasda:#9040

>>9039
Ja das war ich. Racket ist nicht Scheme, weil es in einigen Punkten von der Spezifikation abweicht. Es ist aber sehr ähnlich!

>Eine spielerische Erforschung der Sprache scheint möglich.
Ich kann dein Video nicht anschauen, da meine Verbindung zu schlecht ist. Aber wenn es um die REPL geht, dann stimme ich dir zu. Das ist aber bei Common Lisp/Scheme mindestens genauso gut.

>Daneben fand ich einen langatmigen Berliner Lehrer- und Schülerbericht, in welchem drei Schüler äußerten, daß Haskell sich sehr schnell erlernen ließ.
Das kann ich nur dadurch nachvollziehen, dass ihnen der Vergleich mit Alternativen fehlte. Haskell hat eine Unmenge syntaktischer Konstrukte, und experimentelle Features; Lazy evaluation, async I/O, do-Notation, etc.
Da kann man ja durchaus etwas von gewinnen, wenn man das als zweite oder dritte Sprache lernt. Aber ich bin der Meinung eine erste Sprache sollte so simpel und non-restriktiv wie möglich sein, so dass man nicht mit kämpfen muss, sondern schnell anfangen kann in der Sprache zu denken, Konzepte zu lernen und zu implementieren. Dafür eignet sich Scheme halt wirklich gut, da es verdammt simpel ist Dinge wie ein Objektsystem, monadische Interfaces oder lazy Evaluation selbst zu implementieren -- so lernt man auch gut was denn nun wirklich dahinter steckt.
MIT nutzte früher auch Scheme zur Einführung in CS, das ist also auch erprüft.

turkutuuli Avatar
turkutuuli:#9041

Compare these two little snippets:

(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))

fact n = if n == 0
then 1
else n * fact(n-1)

Which is easier to read? And the Haskell can get even easier to read and write using
pattern matching:

fact 0 = 1
fact n = n * fact (n-1)


http://scienceblogs.com/goodmath/2006/10/24/haskell-and-scheme-which-one-a/

ademilter Avatar
ademilter:#9043

>>9041

(define/match (fact n)
  [0 1]
  [_ (* n (fact (- n 1))])

Finde das nun nicht unbedingt viel schlechter lesbar. Das mit den Klammern ist Gewöhnungs-Sache, hat man nach 1-2 Stunden programmieren keine Probleme mehr mit. Dafür ist es syntaktisch eben wesentlich simpler als Haskell, wo es von Syntax nur so wimmelt. Dadurch hat man halt Code der simpler aussieht, aber komplexer zu verstehen ist, wenn man nicht jede Form auswendig gelernt hat.

Zu der Diskussion will ich mal einbringen was Abelson und Sussman sagen (https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-7.html#):
>In teaching our material we use a dialect of the programming language Lisp. We never formally teach the language, because we don't have to. We just use it, and students pick it up in a few days. This is one great advantage of Lisp-like languages: They have very few ways of forming compound expressions, and almost no syntactic structure. All of the formal properties can be covered in an hour, like the rules of chess. After a short time we forget about syntactic details of the language (because there are none) and get on with the real issues -- figuring out what we want to compute, how we will decompose problems into manageable parts, and how we will work on the parts.

wahidanggara Avatar
wahidanggara:#9044

>>9043
>Dafür ist es syntaktisch eben wesentlich simpler als Haskell, wo es von Syntax nur so wimmelt.

Alsob. Ja, Haskell hat wahrscheinlich mehr syntaktische Konstrukte als Lisp, aber das ganze hält sich dennoch stark in Grenzen. Daneben sind die meisten Sachen auch einfach nur syntaktischer Zucker, sodass Haskells Kern wahrscheinlich ähnlich schlank ist wie es eben Lisp ist.

nateschulte Avatar
nateschulte:#9045

>>9044
Du hast Recht, insofern als dass Haskells Kern konzeptuell sehr simpel ist:
>https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/CoreSynType
Das hilft aber niemandem der das lernen muß, denn um idiomatischen Haskell-Code lesen und schreiben zu können, muß man den syntaktischen Zucker ja kennen.

coreyhaggard Avatar
coreyhaggard:#9079

>>9040
> MIT nutzte früher auch Scheme zur Einführung in CS
Weißt Du oder jemand anderes ob sie Scheme immer noch nutzen?

Bernd Avatar
Bernd:#9081

>>9079
Tun sie nicht mehr, haben sie durch Python ersetzt.