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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

An synthetischen Benchmarks ist Pyhton schneller, bei Webapps hängt von vielen Faktoren ab, aber auch da ist es durchaus machbar dass Python schneller als PHP ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Kann nicht widerstehen, zu ein paar Punkten auch meinen Senf dazu zu geben.

Ruby 1.8 in etwa halb so schnell Ruby 1.9, das etwa so schnell ist wie Python 2.5. JRuby ist noch mal schneller als Ruby 1.9 und da ist nach oben noch Luft. Jython hingegen schafft es nur knapp CPython-Geschwindigkeit zu erreichen, dafür ist IronPython für ausgewählte Benchmarks deutlich schneller als CPython. Ich erwarte, dass bei Ruby in etwa die Geschwindigkeit von Googles V8 JavaScript-Engine erreicht werden kann. Und die ist um (mindestens) eine Größenordnung schneller als Python oder Ruby. MacRuby versucht dank LLVM ebenfalls schneller zu werden. Ebenso Maclev dank Smalltalk-VM. Google Unloaden Swallow-Projekt versucht das selbe mit der LLVM für CPython.

Da Ruby eigentlich Smalltalk mit anderer Syntax ist, Self ein klassenloser Smalltalk-Dialekt ist und JavaScript wiederum ähnlich zu Self mit anderer Syntax ist und V8 die Technik der in den 90er-Jahren entwickelten Self-VM nutzt, die übrigens auch in der Hotspot-Java-VM (und in Strongtalk, noch einem Smalltalk-Dialekt) steckt, erwarte ich hier am ehesten Erfolge. Hinzu kommt das Investment von Sun (ähem Oracle) und Microsoft in ihre VMs für dynamische Sprachen.

Für Python bin ich da skeptischer, da das Objektmodell komplexer ist und nicht so einfach zu optimieren ist, wie das von Smalltalk, wo es seit über 20 Jahren Forschung zu diesem Thema gibt.

Ich würde Java + IDE jederzeit C und auch C++ vorziehen. Eine IDE ist jedoch absolut notwendig, oder die Produktivität bricht unter das Niveau von Scriptsprachen ein. Mit einer guten IDE wie z.B. IntelliJ halte ich die Produktivität für gleichwertig. Unbestritten ist Python aber die elegantere Sprache. Java (mit Hotspot) und C++ nehmen sich nichts in der Performance.

Bei Ruby gefällt mir, dass die Sprache konsequent objektorientiert nach dem Smalltalk-Muster ist (genauer gesagt ist sie Nachrichten-orientiert, genau wie Objective-C, der einzig wahre objektorientierte C-Dialekt, der ebenfalls nach dem Muster von Smalltalk entworfen wurde - C++ wurde von Simula beeinflusst, älter als Smalltalk, aber nicht das, was sich Alan Kay unter dem von ihm erfundenen Begriff Objektorientierung vorgestellt hat).

Bei Python gefällt mir die Einfachheit der Sprache, ohne das man Ausdruckskraft (wie es z.B. bei Java oder VisualBasic der Fall ist) verliert. Python ist aber eher funktionsorientiert (von funktional würde ich nicht sprechen) denn objektorientiert. Grundprinzip ist hier der Funktionsaufruf und nicht das Nachrichtenversenden.

Ob die Python-Gemeinschaft wächst oder schrumpft weiß ich nicht so recht. Im Unix-Umfeld, das mich persönlich nicht so interessiert, ist sie wohl recht stark. Andernfalls aber eine Randerscheinung. Unter Windows benutzt man wohl eher Java oder eine .NET-Sprache und unter OS X hat (neben der Betriebssystemsprache Objective-C) Ruby eher Fuß gefasst als Python.

Python zu können, kann definitiv nicht schaden. Doch auf jeden Python-Programmierer kommen bestimmt 10 Java- oder C#-Entwickler (und 100 PHP-Entwickler). Übrigens, wem Java zu langweilig ist, dem empfehle ich Scala. Oder Clojure, wenn's noch exotischer sein soll. Dank JVM aber in beiden Fällen viele plattformunabhängige Bibliotheken. Auch C# ist eine interessante Programmiersprache, jedenfalls in Version 3.0 oder 4.0 und definitiv besser als C als Systemsprache. Dafür eignet sich Java nicht so, da man nicht wie bei C# die Sandbox verlassen kann.

