Warum Python?

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 30. April 2009, 08:46

ichbinsisyphos hat geschrieben:Bei C weiß ich, dass eine short integer 16 bit Länge hat, wenn ich ein array von 20 solcher Zahlen erstelle, wird ein Speicherplatz von 16*20 bit reserviert.

Ich sehe, du hast meinen Tipp von wegen schlampig sein in C zu Herzen genommen.

http://en.wikipedia.org/wiki/Short_integer hat geschrieben:It is required to be at least 16 bits, and is often smaller than a standard integer, but this is not required. It is often a 16-bit integer, but can be larger. A conforming program can assume that it can safely store values between −215 and 215-1, but it may not assume that the range isn't larger.

Es gibt einen Grund warum es sizeof gibt. Und es gibt auch einen Grund warum die GLib Datentypen mit einer festen Länge definiert.

ichbinsisyphos hat geschrieben:Bei Python kümmer ich mich erst gar nicht selbst um den Datentyp, Python wählt einen passenden für mich. Was eine Liste in Python auf der Datenebene ist, ist für mich überhaupt nicht einzuschätzen.

Wo führt dieses Unwissen also zu Schlampigkeit? Dass du keine Out-of-Bounds Fehler machen kannst?

ichbinsisyphos hat geschrieben:Bei C musst du dich erzwungenermassen schon zu Beginn mit den Grundlagen beschäftigen, zum Beispiel mit Datentypen und deren binären Repräsentationen.

Wenn du nicht gerade mit Bitmasken arbeitest, kann dir die binäre Repräsentation doch völlig egal sein. Wieviele Programmierer kennen die binäre Repräsentation eines floats?

ichbinsisyphos hat geschrieben:Da das aber mühsam und nicht unbedingt nötig ist, ist man bei Python versucht, sich das zu Beginn zu sparen, man kann die Grundlagen überspringen.

Könntest du dir vorstellen, dass das einen Unterschied macht?

Klar, aber wo macht einen das Überspringen von Datentyprepräsentationen zu einem schlechten oder schlampigen Programmierer?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Donnerstag 30. April 2009, 08:54

@ichbinsisyphos: `short integer` ist in C nicht 16 Bit lang. Das mag auf vielen Plattformen so sein und ist im neuesten Standard wohl auch die Mindestlänge (?), aber keine generelle Aussage die man so über C treffen kann.

Natürlich kümmerst Du Dich in Python auch um Datentypen. Du wählst ja bewusst den Typ "ganze Zahl" und Du versuchst doch auch nicht über Fliesskommazahlen zu iterieren, weil Du weisst, dass der Typ das nicht unterstützt. Python befreit einen nicht davon sich über Typen Gedanken zu machen, man muss sie nur nicht alle naselang deklarieren.

Man muss auch nicht die genaue interne Datenstruktur auf Maschinenebene kennen, um gute Programme zu schreiben, es reicht die O()-Notation für den Speicherverbrauch von Typen und das Laufzeitverhalten von Operationen zu kennen.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Donnerstag 30. April 2009, 10:23

audax hat geschrieben:Bei Haskell seh ich das aber nicht als Zwangsjacke, sondern eher als Stützstrumpf. In der Sprache hilft dir der Typchecker, einfachen und korrekten Code zu schreiben und man kämpft dich dauernd mit dem Compiler. Sehr angenehm und das geht in Java oder C so nicht.


OK. Meinetwegen auch Stuetzstrumpf. Obwohl mich dieser nach dem 1000. Typeerror schon einige male zur Weissglut gebracht hat.
Aber wenn es dann mal läuft ist wieder alles gut. Positiv in Haskell finde ich beispielsweise die etwas klarere Abgrenzung von Listen und Tuples, die in Python irgendwie schwammig ist.
Fuer Einsteiger wuerde ich Haskell nicht empfehlen. Aber als Ergänzung jederzeit.
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Beitragvon ichbinsisyphos » Donnerstag 30. April 2009, 12:55

BlackJack hat geschrieben:@ichbinsisyphos: `short integer` ist in C nicht 16 Bit lang. Das mag auf vielen Plattformen so sein und ist im neuesten Standard wohl auch die Mindestlänge (?), aber keine generelle Aussage die man so über C treffen kann.

