|
Subby83
Anmeldungsdatum: 23. April 2009
Beiträge: 34
|
Da sich hier anscheinend wieder ein Python-Liebhaber auf den Schlipps getreten fühlt lassen wir die Python-Diskussion lieber, da das langsam langweilt. Klar hab ich Erfahrung in Python sonst könnte ich ja kaum Tipps geben wie ich das ganze sehe.
Keine Angst ich bin kein Python-Hasser sondern versuche einfach Tipps durch meine eigenen Erfahrungen weiterzugeben die ich beim Programmieren-Lernen gesammelt habe. Ich weiß Python sehr zu schätzen, bin eben nur nicht der Meinung, dass es eine Anfänger-Sprache sein sollte. ☺ Über den Geschmack aber lässt sich letztendlich ja sowieso streiten. ☺ Grüße, Alex
|
|
jan84
Anmeldungsdatum: 10. Juni 2007
Beiträge: 31
|
Marc 'BlackJack' Rintsch schrieb: @jan84: Warum ist Java Deiner Meinung nach besser geeignet, um OOP zu lernen? In Python ist alles was man an einen Namen binden kann ein Objekt, also zum Beispiel auch Klassen, Funktionen und Module. Python ist in der hinsicht also "objektorientierter" als Java.
Weil Java strenger ist. Python verlangt mehr Eigenverantwortung des Programmierers (was zwar später ganz nett ist, aber ich glaube das es beim Lernen von OOP Verwirrung stiften kann) - z.B. was die Sichtbarkeit von Attributen angeht oder die dynamische Typisierung. Aber man kann das mit Python sicherlich auch alles lernen und da Python IMHO toll ist, kann ich christian1722 da gut verstehen 😉 Und ja, wenn ich eine Anwendung (mit oder ohne GUI) erstellen sollte (und ich mir die Sprache etc. aussuchen kann), dann würde ich auf jeden Fall Python (mit PyQt) nehmen. Sid Burn schrieb: Hier gibt es eine Liste von programmen die in Haskell geschrieben sind: http://www.haskell.org/haskellwiki/Applications Und Haskell ist eine reine Funktionale Programmiersprache.
Zu den Anwendungen zählen 3D Spiele, Mail Server, Wiki, Versionierungssystem, Web Server, texteditor oder ein MP3 Player, das man also ohne OOP nicht weit kommt bezweifle ich.
Das das möglich ist, ist schon klar. Kann man auch in Assembler machen. Darum geht es ja nicht. Aber du wirst doch nicht abstreiten, dass Anwendungen heute fast ausschließlich objektorientiert geschrieben werden, jedenfalls in dem Rahmen, um den es hier in dem Thread geht. Und wenn man das beruflich macht, kann man kaum ernsthaft eine Desktop-Anwendung in Haskell schreiben und seinem Chef sagen: "Ich kann halt kein OOP". Also führt kein Weg an OOP vorbei. @christian1722: Vielleicht ist das noch interessant für dich? http://www.pythonchallenge.com/
|
|
Sid_Burn
Anmeldungsdatum: 23. Oktober 2004
Beiträge: 2159
|
Das das möglich ist, ist schon klar. Kann man auch in Assembler machen.
Haskell würde ich nur nicht unbedingt mit Assembler gleichstellen. Also Assembler = Komplex etc. Haskell und Funktionale Programmierung ist einfach nur ein "anderes" paradigma, und von hören/sagen kenne ich es jedenfalls das Anfänger es meist einfacher haben mit Funktionallen Sprachen.
Darum geht es ja nicht. Aber du wirst doch nicht abstreiten, dass Anwendungen heute fast ausschließlich objektorientiert geschrieben werden, jedenfalls in dem Rahmen, um den es hier in dem Thread geht.
Sicherlich werden Heutzutage Anwendungen viel in OOP geschrieben, aber was hat das schon zu bedeuten? Vor ~20 Jahren wurde alles Prozedural geschrieben. War deswegen Prozedural gut gewesen und gibt es nichts besseres? Wissen wird nunmal geupdated sachen veraltern. Prozedural wurde durch OOP ersetzt. Und irgendwann wird vielleicht mal OOP durch etwas anderes ersetzt. Das Funktionale und OOP Praradigmen gibt es zwar beide schon seit Jahrzenten, Funktionale Programmiersprachen sogar länger als OOP aber erst heute muss man sagen das Funktionale Sprachen mehr aus dem Akademischen bereich heraus kommen. Immer mehr Sprachen bauen bewust auf Funktionale Elemente. Perl 6, Scala oder Microsoft entwickelt "F#" (mit entwicklern von Haskell) etc. Ich möchte nicht sagen das Funktionale Programmierung über alles geht. Was ich nur sagen wollte ist das OOP nicht das einzige ist, und auch nicht unbedingt das beste sein muss. Ansonsten sind Sachen wie Iteratoren, Rekursion, Funktionen Callbacks alles Sachen die mehr aus den Funktionalen Bereich kommen, und das Wissen sollte man ebenfalls in OOP Sprachen haben und keine OOP Sprache kommt komplett um solche Dinge drum herum. Und auch bei einer GUI Applikation werden Funktionale Elemente genutzt. Meist verbindet man Signale und übergibt Funktionen Callbacks die dann aufgerufen werden. Soweit ich weiß kennt Java soetwas nicht und soll da eher komplizierter sein. Ich würde auch noch zusätzlich sagen das man sich nicht zu sehr auf OOP beschränken sollte. Das führt leicht dazu das man Sachen "Over Enginnered" und alles wild in Klassen packt. Auf die richtige Mischung zwischen allen Paradigmen kommt es an.
Und wenn man das beruflich macht, kann man kaum ernsthaft eine Desktop-Anwendung in Haskell schreiben und seinem Chef sagen: "Ich kann halt kein OOP". Also führt kein Weg an OOP vorbei.
Zuerstmal ging es soweit ich es weiß nichts um beruflich. Und Hobbymäßig kann man machen was man möchte. Ansonsten wenn man Haskell gelernt hat und einen Job als Haskell Programmierer hat, und die GUI Anwendungen in Haskell eben nunmal nicht OOP schreibt wüste ich nicht warum man dann seinen Chef nict sagen könnte das man keine Ahnung von OOP hat.
|
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
|
jan84 schrieb: Marc 'BlackJack' Rintsch schrieb: @jan84: Warum ist Java Deiner Meinung nach besser geeignet, um OOP zu lernen? In Python ist alles was man an einen Namen binden kann ein Objekt, also zum Beispiel auch Klassen, Funktionen und Module. Python ist in der hinsicht also "objektorientierter" als Java.
Weil Java strenger ist. Python verlangt mehr Eigenverantwortung des Programmierers (was zwar später ganz nett ist, aber ich glaube das es beim Lernen von OOP Verwirrung stiften kann) - z.B. was die Sichtbarkeit von Attributen angeht oder die dynamische Typisierung.
Also über den Sinn oder Unsinn von Sichtbarkeiten kann man natürlich streiten, aber was hat das mit "strenger" zu tun? Wenn ich als Entwickler überall public davor schreibe, dann hilft mir die Sprache doch nicht wirklich weiter! In Python ist eben der _ vor einem Attribut der Hinweis des Entwicklers "Hey, das Attribut solltest Du nur Anfassen, wenn Du weißt, was Du tust!". Und ohne eine sinnvolle Doku des Attributes, ist es doch bei keiner Sprache besser oder schlechter. Ergo: Wenn ich keine Verantwortung oder keine Ahnung davon habe, was ich tue, ist die Sichtbarkeit keine Hilfe; auf jeden Fall ist Java als Sparche dann auch keine Hilfe. Bei der dynamischen Typisierung kann ich auch nicht ganz folgen. Bei OOP trifft es einem ggf. bei Listen mit unterschiedlichen Typen von Objekten. Das Problem habe ich bei Java aber doch auch - außer ich konfrontiere einen Anfänger sofort mit Generics. Um das sinnvoll nutzen zu können braucht es dann aber auch schon oftmals das Verständnis von Interfaces... das ist für einen Anfänger imho sehr viel aufwendiger, als sich einmal mit dem Konzept des DuckTypings auseinander zu setzen. Imho immer noch das Killerargumente: Die interaktive Shell! Speziell als Anfänger ist es sehr sinnvoll und hilfreich, sich in der Shell parallel zu Tutorials oder sogar konkreten Problemen in einem Script Dinge klar zu machen und herum zu spielen.
|
|
jan84
Anmeldungsdatum: 10. Juni 2007
Beiträge: 31
|
Sid Burn schrieb: Ich möchte nicht sagen das Funktionale Programmierung über alles geht. Was ich nur sagen wollte ist das OOP nicht das einzige ist, und auch nicht unbedingt das beste sein muss.
Okay, ja, sehe ich ein. Vielleicht bin ich tatsächlich zu sehr auf OOP fixiert.
Ich würde auch noch zusätzlich sagen das man sich nicht zu sehr auf OOP beschränken sollte. Das führt leicht dazu das man Sachen "Over Enginnered" und alles wild in Klassen packt. Auf die richtige Mischung zwischen allen Paradigmen kommt es an.
Ja. Das ist auch ein gutes Argument für Python.
Zuerstmal ging es soweit ich es weiß nichts um beruflich. Und Hobbymäßig kann man machen was man möchte. Ansonsten wenn man Haskell gelernt hat und einen Job als Haskell Programmierer hat, und die GUI Anwendungen in Haskell eben nunmal nicht OOP schreibt wüste ich nicht warum man dann seinen Chef nict sagen könnte das man keine Ahnung von OOP hat.
Okay. Irgendwie ist das aber schon sehr speziell. Also gut, es gibt Wege die an OOP vorbei führen. Aber das ist doch auch Grundlagenwissen, das man als SW-Entwickler haben sollte. Lysander schrieb: Also über den Sinn oder Unsinn von Sichtbarkeiten kann man natürlich streiten, aber was hat das mit "strenger" zu tun? Wenn ich als Entwickler überall public davor schreibe, dann hilft mir die Sprache doch nicht wirklich weiter! In Python ist eben der _ vor einem Attribut der Hinweis des Entwicklers "Hey, das Attribut solltest Du nur Anfassen, wenn Du weißt, was Du tust!".
Mhh naja, das ist auch Geschmackssache. Ich fand die fehlende Sichtbarkeitsregelung anfangs sehr störend an Python (war bis dahin halt auch Java gewöhnt). Und ich finde das widersprüchig dazu, das in Python sonst alles immer explizit angegeben wird. Klar kann man in Java auch überall public davor schreiben. Aber es ging ja um das Lernen einer Sprache und von OOP. Und ich denke das es hilfreich ist, wenn man die Sichtbarkeit ganz bewusst und explizit setzt.
Bei der dynamischen Typisierung kann ich auch nicht ganz folgen.
Gleiche Argument wie oben. Ich denke das es zum Lernen und Verstehen besser ist, den Typ einer Variablen explizit festzulegen.
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4735
|
@jan84: In Python wird die doch auch explizit durch einen '_' klar gemacht, was zur öffentlichen API gehört und was nicht. Und auch bei Python muss man sich, trotz "duck typing" Gedanken um die Typen von Objekten machen. Man kann sogar argumentieren, dass das so besser für Anfänger ist, weil man auch nicht selten bei Java-Anfängern beobachten kann, dass die solange rumprobieren bis der Compiler nicht mehr meckert und davon ausgehen, dass es dann schon korrekt sein muss. Was ja aber nur die halbe Miete ist, denn der Typ muss ja nicht (nur) stimmen, sondern auch das Verhalten. Bei Python muss man mehr mitdenken, was die geforderten Eigenschaften und das Verhalten von Objekten angeht, und dieses Nachdenken ist sicher nicht verkehrt. Für Haskell gibt's soweit ich weiss auch eine OOP-Bibliothek. Die beiden Paradigmen schliessen sich ja nicht vollkommen aus. Und der Vergleich mit Assembler hinkt gewaltig. Funktionale Sprachen abstrahieren deutlich stärker von der Hardware als die heute am meisten eingesetzten OOP-Sprachen. Der Trend geht zu Sprachen, bei denen man sich bei der Problemlösung mehr auf das Problem und weniger auf die Eigenarten des Rechners konzentriert. Etwas bei dem man bei Assembler so gar nicht drumherum kommt. 😉 Warum der Fokus in letzter Zeit mehr auf funktionale Sprachen geht, dürften die Mehrkernprozessoren sein. Man kann funktional anscheinend besser Programme schreiben, die vom Compiler zumindest halbautomatisch parallelisiert und darauf optimiert werden können, ohne das sich der Programmierer um viele der Nebenläufigkeitsprobleme selber kümmern muss, die man mit "herkömmlichen" Sprachen und Threads hat.
|
|
Niveau
(Themenstarter)
Anmeldungsdatum: 17. März 2009
Beiträge: 883
|
hmmm... das ist typisch... zu begin der zweiten seite eines solchenthreads diskutieren alle nur noch darüber ob eine sprache jetzt besser ist als die andere oder schlechter... aber das ist IMHO offtopic...
|
|
Colttt
Anmeldungsdatum: 29. April 2009
Beiträge: 1517
|
lol.. das wollte ich auch grade schreiben.. nimm meine idee 😉 und danach den wirtschaftskram..
|
|
Niveau
(Themenstarter)
Anmeldungsdatum: 17. März 2009
Beiträge: 883
|
hmmm... welche idee... das ist in diesem thread irgendiwe untergegangen... ich hab mal n programm geschrieben, das alle zahlen kombinationen von 0 0 0 0 bis 9 9 9 9 ausgibt... ich steig da kaum mehr durch aber es funktioniert... ich hängs mal an...
Anhang
|
|
Colttt
Anmeldungsdatum: 29. April 2009
Beiträge: 1517
|
diese idee: Colttt schrieb: ähm.. lade dir doch mal den BF2-dedicated server runter.. die auswertung ist meines wissens nach in phyton geschrieben.. wenn du das alles auswerten kannst (trefferquote, wer hatte welche kniffte, meisten kills, feind nr1, etc) und das dann in einer SQL-datenbank schreibt.. später sollte man das natürlich dann in einer Internetseite einbetten können das man sich das auf ner LAN schön angucken kann. natürlich sollte ich das auch wie ich das für richtig halte sortieren können.. diese aufgabe liegt dir evtl etwas mehr, da es nicht mit betriebskram zu tun hat sondern da es ums zocken geht..^^ und wenn man anfangs was macht, was man kennt und es spass macht, lernt man bestimmt auch um einiges schneller..
|
|
Niveau
(Themenstarter)
Anmeldungsdatum: 17. März 2009
Beiträge: 883
|
ich habe keinen plan wie ich das machen könnte... und ehrlich gesagt hört sich das für mich einbischen hoch an...
|
|
Colttt
Anmeldungsdatum: 29. April 2009
Beiträge: 1517
|
ach quatsch.. da gibts auch schontutorials für.. nur ich als anti-programmierer seh da nicht durch 😉 guck mal HIER1; HIER2; HIER3; was bestimmt zutrifft
|
|
Niveau
(Themenstarter)
Anmeldungsdatum: 17. März 2009
Beiträge: 883
|
hmmmmmm... ich möchte ja auch was programmieren, was für micheinen nutzen bringt... da nhelfen mir dann keine betriebswirtschaftstools mit denen ich dann sowieso nichts anfangen kann...
|
|
Colttt
Anmeldungsdatum: 29. April 2009
Beiträge: 1517
|
so hab oben die liste aktualisiert.. evtl klappts damit.. na was ist denn für dich wichtig?? du könntest beispielsweise nen kleinen skript bauen: abhängig vom angemeldeten benutzer sollen nur bestimmt startmenü einträge zu sehen sein.. also sollen die anderen asgeblendet werden
|
|
Niveau
(Themenstarter)
Anmeldungsdatum: 17. März 2009
Beiträge: 883
|
wie soll das denn gehen? naja wie wäre es mit nem vokabel lern programm... dazu müsste ich aber wissen wie man sachen in einer datei speichert und wie man sachen aus einer datei ausliest...
|