Java als Muttersprache - Wie an Fremdsprachen herangehen?

Hey Leute ^^

Die Frage ist eventuell irgendwie blöd aber ich wollte mal fragen ob jemand versteht was ich meine und eventuell irgendwelchen allgemeinen Tipps hat :smiley:

Um folgendes geht es: Java ist ja gewissermassen meine Muttersprache was Computer angeht - Jahrelang (nur java) gelernt, damit programmiert etc. Nun müssen wir an der Uni auch prolog und haskell lernen… bzw wir schreiben morgen ne Klausur drüber :smiley:

Das eine ist ne logische, das andere ne funktionale programmiersprache… und ich habe echt probleme von dieser „java denkweise“ wegzukommen… wenn es eben um programmieraufgaben geht.

Wisst ihr was ich meine? hat jemand ganz allgemeine „Denktipps“ damit ich morgen besser klarkomme und nicht daran scheitere ein Haskell Programm „java-like“ zu schreiben? :smiley:

Vermutlich geht es nicht um sprachliche Details? Ich kenne nur ein wenig Prolog, und habe das grob in Erinnerung als „Wie eine funktionale Sprache, bei der es NUR Rekursion gibt“ :smiley: Ich denke, mit kleinen „sprachtypischen“ Beispielen an größere rantasten ist ein universeller Hinweis. (Schwammig? Neeein: universell :smiley: ). Also, es sollte ja vermutlich irgendwelche Übungsaufgaben geben, und am Ende in der Klasur nicht darum gehen, ob irgendwo ein Semikolon fehlt (obwohl gerade DIE in Prolog IIRC extrem wichtig waren (d.h. eine andere Bedeutung hatten, als etwa ein Komma… (!?) ist lange her… und gebraucht hab’ ich’s seitdem nie mehr)).

Allgemeine Tipps… Hast du nicht Angst, von der Uni zu fliegen, wenn du hier schreibst, du kannst das nicht, hast nur noch wenig Zeit, und gehst lapidar damit um?

Aber mal zum Thema zurück, ihr solltet gelernt haben, welchen Paradigmen Java unterliegt, und welche Paradigmen es daneben noch gibt. Logisch + Funktional ist etwas anderes als imperativ + prozedural.

Das ganze lernst du nicht in ein paar Stunden. (oder, würd mich wundern)

Mein Tipp: Lerne Prolog-Beispiele auswendig über Themen, die ihr behandelt habt - und über Themen mehr noch, welche vielleicht drankommen könnten: http://www.cs.toronto.edu/~sheila/384/w11/simple-prolog-examples.html Da steht schonmal: langweilig…, langweilig…, Listenlänge, Listensumme, Beinhaltet, Umdrehen usw. DAS ist ein Anfang.

Nein, das ist quatsch. Du kannst dem Prof auch direkt ins Gesicht sagen, dass du keine Ahnung hast. Was zählt ist das Ergebnis der Klausur und dieses entscheidet (wenn nicht beim Schummeln erwisch) nur für
einen von mehreren Prüfungsversuchen zu einem Modul.
Man darf auch frei im Internet nach Hilfe fragen, soweit es sich nicht um das Erfragen von Lösungen für z.B. Übungsaufgaben geht (deren erfolgreiches Bestehen meist Prüfungsvoraussetzung ist).
Jeder darf so lapidar mit den Studieninhalten umgehen, wie er mag, so lange er die in den Prüfungsordnung enthaltenen Bestimmungen einhält ^^

Ich kann dir TO (mymaksimus) leider auf den kurzen Zeitraum nicht helfen. Bei PROLOG hilft viel Üben, es fällt leichter, wenn man vorher schon Diskrete Strukturen hatte (bzw. halt Aussagenlogik), weil
man sich in die Denkweise reinversetzen kann, als man dort die Übungen/Prüfung gemacht hat.
Da ich im anderen Studium Scheme und nicht Haskell hatte, kann ich dir da leider auch nicht helfen.

Naja, und ich muss dazu sagen, dass ich diese ominösen Prüfungsordnungen noch nie „so richtig“ gelesen hab…
Ich weiß aber, „so ungefähr“, was zu beachten sein könnte :smiley:

Konzentriere dich auf die grundlegenden Ideen, die Konzepte hinter den Sprachen. Lass dich nicht von ungewohnter Syntax oder Terminologie abschrecken. Versuche, keine Vergleiche zu ziehen - das mag etwas bringen, wenn du C# lernen willst, aber nicht hier: Eine Prolog-Regel ist z.B. eine Prolog-Regel, und hat sehr wenig mit einer Funktion oder Methode zu tun. Sei offen für die andere Herangehensweise, WTF-Momente gehören dazu (“Wie, nur unveränderliche Variablen? Wie soll das gehen”). Und natürlich selbst ausprobieren (z.B. Project Euler o.ä., wenn du keine Ideen hast). Außerdem kannst du Code zu bekannten Problemen durchgehen (z.B. Rosetta Code )

Vielen Dank euch für die Anregungen, denke ihr habt das Problem verstanden :slight_smile:

Keine Sorge, soo schlecht dran bin ich nicht - ich kann es nicht gar nicht.
Es fällt mir nur sehr schwer… bei manchen Altklausur aufgaben - habe bis eben noch glernt - komme ich gar nicht zum ziel und denke mir bei der musterlösungen dann oohh mann… das ist so einfach… aber man muss KOMPLETT anders denken. Manchmal klappts aber.

Hoffe dass nicht zu komplizierte Aufgaben kommen, dann passt das schon :slight_smile:

