Welches Buch?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CeeNeo
User
Beiträge: 17
Registriert: Donnerstag 29. August 2013, 03:48

Hey,

ich habe noch nie programmiert/gescripted.

ich möchte Python lernen :twisted:

Jetz brauche ich ein DEUTSCHES Buch. :D

Habe dieses Buch gesehen und finde das Prinzip cool, es anhand eines Games zu lernen. Aber hab schon oft gelesen, dass dieses Buch Python nicht so gut7richtig übermittelt.
http://www.amazon.de/Einstieg-Python-Pr ... 3836217384

Wenns Rolle spielt:
Ich habe Linux (ManjaroLinux (basiert auf ArchLinux)).

Welches Buch könnt ihr mir empfehlen?

Thx+MfG CeeNeo :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

CeeNeo hat geschrieben: ich möchte Python lernen :twisted:

Jetz brauche ich ein DEUTSCHES Buch. :D
Hui... das widerspricht sich! :twisted:

Richtig hieße es: Wenn man Python lernen will, braucht man Englischkenntnisse! (Zumindest darf man keine Angst haben, sich diese zu erwerben...)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
CeeNeo
User
Beiträge: 17
Registriert: Donnerstag 29. August 2013, 03:48

Ich behersche englisch nicht so gut und etwas lernen was einem völlig fremd ist in einer Sprache dem einen nicht gut liegt :roll:
BlackJack

@CeeNeo: Zum Lernen der Grundlagen des Programmierens, also was Datentypen sind, Funktionen, Ausnahmen, Klassen, und so weiter, kannst Du deutschsprachige Quellen verwenden, aber wenn Du tatsächlich Programmieren willst, kommst Du um englisch nicht herum. Denn um sinnvolle Programme zu schreiben braucht man Bibliotheken die jeweils Teilaufgaben lösen und deren Dokumentation ist in aller Regel in Englisch geschrieben. Selbst wenn man keine Bibliotheken von Drittanbietern verwenden will und sich auf die Standardbibliothek beschränkt — die ist auch in Englisch dokumentiert. Und an einigen Stellen beschreibt sie nicht nur die Module selber sondern verweist auf andere Dokumentation für die Konzepte oder Spezifikationen die von den Modulen umgesetzt werden, ebenfalls in englisch. Du solltest also mindestens parallel zum lernen der Programmiergrundlagen Dich auch an englischsprachige Dokumentation heran wagen.
CeeNeo
User
Beiträge: 17
Registriert: Donnerstag 29. August 2013, 03:48

mhm kann man die Grundlagen nicht mit einem deustchem Buch lernen?
BlackJack

@CeeNeo: Die Grundlagen ja, das habe ich doch gerade gesagt, aber eher früher als später wird man sich mit englischer Dokumentation und englischen Artikeln auseinander setzen müssen wenn man irgend etwas nicht-triviales mit den Grundlagen anfangen möchte.
CeeNeo
User
Beiträge: 17
Registriert: Donnerstag 29. August 2013, 03:48

Kann mir da dann jemand eins empfehlen? :D

Später wenn ich es verstanden habe auf englisch ab und zu zu schwitchen ist ja ok. :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Nutze mal die Suchfunktion - zu diesem Thema gibt es massig Threads :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

CeeNeo hat geschrieben:Kann mir da dann jemand eins empfehlen?
Wie wär's damit... :mrgreen:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

CeeNeo hat geschrieben:Ich behersche englisch nicht so gut und etwas lernen was einem völlig fremd ist in einer Sprache dem einen nicht gut liegt :roll:
Man kann gar nicht so schlecht Englisch können als dass es für so etwas nicht reichen würde. Selbst mit schlechten Englischkenntnissen kann man normalerweise noch recht viel verstehen.

Das Problem beim Programmieren ist normalerweise nicht die Dokumentation, sondern das Programmieren selber. Außerdem sind Programmierdokumentationen normalerweise sehr simpel geschrieben, das ist kein Problem.