Natürlich kümmerst Du Dich in Python auch um Datentypen. Du wählst ja bewusst den Typ "ganze Zahl" und Du versuchst doch auch nicht über Fliesskommazahlen zu iterieren, weil Du weisst, dass der Typ das nicht unterstützt. Python befreit einen nicht davon sich über Typen Gedanken zu machen, man muss sie nur nicht alle naselang deklarieren.

Man muss auch nicht die genaue interne Datenstruktur auf Maschinenebene kennen, um gute Programme zu schreiben, es reicht die O()-Notation für den Speicherverbrauch von Typen und das Laufzeitverhalten von Operationen zu kennen.
Ja die Länge der Datentypen ist plattformabhängig, aber das ist nicht wirklich der Punkt.

Du wählst in Python zu Beginn den Datentyp nicht explizit. Du schreibst zum Bsp. "x = 2", oder "x = 2.5". Der Anfänger denkt er speichert die "Zahl" in der Variablen und wundert sich oft über die Resultate. Ich bin mir sicher ihr hattet schon viele Typen hier, die den Unterschied zwischen floating point und integer nicht verstanden haben.

In C heißts "int x = 2", "float x = 2.5" und "int x = 2.5" liefert x als 2 zurück, jeder Datentyp hat eigene Rechenoperationen. Da kanns von Anfang an keine Verwechslungen geben.

Python ist sehr stark abstrahiert und verbirgt die Vorgänge auf der Maschinenebene. Es ist nicht unmöglich sie herauszufinden, aber halt nicht naheliegend.

Jemanden der z.B. vorhat später mal Informatik zu studieren würd ich auf alle Fälle C empfehlen.

Ich benutzt Python seit 2 Jahren oder so, hatte dabei einen learning-by-doing Ansatz. Es hat auf alle Fälle gereicht um schön langsam alle Probleme zu bewältigen, für die ich den Computer brauche, aber die C/C++-Vorlesung im letzten Semester hat mir ordentlich die Augen geöffnet. Und ich denke nicht, dass ich wesentlich dümmer bin als der durchschnittliche Python-Anfänger.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Donnerstag 30. April 2009, 13:55

ichbinsisyphos hat geschrieben:In C heißts "int x = 2", "float x = 2.5" und "int x = 2.5" liefert x als 2 zurück, jeder Datentyp hat eigene Rechenoperationen. Da kanns von Anfang an keine Verwechslungen geben.
Verwechslungen gibt es immer. Bei C fällt man ggf. bei "float x = 2.5/2" auch hin. Nur weil ich irgendwo explizit einen Datentyp davorschreiben muss, verstehe ich auch nicht automatisch was ich da eigentlich mache.

Python ist sehr stark abstrahiert und verbirgt die Vorgänge auf der Maschinenebene. Es ist nicht unmöglich sie herauszufinden, aber halt nicht naheliegend.
Und das macht C nicht? Ich muss nicht wissen wie Variablen abgespeichert werden und wie Funktionen aufgerufen werden um mit C Programme schreiben zu können. Selbst Assembler sind im Allgemeinen schon recht abstrakt.
BlackJack

Beitragvon BlackJack » Donnerstag 30. April 2009, 14:02

@ichbinsisyphos: Wenn ich 2 oder 2.5 schreibe, dann habe ich damit auch den Typ gewählt. Und auch bei Python hat jeder Typ eigene Rechenoperationen. Was einen allerdings weder bei Python noch bei C vor Überraschungen schützt, denn auch dort gibt es immer wieder Leute, die sich wundern, warum bei ``float x = 1 / 2;`` nicht 0.5 heraus kommt.

Interessante Empfehlung vor dem Hintergrund, dass das Studium sehr oft mit einer funktionalen Sprache wie Haskell beginnt, also so weit wie möglich weg von der Maschine. Informatik-Studenten würde ich eher empfehlen gut in Mathematik und abstraktem Denken zu sein.

War das eine C oder eine C++-Vorlesung? Und in welcher Hinsicht hat sie Dir die Augen geöffnet?
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Beitragvon ichbinsisyphos » Donnerstag 30. April 2009, 14:37

Sorry, aber so jemand muss mir erst noch unterkommen, der explitzit "int x" wählt und nicht nur abtippt und nicht versteht mit welchen Einschränkungen das verbunden ist.