Die Grundkonzepte habe ich ja im Prinzip drauf, ich hatte nicht vor Haskell und Prolog in ein paar Stunden zu lernen… und die Übungen hatte ich auch gemacht. Nur bei jeder neuen aufgabe kommen ja neue „tricks“ oder „tools“ dazu die man dann später benutzen kann.

zB „ahh wenn ich dann in dem rekursiven aufruf einfach die parameter tausche, habe ich quasi die bedeutung von dem realisiert und brauche keine weiter fallunterscheidung UND habe sichergestellt beim richtigen anzufangen“
oder „achsoo wenn ich einfach davon ausgehe, das der rest scjon fertig bearbeitet ist und die reihenfolge ändere dann wird das aufeinander aufbauend funktionieren“

Egal. Danke euch.

Wird schon schief gehen :wink:

*** Edit ***

Ich muss aber sagen, Prolog ist eigentlich ganz cool.
Es macht echt spass wenn mans verstanden hat.
Haskell ist dagegen gar nicht cool ^^

Aber naj :wink: @Marco13 ; ist das logische oder in Prolog… ^^

JEHOVA!

Konkret für Haskell: Introduction - Learn You a Haskell for Great Good!
Die Buchversion davon hatte ich mal in einem Indie Bundle, es erklärt die Konzepte meiner Meinung nach ziemlich gut.

Gerade wenn die Sprachen exotischer werden, machen hauptsächlich die Konzepte Probleme. Da hilft wahrscheinlich nur sich fremden Code anschauen, und vor allem mit Leuten darüber zu reden und die Konzepte auch zu diskutieren. Als ich vor ein paar Jahren in Clojure eingestiegen bin waren das ziemlich böhmische Dörfer, und auch die Tutorials und Beispiele waren nicht sofort selbsterklärend für jemanden aus der OOP Ecke. Da hat mir dann z.B. der IRC/Slack Channel der Community geholfen, und natürlich Code auf Github. Das kostet natürlich alles Zeit, die man auch bereit sein muss zu investieren (was zugegebenermaßen an der Uni für eine Prüfung nicht unbedingt einfach ist).

[QUOTE=inv_zim;145269]
Konkret für Haskell: Introduction - Learn You a Haskell for Great Good!
Die Buchversion davon hatte ich mal in einem Indie Bundle, es erklärt die Konzepte meiner Meinung nach ziemlich gut.[/QUOTE]

Es ist relativ dünn und auch schon recht alt, aber noch brauchbar. Ein aktuelles, einsteigerfreundliches Buch ist Haskell Programming - Home. Möchte man länger in der Haskellsphäre abhängen ist das eine ganz gute Investition. :slight_smile:

Naja bis 14:15 werde ich das Buch ja nicht mehr lesen ^^

Aber mal ehrlich… im Internet mag ja viel stehen, aber in der wirklich realen Praxis… benutzt man so einen exotischen Mist??
Geht es manchmal nicht anders? oder besser mit “normalen” Sprachen?

Also Logikrätsel ala https://www.logisch-gedacht.de/logikraetsel/im-buero/ in Prolog zu lösen, hat in der Schule schon Spaß gemacht.

Haskell hab ich nie richtig kapiert.

[QUOTE=mymaksimus]
Aber mal ehrlich… im Internet mag ja viel stehen, aber in der wirklich realen Praxis… benutzt man so einen exotischen Mist??
Geht es manchmal nicht anders? oder besser mit “normalen” Sprachen?[/QUOTE]

Dazu passt IMHO sehr gut https://stackoverflow.blog/2017/02/07/what-programming-languages-weekends/ : Haskell ist eine Wochenend-Sprache. (Abgesehen von Klassiker: http://i.imgur.com/Xy0RoUg.jpg )

Ansehen wollte ich es mir schon länger mal, aber die Lernkurve ist ja wohl recht steil, und auch wenn das etwas “exotisch-abstrakte” reizvoll klingt, ist das (praktische) Kosten-Nutzen-Verhältnis wohl etwas ungünstig…

[QUOTE=mymaksimus]Aber mal ehrlich… im Internet mag ja viel stehen, aber in der wirklich realen Praxis… benutzt man so einen exotischen Mist??
Geht es manchmal nicht anders? oder besser mit „normalen“ Sprachen?[/QUOTE]

Funktionale Sprache bieten oftmals ihre Vorteile, vor allem weil sie oft anders mit State umgehen als Objektorientierte, oder homoiconicity bieten. Das eröffnet eigene Möglichkeiten, z.B. bei Concurrency Issues. Hat natürlich auch seine Nachteile :wink:

Es scheint tatsächlich so, als ob einen imperative Sprachen in Bezug auf Haskell “versauen”, oft tun sich damit Anfänger leichter. Haskell-Funktionen sind mehr mit “Formeln” verwandt als mit Methoden, eigentlich steht da immer nur x = y in irgendeiner Form - und nichts in Richtung “Ablauf”, “Ausführung” oder “Aktion”. Wenn man das erst einmal gerafft hat, ist die größte Hürde überwunden. Haskell-Typen, Typklassen, Monaden, do-Notation u.s.w. sind alles nicht einfach, aber auch kein Zauberwerk.

Wie ist die Prüfung gelaufen? :runner:

Gar nicht mal so schlecht wie gedacht :wink:
Die Aufgaben waren tatsächlich seehr einfach gestellt (viiel leichter als die altklausuren!) und man wusste eigentlich direkt was verlangt war.

Ergebnisse sollten morgen / übermorgen da sein :wink:

1 „Gefällt mir“