Nebenbei bemerkt: Englischkenntnisse sind auch abseits der Programmierwelt unglaublich nützlich und erschließen einem vielle weitere Möglichkeiten, sei es Literatur, Filme oder Kommunikation im Ausland :) Von daher: keine Angst vor Englisch, für einen Deutschen ist das wirklich kinderleicht.

Das heißt jetzt nicht, dass ein Einsteigerbuch auf Deutsch schlecht ist (sowas lese ich normalerweise auch erst einmal auf Deutsch), aber es schadet nicht, parallel auch schon mal ein wenig ins Englische hineinzuschnuppern.
zikzak
User
Beiträge: 21
Registriert: Sonntag 22. September 2013, 07:28
Wohnort: Sipbachzell, Österreich

Ich habe mir Python gepackt von Michael Weigend digital gekauft, um schnell mal nachschlagen zu können, für mehr ist es nicht zu brauchen.

Das Englische Buch "Python in Practice" von Mark Summerfield gefällt mir außerordentlich gut.
Für "Anfänger" wie ich auch einer bin, ist es aber etwas heavy .
Er erklärt schrittweise alle Pattern greift wirklich auf alles zurück, was die Sprache hergibt !
Man braucht dann halt entsprechend lange, um da mal durchzusteigen, was er jetzt wieder getan hat.
Dafür lernt man es gleich richtig, und nicht nur so in etwa.

Beispiel:
Für ein Schachspiel leitet er zunächst für jeden Figurentyp und Farbe eine Klasse ab und zeigt
er, wie man die 14 Klassen auf 1. Klasse reduzieren kann.
"Factoy-Method Pattern" , wobei er die "Funktion" dann auch noch schrittweise verbessert.
Zuerst mit "eval" und "exec" und dann zeigt er wie man es richtig mit "type" macht.
Dazu findet man in den deutschen Tutorials auch nicht mal ansatzweise etwas !

Wie bereits gesagt, ich muss alles 5-mal lesen und immer wieder nachschlagen und sitzen tut es noch lange nicht,
aber man lernt was !
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Klingt für mich nach jemanden der Java in Python nachbaut, so wie unser Galileo-Team auch. Gruselig. Wenn man eine Programmiersprache verwendet um neuen Code zu schreiben (Pflege von Legacy-Code wäre also eine Ausnahme, da würde es stören wenn der Zustand inkonsistent ist) hat man auch die Idiome zu nutzen. Meist braucht man nicht einmal Klassen, da Probleme wie z.B. die Modellierung eines Schachbretts viel einfacher in Python gelöst werden kann (und Einfachheit eines der Python-Prinzipien ist). Und type zu verwenden klingt als hätte der Autor nicht verstanden, dass Python auf Duck Typing setzt. Patterns sind ebenfalls eine Aushilfe falls die verwendete Programmiersprache nicht genug abstrahiert. Tut Python aber.

Von daher würde ich dir dazu raten mal andere Bücher und Tutorials anzusehen. Vielleicht lernst du so dann schneller.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

webspider hat geschrieben:Patterns sind ebenfalls eine Aushilfe falls die verwendete Programmiersprache nicht genug abstrahiert. Tut Python aber.
Kommt drauf an - klar, den Visitor-Pattern brauchst Du in Sprachen mit Double Dispatch nicht, aber den Strategy-Pattern kannst Du allgemein gut anwenden; man braucht in Python halt keine Ableitung eines Interfaces oder eine abstrakten Basisklasse, weil ich jedes beliebige Callable nutzen kann, dennoch ist der Pattern an sich hilfreich. C# bietet mit seinen Events in der Sprache direkt den Observer-Pattern an, da muss ich also kein ``IObservable`` implementieren o.ä., was das ganze weniger sperrig und kompakter macht, dennoch wendet man damit den Observer-Pattern an. Sicherlich braucht man weniger Verrenkungen in höher abstrahierenden Sprachen, aber Prinzipien verschwinden dennoch nicht beliebig ;-)

