Programmieren lernen - Welche Software, welche Sprache?

rob- schrieb:
Selbst Erfahrene Java Entwickler heulen bei C
Wüsste nicht, was das ine mit dem anderen zu tun haben sollt. Genauso sinnvoll wie.
"Selbst erfahrene PHP Entwickler heulen bei Haskell" (nichts gegen Haskell oder PHP - ich hab von beiden Sprachen keine Ahnung)
 
Zuletzt bearbeitet:
Dan Kirpan schrieb:
Ok dann also Python.

Gibt es irgendwo gute Tutorials womit ich üben kann? Würde als erstes am liebsten versuchen eine Webseite zu programmieren. Möchte auch alles direkt mit HTML5 und den neuesten Web Standards. Wie würdet ihr dafür vorgehen? Welche Programme würdet ihr nutzen?

Ich glaube du hast da ein wenig die falsche Vorstellung. Beim Web hast du verschiedene Sprachen für verschiedene Dinge:
HTML: Strukturierter Inhalt der Seite
CSS: Aussehen des Inhalts
Javascript: Veränderung des Inhalts
Das ist alles clientseitig, es läuft also bei dir im Browser. Außerdem ist Javascript die einzige Programmiersprache in der Liste.
Auf Serverseite ist dann die Logik die das ausliefert. Das können einfache HTML-Dokumente sein, dann kannst du aber nicht dynamisch Webseiten erstellen sondern immer nur den gleichen Inhalt darstellen. Für alles andere brauchst du eine Programmiersprache. Das kann prinzipiell jede sein, klassisch wäre PHP, für Python gibt es wie gesagt schöne Framworks, Javascript wird aktuell gehyped.

Falls du jetzt einfach ne Website machen möchtest, kannst du mit HTML anfangen und dann CSS und später Javascript dazunehmen. Das ist dann aber erstmal kein programmieren. Wenn du aber in dem Kontext programmieren lernen möchtest, musst du parallel 4 Sprachen lernen und dazu noch direkt die Denkweise des entsprechenden Frameworks verstehen. Das halte ich für keine gute Idee. Es ist gut schon ein Ziel zu haben, es ist auch nichts verkehrt dabei, erstmal eine Website zu basteln. Für das Programmieren aber würde ich dir empfehlen eine Sprache zu wählen und die Basics damit zu lernen und dann den Schwenk in die Webentwicklung zu machen.

Das allerwichtigste ist aber: Fang einfach an. Dieser Thread nimmt den Weg wie alle anderen Programmiereinstiegsthreads auch:
A: "Ich möchte programmieren lernen"
B: "Die Sprache ist egal, aber nimm Python"
C: "Die Sprache ist egal, aber nimm Java"
Und dann wird gefachsimpelt über die Unterschiede die für den Einsteiger völlig egal sind, ihn aber so demotivieren, dass er garnichts macht. Leg einfach los!
 
benneque schrieb:
Da ist es in etwa auf einem Level mit C++. Was aber auch überhaupt nicht schlimm ist.
Schlimm ist es in der Praxis weit weniger. Trotzdem fängt man sich ein paar Unschönheiten ein, wenn man dann doch mal auf der Ebene was basteln muss. Ob das als Kritikpunkt reicht ... in der Praxis vermutlich eher nicht.

Gruß
Andy
Ergänzung ()

SparkMonkay schrieb:
Hört sich eher so an als würden die Leute die du beschreibst keine IDE benutzen und den Code nicht testweise compilen.
Ein Segmentation fault tritt während der Laufzeit auf. In dem Fall nützt Dir also testweises kompilieren gar nix. :-)

Gruß
Andy
Ergänzung ()

NemesisFS schrieb:
Und dann wird gefachsimpelt über die Unterschiede die für den Einsteiger völlig egal sind, ihn aber so demotivieren, dass er garnichts macht. Leg einfach los!
Exakt. So ist das.

