Anfängerkurs in Python bei Coursera

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.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

BlackJack hat geschrieben:@meego: Mir ist kein Editor bekannt der solches Code-Folding beherrscht.


Sublime Text 2 kann das.
Und wenn man triviale Getter und Setter durch Code-Folding wieder ausblenden muss, warum muss man sie denn dann überhaupt *schreiben*. Du sagst doch durch den Boilerplate-Code wird es übersichtlicher. Wenn es übersichtlich wäre, müsste man es doch nicht ausblenden, denn es wäre ja übersichtlicher wenn es *da* ist.
Bis jetzt habe ich immer die ganze Klasse ausgefaltet und dann wieder zugefaltet. Das Prinzip fand ich aber auch bei kurzen Klassen einfacher. Aber wenn sich noch mehr Zeit sparen lässt, werde ich vielleicht noch bekehrt. :mrgreen:
BlackJack

@meego: Sublime Text kann das nicht. Also ausser man programmiert das selbst als Plugin. Nur noch mal zur Klarstellung: Es geht mir hier nicht um allgemeines Code-Folding was viele Editoren können, sondern um das gezielte Ausblenden von Getter-/Setter-Boilerplate. Den Rest der Klasse möchte ich ja sehen und nur das Ausblenden der Körper der Getter/Setter hilft nicht viel, denn bei trivialen Gettern/Settern ist das bloss eine Zeile; die unnötigen Signaturen bleiben alle sichtbar. Wenn ich die gefaltete Darstellung in Sublime Text vergleiche, dann sind das pro Attribut zwei Zeilen weniger und der Zugriff in `modify()` ist auch immer noch umständlich ausgedrückt:

Code: Alles auswählen

class A(object):
    def __init__(self):
        self._spam = 42
        self._parrot = 23

    def get_spam(self): …

    def set_spam(self, value): …

    def get_parrot(self): …

    def set_parrot(self, value): …

    def modify(self):
        self.set_parrot(self.get_parrot() * 2 + self.get_spam())
vs.

Code: Alles auswählen

class A(object):
    def __init__(self):
        self.spam = 42
        self.parrot = 23

    def modify(self):
        self.parrot = self.parrot * 2 + self.spam
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

meego hat geschrieben:
cofi hat geschrieben:Dazu braucht man keine Zugriffsrechte und schon gar keine Methoden, sondern allein Konventionen.
Solange sich jeder daran hält. :)
Und wer sich nicht daran hält, hat dann mit den Problemen zu kämpfen.
Java hat Properties, aber die bedeuten etwas anderes.
Was bedeuten sie anderes?[/quote]

Properties sind ein Dateiformat: https://en.wikipedia.org/wiki/.properties

In Java werden Attributszugriffe und Methodenaufrufe zu verschiedenen Bytecode-Instruktionen kompiliert und damit kann man das eine nicht transparent durch das andere ersetzen.

Wie schon so oft gesagt: Das ist der einzige Grund für Getter und Setter. Nicht Encapsulation oder Zugriffsbeschränkungen im Allgemeinen, bietet man Getter oder Setter an, bricht man ja selbst die Encapsulation oder bietet die Mittel dafuer.
meego hat geschrieben:
Letztendlich muss man auf den Boden zurückkommen und einsehen: Wir arbeiten mit Python und Python hat keine Zugriffsbeschränkungen für Attribute. Wenn man dennoch darauf beharrt, arbeitet man gegen die Sprache und gegen die Community, die auf Konvention setzt.
Also doch Zwang? Mal sehen, ob ich mich dem unterwerfen will. :wink:
Nein, "common sense". Dem sollte man durchaus folgen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

meego hat geschrieben:
cofi hat geschrieben:Dazu braucht man keine Zugriffsrechte und schon gar keine Methoden, sondern allein Konventionen.
Solange sich jeder daran hält. :)
Zugriffsrechte sind nicht dazu da irgendwas wirksam zu verhindern. Sie dienen allein zur Dokumentation um versehentliche Zugriffe zu vermeiden. Wenn man will kann man auch in Java/C++ auf private Methoden/Attribute zugreifen. Das ist sogar gar nicht schwer.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

BlackJack hat geschrieben:@meego: Sublime Text kann das nicht.
Edit -> Code Folding -> Fold

http://wesbos.com/sublime-text-code-folding/
Es geht mir hier nicht um allgemeines Code-Folding was viele Editoren können, sondern um das gezielte Ausblenden von Getter-/Setter-Boilerplate.
Naja, oben war von diesem Code Fodling die Rede.
BlackJack

@meego: Ich meinte schon beim ersten mal als ich schrieb das mir kein Editor bekannt ist, der solches Code-Folding beherrscht, natürlich nicht das allgemeine Code-Folding. Sonst hätte ich ja nicht „solches” geschrieben. Das allgemeine Folding kann ja eigentlich jeder Editor der zum Programmieren taugt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

meego hat geschrieben:
BlackJack hat geschrieben:@meego: Sublime Text kann das nicht.
Edit -> Code Folding -> Fold

http://wesbos.com/sublime-text-code-folding/
Es geht mir hier nicht um allgemeines Code-Folding was viele Editoren können, sondern um das gezielte Ausblenden von Getter-/Setter-Boilerplate.
Naja, oben war von diesem Code Fodling die Rede.
Es ging doch um das Ausblenden von trivialen und unnötigen Gettern/Settern. Es gibt keinen Editor der das kann. Das es Editoren gibt die irgendwelche Sachen folden können ist klar (auch wenn ich von dem Feature wenig begeistert bin, denn wenn man so viel Code hat dass man es wegfalten muss ist das nicht unbedingt ein Signal dass man guten Code hat, eher zu viel Code und zu wenig Organisation)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Leonidas hat geschrieben:Das es Editoren gibt die irgendwelche Sachen folden können ist klar (auch wenn ich von dem Feature wenig begeistert bin, denn wenn man so viel Code hat dass man es wegfalten muss ist das nicht unbedingt ein Signal dass man guten Code hat, eher zu viel Code und zu wenig Organisation)
Würde ich so pauschal nicht sagen. Manche Leute möchten vielleicht `import`-Zeilen oder Docstrings einklappen. Zuviel Code (im Sinne von: Zeilen) in einem Modul bzw einer Datei ist auch relativ zu sehen. Es gibt Projekte, da muss man für jede Kleinigkeit alle möglichen Dateien querlesen. Das ist auch nicht immer so toll. Ich finde solche Pauschalisierungen ähnlich prolematisch wie zu sagen, dass eine Methode (ohne Docstring) höchstens 10 Zeilen haben darf oder sowas. Das sind alles nette Werte zur Orientierung, aber eine situationsabhängige Abweichung davon ist IMHO nicht zwangsläufig ein Zeichen von schlechtem Code. Man kann auch alle Style-Regeln der Welt korrekt anwenden und trotzdem schlechten Code fabrizieren. ;)
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

BlackJack hat geschrieben:@meego: Ich meinte schon beim ersten mal als ich schrieb das mir kein Editor bekannt ist, der solches Code-Folding beherrscht, natürlich nicht das allgemeine Code-Folding. Sonst hätte ich ja nicht „solches” geschrieben. Das allgemeine Folding kann ja eigentlich jeder Editor der zum Programmieren taugt.
Ich habe nur von Codefolding gesprochen. Ich sähe die Logik dahinter auch nicht ganz: Wie kann denn ein Editor überhaupt wissen, was ein Setter oder Getter ist? Muss ja nicht unbedingt so benannt sein.

Allgemein sind wir ganz schön Off-Topic hier.

Den Coursera Kurs habe ich mittlerweile geschafft und kann ihn Anfängern (von dieser Encapsulation-Streitfrage abgesehen) sehr weiterempfehlen. :mrgreen:
Im Vergleich zu anderen Kursen, wo ich rein gezappt habe, sticht der Kurs sehr heraus.
Er findet im Oktober wieder statt.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@meego: der Punkt mit dem Folding ist glaube ich der, dass es keinen Editor gibt, der klüger ist als der dümmste Programmierer.
BlackJack

@meego: An den Namen sollte ein Editor das schon erkennen können. Wer seine trivialen Getter und Setter dann nicht mal konventionell benennt, der hat IMHO ein ernsthaftes Problem.

Code-Folding habe ich persönlich bei Programmquelltexten auch noch nichts abgewinnen können. Wenn ich im Quelltext scrolle, möchte ich den auch gerne Lesen. Zum Navigieren lasse ich mir statt etwas auszublenden lieber eine Übersicht der „Symbole” (Funktionen, Klassen, Methoden, …) in einem extra Fenster oder im Fall von Sublime Text zum Beispiel über Strg+R anzeigen.
mcdwerner
User
Beiträge: 113
Registriert: Donnerstag 7. Juli 2011, 14:27

... hab den Kurs mittlerweile auch abgeschlossen.
Ob er empfehlenswert ist oder nicht lass ich hier mal offen, darüber verschafft dieser Thread hier eine gute Übersicht.