Ich finde Python für Webanwendungen gut, doch für GUI-Programmierung würde ich die Sprache nicht einsetzen, da es aus meiner Sicht keine guten plattformübergreifenden Bibliotheken mitgeliefert werden. Extra WX oder Qt zu installieren empfinde ich als Nachteil. Hier sieht es bei Java IMHO besser aus. Wenn man unter Linux bleiben will, ist das natürlich kein größeres Manko.

Was Leonidas als Nachteil von Java sieht, empfinde ich als den großen Vorteil: Die JVM abstrahiert vom Betriebssystem. Den Anspruch haben andere Sprachen auch, können das aber IMHO nicht in dieser Konsequenz leisten.

Tatsächlich denke ich aber, die Zukunft der GUIs liegt sowieso bei Rendering-Engines wie Webkit - auf für die meisten Desktop-Anwendungen. Web- und Desktop werden dank AIR oder Titanium und anderen Widget-Technologien verschmelzen.

Stefan
lunar

ichbinsisyphos hat geschrieben:Aber gerade dadurch lernst du sauber zu programmieren.
Man wird kein bessere Programmierer, weil man den Befehlen des Compilers folgt und fleißig Strichpunkte setzt.
Teils sicher aus ideologischen
Sowohl C# als auch die Kernbibliotheken des .NET-Framework sind standardisiert und nicht mit Patenten belastet. C# als Sprache ist so frei oder unfrei wie C++.
aber auch aus Kostengründen
Das .NET-Framework ist kostenlos und darf frei weiter verteilt werden, mit SharpDevelop gibt es eine freie IDE, die für viele Projekte ausreicht. Man ist nicht gezwungen, Geld auszugeben, um vernünftig C# programmieren zu können.
und weil es in den Kreisen generell weniger freien Informationsaustausch gibt.
Die Microsoft-.NET-Newsgruppen können sich in punkto Qualität und Quantität durchaus mit der Python-Newsgruppe messen. Microsoft hat mit MSDN auch eine nicht zu verachtende Community unter .NET-Programmierern geschaffen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

lunar hat geschrieben:Sowohl C# als auch die Kernbibliotheken des .NET-Framework sind standardisiert und nicht mit Patenten belastet.
Standardisiert ja, das mit den Patenten, um ein bisschen zu klugscheißen, ist nicht ganz korrekt.

Microsoft räumt allen Anwendern eine kostenlose Nutzung ihrer Patente ein - eine Voraussetzung der ECMA- und ISO-Standardisierung. Sie behaupten nicht, keine Patente zu halten, im Gegenteil. Was genau das ist, ist meines Wissens nicht näher aufgelistet. Jeder kann da ja selbst auf die Suche gehen.

Funktioniert bei Java ähnlich. Alle, die am Java-6-Standard (nur Industrie, kein ECMA- oder ISO-) mitgearbeitet haben, haben ihre Lizenzen gebündelt und Anwendern ist eine unentgeltliche Nutzung erlaubt. Die Überschreibung der Nutzungserlaubnis ist dabei an das Durchlaufen der Testfälle für den Standard geknüpft. Der Apache-Foundation stehen für ihre Java-Version (Harmony) diese leider nicht zur Verfügung, sodass sie offiziell kein Java haben und Nutzer dieser Version keine Lizenz.

Ob es da noch dritte gibt, die irgendwann in Zukunft die Hand aufhalten werden, ist völlig unklar. Der auf keinen Fall rechtsverbindliche Rat wäre auch, lieber nicht nachzuschauen, denn wenn man wissentlich ein Patent verletzt, dann kann das schlimmer sein, weil es Vorsatz sein könnte.
C# als Sprache ist so frei oder unfrei wie C++.
Und das ist wieder richtig und gilt eigentlich für alles im Bereich Software.