Ich verstehe sowieso nicht, warum man für eine solche Fragestellung ins Forum geht. Niemand würde auf die Idee kommen in irgendeinem Forum zu fragen "Welches Auto soll ich kaufen?". :-)

Und das mit den falschen Vorstellungen ist mir auch schon mehrfach aufgefallen. Und dann denk ich immer: Informieren sich die Leute vorher nicht mal so ein bisschen? Dank Suchmaschinen kann man sich doch schon mal grob ein Überblick über die Thematik verschaffen. Und wenn dann noch Fragen bleiben, kann man immer noch fragen. Nur sind die dann üblicherweise auch etwas gezielter und daher auch besser (mit weniger subjektiven Anteil) zu beantworten.

Deshalb sollte man evtl. bei solchen Fragen erstmal darauf hinweisen, dass Programmieren lernen Zeit kostet und so ein Spiel, App oder was auch immer nicht mal eben in paar Tagen programmiert ist und dann beispielsweise noch auf ein paar gute Seiten verlinken, wo erklärt wird, worum es beim programmieren überhaupt geht.

Insofern fand ich Dein Posting insgesamt schon ganz passend.

Gruß
Andy
 
Wenn du aber in dem Kontext programmieren lernen möchtest, musst du parallel 4 Sprachen lernen und dazu noch direkt die Denkweise des entsprechenden Frameworks verstehen.
Wobei ich damals™ auch alles quer durcheinander gelernt habe. HTML ist einfach zu lernen, für CSS sollte man HTML und die Baumstruktur des Dokuments verstehen - um mit PHP (oder einer anderen serverseitigen Sprache) irgendetwas auf den Bildschirm zu bekommen, muss man aber weder HTML noch CSS perfekt beherrschen.

Es könnte durchaus sinnvoll sein, gleich damit anzufangen, das "Wie stelle ich XY in HTML/CSS dar?" kommt dann automatisch. Javascript... muss man ja nicht sofort mit anfangen.

_____________________

Auch wenn es hier nicht wirklich um C++ oder Java gehen sollte, weil ersteres für Webservices meiner Meinung nach völlig ungeeignet ist (da Sicherheit > Performance) und Java auch nicht unbedingt die Standardlösung für die Probleme da ist:

benneque schrieb:
Da ist es in etwa auf einem Level mit C++. Was aber auch überhaupt nicht schlimm ist. Die 1-2 mal im Monat, dass man ein 2.pow(4) gebrauchen könnte, kann man auch Math.pow benutzen
AFAIK soll diese Syntax in C++17 sogar ermöglicht werden. Wobei die Trennung, wie sie aktuell ist, schon einen Sinn hat - pow() ist eine Funktion, die mit der Grundfunktion der primitiven Typen nichts zu tun hat. Es würde auch niemand auf die Idee kommen und das Aufsummieren von Werten in einer Liste als Methode der List-Klasse zu implementieren, weil es da nicht hingehört und auch gar nicht mit allen Typen funktionieren würde.

Übrigens wieder so ein Fall, der bei Java zu Klassen führt, die nur statische Methoden enthalten - schlechtes Sprachdesign.

Der Punkt ist nur - in C++ könnte man die primitiven Typen wrappen, ohne etwas zu verlieren:
Code:
template<typename RawType>
class Integer {
public:
  Integer() { }
  Integer(RawType n)
  : _raw(n) { }
  Integer operator + (Integer other) const { return Integer(this->_raw + other._raw); }
  bool operator == (Integer other) const { return this->_raw == other._raw; }
  // [...]
private:
  RawType _raw;
};
der schlaue C++-Programmierer benutzt jetzt noch constexpr
Ich sehe aber kein Szenario, wo das tatsächlich mal vorteilhaft wäre. Wenn man Templates schreibt, hat man in der Regel gewisse Anforderungen an die Typen (z.B. "Typ braucht ==-Operator"), aber in dem konkreten Fall ist es egal, ob es sich um ein komplexes Objekt handelt oder um einen primitiven Typen.

