Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmieranfänger, mit was am besten anfangen?
Streicher
15.09.2008, 18:18
Ja, ich wollte gerne mal so langsam auch mit dem lernen einer, oder mehrer Programmiersprachen anfangen, da das unter anderem auch bald in der Schule ein Thema sein wird, und ich mir ein paar Vorkenntnisse anarbeiten möchte. Und meine Frage dazu ist, welche Programmiersprache für einen Einsteiger am besten zu lernen bzw. zu verstehen ist.
Also, ich selbst habe bis jetzt nur im Morrowind Constuction Set rumgescriptet, und da auch schon so einiges hinbekommen (nichts besonders großes und erstaunliches ^^'). Und ich denke mich zu erinnern mal gelesen zu haben, das das Morrowind Scripten dem JavaScript sehr ähnelt ...
Danke schonmal Vorraus.
Streicher
Ich würde dir Python (http://www.python.org/) empfehlen. Python ist einsteigerfreundlich und gleichzeitig sehr mächtig und wird auch viel kommerziell eingesetzt, so dass du auch in der Zukunft von der Erfahrung mit Python profitieren könntest.
Ah, schön, dass sich mal wieder jemand zu uns verirrt hat. Schau dir am besten mal den angepinnten Thread (http://www.multimediaxis.de/showthread.php?t=20194) für Anfäger durch, da gibts eine kleine Übersicht. Ansonsten kann ich nur empfehlen, diverse Programmiersprachen durchzuprobieren. Sowas wie "die beste Programmiersprache" gibt es eigentlich nicht und irgendwann bleibt jeder bei der Sprache hängen, die ihm am ehesten zusagt.
Ich würde auch sagen, das wichtige ist es, Konzepte zu erlernen und Übung zu bekommen, einzelne Sprachen sind dann austauschbar. Traditionell wäre ein Einstieg mit C - wodurch du dann prozedurales Programmieren lernst - aber vermutlich ist Java für den Anfang einfacher und vermutlich ist es auch sinnvoller, wenn du mit Objektorientiertem Programmieren anfängst, sonst bleiben so viele prozedurale Macken hängen :-)
Es schaut eigentlich meistens so aus, dass man bei der Sprache festhängt, mit der man programmeren gelernt hat. Darum finde ich es immer ziemlich ... unüberlegt, einfach so eine Sprache zu empfehlen, ohne erst zu fragen, was du eigentlich vor hast in Zukunft zu programmieren.
Also, was möchtest du programmieren?
Ich finde so eine Frage einem Anfänger zu stellen ist nicht gerade überlegt. Was wird er dir ohne Überblick wohl antworten? "Taschenrechner"? "MMORPG"?
Es ist zwar richtig, dass es keine ultimative Programmiersprache gibt, man also immer die wählen sollte, die die Projektanforderungen erfüllt, für einen Anfänger aber reicht es vollkommen sich mit einer einsteigerfreundlichen Programmiersprache zu beschäftigen und langsam Kenntnisse zu erlangen. Hat man erstmal eine Sprache einigermaßen intus, kann man auch leicht zu einer anderen wechseln, da die angesprochenen Konzepte in der Regel größtenteils schon in der gewählten Sprache beigebracht werden, vorausgesetzt eine geeignete wurde gewählt.
Von Empfehlungen zu C und Java halte ich persönlich wenig, wenn es nur darum geht verschiedene Programmierparadigma kennenzulernen, das kann man auch kompakt in einer einzigen (zumindest einige davon), denn Sprachen wie Python zwingen nicht zu einer bestimmten Programmierung und bieten relativ große Freiheiten.
Man sollte das Ganze aber wirklich nicht zu trocken angehen und sich stumpf mit Konzepten auseinandersetzen, sonst verliert man als Anfänger schnell den Spaß am Lernen.
Wichtig ist es aber, von Anfang an auf die Lesbarkeit des Codes zu achten (z.B. Indentation (hier zwingt Python einen dazu, was für Einsteiger durchaus vorteilhaft wäre) , Whitespace, Konsistenz, Namenskonvention, etc).
\Streicher:
Ignorier am besten was ich hier jetzt schreibe. ^^
Ich finde so eine Frage einem Anfänger zu stellen ist nicht gerade überlegt. Was wird er dir ohne Überblick wohl antworten? "Taschenrechner"? "MMORPG"?
Es ist zwar richtig, dass es keine ultimative Programmiersprache gibt, man also immer die wählen sollte, die die Projektanforderungen erfüllt, für einen Anfänger aber reicht es vollkommen sich mit einer einsteigerfreundlichen Programmiersprache zu beschäftigen und langsam Kenntnisse zu erlangen. Hat man erstmal eine Sprache einigermaßen intus, kann man auch leicht zu einer anderen wechseln, da die angesprochenen Konzepte in der Regel größtenteils schon in der gewählten Sprache beigebracht werden, vorausgesetzt eine geeignete wurde gewählt.
Von Empfehlungen zu C und Java halte ich persönlich wenig, wenn es nur darum geht verschiedene Programmierparadigma kennenzulernen, das kann man auch kompakt in einer einzigen (zumindest einige davon), denn Sprachen wie Python zwingen nicht zu einer bestimmten Programmierung und bieten relativ große Freiheiten.
Man sollte das Ganze aber wirklich nicht zu trocken angehen und sich stumpf mit Konzepten auseinandersetzen, sonst verliert man als Anfänger schnell den Spaß am Lernen.
Wichtig ist es aber, von Anfang an auf die Lesbarkeit des Codes zu achten (z.B. Indentation (hier zwingt Python einen dazu, was für Einsteiger durchaus vorteilhaft wäre) , Whitespace, Konsistenz, Namenskonvention, etc).
Eigentlich sagt "MMORPG" bzw. "Taschenrechner" bereits sehr viel aus. Bei Taschenrechner will jemand einfach nur GUI-propgrammieren, und man kann sich auf einen kleinen Dialog einstellen, bei dem man herausfindet, was jemand verwenden möchte: Oft reduziert das ja bereits die Sprachwahl auf eine kleine Hand. Vorallem aber ist es wichtig die passende Plattform für jemanden zu finden, über die man jemanden eine Sprache ans Herz legen sollte.
Konzepte lernen ist zwar richtig, aber da wäre ich sehr vorsichtig: Wenn jemand eine reine OO-Sprache lernt, dann wird er OO ewig und immer als natürlich empfinden. Wenn du rein funktional anfängst, dann wird das für dich das normale Programmieren. Das sieht man sehr gut, wenn man z.B. OO-Code von den ganz alten Hasen liest, oder C-Code von einem OO-Menschen.
Genau so macht die Frage "Pointer, oder keien Pointer" einen sehr großen Unterschied. Was für jemanden, der mit C angefangen hat, ganz normal ist, ist für Leute die mit Java anfangen merkwürdig. Je nach Sprache lernt man andere Tricks, einen anderen Background kennen, auf dem man aufbaut. Somit muss man auch wissen, was jemand eigentlich beim Programmieren für einen Sidethink haben möchte. Bei einem Python bekommst du einfach nicht das selbe Gefühl für das grundlegendste eines Computers, wie bei einem C, oder bei einem ASM.
Lass mal zwei Leute mit dem selben Toolkit ein und das selbe Programm einmal für den Desktop schreiben, und einmal für ein Handy, wobei jeweils einer von der Desktop-Welt, und der Andere von der Embeddet-Welt kommt. Da sieht man Unterschiede.
Programmieren ist halt auch sehr stark Einstellungssache. Je nach dem mit was man anfängt, wird diese eben anders gebildet. Und genau darum sollte man erst einmal heraus finden, was sich jemand vom Programmieren erwartet: Schon alleine um einmal herausfinden zu können, auf welchem Level jemand eigentlich programmieren möchte. Oder, reichst du auch allen Leuten den nächstbesten Schraubenzieher, wenn dich jemand um einen bittet, ohne dich weiter zu erkundigen?
Das was du teilweise ansprichst ist der Grund wieso man eine geeignete Programmiersprache für sein Projekt wählen sollte, anstatt das Projekt einer Programmiersprache anzupassen. Da stimme ich dir zu, habe es aber nie angezweifelt.
Dass man immer bei der Programmierung bleibt, die man anfänglich kennengelernt hat, halte ich aber für eine Halbwahrheit. Es ist sehr situationsbedingt und vom jeweiligen Menschen abhängig.
Jemand der C gelernt hat, weil es sein Beruf erfordert und es im Laufe seines Berufes intensiv anwendet, wird logischerweise immer dieses Programmierparadigma propagieren, da er nichts anderes kennt. Dabei spielt aber nicht das eine Rolle, dass er C am Anfang gelernt hat, sondern dass er sonst nichts anderes kennt und nach Jahrzehnten wahrscheinlich auch nicht kennen will. Jemand der eine Programmiersprache aus eigenem Interesse gelernt hat, wird höchstwahrscheinlich auch weiterhin Interesse haben andere zu lernen und sich fortzubilden.
Ich beispielsweise habe mit C in der Schule angefangen, bin weitergegangen mit Visual Basic, JavaScript, C++, Python und interessiere mich derzeit für Lua (aus rein einbettungstechnischen Gründen; etwas anderes wäre bei Lua unvorteilhaft) und würde nicht sagen, dass mich C besonders reizt, nur weil ich damit angefangen habe.
Ich würde aber C sofort verwenden, wenn es für das Aufgabengebiet geeignet ist (z.B. Hardware- oder sonstige Lowlevelprogrammierung).
C++ wäre geeignet, wenn Ausführungsgeschwindigkeit, hohe Optimierungsmöglichkeiten und ein breites Angebot an hochwertigen Compilern ausschlaggebend sind. Python würde ich immer verwenden, wenn RAD und Portabilität von Vorteil sind, die Ausführungsgeschwindigkeit aber nur eine kleine bis keine Rolle spielt. Usw.
Oder, reichst du auch allen Leuten den nächstbesten Schraubenzieher, wenn dich jemand um einen bittet, ohne dich weiter zu erkundigen?
Eine Programmiersprache ist kein Schraubenzieher (auch wenn eine Programmiersprache ein Werkzeug ist), denn während du mit einem Schraubenzieher stark in den Einsatzmöglichkeiten beschränkt bist (ein Torx-Schraubenzieher wird man kaum auf Schlitzschrauben anwenden können), kannst du so gut wie mit jeder Programmiersprache, die etwas auf sich hält wahrscheinlich jede Problemstellung bewerkstelligen. Die Frage ist nur wie effizient.
Wenn mich jemand nach einer einsteigerfreundlichen Programmiersprache fragt, weil er Programmieren lernen will, empfehle ich ihm auf meiner Erfahrungsgrundlage ohne zu zögern Python, weil es simpel (aber auch mächtig wenn man tiefer geht), sauber in der Syntax, flexibel und portabel ist, und mit vielen Modulen kommt, die das Programmieren auf das Wesentliche reduzieren. Es ist hervorragend für Programmieranfänger und selbst GUIs lassen sich mit den entsprechenden Ports (z.B. wxPython) in kürzester Zeit erstellen.
C/C++ hätte ich einem Anfänger wirklich nur empfohlen, wenn er Programmieren auf die harte Tour lernen will. Nicht dass es nicht auch seine Vorteile hätte, aber meiner Meinung nach nicht geeignet für jemanden, der nach einer einsteigerfreundlichen Programmiersprache fragt.
Das was du teilweise ansprichst ist der Grund wieso man eine geeignete Programmiersprache für sein Projekt wählen sollte, anstatt das Projekt einer Programmiersprache anzupassen. Da stimme ich dir zu, habe es aber nie angezweifelt.
Jo, weil die Kernfrage ist, was für Arten von Projekten er machen will. Je nach dem ist es besser mit einer anderen Sprache anzufangen.
Zugegeben: Im Vgl. zu den Anderne habe ich es gelernt, weil ich mir ein Mini-OS bauen wollte (und habe): Aber, da habe ich logischer Weise ASM und C gelernt. Mit dem Ziel wäre ich mit nem Torx nicht weiter gekommen. Mein guter, 30-jähriger Schlitz-Zieher funtioniert aber recht gut, auch wenn man manche Schrauben damit vernudelt. ;)
Kurzum: Man soll mit einer Sprache anfangen, die zu dem passt, was man eben so machen möchte.
Wir können jezt eine Sprache, die wir gelernt haben. Während wir die Sprache gelernt haben, haben wir natürlich viele Biblitoheken - oder, gleich eine ganze Plattform - kennen gelernt. Klar, eine andere Sprache kann man sehr schnell lernen. Wenn wir nicht unbedingt zu den Exoten schauen, dann haben wir hier eigentlich immer den selben Kram. Aber, schaut es bei der Plattform auch so aus? Klar: ein XML-Parser ist ein XML-Parser. Aber, die API ist eben anders: Sobald man das Paket wechselt, muss man sich die neue API anlernen. Und das ist bei einem großen Projekt doch mit einem großen Nachschlag und Lernaufwand verbunden.
[Und sogar bei den Sprachen gibt es außnahmen: C++ lernt man bestimmt auch dann nicht schnell, wenn man ein Py-Nerd ist und den Zwischencode schreibt, weil einem so fad im Schädel ist. Ich meine, man kann in C++ Sudokus in Compile Time lösen. Wie baue ich mir ein brauchbares Objektsystem in C, wenn ich eines brauche?]
Etwas neues lernen ist oft toll. Wenn ich aber jetzt von einer Firma den Auftrag bekommen würde eine GUI mit nem Antatschscreen für eine Kirchturmglocke zu bauen, dann habe ich in erster Linie nicht die perfekte Sprache zu finden, sondern den schnellsten Weg. Ich werde für das Projekt bezahlt und für nichts anderes.
Was werde ich hier machen? Werde ich jetzt - nur weil es schöner ist - etwas neues lernen? Hell, no! Ich mach alles mit dem Zeug was ich kann, und cashe danach ab.
Und genau darum haben wir bald eine Generation von Java-Menschen, die maximal auf C# umsatteln, weil es ihr Arbeitsgeber so verlangt.
Jeder Programmierer hat einfach ein paar Sprachen, für ein paar grobe Einsatzbereiche. Mehr als zwei, bis maximal drei sind es in der Regel nicht: Ob es nun Java un PHP ist, oder Py und C: Es macht einfach beim Arbeiten einen Unterschied, ob ich jede Funktion nachschlagen muss, oder einfach aus dem Kopf hin tippe. (Komm mir jetzt nicht mit Autoverfollständigung. :P)
Und genau darum macht es sinn gezielt mit einer Sprache programmieren anzufangen.
Lua ist btw ziemlich cool: Ich finde es persönlich schade, dass man nicht mehr auf inbuild-Scriptsprachen bei der Entwicklung von großen Applikationen setzt. Aber, von der Meinung haben wir am Planet die Tage ja eh genug gehört. ^^
Btw frage ich mich, warum du RADs bei Py so heraus hebst: Die sind bei modernen Toolkits eh absolut sprachunabhängig.
Eine Programmiersprache ist kein Schraubenzieher (auch wenn eine Programmiersprache ein Werkzeug ist), denn während du mit einem Schraubenzieher stark in den Einsatzmöglichkeiten beschränkt bist (ein Torx-Schraubenzieher wird man kaum auf Schlitzschrauben anwenden können), kannst du so gut wie mit jeder Programmiersprache, die etwas auf sich hält wahrscheinlich jede Problemstellung bewerkstelligen. Die Frage ist nur wie effizient.
Das halte ich mitlerweile für ein Gerücht: Dafür sind die Abstraktionsebenen einfach schon zu groß. Eine Anspielung habe ich ja schon ganz oben gemacht. Genau so spielt die Sinnfrage hier auch oft auf unterschiedlichen Ebenen mit. Wenn ich z.B. eine Bibliothek verfasse, dann werde ich immer zu C tendieren. (Wenn mitlerweile auch durch Vala abstrahiert.) Schlichtweg, weil ich (im Vala-Fall sogar sehr komfortabel dank gidl) dadurch sprachunabhängig Bindings erstellen kann, die überall gescheit laufen. Das ist mir persönlich sehr viel wert. (Wie wir wissen kann man auch in C plattformunabhängigen Code schreiben.)
Btw hast du das wichtigste Argument, den Side-Think-Faktor, komplett ignoriert.
Nehmen wir an, ich wäre ein blutiger Anfänger in Sachen Programmierung.
Nun möchte ich meine Kenntnisse aufbessern, es aber klein angehen lassen, d.h. keine GUIs oder sonstwas, denn das würde schon Programmiererfahrung voraussetzen.
Ich will eine einsteigerfreundliche Programmiersprache empfohlen haben, die mir das Wesentliche beim Programmieren zeigt, ohne dabei zu tief zu gehen.
Mit diesen Kenntnissen möchte ich in der Lage sein später auf andere Programmiersprachen unkompliziert aufspringen zu können.
Was wäre deine Empfehlung?
----------------------------------------------------------
Btw frage ich mich, warum du RADs bei Py so heraus hebst: Die sind bei modernen Toolkits eh absolut sprachunabhängig.
Man möge mir verzeihen, dass ich Rapid Application Development wörtlich nehme und auch mit der Zeit gleichsetze, die ich brauche um ein ausführbares Programm zu schreiben, das über keine GUI-Elemente verfügt. :P
Wie wir wissen kann man auch in C plattformunabhängigen Code schreiben.
Richtig, aber sobald man systembezogene Funktionalität nutzt, ist es dahin mit der Plattformunabhängigkeit und dann muss man zum Präprozessor greifen, was den Code aufblähen und unleserlich machen kann.
Mit Python schreibe ich den Code ein mal in seiner Wesentlichkeit und führe ihn auf beliebigen Plattformen aus, ohne Änderungen vornehmen zu müssen. Das meine ich mit Portabilität.
Btw hast du das wichtigste Argument, den Side-Think-Faktor, komplett ignoriert.
Ich bin mir ehrlich gesagt nicht sicher, was genau du damit meinst. Wenn es dir um den Unterschied zwischen Low-Level und High-Level geht, so ist das selbstverständlich, ändert aber nichts am Wesen meiner Programmierung.
Wenn jemand mit C/C++ anfängt, bekommt er auf die harte Tour die Grundzüge beigebracht, wie der Computer funktioniert (Memorymanagement (Stack/Heap), Cache (Codecache/L1/L2), Register, RAM (reading/writing), etc.). Er muss mehr aufpassen und kann fatale Fehler verursachen, was aber auch alles ist. Wenn jemand mit einer modernen High-Level-Sprache wie Python anfängt, macht er sich keine Gedanken über Memorymanagement etc. und lernt das Wesentliche beim Programmieren, ohne dabei auf Computerebene zu denken. Wenn er nun will, oder muss, kann er immernoch zu einer Low-Level-fähigen Sprache greifen und ich bezweifle, dass er dabei ein "komisches" Gefühl, oder sonstwas haben wird.
drunken monkey
16.09.2008, 12:52
Richtig, aber sobald man systembezogene Funktionalität nutzt, ist es dahin mit der Plattformunabhängigkeit und dann muss man zum Präprozessor greifen, was den Code aufblähen und unleserlich machen kann.
Mit Python schreibe ich den Code ein mal in seiner Wesentlichkeit und führe ihn auf beliebigen Plattformen aus, ohne Änderungen vornehmen zu müssen. Das meine ich mit Portabilität.
Das wird dir für eine Library aber nichts nützen. o_O' Sie werden auf jeden Fall weiterhin Python-spezifisch sein, während sie in C nicht nur (meist) bezogen aufs OS, sondern dank Bindings auch auf die Sprache portabel sind.
Dass man außerdem gerade bei Bibliotheken halbwegs auf Perfromance achten wird/sollte, und daher C von Natur aus geeigneter ist als Python, kommt noch dazu. Also gerade bei Bibliotheken hat C eindeutig die besten Karten.
Ich bin mir ehrlich gesagt nicht sicher, was genau du damit meinst.
Das kommt wohl von seiner ballistischen Annäherung an korrektes (oder auch nur verständliches) Englisch - ignorier's einfach, bis er's übersetzt. ;)
Wenn er nun will, oder muss, kann er immernoch zu einer Low-Level-fähigen Sprache greifen und ich bezweifle, dass er dabei ein "komisches" Gefühl, oder sonstwas haben wird.
Hm, er wird's aber trotzdem wahrscheinlich nicht machen.
Also ich kann natürlich größtenteils nur von mir ausgehen, aber meiner Meinung nach hat Mog da durchaus Recht: Wenn man eine Sprache erstmal gut kennt, neigt man dazu, eher bei ihr zu bleiben als zu einer nicht ganz so geläufigen zu wechseln, egal ob's jetzt fürs jeweilige Projekt besser wäre, oder nicht.
Ich selber kann jetzt z.B. nach 3 Jahren Studium um die 10 praxisrelevante Programmiersprachen, trotzdem verwende ich praktisch nichts außer Java und PHP. Höchstens hin und wieder für kleinere Sachen mal, um nicht aus der Übung zu kommen. Und zwar egal, ob das sinnvoll ist, oder nicht, weil ich zwar (z.B. für performancekritischere Programme) C könnte, es aber lang nicht so sehr mag oder gut kann (vor allem aber ersteres) wie die beiden anderen.
Folgerung: Wenn mich jemand dafür anheuern will, irgendwas zu schreiben das schnell sein muss, werde ich eher dazu tendieren, Java-Code bis zum Gehtnichtmehr zu optimieren, anstatt C zu verwenden.
Vor kurzem habe ich für so einen besoffenen Kommilitonen, der die GLib-Doku nicht lesen konnte, was mit Regular Expressions gemacht. Aber statt einem Perl-Ein(/Zwei)zeiler sind's etliche Zeilen PHP geworden, einfach weil Perl zwar geil und für die Anwendung praktisch perfekt ist, ich es aber hasse.
Hätte ich von Anfang an Perl gerlernt wäre das für mich 100%ig natürlicher und einfacher gewesen, und wäre ich jetzt in irgendeinem Job, wo oft RegExp-Programme gebraucht werden (die über ein grep-Shell-Script hinausgehen), würde ich mir zumindest anfangs deutlich leichter tun.
Sehr langer Post, kurzer Sinn: Dito an Mog, man sollte schon etwas Überlegung in die erste Programmiersprache stecken, wenn man schon die Gelegenheit hat, dass sie einem nicht plötzlich von der Schule aufgedrückt wird. [Wobei die allerersten, von der Schule aus, eh QBasic und dann VB waren, aber zum Glück so oberflächlich, dass das keinen Einfluss hatte.]
Nehmen wir an, ich wäre ein blutiger Anfänger in Sachen Programmierung.
Nun möchte ich meine Kenntnisse aufbessern, es aber klein angehen lassen, d.h. keine GUIs oder sonstwas, denn das würde schon Programmiererfahrung voraussetzen.
Ich will eine einsteigerfreundliche Programmiersprache empfohlen haben, die mir das Wesentliche beim Programmieren zeigt, ohne dabei zu tief zu gehen.
Mit diesen Kenntnissen möchte ich in der Lage sein später auf andere Programmiersprachen unkompliziert aufspringen zu können.
Was wäre deine Empfehlung?
Auch in diesem Fall würde ich erst in einem Gespräch herausfinden, was du dir vom Programmieren erwartest und was du in Zukunft gedenkst zu programmieren. Moment mal: Rekursion?^^
Schießlich geht es nicht darum einfach irgendwie programmieren zu lernen: Es geht dabei gleichzeitig so viel wie möglich davon mitzunehmen. Wie ne Schleife funktioniert, lernt man überall. Aber, nachdem man den absoluten Basis-Kram durch hat - und das geht sehr schnell - geht es ja bereits darum Bibliotheken kennen zu lernen.
Aber, das hatten wir ja schon.
Man möge mir verzeihen, dass ich Rapid Application Development wörtlich nehme und auch mit der Zeit gleichsetze, die ich brauche um ein ausführbares Programm zu schreiben, das über keine GUI-Elemente verfügt. :P
RAD ist sprachunabhängig, anyway.
Richtig, aber sobald man systembezogene Funktionalität nutzt, ist es dahin mit der Plattformunabhängigkeit und dann muss man zum Präprozessor greifen, was den Code aufblähen und unleserlich machen kann.
Mit Python schreibe ich den Code ein mal in seiner Wesentlichkeit und führe ihn auf beliebigen Plattformen aus, ohne Änderungen vornehmen zu müssen. Das meine ich mit Portabilität.
Wenn ich in Py systemspezifische Bibliotheken verwende, kann ich auch nicht mehr das System wechseln. Das ist ein sprachunabhängiges Problem. Wenn ich mir eine gute Plattform unter C aussuche, dann habe ich dieses Problem ebensowenig.
systemspezifische ifdefs brauchst du nur, wenn du Abstraktionsbibliotheken schreibst. Ich möchte behaupten, dass die Meisten leute die das machen eine schlechte Bibliothekswahl getroffen haben, oder eben eine grundlegende schreiben.
Du zählst Vorteile auf, die sprachunabhängig sind.
Ich bin mir ehrlich gesagt nicht sicher, was genau du damit meinst. Wenn es dir um den Unterschied zwischen Low-Level und High-Level geht, so ist das selbstverständlich, ändert aber nichts am Wesen meiner Programmierung.
Wenn jemand mit C/C++ anfängt, bekommt er auf die harte Tour die Grundzüge beigebracht, wie der Computer funktioniert (Memorymanagement (Stack/Heap), Cache (Codecache/L1/L2), Register, RAM (reading/writing), etc.). Er muss mehr aufpassen und kann fatale Fehler verursachen, was aber auch alles ist. Wenn jemand mit einer modernen High-Level-Sprache wie Python anfängt, macht er sich keine Gedanken über Memorymanagement etc. und lernt das Wesentliche beim Programmieren, ohne dabei auf Computerebene zu denken. Wenn er nun will, oder muss, kann er immernoch zu einer Low-Level-fähigen Sprache greifen und ich bezweifle, dass er dabei ein "komisches" Gefühl, oder sonstwas haben wird.
Es geht schlichtweg um alles, was du so nebenbei mit lernst. Vielleicht muss man aber auch so viel Code gelesen haben, wie ich, um den Unterschied sehen zu können. C-Entwickler achten einfach automatisch auf Dinge, die mans sonst gerne ignoriert.
Btw nehme ich C nur als Beispiel her, weil es mir als guter Gegensatz zu Py erscheint.
Jesus_666
16.09.2008, 13:27
Hatten wir das nicht schon mal? Zum Beispiel im Sticky >>> "Programmieren - wie fange ich an?" aka "Lies' mich zuerst" <<< LESEN! oder in Threads wie Was programmieren?? und Wahl der Programmiersprache?. Wollte nur mal wissen, inwiefern dieser Thread Neues bringt.
Streicher
16.09.2008, 15:34
Also, erstmal danke an alle. Am interessantesten hört sich für mich nach den Antworten her, bis jetzt Python an. Aber ich denke ich werde mich jetzt erstmal durch den angepinnten Thread und die anderen schon vorhandenen durcharbeiten.
Und tschuldigung an die Moderatoren, ich sollte echt lernen besser hin zu sehen und die Suchfunktion zu nutzen, ich hoffe ihr seht mir das nach ... ^^'
Streicher
Auch in diesem Fall würde ich erst in einem Gespräch herausfinden, was du dir vom Programmieren erwartest und was du in Zukunft gedenkst zu programmieren. Moment mal: Rekursion?^^
Schießlich geht es nicht darum einfach irgendwie programmieren zu lernen: Es geht dabei gleichzeitig so viel wie möglich davon mitzunehmen. Wie ne Schleife funktioniert, lernt man überall. Aber, nachdem man den absoluten Basis-Kram durch hat - und das geht sehr schnell - geht es ja bereits darum Bibliotheken kennen zu lernen.
Ich kann es mir nicht vorstellen, dass ein Anfänger schon weiß was er in Zukunft programmieren will. Wirklich nicht. Wenn ich mich an meine Anfangszeit zurück erinnere, hatte ich keine Ahnung was möglich ist oder was Programmierung überhaupt bedeutet. Wenn jemand von Bibliotheken sprach, verstand ich nur Bahnhof. Das ist der Punkt auf den ich hinaus will. Als Anfänger möchte man erst nur den "Basis-Kram" lernen und sich erstmal von der Welt des Programmierens ein Bild machen. Von Bibliotheken will man, zumindest meiner Erfahrung nach, nichts wissen. Das erste mal hatte ich mit Bibliotheken zu tun (zumindest bewusst), als ich schon relativ weit mit C++ war.
Du siehst das nun aus einer völlig anderen Perspektive, du bist routiniert, hast Erfahrung und Überblick, ich kann auch deine Gedankengänge nachvollziehen. Ich finde nur, dass du etwas übers Ziel hinausschießt, bei einer simplen Frage eines Anfängers nach einer einsteigerfreundlichen Programmiersprache, und eine Analyse der Vorstellungen des Anfängers hier nicht zwingend nötig ist. Jede simple Programmiersprache (VB, JS, Python, etc) wird für den Anfang ausreichen und sobald man den "Basis-Kram" durch hat, kann man gezielter vorgehen und sich eine Programmiersprache suchen, die auf die Bedürfnisse besser zugeschnitten ist und die dann auch anspruchsvoller ausfallen darf.
Naja, wie dem auch sein, es soll ja Menschen geben, die anderer Meinung sind.
systemspezifische ifdefs brauchst du nur, wenn du Abstraktionsbibliotheken schreibst. Ich möchte behaupten, dass die Meisten leute die das machen eine schlechte Bibliothekswahl getroffen haben, oder eben eine grundlegende schreiben.
Bei C/C++ brauche ich #ifdefs sobald ich den ANSI Standard verlasse. Filesystem, Netzwerk, Compiler, Betriebssystem, um Beispiele zu nennen wo ich in der Vergangenheit abstrahieren musste. Wobei der Fakt, dass viele Betriebssysteme auf POSIX aufbauen, bzw. es unterstützen schon einiges erleichtert.
Der Punkt ist jedenfalls, dass die mitgelieferten Module in Python mir diese Arbeit schon im Großen und Ganzen abnehmen.
Um es nochmal zu sagen: Ich schreibe einmal den Code und kann ihn auf den vielen unterstützten Betriebssystemen ausführen ohne irgendwas zu ändern, mich um Third-Party-Bibliotheken kümmern zu müssen oder sonstwas.
Das habe ich mit portablem Pythoncode gemeint und nur deswegen angesprochen, da ich dachte, du hättest mich missverstanden. Wenn das nicht der Fall ist, ist die Sache gegessen.
C-Entwickler achten einfach automatisch auf Dinge, die mans sonst gerne ignoriert.
Was mir hierzu spontan einfallen würde, wäre rein optimierungsbezogen, basierend auf mehr Hintergrundwissen im Kontrast zu dem Otto Normal-High-Level-Programmierer.
Das wird dir für eine Library aber nichts nützen. o_O' Sie werden auf jeden Fall weiterhin Python-spezifisch sein, während sie in C nicht nur (meist) bezogen aufs OS, sondern dank Bindings auch auf die Sprache portabel sind.
Dass man außerdem gerade bei Bibliotheken halbwegs auf Perfromance achten wird/sollte, und daher C von Natur aus geeigneter ist als Python, kommt noch dazu. Also gerade bei Bibliotheken hat C eindeutig die besten Karten.
Ich habe seinen ausgeklammerten Satz nur deswegen kommentiert, weil ich annahm, er bezog sich dabei auf meine Aussage, dass Pythoncode portabel ist und ich dachte er hätte mich missverstanden. Ich bezog mich dabei nicht auf Bibliotheken, sondern auf den Programmcode an sich.
Ich kann es mir nicht vorstellen, dass ein Anfänger schon weiß was er in Zukunft programmieren will. Wirklich nicht. Wenn ich mich an meine Anfangszeit zurück erinnere, hatte ich keine Ahnung was möglich ist oder was Programmierung überhaupt bedeutet. Wenn jemand von Bibliotheken sprach, verstand ich nur Bahnhof. Das ist der Punkt auf den ich hinaus will. Als Anfänger möchte man erst nur den "Basis-Kram" lernen und sich erstmal von der Welt des Programmierens ein Bild machen. Von Bibliotheken will man, zumindest meiner Erfahrung nach, nichts wissen. Das erste mal hatte ich mit Bibliotheken zu tun (zumindest bewusst), als ich schon relativ weit mit C++ war.
Du siehst das nun aus einer völlig anderen Perspektive, du bist routiniert, hast Erfahrung und Überblick, ich kann auch deine Gedankengänge nachvollziehen. Ich finde nur, dass du etwas übers Ziel hinausschießt, bei einer simplen Frage eines Anfängers nach einer einsteigerfreundlichen Programmiersprache, und eine Analyse der Vorstellungen des Anfängers hier nicht zwingend nötig ist. Jede simple Programmiersprache (VB, JS, Python, etc) wird für den Anfang ausreichen und sobald man den "Basis-Kram" durch hat, kann man gezielter vorgehen und sich eine Programmiersprache suchen, die auf die Bedürfnisse besser zugeschnitten ist und die dann auch anspruchsvoller ausfallen darf.
Naja, wie dem auch sein, es soll ja Menschen geben, die anderer Meinung sind.
Ich habe nur sachen aufgelistet, die man bedenken muss und dabei noch betont, dass ich je nach dem etwas empfehle. Das kann man recht leicht, wenn man einfach ein bisschen fragt. Je nach dem kann man ja auch die groben Sparten aufzählen. Wenn man das geschickt macht, dann geht das auch ganz unfachlich. Ein Arzt kannd ir ja auch erklären, was dich umbringt. vorallem Dr. House. Allerdings lacht der dich gleichzeitig aus. :/
Bei C/C++ brauche ich #ifdefs sobald ich den ANSI Standard verlasse. Filesystem, Netzwerk, Compiler, Betriebssystem, um Beispiele zu nennen wo ich in der Vergangenheit abstrahieren musste. Wobei der Fakt, dass viele Betriebssysteme auf POSIX aufbauen, bzw. es unterstützen schon einiges erleichtert.
Der Punkt ist jedenfalls, dass die mitgelieferten Module in Python mir diese Arbeit schon im Großen und Ganzen abnehmen.
Um es nochmal zu sagen: Ich schreibe einmal den Code und kann ihn auf den vielen unterstützten Betriebssystemen ausführen ohne irgendwas zu ändern, mich um Third-Party-Bibliotheken kümmern zu müssen oder sonstwas.
Das habe ich mit portablem Pythoncode gemeint und nur deswegen angesprochen, da ich dachte, du hättest mich missverstanden. Wenn das nicht der Fall ist, ist die Sache gegessen.
Das hatten wir doch schon: Man muss halt die richtigen Bibliotheken verwenden. In dem Fall hast du dich für die systemspezifischen entschieden. Da bist du selber schuld: Es gibt ja schließlich genug Freunde. Spontant fallen mir gvs, Thunar-VFS und gnet ein. Die hätten dein Leben wesentlich leichter gemacht.
Insofern du in Py die Posix-API auf Windows verwendest, dann wird das auch nur funktionieren, insofern die emuliert werden .... und auch da gibt es eine C-lib, die das macht.
Genau mit der Tatsache wollte ich eigentlich dein Argument brechen. Das ist aber wohl nicht so ganz hinüber gekommen.
Was mir hierzu spontan einfallen würde, wäre rein optimierungsbezogen, basierend auf mehr Hintergrundwissen im Kontrast zu dem Otto Normal-High-Level-Programmierer.
Du gehst einfach anders mti deinem Speicher um, und das automatisch. Besonders java-Programmierer neigen dazu sehr oft sehr viel unnötig zu kopieren. Naja, die Sprache hat auch keine brauchbare const-magic.
Also, es geht eben um dieses sparsamere, unbewusste Vorgehen. So war es gemeint. ^^
Jesus_666
16.09.2008, 17:48
Ich störe ja nur ungern, aber irgendwie kommt mir diese Diskussion als für den Threadersteller ein wenig nutzlos vor – ein zwölfseitiges Traktat darüber, ob Java hinreichende Unterstützung für Konstanten hat, ist ein besseres Argument dafür, das Programmieren gleich sein zu lassen, als sich für eine der umkämpften Sprachen zu entscheiden.
Ehrlich, Jungs: Ich bin mir nicht sicher, ob ich drei Viertel des Threads als off topic markieren sollte; mit einer sinnvollen Sprachempfehlung hat es auf jeden Fall nichts zu tun.
Ich schlage vor, daß wir dieses Topic erst mal zur Ruhe kommen lassen; ich bezweifle nämlich, daß irgendjemand hier etwas sinnvolles davontragen wird.
Ist doch auch eigentlich egal, in welcher Sprache ein Hobby-Programmierer seine Lust-Projekte, die in der Regel sowieso nicht fertig werden, anfängt. Bei einem größeren Projekt verwendet man die Sprache, die gefordert ist. Mit welcher Sprache man anfängt ist also eigentlich keine allzu drastische Entscheidung.
Du könntest dich ja mal erkundigen, welche Sprache ihr in der Schule behandelt und dich dann mit dieser beschäftigen. So kannst du im Unterricht ein bisschen angeben und es ist sicherlich lehrreich, eine Sprache parallel in der Schule und selbstständig zuhause zu lernen. In der Schule lernt man da nämlich in der Regel eher wenig. Aber auch privat neigt man gelegentlich dazu, manche Sachen zu übersehen, weil man sie nicht so ansprechend findet.
Python ist natürlich ganz nett. Aber auch mit Java oder Delphi (oder was man sonst so in Schulen lernt) lässt sich was anfangen. Und wenn du es etwas grundlegender magst, ist C/C++ nicht schlecht.
freundliche Grüße, Rolus
Streicher
17.09.2008, 15:34
Gut, soweit ich weiß werden wir in der Schule Java durchnehmen. D.h. ich werde mir das mal auf jedenfall ansehen. Python hört sich so für mich aber bisher immer noch am besten an. :D
Da ist mir aber noch eine Frage in den Sinn gekommen:
Sind Java und Java Script zwei völlig unterschiedliche Dinge? ....
Streicher
Sind Java und Java Script zwei völlig unterschiedliche Dinge? ....
Unterschiedlich, wie ein Erdapfel und die Knolle eines Nachtschattengewächs. (Also, ja.)
Wie Mog bereits sagte, haben Java und JavaScript fast nichts gemeinsam. Das was beide Sprachen am meisten verbindet, ist wohl, dass beide von C abstammen.
Während Java komplett objektorientiert ist und Klassen predigt, ist in JavaScript auch prozedurale und funktionale Programmierung möglich, objektorientierte zwar auch, wird aber nicht durch Klassen, sondern durch Prototypen realisiert. Vererbung, Polymorphie und Kapselung sind in JavaScript also problemlos, wenn auch etwas umständlicher möglich.
(Und um Mog nochmal zu ärgern. ;D ) Auch wenn du Java durchnehmen wirst, kannst du ruhig Python ausprobieren. Python unterstützt komplett OOP, hat also Klassen, nebenbei aber auch ähnlich JavaScript funktionale Programmierung. Du wirst also nichts umsonst lernen und kannst problemlos das was du in einer Sprache lernst auf die andere beziehen (ok, teilweise). Im Grunde ist es sogar besser, da du so das Ganze aus mehreren Blickwinkeln betrachtest und mehr mitnehmen kannst.
So Leute lasst euch gesagt sein,
ich bin kein so guter MAthematiker (3 und 4 auf dem Zeugnis 9 Klasse) und trotzdem lerne ich C++ ohne Probleme! Es kommt eben darauf an wer oder was dir dabei hilft. Ich hatte angefangen mit dem Buch "Spieleprogrammierung" von Lennart Steinke, das Beste was ich daraus gelernt habe war das Design-Dokument. In Sachen C bzw. C++ konnte ich überhaupt keinen Durchblick finden, da das Buch für Fortgeschrittene beser geeignet ist als für Blutige-Anfänger, wie ich es damals war (2 Jahre zurück).
Vor einem halben Jahr habe ich mir das Buch "Spieleprogrammierung mit DirectX - Der einfache Einstieg in die C++-Programmierung" von Christian Rousselle des Verlages Markt+Technick gekauft und Voilà, C++ zu lernen war absolutement kein Problem für mich. Denn in dem Buch sind alle einzelnen Schritte (von der Installation bis zur Kompilierung) sehr gut erklärt und auch C++ selbst!
Ich persönlich finde dieses Buch ist richtig genial zum Einstieg, nachdem man es durchhat kann man sogar selbst kleinere Spiele proggen....
Wenn das Geld nicht reicht, bzw kein befreundeter Programmierer in der Nähe ist, kannst du dich auch an kostenlose Tutorials versuchen. Ich empfehle für C++ folgendes kostenloses Buch: C++ in 21 Tagen (http://www.informit.de/books/c++21/data/inhalt.htm)
Sehr guter Einstieg, da ist C++ ein Klacks! Wnn du Fragen hast es gibt genug Foren (ich weise auf dieses hin, sowie www.dev-comm.de (http://www.dev-comm.de)), wo es fündige Programmierer gibt die dir gerne weiterhelfen!
Viel Spaß wünscht dir foley92
PS: Falls du Fragen an mich hast schreib ruhig.
Wie Mog bereits sagte, haben Java und JavaScript fast nichts gemeinsam. Das was beide Sprachen am meisten verbindet, ist wohl, dass beide von C abstammen.
Während Java komplett objektorientiert ist und Klassen predigt, ist in JavaScript auch prozedurale und funktionale Programmierung möglich, objektorientierte zwar auch, wird aber nicht durch Klassen, sondern durch Prototypen realisiert. Vererbung, Polymorphie und Kapselung sind in JavaScript also problemlos, wenn auch etwas umständlicher möglich.
Wow, das hat ihm sicher sehr viel gebracht. Wirklich. ;) :p
Immernoch mehr Informationen als bei deinem kryptischen Vergleich. :p
@Streicher:
Ich meine, wenn Streicher sich für JavaScript interessiert, könnte ich noch weiter ausholen und diese Sprache analytisch auseinandernehmen um schließlich auf wahrscheinlich das ausführlichste und anspruchsvollste JavaScript-Tutorial (http://eloquentjavascript.net/contents.html) im Netz zu verweisen. Oh snap!, das habe ich ja bereits. :/
EDIT by Mog (18.09.2008, 8:00 ): Da verwechselt wohl wer, eine Diskussion zwischen mir und dir mit einer zwischen dir und Streicher. Ich habe ja sogar noch extra darauf hingewiesen, dass er das lieber ignorieren soll. ;)
zum Einsteigen und allgemeinen Verständis zum Programmieren ist Pascal sehr gut.. alt aber gut!
Ich habe mit Borlands TurboPascal7 angefangen und es ist m.M.n. eine wirklich passende Einsteigersprache mit extrem hilfreichem Index und Hilfebibliothek für alle Befehle.. mir hat es wirklich sehr viel im Selbststudium beibringen können, ohne Internet-tutorials oder so..^^
Die Syntax ist geregelt und du gewöhnst dir eigentlich gleich einen übersichtlichen Programmierstil an (wenn du es nicht wirklich mit voller absicht versauen willst ;) )
Es basiert noch auf Dos, aber es gibt die wunderbare Dosbox oder den Patch für XP... glaub mir, es macht überhaupt nix, wenn du diese etwas ältere nimmst...
Es geht dir als Programmieranfänger ja darum, Programmieren zu lernen und nicht gleich die hightech. Ultraprogramme alias 3d spiele zu programmieren xD
wenn du dich überhaupt gar nicht mit etwas älteren Sachen anfreunden kannst, ist Delphi ne Lösung (basiert ursprünglich auf der Pascal-sprache, aber ist mittlerweile so viel anders geworden und keine "Sprache" mehr sondern ein Konzept, soweit ich gelesen habe^^)
Naja, ich will jetzt keinen Roman schreiben...
Ich leg dir TurboPascal7 (Entwicklungsumgebung.. pascalsprache) ans Herz.. falls es dich interessiert ---> PN
beste Grüße
elsen
The Best Isaac
17.09.2008, 21:12
@foley92: Wieso erinnert mich dein Post nur an Teach Yourself Programming in Ten Years (http://norvig.com/21-days.html)...
Um vielleicht etwas zum Topic beizutragen: Ich hab in der Schule die Grundlagen der Programmierung mit Turbo Pascal und Delphi gelernt, was eigentlich recht gut geklappt hat.
Später dann (ausbildungsbedingt) hab ich mich nur noch mit der .NET-Plattform beschäftigt (vor allem VB.NET). Man kommt recht schnell zu Ergebnissen (z.B. bei der Programmierung grafischer Oberflächen) aber man ist eben - mehr oder weniger - an die Windows-Plattform gebunden.
Nichtsdestotrotz könnte ich einem Anfänger VB.NET oder C# empfehlen. Es gibt viel gute kostenlose Literatur (kostenlose E-Books beispielsweise als Galileo-Computing-Openbook) und mit den sehr leistungsfähigen kostenlosen Express-Entwicklungsumgebungen von Microsoft kann man wirklich sehr gut arbeiten.
Jesus_666
18.09.2008, 01:58
Ich mach' den Thread mal dicht. Hier kommt nichts wirklich nützliches mehr und die Qualität der Posts nimmt auch im Schnitt ab.
[jesus_666@Multimediaxis Programmierung]$ chmod a-w Programmieranfänger\,\ mit\ was\ am\ besten\ anfangen\?
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.