Es gibt die idiotischsten Patente und die Anzahl der möglichen Patenthalter ist unbeschränkt. Jemand, dessen Patent verletzt wurde, kann sich dabei wahlweise an den User oder den Toolhersteller wenden. Die Hoffnung der User wäre, dass dies versuchen, Geld von den Toolherstellern zu erpressen. Sun hat vor einiger Zeit ja mal knapp 100 Mio für ein RMI betreffendes Patent abgedrückt. Auch Microsoft und Apple müssen immer mal wieder zahlen. Nur IBM hat selbst dermaßen viele Patente, dass die Schutzgeldeintreiber da offenbar nicht ganz so gierig sein können. SCO hat's ja mal versucht...

Stefan
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

lunar hat geschrieben:
ichbinsisyphos hat geschrieben:Aber gerade dadurch lernst du sauber zu programmieren.
Man wird kein bessere Programmierer, weil man den Befehlen des Compilers folgt und fleißig Strichpunkte setzt.
Kurz gesagt: Doch. Die Strichpunkte alleine bringens nicht, aber sich zum Beispiel über die Datentypen Gedanken machen zu müssen lässt einem schon mehr Verständnis für die Vorgänge im Rechner entwickeln.

Würd sich ein Computer auf die Couch legen, dann müsst man ihm einen zwanghaften Charakter bescheinigen. Und C/C++ bringen das noch am ehesten zum Ausdruck. Außerdem sind das die "lowest" level-Programmiersprachen die ich irgendjemanden zumuten würde. Wer Assembler lernt, versteht die Bedürfnisse eines Binärrechners sicher noch besser.

Python verleitet zum schlampigen Programmieren, und es gibt unzählige Wege ein bestimmtes Problem zu lösen.
Ich beginne die meisten meiner Skripte ohne konkreten Plan, das ergibt sich alles später noch. Bei C/C++ tut man sich mit der Einstellung schwer, da empfiehlt es sich, strategischer vorgehen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

ichbinsisyphos hat geschrieben:
lunar hat geschrieben:
ichbinsisyphos hat geschrieben:Aber gerade dadurch lernst du sauber zu programmieren.
Man wird kein bessere Programmierer, weil man den Befehlen des Compilers folgt und fleißig Strichpunkte setzt.
Kurz gesagt: Doch. Die Strichpunkte alleine bringens nicht, aber sich zum Beispiel über die Datentypen Gedanken machen zu müssen lässt einem schon mehr Verständnis für die Vorgänge im Rechner entwickeln.
Das hat aber nichts mit sauberer Programmierung zu tun. Wenn du dir in Python keine Gedanken über geeignete Datentypen machst, dann hast du ernsthaftes (aufs Programmieren bezogen) Problem ;-) Ich kenn niemanden der ordentlicher programmiert, weil er an irgend welche Hardwaregrenze gebunden ist.
ichbinsisyphos hat geschrieben:Python verleitet zum schlampigen Programmieren, und es gibt unzählige Wege ein bestimmtes Problem zu lösen.
Ich beginne die meisten meiner Skripte ohne konkreten Plan, das ergibt sich alles später noch. Bei C/C++ tut man sich mit der Einstellung schwer, da empfiehlt es sich, strategischer vorgehen.
Wenn du dich bei Scriptsprachen nicht "unter Kontrolle" hast, sitzt das Problem eindeutig vor dem Bildschirm.
Das Leben ist wie ein Tennisball.
BlackJack

@ichbinsisyphos: Also C++ ist die letzte hardwarenahe Sprache, die ich irgendwem zumuten würde. Schon gar nicht Anfängern um gutes Programmieren zu erlenen. C, Pascal, meinetwegen auch Ada wenn's wirklich "zwanghaft" sein soll, aber bestimmt nicht C++. Und Forth ist noch sehr nett, fällt aber ziemlich aus dem Rahmen der üblichen Verdächtigen.