Was haben wir dagegen in Java? Generics, bei denen alles von Object erben muss, und Wrapper-Klassen, die mit Pech auf dem Heap instantiiert werden und die folgende potentielle Fehlerquelle haben:
Code:
Integer a1 = 5;
Integer a2 = 5;
Integer b1 = 1000;
Integer b2 = 1000;

a1 == a2  // true
b1 == b2  // false
Wer sich mit Java etwas auskennt, wird wissen, woran das liegt, aber erklärt das mal einem Anfänger.

Ein Segmentation fault tritt während der Laufzeit auf. In dem Fall nützt Dir also testweises kompilieren gar nix. :-)
Debugger. :P
Unter Linux kann man (wenn System entsprechend konfigutiert) sogar nen Coredump nachträglich in einen Debugger laden. Ausprobiert habe ich das allerdings nie.

rob- schrieb:
Java ist für Anfänger top, einzig aus dem Grund dass man präzise Fehlermeldungen auf die Zeile genau bekommt.
Und Compiler für andere Sprachen würfeln die Zeilennummern, die sie für ihre Fehlermeldungen ausspucken, zufällig aus, oder wie muss man das verstehen?

rob- schrieb:
Oft gibt es nicht mal einen Fehler, es funktioniert vorerst, nur dann crasht es irgendwann irgendwo.

Viel Spaß beim suchen
gdb benutzen, ggf. valgrind benutzen und schon ist der Fehler zumindest eingegrenzt. Die eigentliche Ursache kann natürlich recht komplex sein.

Java fliegt einem auch gerne mit NullPointerExceptions um die Ohren, wenn irgendwo ein Fehler im Code ist. Unterschied zum Segmentation Fault mit Stack Trace? ...sehe ich jetzt irgendwie keinen.
 
Zuletzt bearbeitet:
wenn es um webentwicklung geht.. einfach erstmal mit html und css anfangen.. dann halt mit javascript rumspielen schleifen, verzweigungen, array etc. kennenlernen.. dann kann man ja weiterschauen.. eins nach dem anderen
 
VikingGe schrieb:
AFAIK soll diese Syntax in C++17 sogar ermöglicht werden. Wobei die Trennung, wie sie aktuell ist, schon einen Sinn hat - pow() ist eine Funktion, die mit der Grundfunktion der primitiven Typen nichts zu tun hat.
Hm. Ich wüsste jetzt nicht, wieso ne Potenzfunktion nicht auf jeglichen Zahlentyp anwendbar sein sollte.
Und ja, die Ausplittung von primitiven Typen auf der einen Seite und Objekten auf der Anderen ist bekloppt.

VikingGe schrieb:
Übrigens wieder so ein Fall, der bei Java zu Klassen führt, die nur statische Methoden enthalten - schlechtes Sprachdesign.
Es ist ok, wenn man Javas Sprachdesign bemängelt. Dann aber ausgerechnet C++ als Gegenentwurf anzuführen, passt dann aber alles

VikingGe schrieb:
Debugger. :P
Unter Linux kann man (wenn System entsprechend konfigutiert) sogar nen Coredump nachträglich in einen Debugger laden. Ausprobiert habe ich das allerdings nie.
Aber auch Debugger arbeiten zur Laufzeit. Er meinte ja, dass man sokche Fehler zur Compile-Zeit finden kann. Zumindest hat er diesen Eindruck vermittelt.

VikingGe schrieb:
Und Compiler für andere Sprachen würfeln die Zeilennummern, die sie für ihre Fehlermeldungen ausspucken, zufällig aus, oder wie muss man das verstehen?
Na zumindest für Java kriegst Du wenn Du willst zeilengenaue Fehlermeldungen.
Der Punkt ist aber der, dass das kein alleiniger Java-Vorteil ist und Du das auch in anderen Sprachen hinkriegst. Du benötigst halt bloß sogenannte Debuginformationem im Code. Wenn Du Dich nicht mit einfügst, dann kriegst Du sowohl bei Java als auch bei C keine solch komfortablen Ausgaben hin.