Aber in einem hast Du recht: Wenn in einem Buch mit ``type`` gearbeitet wird, stimmt einen das zu recht misstrauisch! :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@zikzak: Man kann sich ja den Quelltext zum Buch herunterladen. Und er hat in der finalen Schachversion mitnichten alles durch eine Klasse ersetzt, sondern erzeugt für *jede* Spielfigur, also Art und Farbe, dynamisch eine Klasse:

Code: Alles auswählen

def create_piece(kind, color):
    color = "White" if color == WHITE else "Black"
    name = {DRAUGHT: "Draught", PAWN: "ChessPawn", ROOK: "ChessRook",
            KNIGHT: "ChessKnight", BISHOP: "ChessBishop",
            KING: "ChessKing", QUEEN: "ChessQueen"}[kind]
    return globals()[color + name]()


class Piece(str):

    __slots__ = ()


for code in itertools.chain((0x26C0, 0x26C2), range(0x2654, 0x2660)):
    char = chr(code)
    name = unicodedata.name(char).title().replace(" ", "")
    if name.endswith("sMan"):
        name = name[:-4]
    new = (lambda char: lambda Class: Piece.__new__(Class, char))(char)
    new.__name__ = "__new__"
    Class = type(name, (Piece,), dict(__slots__=(), __new__=new))
    globals()[name] = Class
Ja, da muss man dann in der Tat sehr genau hinschauen was passiert. Aber nur weil das so verflucht überkompliziert und undurchsichtig gelöst ist. Diese Marotte überall ``__slots__ = ()`` zu verwenden verstehe ich auch nicht. Also mir ist schon klar was das bewirkt, aber nicht warum man das hier haben möchte‽ Das ist IMHO ein Paradebeispiel von „premature optimization”.

Warum `Piece`? Aber von so etwas scheint er auch Fan zu sein. Das Wortzählbeispiel enthält eine abstrakte Klasse die nur zwei *statische* Methoden enthält die jeweils `NotImplemented` auslösen. *Warum* nur?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Oh, so viel Magie auf einem Haufen. Da muß man ja als Uneingeweihter ehrfürchtig niederknien. Ich habe mich die ganze Zeit gefragt, warum Piece von str erben muß. Bis ich gemerkt habe, daß die einzige Aufgabe der tollen Klassen ist, ein Zeichen zu repräsentieren. Ein Dictionary (color, kind)->char ginge wohl am Sinn des Kapitels vorbei. Wenn ich mir die anderen Versionen von gameboard so anschaue, scheint es darum zu gehen, wie man dynamisch Klassen erzeugt. Aber wann ist das jemals sinnvoll?

In tabulator geht die Entwicklung von Klassen mit einer Methode, über Klassen mit einer statischen Methode zu simplen Funktionen. Wobei nur jemand der unbedingt Java mit Python programmieren will, überhaupt erst Klassen einführt. Dass die Klasse »Layout« von Anfang an überflüssig ist, soweit geht die Pythonisierung des Codes dagegen nicht.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Den Code muss man positiv sehen. Nach der Zeile

Code: Alles auswählen

return globals()[color + name]()
habe ich mir gedacht: ach, jetzt kann es eigentlich nicht mehr viel schlimmer werden.
Das Leben ist wie ein Tennisball.
BlackJack

@Sirius3: Dynamisch Klassen/Typen erzeugen in der Standardbibliothek: `collections.namedtuple()`. Oder bei `ctypes`:

Code: Alles auswählen

In [12]: ct.c_int * 10
Out[12]: __main__.c_long_Array_10
Also das *kann* schon sinnvoll sein. Nur dass `namedtuple()` und `ctypes` sehr allgemeine Beispiele sind wo der Benutzer von dieser Funktionalität letztendlich vom Bibliotheksautor nicht vorhersehbare Typen erstellt. Während die Schachfiguren in dem Modul selber schon feststehen, und damit die Flexibilität durch die Magie überhaupt nicht benötigt oder genutzt wird. Da ist das einfach nur unnötig magisch und komplex.
Antworten