In C++ gibt's auch viele verschiedene Wege etwas zu erreichen, inklusive "funktionaler" Programmierung mit Funktoren und generischer Algorithmen über Iteratoren. Und dann die ganze Template-Magic die es so gibt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ichbinsisyphos hat geschrieben:Kurz gesagt: Doch. Die Strichpunkte alleine bringens nicht, aber sich zum Beispiel über die Datentypen Gedanken machen zu müssen lässt einem schon mehr Verständnis für die Vorgänge im Rechner entwickeln.
Nein, die Datentypen lassen eigentlich gar nicht auf die Vorgänge im Rechner schließen. Nimm etwa das statische Typsystem von Scala, dort wirst du kaum draufkommen was da "unter der Haube" passiert - die Idee ist ja eben dass du es nicht wissen musst, da du Abstraktionen verwendest. Datentypen in C und C++ sind ja auch nur Abstraktionen auf den ungetypten Speicher.
ichbinsisyphos hat geschrieben:Python verleitet zum schlampigen Programmieren, und es gibt unzählige Wege ein bestimmtes Problem zu lösen.
Ach und in C nicht? Na das ist ja mal ein Ding!
ichbinsisyphos hat geschrieben:Ich beginne die meisten meiner Skripte ohne konkreten Plan, das ergibt sich alles später noch. Bei C/C++ tut man sich mit der Einstellung schwer, da empfiehlt es sich, strategischer vorgehen.
Weils einfach geht, dann arbeitest du schlampig und beschuldigst die Sprache? Dann arbeite doch auch mal schlampig mit C und debugge dann die Memory Leaks, Segfaults und das komische Verhalten.

Man kann in jeder Sprache Basic programmieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

hendrikS hat geschrieben:
ichbinsisyphos hat geschrieben:C/C++ sind die zwanghaftesten Sprachen die ich kenne. Die Hälfte der Zeit wirst mit Dateitypen, Klammern- und Strichpunkte- suchen verbringen, was es bei Python praktisch überhaupt nicht gibt.
Das wuerde ich mal ein bisschen relativieren. So zwanghaft sind C/C++ nun auch wieder nicht. Die wirkliche Zwangsjacke bekommst Du bei Ada oder Haskell. :)
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.
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

EyDu hat geschrieben:
ichbinsisyphos hat geschrieben:
lunar hat geschrieben:
ichbinsisyphos hat geschrieben:Aber gerade dadurch lernst du sauber zu programmieren.
Man wird kein bessere Programmierer, weil man den Befehlen des Compilers folgt und fleißig Strichpunkte setzt.
Kurz gesagt: Doch. Die Strichpunkte alleine bringens nicht, aber sich zum Beispiel über die Datentypen Gedanken machen zu müssen lässt einem schon mehr Verständnis für die Vorgänge im Rechner entwickeln.
Das hat aber nichts mit sauberer Programmierung zu tun. Wenn du dir in Python keine Gedanken über geeignete Datentypen machst, dann hast du ernsthaftes (aufs Programmieren bezogen) Problem ;-) Ich kenn niemanden der ordentlicher programmiert, weil er an irgend welche Hardwaregrenze gebunden ist.
ichbinsisyphos hat geschrieben:Python verleitet zum schlampigen Programmieren, und es gibt unzählige Wege ein bestimmtes Problem zu lösen.
Ich beginne die meisten meiner Skripte ohne konkreten Plan, das ergibt sich alles später noch. Bei C/C++ tut man sich mit der Einstellung schwer, da empfiehlt es sich, strategischer vorgehen.
Wenn du dich bei Scriptsprachen nicht "unter Kontrolle" hast, sitzt das Problem eindeutig vor dem Bildschirm.
Ich werds dir noch einmal ganz langsam erklären, mein kleiner Freund:

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.
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.

Das Problem sitzt nicht vorm Bildschirm, mein guter Mann. Es gibt nämlich kein Problem, weder vorm Bildschirm, noch dahinter.

Jetzt musst du dich ganz doll anstrengen und versuchen dir vorzustellen, wie das wohl wäre, wenn du mit unterschiedlichen Programmiersprachen zu programmieren beginnst.

Bei C musst du dich erzwungenermassen schon zu Beginn mit den Grundlagen beschäftigen, zum Beispiel mit Datentypen und deren binären Repräsentationen.
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?


Ich bin leider grad etwas im Stress ... wenn noch was unklar ist, nicht schüchtern sein! Frag einfach nochmal kurz nach.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
BlackJack

@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

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

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

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

@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

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

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

@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

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.
Antworten