VikingGe schrieb:
gdb benutzen, ggf. valgrind benutzen und schon ist der Fehler zumindest eingegrenzt.
Machen wir uns nix vor. Fehlersuche in C und C++ kann echt zeitraubend sein. Die Sprache gibt nicht mal her das man mit vertretbaren Aufwand Softwareverifikation durchführen kann. Für moderne und sicherheitskritische Anwendungen ist der ganze Kram eigentlich denkbar ungeeignet.

Gruß
MichaelK
 
andy_m4 schrieb:
Hm. Ich wüsste jetzt nicht, wieso ne Potenzfunktion nicht auf jeglichen Zahlentyp anwendbar sein sollte.

Sagt er ja gar nicht. In denke, was VikingGe meint, ist dass das Potenzieren keine der GRUNDFUNKTIONALITÄTEN von Zahlen ist. In modernem C++ gilt der Grundsatz, nur die absolut nötigen Grundfunktionalitäten eines Typs als Klassenmethoden zu implementieren und alles andere (das über diese Grundfunktionalitäten abgebildet werden kann) als freie Funktionen zu implementieren. Das ist zumindest eine Gedankenschule, die von Leuten wie Scott Meyers vorangetrieben wird.
 
ice-breaker schrieb:
Es ist immer das gleiche wie sich hier dir Köpfe über Programmiersprachen eingeschlagen werden...
Vor allem will er es lernen und kein Geschwätz von Möchtegernen hören, die Sprache A oder B favorisieren und von C ja mal so gar nichts halten, wobei D sowieso der letzte Abschaum ist. Solch ein Thread artet jedes Mal dermaßen aus, dass der TE am besten einen neuen startet und sich alle "Erfahrenen" *hust* weiter im alten die Köpfe einrennen. Oder gleich mit irgendwas beginnt und sich solche Tiraden erst gar nicht anhören muss. Er versteht sowieso (noch) nix davon. Später lacht er drüber, wie sich einige hier die Köpfe eingerannt haben. Peinlich...!

Sprachspezifische Konstrukte, Templates, Wrapper und ähnlicher Schmarn sind nun bereits wieder vorhanden.

Jungs er will es lernen und sich nicht eure geistigen Ergüsse geben!
 
Ein Mod könnte die aus dem Thread entstandene Diskussion ja in einen neuen Thread auslagern.
 
Frage richtig stellen / Subthreads

Yuuri schrieb:
Vor allem will er es lernen und kein Geschwätz von Möchtegernen hören, die Sprache A oder B favorisieren und von C ja mal so gar nichts halten, wobei D sowieso der letzte Abschaum ist. Solch ein Thread artet jedes Mal dermaßen aus, dass der TE am besten einen neuen startet und sich alle "Erfahrenen" *hust* weiter im alten die Köpfe einrennen.
Ich glaub, dass liegt in der Natur der Sache. Umso allgemeiner die Frage gehalten ist, umso breiter werden natürlich auch die Antwortmenge gestreut sein. Vorallem weil jeder irgendwie etwas anderes im Kopf hat.

Das Problem sind hier eindeutig die Fragen a-la "Ich will programmieren lernen".
Das wirst Du in anderen Foren genauso haben. Geht ins Kochforum jemand hin und fragt so nach dem Motto: "Ich möchte kochen lernen" da wirst Du das Gleiche haben. Der eine preist die Vorzüge der italienischen Küche, während der nächste irgendwie davon erzählt, dass man alles bequem und einfach via Mikrowelle machen kann usw.

Hilfe kann nur dann hilfreich sein, wenn die Frage schon möglichst eng gefasst ist. Und hier sind zunächst einmal die Fragesteller in der Pflicht.

Ich mein, wenn ich mir Möbel kaufe gehe ich doch auch nicht in irgendein Forum und Frage: Ich möchte Möbel kaufen. Was könnt ihr mir empfehlen?"

Sondern da macht man sich Gedanken. Informiert sich schon mal vorab. Wofür braucht man die Möbel. Wie ist die Wohnung beschaffen. Wie soll es stilmäßig sein usw.
Und daraus können sich dann natürlich Fragen ergeben, die dann aber schon sehr viel konkreter sind. Beispielsweise Fragen a-la:
"Mir gefällt die Küche von IKEA ganz gut. Und ich bräuchte eine für meine 10m² Küche. Hat da jemand Erfahrungen was die Qualität angeht?
Gibt es preislich und funktionell Alternativen?"

Da wird dann keiner um die Ecke kommen mit irgendeiner Luxusküche. Und keiner wird um die Ecke kommen mit irgendwelchen Billig-Dingern ausm Discount-Baumarkt. Er hat gute Chancen hilfreiche (konkrete) Hinweise zu bekommen.

Und anders ist es hier auch nicht.

Nur leider scheint es irgendwie aus der Mode gekommen zu sein sich vorher zu informieren und sich wirklich Gedanken um die Fragestellung zu machen.

Wenn man den Antwortenden hier eine Mitschuld geben will, dann am ehsten in dem Sinne, dass man eben nicht genau darauf hinweist.

Was mich persönlich angeht, ich hab eigentlich nur was geschrieben weil mich die Subdiskussion interessierte und nicht die Belange des Threaderstellers. Ich sehe das auch nicht als Problem an.

Genau dazu gibt es ja die Möglichkeit Subthreads einzurichten (visuell am besten wahrnehmbar in der Baumansicht; was dann für Nichtinteressierte auch ne einfache Möglichkeit gibt, für in nicht relevante Sachen zu überlesen).

Sonst täte es ja auch ne einfache Antwort-Funktion die Postings einfach nur hinten dran hängt.

Gruß
Andy
Ergänzung ()

antred schrieb:
Sagt er ja gar nicht. In denke, was VikingGe meint, ist dass das Potenzieren keine der GRUNDFUNKTIONALITÄTEN von Zahlen ist.
Wobei man dann immer wieder vor dem Problem steht, wo man denn die Grenze zieht.


antred schrieb:
In modernem C++ gilt der Grundsatz, nur die absolut nötigen Grundfunktionalitäten eines Typs als Klassenmethoden zu implementieren und alles andere (das über diese Grundfunktionalitäten abgebildet werden kann) als freie Funktionen zu implementieren.
Na erstens ist es ja nicht immer sinnvoll das genau über die Grundfunktionalitäten abzubilden, weil wenn z.B. die CPU für ne bestimmte mathematische Funktion spezielle Instruktionen bereitstellt.
Zweitens finde ich da den Ansatz über "Generic functions" (siehe Common LISP Object System) sehr viel besser.

antred schrieb:
Das ist zumindest eine Gedankenschule, die von Leuten wie Scott Meyers vorangetrieben wird.
Ja. So hat jeder eben seinen Stil. Das ist halt das Problem bei C++. Da gibt es kein klares Konzept, sondern es wird/wurde alles reingehauen was sich zero-cost implementieren lässt so mit der Begründung, dass man dann halt ne große Auswahl an Features hat die man benutzen kann. Das führt eben dazu, dass C++ inzwischen so komplex und undurchschaubar ist, dass es nur wenige überblicken.

Eigentlich müsste der Compiler auch einen Schalter haben, wonach bei ... ich sag mal nicht-empfohlenden Konstrukten der Compiler zumindest ne Warnung ausgibt. So das der Programmierer wenigstens darauf gestoßen wird, wenn er C++ verwendet, welches nicht dem "modern-way" entspricht.

Ich möchte nicht wissen, wieviele Sicherheitslücken die täglich in C++ Programmen bekannt werden einfach nur dem geschuldet sind, dass die Programmierer da noch eifrig "Dirty-Features" einsetzen, obwohl moderne Ansätze ganze Problemklassen ganz eleminieren.

Evtl. ergeben sich hier auch gute Möglichkeiten für Neulinge wie Rust, die halt ohne den ganzen Ballast der Vergangenheit daherkommen.

Gruß
Andy
 
Zurück
Oben