Das war eine Mischung aus C und C++, ich bin Physiker, die meisten meiner Professoren haben sich das Programmieren auch selbst beigebracht, das ist nicht so formal. Im Grunde wars C mit ein bisschen Klassen.

Es hat mir die Augen geöffnet, in dem Sinne, dass ich jetzt ein besseres Gefühl dafür hab was bei der Ausführung eigentlich passiert mit meinem Programm.

Bei der Empfehlung von stark abstrahierten Sprachen wär ich vorsichtig. Das schöne dran ist, dass man schnell Erfolge hat, aber es kommt da ohne den richtigen Hintergrund immer wieder zu falschen Vorstellungen, die dann erst im Nachhinein wieder ausgemerzt werden müssen.
lunar

Beitragvon lunar » Donnerstag 30. April 2009, 15:27

ichbinsisyphos hat geschrieben:Sorry, aber so jemand muss mir erst noch unterkommen, der explitzit "int x" wählt und nicht nur abtippt und nicht versteht mit welchen Einschränkungen das verbunden ist.

Jeder Fehler wird gemacht. Der Zwang zur Deklaration von Datentypen fördert weder einen sauberen Programmierstil, noch verhindert er, dass man "by accident" so lange an den Typdeklaration rumpfuscht, bis der Compiler das Ergebnis akzeptiert, frei nach dem Motto "wenn es der Compiler frisst, kann es so falsch nicht sein". Was da rauskommt, ist dementsprechend mies.

Die Deklaration von Datentypen erzwingt kein höheres Verständnis, sondern ist allenfalls eine weitere Schraube, an der ein Anfänger so lange dreht, bis sie passt. Datentypen muss man verstehen, dann kann man auch ohne Deklarationen programmieren. Wenn man Datentypen nicht verstehen, hilft der Zwang zur Deklaration auch nicht mehr.

ich bin Physiker

Dann solltest du mit Empfehlungen hinsichtlich des Informatikstudiums sparsam umgehen. C-Kenntnisse sind an dessen Anfang selten von Vorteil.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Donnerstag 30. April 2009, 15:29

@ichbinsisyphos: Verstehe ich dich richtig das deine Meinung ist: Python ist für Anfänger nicht geeignet weil sie nicht verstehen was sie tun wenn man es ihnen nicht richtig beibringt und C besser geeignet ist, weil dann die Anfänger verstehen was sie tun wenn man es ihnen richtig beibringt?

Das ist zumindest das was ich da herauslese (ich meine das so wie das da steht, wenn das keinen Sinn ergibt ist das Absicht).

btw: Hattest du überhaupt schonmal mit Programmieranfängern zu tun bzw. mitbekommen was die auch und gerade mit C so alles fabrizieren?
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Beitragvon ichbinsisyphos » Donnerstag 30. April 2009, 16:14

Darii hat geschrieben:@ichbinsisyphos: Verstehe ich dich richtig das deine Meinung ist: Python ist für Anfänger nicht geeignet weil sie nicht verstehen was sie tun wenn man es ihnen nicht richtig beibringt und C besser geeignet ist, weil dann die Anfänger verstehen was sie tun wenn man es ihnen richtig beibringt?

Das ist zumindest das was ich da herauslese (ich meine das so wie das da steht, wenn das keinen Sinn ergibt ist das Absicht).

btw: Hattest du überhaupt schonmal mit Programmieranfängern zu tun bzw. mitbekommen was die auch und gerade mit C so alles fabrizieren?
Hehe, irgendwie ist die Kommunikation hier drin ganz schön gestört.

Nochmal zum Zusammenfassen:

Ich finde, Python ist eine tolle Programmiersprache um anzufangen, weil sie intuitiv, relativ simpel und trotzdem mächtig ist, weil man schnell Erfolge hat und das Lernen durch diese Erfolgserlebnisse Spass macht.

Wenn jemand zum Ziel hat ein sehr tiefes Verständnis für die Materie zu entwickeln ist aber wahrscheinlich der zwanghafte, mühsame Weg über C geschickter. Weil die Abstrahierung nicht so stark ist und man sich um das meiste selbst kümmern muss.

Die neuen C++-Standards sind relativ jung. Die sind ja nicht nur deswegen noch immer so mühsam um die Leute zu quälen, sondern weil man dadurch eine größere Kontrolle über den Programmablauf hat.
DasIch
User
Beiträge: 2405
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Donnerstag 30. April 2009, 16:31