Ich kann nur sagen dass er mir viel Spaß gemacht hat und ich einiges Neues über GUI-Programmierung gelernt habe, nachdem ich bis jetzt in Python nur Kommandozeilenprogramme programmiert habe.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

Hallo, ich grabe diesen Faden mal wieder aus. Ich lerne gerade Python mit einem anderen Kurs:
MITx 6.00.1x Introduction to Computer Science and Programming Using Python edX
https://www.edx.org/course/mitx/mitx-6- ... puter-1498

Der in diesem Faden behandelte Coursera-Kurs der Rice-Universityfindet aber grad auch wieder statt.

An Introduction to Interactive Programming in Python
https://www.coursera.org/course/interactivepython

Leider ist er schon so weit fortgeschritten, daß ein Einstieg wohl nur noch als reiner Selbstlerner ohne "Peer evaluation" und Einsenden der Aufgaben Sinn macht?
Der Kurs wird auch in unzähligen Reviews bestens beurteilt. Ich fand's fast schon verdächtig, daß es zu diesem Kurs auf div. Online-Learning-Bewertungsportalen wirklich hunderte positiver Reviews gibt, aber da das kursinterne Forum auch bestens besucht ist, scheint er wirklich stark frequentiert zu sein und es muß wohl was dran sein an den vielen positiven Reviews.

Daher meine Frage: "wie speziell" ist dieser Kurs auf Spiele-Programmierung zugeschnitten? Ich bin Programmieranfänger, interessiere mich aber nicht im geringsten Für Computerspiele. Mein Hauptinteresse ist maschinelles Lernen, neuronale Netze, Mustererkennung, etc... Also ein sehr mathematisches, algorithmenlastiges Gebiet.
Wäre der Kurs unter dieser Voraussetzung trotzdem noch eine dicke Empfehlung wert, oder bin ich mit einem der vielen allgemein gehalteneren Kurse besser bedient?

Falls ihr andere anfängerfreundliche (oder meinetwegen auch fortgeschrittenere) Python-Kurse kennt, die gut zu meinem genannten Interessengebiet passen bin ich auch für weitere Empfehlungen dankbar.
mcdwerner
User
Beiträge: 113
Registriert: Donnerstag 7. Juli 2011, 14:27

@Cobalt: diesen hier kann ich noch sehr empfehlen, da er imho noch mehr Grundlagen behandelt als der Kurs von "Rice" (hab beide beendet):
https://www.udacity.com/course/cs101

evtl könnte auch noch ein anderer udacity kurs in dein schema passen?
https://www.udacity.com/courses#!/All

ein Vorteil bei Udacity: Du hast Dein ganz eigenes Timing im Kurs, ich hab dort noch 2 Kurse offen aber im Moment kaum Zeit dafür => kein Problem ;-)

den MIT-Kurs kenn ich nur vom Reinschnuppern - hat mir nicht so gefallen..
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

mcdwerner hat geschrieben:@Cobalt: diesen hier kann ich noch sehr empfehlen, da er imho noch mehr Grundlagen behandelt als der Kurs von "Rice" (hab beide beendet):
https://www.udacity.com/course/cs101
Den habe ich auch grad belegt. Mir gefielen das Udacity-Konzept der Videos mit der Hand im ersten Moment nicht so, und da ich mehrere Kurse reingeschnuppert habe bin ich mehr zufällig beim MIT-Kurs hängengeblieben. Ich schaue mir den Udacity CS101 jetzt doch noch mal genauer an.
Beim MIT-Kurs habe ich mittlerweile den Eindruck, daß die Übungen teilweise etwas schwer zu bewältigen sind mit den Kenntnissen, die einem in den Videos vermittelt werden. Er hat auch den Ruf recht anspruchsvoll zu sein. Er scheint ja auch absolut identisch mit der tatsächlichen Lehrveranstaltung für die MIT-Studenten zu sein. Ich habe allerdings auch kaum mit dem Begleitbuch gearbeitet. Möglich, daß dies der Grund war. Aber ich bin auch erst in der zweiten Woche.


Einen interessanten Kurs für Leute mit Interesse an Mathematik/Physik habe ich noch gefunden. Es ist allerdings kein eigentlicher Programmierkurs und er setzt schon Python-Kenntnisse auf dem Niveau eines absolvierten Anfängerkurses voraus. Python wird darin wohl als eine Art Alternative zu Matlab benutzt. Es geht um die praktische Anwendung von Differentialgleichungen.
=> Differential Equations in Action von Jörn Loviscach.
Den werde ich wohl starten sobald ich mit einem der Python-Anfängerkurse durch bin.
Antworten