Lernen neuer Programmiersprachen

  • Hey zusammen,


    wie ihr sicher mitbekommt habt habe ich jetzt vor Java zu erlernen. Dazu beschäftigt mich noch eine Frage.


    Ich habe ja auch noch vor weitere Sprachen zu erlernen und frage mich jetzt auf was es wirklich ankommt beim Erlernen einer Programmiersprache. Sind das eher die ganzen Befehle usw... oder er doch die tiefgreifenden Muster welche man dann auf weitere Programmiersprachen anwenden kann wie z.b. Design Patterns, OOP.


    Wie seht ihr es denn und was ist eure Erfahrung?


    Grüße,

    Stef

  • Die Grundlagen der Programmierung kannst Du an fast jeder ernst zu nehmenden Sprache lernen.

    Die Frage, die Du Dir stellen solltest ist, was willst Du machen, denn je nach Bereich, bieten sich andere Sprachen an.


    Java habe ich bspw. nur mal Grundlagen gelernt, für meine Bereiche aber nie wieder benötigt.

  • Für java solltest Du Dich mit Klassen-Hierarchie und am besten auch mit Polymorphie beschäftigen.

    In Java spielen Klassen die zentrale Rolle, in manchen fällen - meiner Meinung nach - schon fast übertrieben.


    Ich persönlich mag java zwar nicht, aber es gibt Aufgaben, die es rechtfertigen.

    ;)

  • Hey,


    ich habe vor ein Programm zu programmieren welches ich Betriebssystem unabhängig öffnen und auführen kann mit Datenbankverbindung. Und später hin dann Apps fürs Handy.


    Java ist dafür ja gut geeignet oder würdest du mir was anderes vorschlagen?

    Welche Aufgaben rechtfertigen Java aus deiner Sicht denn?


    Grüße,

    Stef

  • Meine Meinung zu Java ist rein persönlich aufgrund eigener Erfahrungen und soll keine fachliche Kompetenzaussage sein.


    Java gehört aus meiner Sicht in Embedded-Projekte, wo es ja auch größtenteils vertreten ist. Natürlich gibt es auch Projekte, die mit Java umgesetzt wurden. wenn man für diese Projekte AddIns oder Erweiterungen schreiben möchte, macht es natürlich Sinn, Java zu verwenden Ich glaube Minecraft ist dafür bekannt, kann mich aber auch täuschen.


    Wenn Du aber schon planst, das auch als App zu nutzen, würde ich mich anders ausrichten, mehr in Richtung API.

    Da ich keine Details von dem Projekt kenne, kann ich natürlich auch vollkommen daneben liegen, aber so würde ich das angehen.

    Die Entscheidung, welche Sprache dann stattdessen verwendet wird, müsste dann neu gestellt werden.


    Bitte verstehe das nicht falsch, ich will Dich nicht davon abbringen, es mit Java zu machen, aber es kommt halt wirklich auf die Projektdetails an, welche Sprache ich wählen würde. Für Java benötigst Du immer auch die Runtime, ansonsten läuft es auf dem Endgerät eh nicht. Wenn Du dann Nutzer wie mich hast, die Java-Applets bspw. nicht zulassen, könnte das vielleicht schon ein Problem geben.


    Ich habe mich früher auch selber gefragt, ob ich vielleicht vieles nicht verstanden habe, warum ich Java keine Chance gebe, aber wenn ich Kommentare, wie bspw. diesen lese, räumt das meine Zweifel aus:

    Linus Torvalds schrieb:

    Java is just a horrible language.

    ;)


    Aber Java hat eine riesen Fangemeinde, also hat es auch seine Daseinsberechtigung und ist wie gesagt auch durchaus sinnvoll einsetzbar.

  • Guten Morgen,


    Okay. Embeed Programme sind dann Programme die auf einen externen Rechner ausgeführt werden welche Daten übertragen/liefern, etc.. ?


    Ja richtig. Minecraft is Java basiert. Da kann man spielerisch die Programmiersprache erlernen.


    Java kann aber auch z.b. für Android Apps, Webanwendungen (Backend) und plattformunabhängige Anwendungen verwendet werden mit entsprechender GUI.

    Darüber hinaus ist Java eine der gefragtesten Programmiersprachen auf der Welt.


    Zitat


    Für Java benötigst Du immer auch die Runtime, ansonsten läuft es auf dem Endgerät eh nicht.

    Ja man muss ja das Java SDK installiert haben damit man Java Programme ausführen kann.


    Zitat

    Wenn Du dann Nutzer wie mich hast, die Java-Applets bspw. nicht zulassen, könnte das vielleicht schon ein Problem geben.

    Es gibt immer Personen die Scripte oder jetzt in diesem Fall Java Applets nicht zulassen. Damit muss man leben. Es gibt aber auf der Welt genug Personen die es zulassen.


    Wie Java ist kann nur jeder für sich entscheiden. Einer findet die Sprache gut der andere schlecht. Es ist das subjektive Empfinden. Mir gefällt die Sprache.


    Und ein weiterer Vorteil ist, dass man dann leichter weitere Programmiersprachen erlernen kann, wie C#, wenn man möchte.


    Grüße,

    Stef

  • Okay. Embeed Programme sind dann Programme die auf einen externen Rechner ausgeführt werden welche Daten übertragen/liefern, etc.. ?

    Ne, embedded sind im System ( Hardware ) eingebettete Programme/Software, bspw. Haushaltsgeräte oder auch die Computertechnik in Fahrzeugen sind tlw. oder häufig ( das kann ich selber grad nicht sagen ) mit Java-Software ausgestattet.


    Java kann aber auch z.b. für Android Apps, Webanwendungen (Backend) und plattformunabhängige Anwendungen verwendet werden mit entsprechender GUI.

    Genau, aber eben für Android bspw. finde ich das zum einen zu träge und sehe gerade diese Basis als die, an der die Häufigkeit der deaktivierten JRE am größten sein wird. Für mich wäre das entweder das KO-Kriterium für eine App oder eben Java als Programmiersprache.

    Wenn Du mit Apps arbeiten willst, schau Dir doch mal Framework7 an. Das kommt komplett mit HTML, CSS und JavaScript aus.


    Darüber hinaus ist Java eine der gefragtesten Programmiersprachen auf der Welt.

    Ja genau, wie ich gesagt habe auch eine sehr große Fangemeinde. Die Beliebtheit kommt meiner Meinung nach aber eben auch aufgrund des hohen embedded-Einsatzes.


    Und ein weiterer Vorteil ist, dass man dann leichter weitere Programmiersprachen erlernen kann, wie C#, wenn man möchte.

    Ok, das sehe ich anders. ;)


    Ich finde C/C++ deutlich sinnvoller, um Programmierung zu lernen. Das hat aber weniger mit den Möglichkeiten zu tun, die hat Java genau so.

    Eine Sprache als Basis zu lernen, sollte möglichst viele Aspekte der Entwicklung - egal welcher Bereich - mitteilen. Beispiel: In C/C++ muss/sollte man Objekte nach Gebrauch selbstständig entleeren/zerstören, um Resourcen freizugeben. Eine Sprache wie Java kümmert sich über einen GarbageCollector darum, da muss man nichts bedenken. Natürlich hat das im heutigen Mainstream kaum Relevanz mehr, je nach Anwendungsbereich. Aber dennoch sollte ein Entwickler diese Dinge kennen und wissen, was eine Sprache wie behandelt.


    Syntax technisch gesehen unterscheiden sich die Sprachen größtenteils nicht, von der Pascal-Schiene und VB mal abgesehen.


    Aber das nur als persönliche Meinung. Wir quatschen hier ja nur im Austausch- und nicht im Beratungsmodus.

    Ich hoffe, das verstehst Du auch so...

    :)

  • Hey,



    Aber das nur als persönliche Meinung. Wir quatschen hier ja nur im Austausch- und nicht im Beratungsmodus.

    Ich hoffe, das verstehst Du auch so...

    :)

    Ja klar. So wollte ich es auch. Damit man auch andere Sichtweisen mal hört.

    Ne, embedded sind im System ( Hardware ) eingebettete Programme/Software, bspw. Haushaltsgeräte oder auch die Computertechnik in Fahrzeugen sind tlw. oder häufig ( das kann ich selber grad nicht sagen ) mit Java-Software ausgestattet.

    Okay. Wie möchte man denn ein Haushaltsgerät programmieren? Sind dann in diesen Mikrocontroller (z.b. Arduino, Raspberry Pi) drin bei denen dann z.b. Stromkabel angesteckt sind und man dann über die verschiedenen Pins die Funktionen ausführt? Mit dem Raspberry Pi habe ich schon selbst gearbeitet und war schon erstaunt was man mit diesem alles anstellen kann. Dachte nie das sowas möglich ist. Aber hat mich begeistert. Finde ich sehr spannend.

    Genau, aber eben für Android bspw. finde ich das zum einen zu träge und sehe gerade diese Basis als die, an der die Häufigkeit der deaktivierten JRE am größten sein wird. Für mich wäre das entweder das KO-Kriterium für eine App oder eben Java als Programmiersprache. Wenn Du mit Apps arbeiten willst, schau Dir doch mal Framework7 an. Das kommt komplett mit HTML, CSS und JavaScript aus.

    Okay. Wow... von Framework7 habe ich noch nichts gehört. Was alles möglich ist. Aber ist es damit nicht gefährlicher? Denn dort läuft ja alles über Javascript. Javascript kann ja manipuliert werden.


    Okay. Ja da gebe ich dir schon Recht. C ist auch eine interessante Programmiersprache.


    Wenn es diesen GarbageCollector gibt dann muss ich mich ja nicht darum kümmern und das ist dann wiederum gut für mich weil ich dies nicht weiter beachten muss. Aber da stimme ich dir wie bereits geschrieben trotzdem zu, dass man so etwas wissen sollte. Man muss ja dann wissen wie viel Platz eine Variable wegnimmt. Das ist dann noch schwieriger.

    Da muss man sich dann mit Bits und Bytes auseinadersetzen oder?


    Grüße,

    Stef


  • Okay. Wie möchte man denn ein Haushaltsgerät programmieren?

    Das kann ich Dir aufgrund mangelnder Erfahrungen leider nicht genau sagen. Aber nehmen wir mal als Beispiel einen Kühlschrank. Diese gibt es ja auch mit einem WLAN-Modul. Die Ansteuerung dieses Moduls und auch die Möglichkeiten sind dann auf Mikrocontrollern untergebracht. Ich weiß auch nicht, ob da nun wirklich Java vorwiegend eingesetzt wird, weil es auch für C eine ideale Umgebung wäre, aber vertreten ist Java hier auf jeden Fall auch.


    Okay. Wow... von Framework7 habe ich noch nichts gehört. Was alles möglich ist. Aber ist es damit nicht gefährlicher? Denn dort läuft ja alles über Javascript. Javascript kann ja manipuliert werden.

    Nein, JavaScript ist bei weitem nicht so gefährlich, wie Java. Mit JavaScript kannst Du ohne weiteres nicht auf das Dateisystem eines Endgerätes zugreifen, mit Java schon. Das wäre schon mal ein entscheidender Unterschied.


    Man muss ja dann wissen wie viel Platz eine Variable wegnimmt. Das ist dann noch schwieriger.

    Ja, natürlich hat das heutzutage wie gesagt nicht mehr die Relevanz, wie vor 30 Jahren, aber ich finde halt, ein Entwickler sollte wissen, was dort passiert, allein schon, um manche Fehlverhalten evtl. schneller erkennen zu können. Wichtig ist an der Stelle auch, wie Mit Variablenübergabe verfahren wird.


    Schönes Beispiel ist foreach, da wird die Collection in PHP bspw. als ByValue, in C# hingegen aber als ByReference übergeben. D.h. foreach in PHP arbeitet mit einer Kopie der Collection ( bspw. das Array ). C# mit dem Original, hier wird nur ein Addressverweis übergeben.


    Beispiel:

    Änderungen von Daten in einer Collection in PHP:

    PHP
    1. $aSomething = ['eins', 'zwei', 'drei'];
    2. foreach ( $aSomething as $key=>$s )
    3. $aSomething[$key] = $s . '!';
    4. // $aSomething: eins!, zwei!, drei!

    in C#:

    C
    1. string[] aSomething = new string[]{ 'eins', 'zwei', 'drei' };
    2. int iCount = 0;
    3. foreach ( string s in aSomething )
    4. aSomething[iCount++] = s + "!";
    5. // Exception: aSomething kann nicht verändert werden, da es bereits verwendet wird ( o.ä. )

    hier müsste man also, um Veränderungen an einer Collection machen zu können, auf die klassische for() zurückgreifen:

    C
    1. string[] aSomething = new string[]{ 'eins', 'zwei', 'drei' };
    2. for ( int x=0; x<aSomething.Length; x++ )
    3. aSomething[x] = s + "!";
    4. // aSomething: eins!, zwei!, drei!

    Ob Java ByValue oder ByReference arbeitet, weiß ich adhoc nicht, aber wichtig war nur zu zeigen, dass einem bestimmte Dinge bewusst sein sollten, wenn man eine andere Sprache lernen möchte.

  • Hey,

    Das kann ich Dir aufgrund mangelnder Erfahrungen leider nicht genau sagen. Aber nehmen wir mal als Beispiel einen Kühlschrank. Diese gibt es ja auch mit einem WLAN-Modul. Die Ansteuerung dieses Moduls und auch die Möglichkeiten sind dann auf Mikrocontrollern untergebracht. Ich weiß auch nicht, ob da nun wirklich Java vorwiegend eingesetzt wird, weil es auch für C eine ideale Umgebung wäre, aber vertreten ist Java hier auf jeden Fall auch.

    Das ist aufjedenfall sehr interessant. Wäre ja richtig geil ein Haushaltsgerät oder ein Gerät selbst zu programmieren. Zum Beispiel ein kleiner Roboter. Aber wenn man sowas machen möchte braucht man noch mehr Wissen in diesem Bereich. Wäre aber ein geiles Projekt.


    Nein, JavaScript ist bei weitem nicht so gefährlich, wie Java. Mit JavaScript kannst Du ohne weiteres nicht auf das Dateisystem eines Endgerätes zugreifen, mit Java schon. Das wäre schon mal ein entscheidender Unterschied.

    Okay aber dann wäre PHP auch gefährlicher als JavaScript?

    Ja, natürlich hat das heutzutage wie gesagt nicht mehr die Relevanz, wie vor 30 Jahren, aber ich finde halt, ein Entwickler sollte wissen, was dort passiert, allein schon, um manche Fehlverhalten evtl. schneller erkennen zu können. Wichtig ist an der Stelle auch, wie Mit Variablenübergabe verfahren wird.


    Schönes Beispiel ist foreach, da wird die Collection in PHP bspw. als ByValue, in C# hingegen aber als ByReference übergeben. D.h. foreach in PHP arbeitet mit einer Kopie der Collection ( bspw. das Array ). C# mit dem Original, hier wird nur ein Addressverweis übergeben.

    Okay. Von ByValue oder ByReference habe ich noch nie was gehört. Danke für deine Beispiele. Diese haben mir die Funktion beider Übergaben etwas verdeutlicht.


    Eine Referenz ist ja nicht anderes als ein Verweiß auf die Originalvariable.

    Eine Kopie ist in diesem fall, die kopierte Originalvariable die man dann variabel verändern kann, da es ja eine Kopie und kein Verweiß ist.


    Ist dies richtig so?


    Grüße,

    Stef

  • Okay aber dann wäre PHP auch gefährlicher als JavaScript?

    Kommt auf die Sichtweise an. Mit PHP kannst Du grundsätzlich natürlich auf alles zugreifen, aber auch nur dort, wo PHP installiert ist!

    Und da PHP Server seitig läuft, besteht keine große Gefahr für den Client.


    Also aus meiner Sicht: Nein, für den Endbenutzer ist Java oder auch JavaScript gefährlicher. ;)

    Okay. Von ByValue oder ByReference habe ich noch nie was gehört. Danke für deine Beispiele. Diese haben mir die Funktion beider Übergaben etwas verdeutlicht.


    Eine Referenz ist ja nicht anderes als ein Verweiß auf die Originalvariable.

    Eine Kopie ist in diesem fall, die kopierte Originalvariable die man dann variabel verändern kann, da es ja eine Kopie und kein Verweiß ist.


    Ist dies richtig so?

    Ja, so könnte man das formulieren, denke ich.


    PHP kann übrigens auch Referenzen, so ist das ja nicht, es wird halt nur per default ByValue verwendet.

    Ein Beispiel für eine Referenz sähe bspw. so aus:

    PHP
    1. $sText = 'Hello';
    2. function RefMagic( &$_refvalue ) {    // <-- Referenzübergabe mit &
    3. $_refvalue .= ' World!';
    4. }
    5. RefMagic( $sText );
    6. var_dump( $sText );    // Ausgabe: Hello World!
  • Hey,


    okay. Ja das stimmt.


    Das sieht komplitziert aus.


    Ich habe schon viele Tutorials/Videokurse durchgemacht und da wurde sehr oft gesagt, dass eine Referenz schlechter Code Stil ist und das man diese nicht, bzw. kaum benutzen soll.


    Wie stehst du dazu?

  • Eine Pauschalierung, was guter oder schlechter Codestil in Bezug auf ByValue und ByReference ist, halte ich für Glaubenskrieg.

    Jede Vorgehensweise ist in irgendwelchen Szenarien gerechtfertigt, kommt halt auch auf die Sprache an. In PHP nutze ich Referenzen auch fast gar nicht.