Wenn man wirklich tief in die Materie will sind Cs Typen unnötige Abstraktion.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 30. April 2009, 17:03

@ichbinsisyphos: Ich glaub du verstehst einige grundlegende Dinge bzgl. Programmierung nicht ganz richtig. Programmieren heißt nicht einfach nur dem Computer ein paar Befehle geben, die er dann nacheinander abarbeitet - das wäre ein eher naives Verständnis. Programmieren ist vielmehr die Beschreibung einer Problemstellung - und zwar auf eine Art und Weise die ein Rechner letztendlich verstehen kann. Wenn du verstehen willst wie ein Computer aufgebaut ist und im Inneren so arbeitet, dann ist C natürlich das richtige für dich. Eine bessere Problembeschreibung als mit Python bekommst du in C aber sicherlich nicht hin. Python verfügt halt einfach über mehr Ausdrucksmittel und damit auch über die Möglichkeit Probleme besser zu beschreiben. Wenn du 100 Wörter Englisch kannst, reicht das sicherlich um alle Probleme dieser Welt zu beschreiben. Wenn dein Wortschatz entsprechend größer ist, kannst du sie natürlich besser beschreiben. (Zuviele solltens dann auch nicht sein, da dann niemand mehr versteht was gemeint ist - das wäre dann eine Analogie zu Perl :wink:).
Dein eigentliches zu lösendes Problem ist ja beispielsweise nie zwei uint16 zu addieren - deswegen unterscheidet Python ja auch nur zwischen ganzen und nicht ganzen Zahlen (eine Unterscheidung die es so auch im "realen" Leben gibt.).

MFG HerrHagen
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Donnerstag 30. April 2009, 18:38

ichbinsisyphos hat geschrieben:Die neuen C++-Standards sind relativ jung. Die sind ja nicht nur deswegen noch immer so mühsam um die Leute zu quälen, sondern weil man dadurch eine größere Kontrolle über den Programmablauf hat.


Nach einer quälenden C++-Erfahrung gestern bin ich wirklich froh, normalerweise Python schreiben zu können. Die Sprache an sich ist ja nicht furchtbar, aber es gibt (um auf deinen Kritikpunkt übrigens zurückzukommen) hundertsiebenunddreißig Wege zum Ziel, über verschiedenste Bibliothekten, die einem das Leben leichter machen. Und so hatte sich der Code, den ich anpassen durfte, auch nicht zwischen Qt, C++ STL und C library entschieden, sondern locker alles durchgemischt, mit der entsprechenden Übersicht.

Im speziellen Fall ging es um XML-Behandlung. Was dort z.B. eine Funktion von 90 Zeilen Ausmaß war, hätte sich in Python/etree auf etwas wie

Code: Alles auswählen

tree = parse(filename)
el, = tree.findall('.//foo/bar')
for k, v in (line.split(':') for line in el.text.splitlines()):
    if k == 'om':
        return float(v.strip())


beschränkt.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 30. April 2009, 19:14

HerrHagen hat geschrieben:Programmieren heißt nicht einfach nur dem Computer ein paar Befehle geben, die er dann nacheinander abarbeitet - das wäre ein eher naives Verständnis. Programmieren ist vielmehr die Beschreibung einer Problemstellung - und zwar auf eine Art und Weise die ein Rechner letztendlich verstehen kann.


SICP hat geschrieben:Code should be written for humans to read, and only incidentally for machines to execute.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Donnerstag 30. April 2009, 19:56

ichbinsisyphos hat geschrieben:Wenn jemand zum Ziel hat ein sehr tiefes Verständnis für die Materie zu entwickeln ist aber wahrscheinlich der zwanghafte, mühsame Weg über C geschickter. Weil die Abstrahierung nicht so stark ist und man sich um das meiste selbst kümmern muss.
Mal bildlich gesprochen finde ich persönlich es wesentlich angenehmer, auf einer stabilen Brücke zu stehen und zu gucken was unter der Brücke ist, als im Wasser wild rudernd zu versuchen die Brücke zu erreichen.

Man kann sich sicherlich noch vorzüglich darüber streiten ob jetzt der Bottom-up- oder der Top-down-Ansatz erfolgversprechender ist, ich bevorzuge jedenfalls in dem Fall letzteren. Zum Ziel kommt man auf jeden Fall mit beiden (irgendwie).

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder