Abo
  1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Software-Entwickler…

Beste Reihenfolge imo:

  1. Thema

Neues Thema Ansicht wechseln


  1. Beste Reihenfolge imo:

    Autor: twothe 26.09.18 - 11:22

    Wer jetzt nicht gerade Projekt-gebunden ist beim Sprachen lernen, dem empfehle ich folgende Reihenfolge:

    1. Java
    2. Lua
    3. C/C++

    Wenn man diese 3 Sprachen durch hat, kann man aus dem gelernten jede Aufgabe bewältigen.

    Java bringt einem Struktur und ordentliches Arbeiten bei. Durch die starke Kontrolle der Sprache und der im Allgemeinen sehr korrekten Theorie aus Büchern und Co. dazu, lernt man am Anfang das allerwichtigste beim Programmieren: strukturiertes und sauberes Arbeiten. Es gibt nichts was so wichtig ist wie ein klarer Gedankengang beim Lösen eines Problems, und mit Java hat ma dahingehend nicht nur eine Sprache die einen sehr dabei unterstützt, sondern mit Java lernt man auch was, was einem beruflich sehr viele Türen öffnet.

    Lua ist eine Scriptsprache, die früher praktisch der Standard war, aber mit der massiven Werbung für JavaScript etwas verdrängt wird. Dennoch ist sie eigentlich bis heute die beste Kombination aus Features, Geschwindigkeit und Simplizität. Das Kernkonzept von Lua ist "Keep it simple". Man kann die gesamten Sprachfeatures auf einen gelben Klebezettel schreiben, damit ist der Einstieg sehr einfach gemacht. Und dann lernt man was man mit den paar Sachen alles machen kann, wenn man sie nur richtig einsetzt. Das hilft, um zu erfahren wie wenig man eigentlich braucht und wie überflüssig so vieles in den Sprachen ist, und dazu lernt man gut um die Ecke zu denken und sich aus dem Java-Gedanken-Käfig zu befreien. Und ganz nebenbei noch funktional zu programmieren.
    JavaScript halte ich hier für Einsteiger ungeeignet, es hat zwar viele Features, aber diese sind so wirr und unstrukturiert, dass man damit erst anfangen sollte, wenn man weiß was davon zu ignorieren ist.

    C/C++ ist dann die "get down and dirty" Phase. Mit C kann man alles machen, egal wie dreckig, egal wie gemein. Dadurch lernt man die wirklichen Basics eines PCs kennen und versteht, was einem die anderen Sprachen so abstrahiert haben. Geht man hier mit der vorher gelernten Struktur und "um die Ecke denken" ran, kann man Geschwindigkeiten erreichen, die vorher undenkbar waren, hält sich aber gleichzeitig von der dunklen Seite von C/++ fern: dem wirren Chaos von unstrukturiertem Gefrickel. In C/C++ stecken Jahrzehnte der Programmiererfahrung, aber auch der Entwicklung, und viele Konzepte sind im wahrsten Sinn aus der Steinzeit.

    Wer die 3 Sprachen durch hat, weiß wie man arbeiten sollte, wie man arbeiten kann wenn einem keine Grenzen gesetzt werden, und was überhaupt möglich ist und warum. Dazu hat man damit die wichtigsten Sprachen der Industrie gelernt und ist bestens aufgestellt für einen Job. Jede weitere Sprache ist dann nur noch eine Variation des Gelernten.

  2. Re: Beste Reihenfolge imo:

    Autor: Klau3 26.09.18 - 11:34

    twothe schrieb:
    --------------------------------------------------------------------------------
    > Jede weitere Sprache ist dann nur noch eine Variation des Gelernten.

    Dem ist sicherlich nicht so. Guck dir mal Haskell an. Da bringt dir das Wissen über die oben genannten Sprachen überhaupt nichts. Im Gegenteil, jemand der Haskell versteht wird mit C, C++... kaum Probleme haben, denn Konzeptionell sind C, C++ verglichen mit Haskell, Kinderkram.



    1 mal bearbeitet, zuletzt am 26.09.18 11:39 durch Klau3.

  3. Re: Beste Reihenfolge imo:

    Autor: loak 26.09.18 - 11:47

    Klau3 schrieb:
    --------------------------------------------------------------------------------
    > twothe schrieb:
    > ---------------------------------------------------------------------------
    > -----
    > > Jede weitere Sprache ist dann nur noch eine Variation des Gelernten.
    >
    > Dem ist sicherlich nicht so. Guck dir mal Haskell an. Da bringt dir das
    > Wissen über die oben genannten Sprachen überhaupt nichts. Im Gegenteil,
    > jemand der Haskell versteht wird mit C, C++... kaum Probleme haben, denn
    > Konzeptionell sind C, C++ verglichen mit Haskell, Kinderkram.

    Was ist mit Prolog? Da bringt dir Haskell auch kaum was.

  4. Re: Beste Reihenfolge imo:

    Autor: twothe 26.09.18 - 16:04

    Hashkell ist eine funktionale Programmiersprache. Wer Streams in Java und funktionsbasiertes Programmieren in Lua verstanden hat, wird auch mit Hashkell keine großen Probleme haben. Prolog ist mir persönlich noch nicht unter gekommen, ich erwarte da jetzt aber auch nichts großes anderes.

  5. Re: Beste Reihenfolge imo:

    Autor: Badewanne 26.09.18 - 20:30

    haskell ist rein akademisch. Wer einen Job will fokussiert sich auf die C artigen Sprachen wie C, C++, Java, C# und co

  6. Re: Beste Reihenfolge imo:

    Autor: GodsBoss 26.09.18 - 20:40

    > Java bringt einem Struktur und ordentliches Arbeiten bei. Durch die starke
    > Kontrolle der Sprache und der im Allgemeinen sehr korrekten Theorie aus
    > Büchern und Co. dazu, lernt man am Anfang das allerwichtigste beim
    > Programmieren: strukturiertes und sauberes Arbeiten.

    Nein. Struktur und ordentliches Arbeiten lernt man nicht, weil Java einem das beibringt, sondern weil man Struktur und ordentliches Arbeiten lernt. Ob das mit Java geschieht, C#, Python oder gar PHP, ist zweitrangig.

    Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.

  7. Re: Beste Reihenfolge imo:

    Autor: twothe 27.09.18 - 11:00

    GodsBoss schrieb:
    --------------------------------------------------------------------------------
    > Nein. Struktur und ordentliches Arbeiten lernt man nicht, weil Java einem
    > das beibringt, sondern weil man Struktur und ordentliches Arbeiten lernt.
    > Ob das mit Java geschieht, C#, Python oder gar PHP, ist zweitrangig.

    Les mal ein Buch über strukturierte Softwareentwicklung und guck dir dann PHP Code an und sag mir dass PHP dich bei so was unterstützt. Java zwingt dich zu vielen Dingen und verbietet viele Schweinereien, d.h. es unterstützt dich sehr stark beim Schreiben von strukturiertem Code. Natürlich kann man auch mit Java noch Unsinn machen, aber wenigstens ist "Unsinn" kein Sprachstandard wie bei PHP oder JavaScript.

  8. Re: Beste Reihenfolge imo:

    Autor: twiro 28.09.18 - 01:19

    IP2Long in Scala:

    def (ip: String) = ip.split("\.").reverse.zipWithIndex.map(a=>a._1.toInt*math.pow(256,a._2).toLong).sum

    Zugegeben, dass ist schon starkes Code-Golfing, aber jetzt bitte mal in Java, Lua oder C/C++ !


    PS: Und ich weiß, dass jetzt alle PHPler aufschreien ( ip2long ($ip); )

  9. Re: Beste Reihenfolge imo:

    Autor: twothe 28.09.18 - 11:56

    Also mal ganz abgesehen davon, dass Code-Golfing ganz sicher kein Kriterium für das Lernen einer Sprache ist, und man eine solche Funktion in Java nicht braucht, weil es die InetAddress Klasse gibt... wenn ichs als Code-Golf nachprogrammiere sähe es etwa so aus:

    long ip2Long(String ip) {
    final var shift = new AtomicInteger(4);
    return Arrays.stream(ip.split("\\.")).mapToLong(Long::valueOf).map(i -> i << (shift.decrementAndGet() << 3)).sum();
    }

    In Lua fehlen die entsprechenden Funktionen (da keep it simple), ich habs hier mal etwas interessanter programmiert, damit sich das Lesen auch lohnt:

    function split(s, regex)
    local t = {}
    for p in string.gmatch(s, "%d+") do
    table.insert(t, p)
    end
    return t
    end

    function sum(t, agg, initial)
    local sum = initial or 0
    for i,p in ipairs(t) do
    sum = sum + agg(i, p)
    end
    return sum
    end

    function ipTolong(ip)
    local splits = split(ip)
    return sum(splits, function(i, p) return (p << ((#splits - i) << 3)) end)
    end

    Am Lua-Beispiel wird dann auch klar warum die Frage nach kurzer Schreibweise auch bescheuert ist: wenn ich mir eine Funktion dafür schreibe dann wird der Code natürlich kürzer, also zielt die Frage nur darauf ab wie viele Funktionen in der Library sind. Da man sich aber beliebige Libraries nachladen kann, ist die Frage äußerst nichtssagend.

    Viel entscheidender ist, dass ich hier shifte statt ein math.pow zu benutzen, was erheblich schneller ist.



    2 mal bearbeitet, zuletzt am 28.09.18 12:00 durch twothe.

  10. Re: Beste Reihenfolge imo:

    Autor: RabbitRums 28.09.18 - 12:43

    Meiner Meinung ist die Sprache völlig nebensächlich Hauptsache im Team wird Konsequent mit dieser gearbeitet, jeder versteht was er wie macht und es ist für jeden verständlich und lesbar.

    Es hilft natürlich die Paradigmen wie oop, funktional etc. zu verstehen.
    Sowas wie Shifting etc. würde ich auch nur einsetzen wenn es wirklich von der Performance her eng wird und dieses Teil des Programms als Schwachpunkt dafür identifiziert wurde.

    Die "ip2Long" Methode könnte man auch so "nur" in einem Stream darstellen ;)

    long ip2Long(String ip) {
    return Stream.of(ip.split("\\.")).map(s -> new int[]{Integer.valueOf(s), 0}).reduce(new long[]{0,3},(a, b) -> new long[]{a[0] + (long) ((b[0]) * Math.pow(256, a[1])), a[1]-1}, (longs, longs2) -> new long[]{longs[0] + longs2[0]})[0];
    }

    Sowas würde aber wohl keinem Code Review stand halten zumindest wenn der Code noch lesbar sein soll ;)
    Naja man sollte alles mit bedacht nutzen.



    1 mal bearbeitet, zuletzt am 28.09.18 12:44 durch RabbitRums.

  11. Re: Beste Reihenfolge imo:

    Autor: twothe 30.09.18 - 10:53

    RabbitRums schrieb:
    --------------------------------------------------------------------------------
    > Meiner Meinung ist die Sprache völlig nebensächlich
    Es ging ja hier um die abstrakte Frage welche Sprachen sich am besten eigenen. Wenn man in einem Team sitzt ist die Sprache vorgegeben, da stellt sich die Frage nicht. Und man kann denke ich auch ohne längeren Beweis feststellen, dass sich Java erheblich besser als Einstieg eignet als beispielsweise Brainfuck oder Piet. ;)

    > Shifting etc. würde ich auch nur einsetzen wenn es wirklich von der Performance her eng wird
    Es gibt absolut keinen Grund für 2er Multiplikation oder Division etwas anderes zu nehmen. Dabei geht es nicht nur um die Performance sonder auch darum die Hintergründe zu verstehen. Aber auch die Performance sollte IMMER ein Aspekt sein, gerade wenn man lernt. Denn durch das Credo: "Schmeiß die Resourcen ruhig zum Fenster raus, wir hams ja!" sind nicht nur diverse Projekte schon versandet, es wird auch furchtbar scheitern sobald man sich in der Browser- oder mobile Welt bewegt. Auch sollte sich generell jeder Programmierer immer bewusst sein was sein Algorithmus tut, und sich fragen, ob es da nicht was besseres gibt.

    > Sowas würde aber wohl keinem Code Review stand halten
    Ganz definitiv nicht. Daher ist übrigens Scala für Einsteiger auch eher schlecht, da Skala stark verkürzt und damit schwer lesbar ist und insbesondere für Anfänger aufgrund der damit verbundenen Fehleranfälligkeit zu schwer.



    1 mal bearbeitet, zuletzt am 30.09.18 10:55 durch twothe.

  12. Re: Beste Reihenfolge imo:

    Autor: BlackSuit 30.09.18 - 12:41

    twothe schrieb:
    --------------------------------------------------------------------------------
    > RabbitRums schrieb:
    > ---------------------------------------------------------------------------
    > -----
    > > Shifting etc. würde ich auch nur einsetzen wenn es wirklich von der
    > Performance her eng wird
    > Es gibt absolut keinen Grund für 2er Multiplikation oder Division etwas
    > anderes zu nehmen. Dabei geht es nicht nur um die Performance sonder auch
    > darum die Hintergründe zu verstehen. Aber auch die Performance sollte IMMER
    > ein Aspekt sein, gerade wenn man lernt. Denn durch das Credo: "Schmeiß die
    > Resourcen ruhig zum Fenster raus, wir hams ja!" sind nicht nur diverse
    > Projekte schon versandet, es wird auch furchtbar scheitern sobald man sich
    > in der Browser- oder mobile Welt bewegt. Auch sollte sich generell jeder
    > Programmierer immer bewusst sein was sein Algorithmus tut, und sich fragen,
    > ob es da nicht was besseres gibt.
    >
    >

    Sorry aber eine Divison / Multiplikation mit 2 durch Shifting zu Ersetzen ist eine jener sinnlose Mikrooptimierung die ein guter Compiler / eine gute Runtime sowieso vornimmt, die aber die Lesbarkeit des Codes massiv verschlechtert in dem sie die Intention verschleiert. Und selbst wenn nicht automatisch optimiert, ist eine gute Lesbarkeit ist viel mehr Wert als eine präventive Mikrooptimierung, deren Auswirkungen auf die Gesamtperformance in der Regel lächerlich gering ist, gerade wenn wir von Skripting z.B. im Browser reden wo die gesamt Performance gerade durch die Runtime bestimmt wird und diese weit mehr CPU Zyklen verheizt als man durch solche Optimierung einsparen könnte. Gerade auch weil viele Skriptsprachen viel Performance dadurch liegen lassen, dass sie nicht zwischen Integer und Floats unterscheiden.

  13. Re: Beste Reihenfolge imo:

    Autor: twothe 01.10.18 - 12:53

    Es geht hier nicht um sinnlose Micro-Optimierung sondern um das Lernen von Programmieren. Die initiale Frage ging von einer Umwandlung der Text-Darstellung einer IP in hin zum Long-Wert. Die Textdarstellung ist eine Übersetzung pro 8 Bit in Zahl, es geht also thematisch schon um Bit-Shifting, hier jetzt Multiplikation zu benutzen macht das ganze schwerer verständlich. Ist dem nicht so, dann fehlt beim Leser ein grundsätzliches Verständnis dafür wie die CPU intern funktioniert.

    var result = 0
    result |= in[3] << 24
    result |= in[2] << 16
    result |= in[1] << 8
    result |= in[0] << 0
    return result

    Verständlich was hier passiert? Oder lieber so?

    var result = 0
    result = result + in[3] * math.pow(2, 24)
    result = result + in[2] * math.pow(2, 16)
    result = result + in[1] * math.pow(2, 8)
    result = result + in[0]
    return result

    Ist der gleiche Code, oder?
    Nein ist er nicht, denn pow gibt eine Gleitkommazahl zurück, damit wird in und result implizit zu einer Gleitkommazahl gewandelt, es wird also Fließkommaarithmetik mit den beliebten Rundungsfehlern durchgeführt, und am Ende wieder auf einen Integer zurück gewandelt. Der zweite Code ist sehr viel fehleranfälliger (und inperformanter) als der erste, weil er Fehler heimlich versteckt. Im IP4 Format reicht das noch, da Double (in Java) aber nur auf 15 Stellen genau ist, hätte der Code mit IP6 schon Probleme, die aber einfach weggerundet würden. Und hier hilft einem auch der Compiler nicht, denn x * math.pow() ist inhaltlich was völlig anderes als x << y, das darf ein Compiler nicht ersetzen, denn sonst verfälscht er den Code.

    Vielleicht ist jetzt klar was ich meine mit: Wer da kein Bitshifting benutzt hat die CPU nicht verstanden.

  14. Re: Beste Reihenfolge imo:

    Autor: BlackSuit 01.10.18 - 14:48

    You are moving the goalpost
    Vorher war noch die Rede von
    > Es gibt absolut keinen Grund für 2er Multiplikation oder Division etwas
    > anderes zu nehmen
    Jetzt nur noch von der speziellen Aufgabe, bei der Shifting tatsächlich fachlich(!) gerechtfertigt sein kann.

    Weiterhin machst du ein falsches Dilema auf , in dem du die Potenzen explizit berechnest anstatt die Ergebnisse als Konstanten einzufügen und konstruierst dann aus dieser falschen Annahme Performance Probleme herbei.

    Und drittens wird zumindest ein moderner Compiler die Potenzen von reinen Konstanten zur Compilezeit auflösen und dann die Multiplikation mit der Konstante optimal umsetzen. Bei der Java VM bin ich mir nicht ganz so sicher, glaube aber, dass auch der Hotspot Compiler nicht bei jedem Durchlauf die Potenz neu berechnet. Somit würden dann im Ergebnis die Benchmarks überraschend weniger deutlich als du vielleicht glaubst.

    Und vom Einfluss auf die Performance der Gesamtapplikation wollen wir erst gar nicht reden. Womit wir wieder bei sinnlosen Mikrooptimierungen wären.

  15. Re: Beste Reihenfolge imo:

    Autor: amagol 05.10.18 - 17:47

    twiro schrieb:
    --------------------------------------------------------------------------------
    > IP2Long in Scala:
    >
    > def (ip: String) =
    > ip.split("\.").reverse.zipWithIndex.map(a=>a._1.toInt*math.pow(256,a._2).to
    > Long).sum
    >
    > Zugegeben, dass ist schon starkes Code-Golfing, aber jetzt bitte mal in
    > Java, Lua oder C/C++ !

    Java: Stream.of(ip.split("\\.")).mapToLong(Long::parseLong).reduce((a,b) -> (a << 8) + b).getAsLong()

    Das zipping in der Scala Variante oben ist natuerlich Quatsch, do auch dort ein einfaches reduce reicht. Scala hat zwar theoretisch einige Vorteile gegenueber Java, aber dadurch, dass die Features so durchnandergewuerfelt wurden passt das irgendwie alles nicht so recht zusammen und wenn man es kommerziell einsetzt muss man den Entwicklern viele Features regelrecht verbieten (implicits sind die Pest wenn man Code mal ohne IDE verstehen muss).

  16. Re: Beste Reihenfolge imo:

    Autor: GodsBoss 06.10.18 - 21:37

    > > Nein. Struktur und ordentliches Arbeiten lernt man nicht, weil Java
    > einem
    > > das beibringt, sondern weil man Struktur und ordentliches Arbeiten
    > lernt.
    > > Ob das mit Java geschieht, C#, Python oder gar PHP, ist zweitrangig.
    >
    > Les mal ein Buch über strukturierte Softwareentwicklung und guck dir dann
    > PHP Code an und sag mir dass PHP dich bei so was unterstützt. Java zwingt
    > dich zu vielen Dingen und verbietet viele Schweinereien, d.h. es
    > unterstützt dich sehr stark beim Schreiben von strukturiertem Code.
    > Natürlich kann man auch mit Java noch Unsinn machen, aber wenigstens ist
    > "Unsinn" kein Sprachstandard wie bei PHP oder JavaScript.

    Wer Struktur und ordentliches Arbeiten gelernt hat, schreibt Java- und PHP-Code, der sich strukturell sehr ähnelt. Beide Sprachen setzen auf klassenbasierte Objektorientierung, kennen Interfaces, abstrakte Klassen, etc.

    Nichts hindert einen Entwickler daran, in Java God Objects oder überlange prozedurale Methoden zu schreiben, oder globalen State zu verwenden. Deine ursprüngliche Behauptung war "Java bringt einem Struktur und ordentliches Arbeiten bei." und das ist schlicht falsch.

    Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.

  17. Re: Beste Reihenfolge imo:

    Autor: boxcarhobo 08.10.18 - 12:05

    twothe schrieb:
    --------------------------------------------------------------------------------
    > Prolog ist mir persönlich noch nicht
    > unter gekommen, ich erwarte da jetzt aber auch nichts großes anderes.

    Oh, you sweet summer child...

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Stellenmarkt
  1. ROMA KG, Burgau bei Ulm
  2. Allianz Deutschland AG, Stuttgart
  3. Ingenics AG, München, Hamburg, Stuttgart, Ulm
  4. SEW-EURODRIVE GmbH & Co KG, Bruchsal

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Top-Angebote
  1. (u. a. Conan Exiles 12,99€, PSN Card 25 Euro für 21,99€)
  2. 229,99€
  3. 5,55€
  4. (u. a. GRAND THEFT AUTO V: PREMIUM ONLINE EDITION 13,99€, Shadows: Awakening 12,50€)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Watch Dogs Legion angespielt: Eine Seniorin als Ein-Frau-Armee
Watch Dogs Legion angespielt
Eine Seniorin als Ein-Frau-Armee

E3 2019 Elitesoldaten brauchen wir nicht - in Watch Dogs Legion hacken und schießen wir auch als Pensionistin für den Widerstand. Beim Anspielen haben wir sehr über die ebenso klapprige wie kampflustige Oma Gwendoline gelacht.


    Nuki Smart Lock 2.0 im Test: Tolles Aufsatzschloss hat Software-Schwächen
    Nuki Smart Lock 2.0 im Test
    Tolles Aufsatzschloss hat Software-Schwächen

    Mit dem Smart Lock 2.0 macht Nuki Türschlösser schlauer und Türen bequemer. Kritisierte Sicherheitsprobleme sind beseitigt worden, aber die Software zeigt noch immer Schwächen.
    Ein Test von Ingo Pakalski


      Wolfenstein Youngblood angespielt: Warum wurden diese dämlichen Mädchen nicht aufgehalten!?
      Wolfenstein Youngblood angespielt
      "Warum wurden diese dämlichen Mädchen nicht aufgehalten!?"

      E3 2019 Der erste Kill ist der schwerste: In Wolfenstein Youngblood kämpfen die beiden Töchter von B.J. Blazkowicz gegen Nazis. Golem.de hat sich mit Jess und Soph durch einen Zeppelin über dem belagerten Paris gekämpft.
      Von Peter Steinlechner