Hallo! Leider bin ich momentan nur am smartphone weswegen ich leider etwas merkwürdig schreibe. Mein laptop ist leider nur kaputt gegangen. Ich bin 25, fast 26 und komme leider erst jetzt dazu mich durch ein Studium stärker damit zu befassen
Zum Thema: ich fange diesen Monat mit meinen Informatik Studium an, auf einer fh, und wollte in meiner Freizeit einige kleine programmier Angelegenheiten selbst bauen. Da kommt man aber auf die Frage: welche Sprache denn dafür?
Da ja leider java auf der fh und uni gelernt wird, ich diese aber aufgrund meiner früheren schulerfahrung eher negativ in Erinnerung habe (stapeln der fehler im Programm die übergangen werden und dadurch das Programm leicht stockt) , bin ich am überlegen python zu verwenden, auch um mit linux besser zurecht zu kommen. Da ich linux aber gleichzeitig ungern als zweites Betriebssystem auf meinem Laptop habe (vor ein paar Jahren hab ich es geschafft mir meinen pc damit zu zerschießen und musste alles neu machen).
Steh ich jetzt vor der Frage: python, java oder was anderes?
Auch habe ich mir überlegt dafür ein raspberry pi mir anzuschaffen um mich damit genauer auseinander zu setzen.
Meine Projekte wären dahingehend , als Beispiel, ein Messenger über direkt Kontakt (so ne art icq nur selbst erstellt), kontrollsoftware für einen Rechner und auch mögliche apps für ein Android zu schreiben, vor allen möchte ich irgendwann ein eigenes Spiel entwickeln(dafür muss dann aber eine andere Sprache her). Eignet sich python überhaupt dafür? Vor allem um mit linux und dem allgemeinen programmier basics anzufangen? Oder ist Java dafür besser?
Grundfrage
- noisefloor
- User
- Beiträge: 4253
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Antwort: kommt drauf an
Für den Raspi ist Python sicherlich erst Wahl und wird ja auch von den Raspi-Entwicklern propagiert.
Für Android App ist Java 1. Wahl, weil Java die Sprache der Wahl für Android und das System ja auch im Java umgesetzt ist. Für einfache Apps kannst du auch HTML+CSS+JavaScript nehmen.
Grundsätzlich ist IMHO aber Python zum Programmieren "angenehmer" als Java.
Aber das sind so Fragen, wo am Ende immer raus kommt: Frag' fünf Leute und du bekommst sechs Meinungen.
Gruß, noisefloor
Antwort: kommt drauf an
Für den Raspi ist Python sicherlich erst Wahl und wird ja auch von den Raspi-Entwicklern propagiert.
Für Android App ist Java 1. Wahl, weil Java die Sprache der Wahl für Android und das System ja auch im Java umgesetzt ist. Für einfache Apps kannst du auch HTML+CSS+JavaScript nehmen.
Grundsätzlich ist IMHO aber Python zum Programmieren "angenehmer" als Java.
Aber das sind so Fragen, wo am Ende immer raus kommt: Frag' fünf Leute und du bekommst sechs Meinungen.
Gruß, noisefloor
Mir geht es vor allem darum das programmieren zu lernen. Also die basics vernünftig rein zu bekommen. Für die fh muss ich eh jede Sprache ein bisschen können
Da Frage ich mich nun mal ob python das richtige ist und ob man damit auch für Windows programmieren kann.
Da Frage ich mich nun mal ob python das richtige ist und ob man damit auch für Windows programmieren kann.
- noisefloor
- User
- Beiträge: 4253
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ja Python ist für Anfänger gut geeignet und Python funktioniert auch einwandfrei unter Windows.
Oft kommt es ja drauf an, ein Gesamtproblem in "Häppchen" zu zerlegen und das ganze dann programmtechnisch umzusetzen. Das ist erstmal unabhängig von der Sprache.
Das "wie" der Umsetzung ist dann sehr wohl abhängig von der Sprache. So ein Klassiker zwischen Python und Java ist, dass du in Python direkt auf Attribute von (Instanzen von) Klassen zugreifen kannst, während du in Java Getter und Setter brauchst.
IMHO ist es so, dass wenn man eine Sprache kann, eine 2. Programmiersprache nicht so schwierig ist zu lernen - sofern das Paradigma nicht komplett anders ist.
Gruß, noisefloor
ja Python ist für Anfänger gut geeignet und Python funktioniert auch einwandfrei unter Windows.
Definiere mal "basics"Also die basics vernünftig rein zu bekommen.
Das "wie" der Umsetzung ist dann sehr wohl abhängig von der Sprache. So ein Klassiker zwischen Python und Java ist, dass du in Python direkt auf Attribute von (Instanzen von) Klassen zugreifen kannst, während du in Java Getter und Setter brauchst.
IMHO ist es so, dass wenn man eine Sprache kann, eine 2. Programmiersprache nicht so schwierig ist zu lernen - sofern das Paradigma nicht komplett anders ist.
Gruß, noisefloor
-
BlackJack
@Kael: Programmieren kann man IMHO nicht mit *einer* Sprache lernen. Es gibt ja (unter) anderem verschiedene Sprachen, weil die unterschiedliche Herangehensweisen haben Probleme zu lösen und wenn man eine Sprache beherrscht, und eine neue lernt, sollte das auch immer beeinflussen wie man in den anderen Sprachen über Probleme/Lösungen nachdenken kann. Ich habe OOP mit Java kennengelernt, und das hatte Einfluss darauf wie ich C-Programme schreibe. Haskell hatte Einfluss darauf wie ich C- und Python-Programme schreibe. Python hatte Einfluss darauf wie ich OOP verstehe, weil Java's Ansatz nicht der einzige ist. Io hat mir klar gemacht das OOP keine Klassen braucht und eine Programmiersprache nur sehr wenig Syntax. (Okay, das habe ich eigentlich von Scheme und Lisp gelernt). Io ist rein OOP, fühlt sich aber sehr funktional an.
Python kann eine passende Einstiegssprache sein.
Aber mal ehrlich, das hier ist ein Python-Forum. Denkst Du ausgerechnet hier wird Dir jemand von dieser Sprache abraten, die wie überall zu lesen ist, auf gute Lesbarkeit, auch für interessierte Laien, ausgelegt ist?
Was übrigens nicht das gleiche ist, wie leicht für Anfänger solchen gut lesbaren Code zu schreiben.
Python kann eine passende Einstiegssprache sein.
Aber mal ehrlich, das hier ist ein Python-Forum. Denkst Du ausgerechnet hier wird Dir jemand von dieser Sprache abraten, die wie überall zu lesen ist, auf gute Lesbarkeit, auch für interessierte Laien, ausgelegt ist?
Nun ja, es geht mir da eher um das Grundkonzept und auch um die 'Anfänge' besser zu verstehen.
ICh habe mich schon mit C# angefangen auseinander zu setzen und Java hatte ich früher in der Schule.
Allerdings ist der Aufbau von C# ein wenig gewöhnungsbedürftig (auch wenn ich ihn natürlich weiter lerne) - und da ich an der FH eh ca. 4-5 verschiedene Sprachen lerne. (1-2 Semester kommt C und C++, dann 3-4 kommt C# und Java - Warum auch immer JAva so spät kommt...)
Und jap
Denke ich. Letztlich haben hier viele die Erfahrung was 'mit Python möglich ist' und ob es als Anfängersprache angemessen wäre, vor allem mit so hegen Zielen von mir. Alle anderen Sprachen muss ich so oder so lernen, mir gehts nun nur einfach darum die Basics besser zu verstehen 
ICh habe mich schon mit C# angefangen auseinander zu setzen und Java hatte ich früher in der Schule.
Allerdings ist der Aufbau von C# ein wenig gewöhnungsbedürftig (auch wenn ich ihn natürlich weiter lerne) - und da ich an der FH eh ca. 4-5 verschiedene Sprachen lerne. (1-2 Semester kommt C und C++, dann 3-4 kommt C# und Java - Warum auch immer JAva so spät kommt...)
Und jap
- pillmuncher
- User
- Beiträge: 1532
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@Kael: Die Grundlage der Programmierung - ebenso wie der Mathematik - ist die Logik. Ich empfehle dazu das Büchlein Grundkurs im logischen Schließen von Eike v. Savigny.
Die grundlegenden Elemente von Programmen sind Bennennung und Kombination von Werten, Fallunterscheidungen, Wiederholungen und Funktionsabstraktion.
Typischerweise kann alles, was in einer Programmiersprache als Wert verwendet werden kann, an einen Namen gebunden werden. Du kennst sicherlich das Konzept einer Variablen. Variablen haben Namen und referenzieren Werte. In Java kann man nur Werte wie Zahlen, Strings oder Objekte an Namen binden / an Variablen zuweisen, aber nicht Methoden oder Klassen. Python dagegen ist weniger restriktiv, da können auch Methoden, Klassen und Funktionen and Namen gebunden werden, ganz einfach weil diese in Python auch bloß Objekte sind.
Mit Kombination von Werten meine ich hier die Möglichkeit, mehrere Werte zu einem einzigen Wert zu gruppieren, so dass man mittels eines Schlüssels auf die einzelnen Werte zugreifen kann, aus denen diese Gruppe zusammengesetzt ist. Beispiele hierfür wäre Listen, Tupel, Arrays, Sets, Maps, aber auch Structs und Klassen, je nach Programmiersprache. Manche Sprachen besitzen noch zusätzliche Kombinationsmöglichkeiten, wie zB. Summen-Typen (in C/C++ wären das etwa Unions).
Mechanismen zur Fallunterscheidung sind Konstrukte wie if/else-if/else und switch-case (C/C++/C#/Java/...) / select-case (BASIC), aber auch polymorpher Dispatch. In statisch typisierten objektorientierten Sprachen gibt es oft lediglich das Überschreiben von Methoden innerhalb einer Klassenhierarchie (Laufzeit-Polymorphismus) und das Überladen von Funktionsnamen (Compilezeit-Polymorphismus), in dynamisch typisierten Sprachen (Python/Ruby/Perl/...) gibt es noch weitere Arten von Polymorhismus. In Python kann man zB. Funktionen - weil sie Objekte und damit Werte sind - in einem Dictionary einem Schüssel zuordnen, über den man sie dann wieder abfragen und danach ausführen kann. In Clojure gibt es Protokolle und Multimethoden.
Wiederholungen sind zB. for- und while-loops, können aber auch durch rekursive Funktionsaufrufe programmiert werden.
Funktionsabstraktion liefert die Möglichkeit, eine Berechnung zu reifizieren, d.h. einem dynamischen Prozess einen Namen zu geben. Zusätzlich kann so eine Berechnung parametrisiert werden. EIn Beispiel wäre f(x) := x + 1. Angewendet auf 3 erhält man 4, angewendet auf 9 erhält man 10, usw.
Dazu kommen, je nach Programmiersprache noch weitere Möglichkeiten der Reifikation von Konzepten. In Scheme zB. gibt es call/cc, das den aktuellen Zustand des Programms reifiziert, so dass man später in diesen Zustand zurückkehren kann.
Ich schreibe das alles nur, damit du von diesen Konzepten mal gehört hast. Du wirst ihnen in der Praxis nur nach und nach begegnen. Du wirst dich im Laufe der Zeit an sie gewöhnen und sie verstehen und lernen, wie sie zusammenhängen und wie man sie verwenden kann.
Nachdem du einigermaßen einen Überblick über ein paar Programmiersprachen gewonnen hast und dir diese Konzepte in unterschiedlichen Ausprägungen begegnet sind, solltest du immer, wenn du eine neue Sprache lernst, fragen, welche grundlegenden Elemente sie besitzt und welche Möglichkeiten zur Abstraktion und Kombination sie bietet und wie sie dort idiomatisch benutzt werden. Wenn du dann mal etwas Zeit übrig hast, solltest du dir diese Vorlesungsreihe (wenigstens die ersten paar Videos) von Hal Abelson und Gerry Sussman vom MIT ansehen, Englischkenntnisse vorausgesetzt: https://www.youtube.com/watch?v=2Op3QLz ... A54363BC46
Die grundlegenden Elemente von Programmen sind Bennennung und Kombination von Werten, Fallunterscheidungen, Wiederholungen und Funktionsabstraktion.
Typischerweise kann alles, was in einer Programmiersprache als Wert verwendet werden kann, an einen Namen gebunden werden. Du kennst sicherlich das Konzept einer Variablen. Variablen haben Namen und referenzieren Werte. In Java kann man nur Werte wie Zahlen, Strings oder Objekte an Namen binden / an Variablen zuweisen, aber nicht Methoden oder Klassen. Python dagegen ist weniger restriktiv, da können auch Methoden, Klassen und Funktionen and Namen gebunden werden, ganz einfach weil diese in Python auch bloß Objekte sind.
Mit Kombination von Werten meine ich hier die Möglichkeit, mehrere Werte zu einem einzigen Wert zu gruppieren, so dass man mittels eines Schlüssels auf die einzelnen Werte zugreifen kann, aus denen diese Gruppe zusammengesetzt ist. Beispiele hierfür wäre Listen, Tupel, Arrays, Sets, Maps, aber auch Structs und Klassen, je nach Programmiersprache. Manche Sprachen besitzen noch zusätzliche Kombinationsmöglichkeiten, wie zB. Summen-Typen (in C/C++ wären das etwa Unions).
Mechanismen zur Fallunterscheidung sind Konstrukte wie if/else-if/else und switch-case (C/C++/C#/Java/...) / select-case (BASIC), aber auch polymorpher Dispatch. In statisch typisierten objektorientierten Sprachen gibt es oft lediglich das Überschreiben von Methoden innerhalb einer Klassenhierarchie (Laufzeit-Polymorphismus) und das Überladen von Funktionsnamen (Compilezeit-Polymorphismus), in dynamisch typisierten Sprachen (Python/Ruby/Perl/...) gibt es noch weitere Arten von Polymorhismus. In Python kann man zB. Funktionen - weil sie Objekte und damit Werte sind - in einem Dictionary einem Schüssel zuordnen, über den man sie dann wieder abfragen und danach ausführen kann. In Clojure gibt es Protokolle und Multimethoden.
Wiederholungen sind zB. for- und while-loops, können aber auch durch rekursive Funktionsaufrufe programmiert werden.
Funktionsabstraktion liefert die Möglichkeit, eine Berechnung zu reifizieren, d.h. einem dynamischen Prozess einen Namen zu geben. Zusätzlich kann so eine Berechnung parametrisiert werden. EIn Beispiel wäre f(x) := x + 1. Angewendet auf 3 erhält man 4, angewendet auf 9 erhält man 10, usw.
Dazu kommen, je nach Programmiersprache noch weitere Möglichkeiten der Reifikation von Konzepten. In Scheme zB. gibt es call/cc, das den aktuellen Zustand des Programms reifiziert, so dass man später in diesen Zustand zurückkehren kann.
Ich schreibe das alles nur, damit du von diesen Konzepten mal gehört hast. Du wirst ihnen in der Praxis nur nach und nach begegnen. Du wirst dich im Laufe der Zeit an sie gewöhnen und sie verstehen und lernen, wie sie zusammenhängen und wie man sie verwenden kann.
Nachdem du einigermaßen einen Überblick über ein paar Programmiersprachen gewonnen hast und dir diese Konzepte in unterschiedlichen Ausprägungen begegnet sind, solltest du immer, wenn du eine neue Sprache lernst, fragen, welche grundlegenden Elemente sie besitzt und welche Möglichkeiten zur Abstraktion und Kombination sie bietet und wie sie dort idiomatisch benutzt werden. Wenn du dann mal etwas Zeit übrig hast, solltest du dir diese Vorlesungsreihe (wenigstens die ersten paar Videos) von Hal Abelson und Gerry Sussman vom MIT ansehen, Englischkenntnisse vorausgesetzt: https://www.youtube.com/watch?v=2Op3QLz ... A54363BC46
In specifications, Murphy's Law supersedes Ohm's.
Danke erstmal für die Übersicht
hat mir so schon gut geholfen.
Hab python 3.4 auf meinem Windows Laptop installiert und probiere heute etwas damit rum.
Überlege mir Sicherheitshalber den raspberry zu holen.
Leider lassen sich mit python ja keine Mikrocontroller programmieren. Daher probier ich es erstmal mit den normalen lernwegen und setze mich an ein Textbasiertes Spiel ran
Hab python 3.4 auf meinem Windows Laptop installiert und probiere heute etwas damit rum.
Überlege mir Sicherheitshalber den raspberry zu holen.
Leider lassen sich mit python ja keine Mikrocontroller programmieren. Daher probier ich es erstmal mit den normalen lernwegen und setze mich an ein Textbasiertes Spiel ran
- pillmuncher
- User
- Beiträge: 1532
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Guckstu: micropython.orgKael hat geschrieben:Leider lassen sich mit python ja keine Mikrocontroller programmieren.
In specifications, Murphy's Law supersedes Ohm's.

Okay... ich habe bisher nur davon gehört das es C, Assembler und eventuell C++ für Mikrocontroller gibt. (An dem Punkt bin ich zwar nochl ange nicht anbelangt, aber definitiv etwas womit ich einmal arbeiten will)
Wieder was gelernt, aber dass ist ja 'NOCH' nur ein Kickstarter wie ich sehe?
-
BlackJack
@Kael: BASIC ist für Mikrokontroller auch eine Weile sehr beliebt gewesen, weiss nicht, ob das immer noch so ist. Python ist jedenfalls auf solchen Plattformen eher exotisch, aber da sind wir auch schon wieder bei Deiner etwas sehr allgemeinen Grundfrage: Mikrokontroller Programmieren und Web- oder Desktopanwendungen zu schreiben sind praktisch gesehen doch recht verschieden. Es gibt nicht *die* Sprache für alles.
Bei Mikrokontrollern ist C mit eventuell ein bisschen C++ eher verbreitet. Wobei das kein C++ ist, welches man auf dem Desktop so schreiben würde, weil es meistens wirklich nur darum geht C zu schreiben, und ein paar von den Aspekten von C++ zu verwenden (Namensräume beispielsweise), und kein idiomatisches C++.
Noch Kickstarter? Man kann die Software herunterladen und die Hardware bestellen. Da steht das die vorrätig ist, also nicht erst vielleicht irgendwann in der Zukunft kommen wird.
Bei Mikrokontrollern ist C mit eventuell ein bisschen C++ eher verbreitet. Wobei das kein C++ ist, welches man auf dem Desktop so schreiben würde, weil es meistens wirklich nur darum geht C zu schreiben, und ein paar von den Aspekten von C++ zu verwenden (Namensräume beispielsweise), und kein idiomatisches C++.
Noch Kickstarter? Man kann die Software herunterladen und die Hardware bestellen. Da steht das die vorrätig ist, also nicht erst vielleicht irgendwann in der Zukunft kommen wird.
