hm....: ich möchte mehr über laufzeit, prozessoren etc. wissen

hi leute,

ich studiere mathe und programmiere nebenher ab und zu was und lerne gerne die grundlagen verschiedener sprachen (z.b. java, javascript, abab objects, und neuerdings C). langsam (und auch durch hilfreiche postings in diesem form - danke nochmal!), merke ich, dass mir grundlagen fehlen (grundlagen die mein studium nicht beinhalten). diese grundlagen möchte ich mir nun aneignen.

kennt jemand hilfreiche papier, bücher, online skripe (am besten auf deutsch oder verständlich geschriebnes englisch - englische, mathematische fachliteratur verstehe ich, aber die ist normalerweise sehr, sehr leicht geschrieben), oder kurse an der tu berlin (bzw welche bezeichnungen die inhalte haben sollten), mit deren hilfe ich zu diesen themen/fragen mehr erfahre:

(mit dem decomprimieren kenne ich mich einigermaßen gut aus, daher interessiere ich mich hauptsächlich für den arbeisspeicher verbrauch und die laufzeit eines programmes)

1. wie finde ich heraus, welche datenstruktur wie optimal für die laufzeit und den arbeitsspeicherverbrauch ist? ich frage mich oft, ob ich besser etwas in "long" oder "int" berechne oder lieber ein objekt mit mehreren "boolean" baue. ich glaube die vergleichseinheit zum optimieren wären bytes? oder kommt das immer auf den rechner an?

2. warum brauchen einige programmiersprachen länger für 1==1 als andere?

3. was ist ein prozessor (was threads sind weiß ich) und welchen einfluss hat dieser? sollte ich diesen beim programmieren berücksichtigen? wie würde ich das machen?

4. was liegt einer programmiersprache zugrunde? (interpretersprachen ausgenommen)

5. was ist cpu und was hab ich davon?

6. wie funktioniert das internet (große frage ich weiß, aber ich verstehe nix von servern etc., ich kann sie zwar benutzen.... oder sowas in der art, aber verstehe nicht was da passiert)?

7. wie werden dateien von einem programm eingelesen (die absoluten grundlagen interessieren mich, also keine konkreten befehle)

und zu folgenden themen muss ich beizeiten auch mehr wissen ansammeln:

1. welche teile brauche ich für mehr arbeitsspeicher? wie funktionieren diese teile?
2. welche teile brauche ich für mehr cpu etc.?
3. 1 und 2 mit besonderem blick auf vm's

dieses wissen brauche ich, um zb herauszufinden, wie ich einen AVL baum so programmiere, dass er sehr schnell arbeitet. konkrete fragen wären wieder:
1. wie weiß ich welche datenstruktur für "nodes" bei welcher programmiersprache zu welchem pc optimal wäre
2.  etc.

lg

  1. ok, dass war vielleicht bischen viel ^^

    zuerst interessiere ich mich für literatur zum thema:

    wie krieg ich raus, welche datenstruktur am optimalsten für laufzeit und arbeitsspeicher ist unter folgenden bedingungen:
    a) bestimmte programmiersprache sei gegeben
    b) bestimmter prozessor/computer sei gegeben, am besten mit erläuterung warum das wichtig ist

    dabei interessiere ich mich für die absoluten grundlagen, bzw die grundlegende herleitung

    1. Tach!

      wie krieg ich raus, welche datenstruktur am optimalsten für laufzeit und arbeitsspeicher ist unter folgenden bedingungen:

      Optimal lässt sich zwar grammatisch aber nicht sinnvoll steigern. Das Optimum ist der bestmöglichste Kompromiss, und das ist nicht zwangsläufig ein Extrem in irgendeiner Richtung. Dies soll nicht nur ein rechtschreiblicher Hinweis sein, sondern soll auch zeigen, dass der beste Weg manchmal auch in der Mitte zwischen den Idealen liegt.

      a) bestimmte programmiersprache sei gegeben
      b) bestimmter prozessor/computer sei gegeben, am besten mit erläuterung warum das wichtig ist

      Solange du keinen Einfluss auf das Untendrunter eines Systems hast, kannst du nur bedingt Einfluss nehmen. Natürlich ist es wichtig, ungefähr zu kennen, was im Untergrund abläuft. Aber viel mehr als das letzte bisschen Effizienz herauszukitzeln, solltest du die Philosophie der jeweils verwendeten Sprache kennenlernen. Es ist manchmal sinnvoller, ein System zu verwenden, dessen Philosophie besser zum Problem passt, als irgendein weniger gut passendes System auf das Problem zu pressen, und das System dabei so zu verbiegen, dass man es kaum wiedererkennt.

      Wie lernst du nun das optimale Werkzeug kennen? Nun, du musst sie alle kennen und deine Erfahrungen damit gesammelt haben, damit du dann situationsbedingt entscheiden kannst, was zum einen effektiv und zum anderen auch effizient ist. Eine konkretere Antwort kann ich darauf nicht geben. Du wirst deine Fehler machen und daraus lernen müssen, wie jeder andere auch.

      dedlfix.

      1. Hallo,

        Optimal lässt sich zwar grammatisch aber nicht sinnvoll steigern.

        richtig, "optimal" impliziert in der Aussage schon eine Art Superlativ.

        Das Optimum ist der bestmöglichste Kompromiss

        Aber das gilt für "bestmöglich" auch, "bestmöglichst" ist daher ebenfalls Unfug.
        Hat noch jemand ein paar Erbsen, wenn ich schon gerade beim Zählen bin? ;-)

        Ciao,
         Martin

        --
        Mit einem freundlichen Wort und einer Waffe erreicht man mehr, als mit einem freundlichen Wort allein.
          (Al Capone, amerikanische Gangsterlegende)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. hm, danke.

          gibt es eine art vergleichseinheit? also im sinne von:

          werkzeug D von programmiersprache A verbraucht z.b. für etwas 5 Einheiten vergleichseinheit

          und werkzeug C von programmiersprache B verbraucht z.b. für etwas nur 3 Einheiten vergleichseinheit.

          1. Aus einem int mit binären Operatoren ein Bit heraus (oder hinein) zu pfriemeln ist wahrscheinlich schon ein bisschen schneller als ein Objekt mit einem bool anzusprechen. Aber selbst wenn...
            Wenn ich was programmiere überlege ich wie oft mein Code aufgerufen wird. Juckt es mich wenn er ein paar µs länger läuft? Eher nicht. Stattdessen programmiere ich so dass ich den Code auch nach ein paar Monaten schnell wieder verstehe.
            Das bringt robusten Code. Du hast nichts davon wenn dein Code zwar ein paar Prozessorzyklen schneller wird, dafür aber nicht funktioniert weil du keinen Durchblick mehr hast und alles schief läuft.

            Es ist immer eine Frage der Auswirkung. Wie viel Zeit oder Speicherplatz sparst du durch eine Optimierung ins Extreme? Wird das jemand merken?

            Für viele Projekte ist es gar nicht nötig, so genaue Details zu wissen. Ich könnte mir vorstellen dass kaum jemand so tief denkt und eine Antwort auf diese Frage lange auf sich warten lässt.

            1. ok, danke.

              gibt es gut geeignete literatur, wenn man verstehen möchte wie programmiersprachen funktionieren (interpretersprachen ausgenommen), also wie man sich zb eine eigene programmiersprache bauen kann (habe ich nicht vor, muss aber irgendwie verstehen was genau die entwickler im kopf hatten)? und wie betriebssysteme funktionieren (gebaut werden)?

              1. Tach!

                gibt es gut geeignete literatur, wenn man verstehen möchte wie programmiersprachen funktionieren (interpretersprachen ausgenommen),

                Warum willst du die ausnehmen? Am Ende muss was lauffähiges rauskommen. Programmiersprachen "funktionieren" so, dass sie eine Problemlösung in einem eindeutig nachvollziehbaren Text darstellen. Der Rest ist unabhängig von der Sprache und ist ein Mechanismus, der den Text liest und in ausführbare Form bringt - oder auch (erstmal) den Code einer anderen Sprache.

                also wie man sich zb eine eigene programmiersprache bauen kann (habe ich nicht vor, muss aber irgendwie verstehen was genau die entwickler im kopf hatten)?

                Definier dir einfach eine Sprache. - Was die Programmierer im Kopf hatten? Vermutlich ein Problem und eine Idee zu dessen Lösung, bei der sie die vorhandenen Systeme für nicht passend hielten. Oder aber sie wollten schon immer mal was eigenes schreiben, weil sie das vorhandene unschön fanden. Üblicherweise git es zu jeder Programmiersprache eine aufgeschriebene Entstehungsgeschichte.

                und wie betriebssysteme funktionieren (gebaut werden)?

                Zu allgemein gefragt - zu allgemein geantwortet: Sie bilden im einfachten Fall die Schnittstelle zwischen der Hardware und den Anwendungen. Das kann man je nach Größe und Umfang der Hardware beliebig komplex gestalten, inklusive dem Mitliefern von Anwendungen.

                dedlfix.

              2. Moin,

                also wie man sich zb eine eigene programmiersprache bauen kann (habe ich nicht vor, muss aber irgendwie verstehen was genau die entwickler im kopf hatten)?

                Könnte interessant sein:
                Compilerbau 1
                Compilerbau 2

                und wie betriebssysteme funktionieren (gebaut werden)?

                Dazu ist es interessant sich mit dem Linux-Kernel zu beschäftigen, um grundsätzliche Verständnisse zu erlangen. Linux deshalb als Empfehlung, weil der Quellcode offenliegt, und es viel Literatur dazu gibt (siehe Google).

                Grüße Marco

                --
                Ich spreche Spaghetticode - fließend.
                1. und wie betriebssysteme funktionieren (gebaut werden)?

                  Dazu ist es interessant sich mit dem Linux-Kernel zu beschäftigen, um grundsätzliche Verständnisse zu erlangen. Linux deshalb als Empfehlung, weil der Quellcode offenliegt, und es viel Literatur dazu gibt (siehe Google).

                  Er soll sich also mit >15000000 Zeilen Code beschäftigen? Der Linux-Kernel ist für Lehrzwecke gänzlich ungeeignet, dafür gibt es Systeme wie Minix mit dem dazugehörigen Buch.

                  1. Moin,

                    Er soll sich also mit >15000000 Zeilen Code beschäftigen?

                    Nein, natürlich nicht. Ich dachte da eher daran.

                    Der Linux-Kernel ist für Lehrzwecke gänzlich ungeeignet

                    Nein. Warum? Nur weil es kein Microkernel ist? Glaubst du wirklich er hat vor den gesamten Code des Kernels zu studieren und zu verstehen? Das halte ich für unwahrscheinlich. Von daher ist der Linux-Kernel nicht minder geeignet, generelles Verständnis über Kernel zu erlangen.

                    Grüße Marco

                    --
                    Ich spreche Spaghetticode - fließend.
                    1. Er soll sich also mit >15000000 Zeilen Code beschäftigen?

                      Nein, natürlich nicht. Ich dachte da eher daran.

                      Hast du das Buch gelesen? Auszug aus der von dir verlinkten Website: »This book is intended to cover everything that is needed to know in order to properly build, customize, and install the Linux kernel.« Es geht also darum, sich seinen eigenen Kernel zu backen. Zu welchen Erkenntnissen soll der Threadersteller denn dabei kommen? Wenn er sich ein paar Stunden durch make menuconfig gehangelt hat wird er weder etwas über den Linux-Kernel noch über den Bau von Betriebssystemen – was ja seine eigentliche Frage war – wissen.

                      Der Linux-Kernel ist für Lehrzwecke gänzlich ungeeignet

                      Nein. Warum? Nur weil es kein Microkernel ist?

                      Ein Microkernel ist seinem monolithischen Bruder sicher in vielen Aspekten überlegen, mir ging es aber tatsächlich nur um die aufgeblähte Codebase.

                      Glaubst du wirklich er hat vor den gesamten Code des Kernels zu studieren und zu verstehen?

                      Falls du vom Linux-Kernel redest: Nein, das macht mit Sicherheit keiner. Erst recht nicht mit „Hello World“ C-Kenntnissen. Wahrscheinlich versteht nichtmal Torvalds selbst jeden Codefetzen im Kernel…

              3. Moin hm....,

                gibt es gut geeignete literatur, wenn man verstehen möchte wie programmiersprachen funktionieren (interpretersprachen ausgenommen), also wie man sich zb eine eigene programmiersprache bauen kann (habe ich nicht vor, muss aber irgendwie verstehen was genau die entwickler im kopf hatten)?

                Die Standard-Literatur zu dem Thema ist wohl das Drachen-Buch („Compilers: Principles, Techniques, and Tools” auf Englisch, „Compiler. Prinzipien, Techniken und Werkzeuge” auf deutsch).

                LG,
                 CK

          2. Moin hm....,

            gibt es eine art vergleichseinheit? also im sinne von:

            werkzeug D von programmiersprache A verbraucht z.b. für etwas 5 Einheiten vergleichseinheit

            und werkzeug C von programmiersprache B verbraucht z.b. für etwas nur 3 Einheiten vergleichseinheit.

            Nein, so etwas gibt es nicht. Denn das ist so pauschal gar nicht beantwortbar und hängt von vielen Faktoren ab. Natürlich gibt es ausgefeilte Benchmarks (z. B. The Computer Language Benchmarks Game, das dürfte da wohl das bekannteste sein), aber wirklich informativ ist das halt nicht. Wenn es wirklich Performance-kritisch ist, musst du den Algorithmus halt im Zweifel in verschiedenen Sprachen implementieren und testen, was schneller ist. Wobei das erst der zweite oder eher sogar dritte Optimierungs-Schritt sein sollte; zuerst solltest du prüfen, ob du den Algorithmus verändern kannst oder durch andere Datenstrukturen optimieren kannst, danach ob du eventuell den Algorithmus effizienter formulieren kannst oder gar Abkürzungen nehmen kannst. Und erst zuletzt solltest du auf die Sprache schauen, denn gerade als Anfänger hat die die kleinste Auswirkung auf die Laufzeit.

            LG,
             CK

    1. wie finde ich heraus, welche datenstruktur wie optimal für die laufzeit und den arbeitsspeicherverbrauch ist?

    Durch nachdenken oder googeln. Nein ernsthaft, für viele Probleme gibt es nur "optimal unter den Bedingungen..." oder es wurde noch keine Lösung gefunden. Wenn dich Datenstrukturen und Laufzeiten interessieren, lernst du wahrscheinlich am schnellsten und besten, wenn du dich in die entsprechenden Vorlesungen für Informatiker mit reinsetzt (z.B. "Algorithmen und Datenstrukturen" oder wie auch immer sie heißen mögen).
    Wenn du wirklich lieber liest und auch ein wenig Zeit investieren willst, sind "The Art Of Computer Programming" was für dich. Da geht es _richtig_ ans Eingemachte und es ist sehr gut. Wird dir als Mathematiker auch nicht so schwer fallen.

    ich frage mich oft, ob ich besser etwas in "long" oder "int" berechne oder lieber ein objekt mit mehreren "boolean" baue. ich glaube die vergleichseinheit zum optimieren wären bytes? oder kommt das immer auf den rechner an?

    Kommt drauf an, welches Kriterium du optimieren willst. Wenn du effizient programmieren willst, wäre die "beste Optimierung" darüber gar nicht nachzudenken. ;)

    1. warum brauchen einige programmiersprachen länger für 1==1 als andere?

    Weil 1==1 nicht in allen Programmiersprachen das gleiche ist.

    1. was ist ein prozessor (was threads sind weiß ich) und welchen einfluss hat dieser? sollte ich diesen beim programmieren berücksichtigen? wie würde ich das machen?

    Wenn du DAS wissen willst, dann lern Assembler.

    1. was liegt einer programmiersprache zugrunde? (interpretersprachen ausgenommen)

    Besuch die Vorlesung "Compilerbau".

    1. was ist cpu und was hab ich davon?

    Siehe 3.

    1. wie funktioniert das internet (große frage ich weiß, aber ich verstehe nix von servern etc., ich kann sie zwar benutzen.... oder sowas in der art, aber verstehe nicht was da passiert)?

    Lies die entsprechenden RFCs zu den OSI Schichten. Von da wirst du weiterkommen.

    1. wie werden dateien von einem programm eingelesen (die absoluten grundlagen interessieren mich, also keine konkreten befehle)

    Festplattenarm spührt Polarisierung (oder so) von den Eisenteilchen, wandelt das um in elektrische Signale, die über Mainboard und dann CPU verarbeitet und im Arbeitsspeicher abgelegt werden, von dem aus dein Programm dann darauf zugreift.
    Vorher sorgt noch das Betriebssystem, wohin der Festplattenarm soll und ob er das überhaupt darf.

    und zu folgenden themen muss ich beizeiten auch mehr wissen ansammeln:

    1. welche teile brauche ich für mehr arbeitsspeicher? wie funktionieren diese teile?
    2. welche teile brauche ich für mehr cpu etc.?
    3. 1 und 2 mit besonderem blick auf vm's

    Langweilig. :P

    dieses wissen brauche ich, um zb herauszufinden, wie ich einen AVL baum so programmiere, dass er sehr schnell arbeitet.

    Tu einfach das, was ich oben geschrieben habe.

    konkrete fragen wären wieder:

    1. wie weiß ich welche datenstruktur für "nodes" bei welcher programmiersprache zu welchem pc optimal wäre

    Die Datenstruktur ist ziemlich unabhängig von der Programmiersprache (sofern die kein Schrott ist). In der Regel passt man die Datenstruktur an die Algorithmen und dieser wiederum an das Problem an.
    Das richtige Vorgehen ist also: du hast ein Problem und überlegst dir einen Algorithmus (mit primitiven Datenstrukturen) um das Problem zu lösen. Dann berechnest du die vereinfachte Laufzeitkomplexität dieses Algorithmus. Wenn du damit unzufrieden bist, dann überlegst du dir, wie man das besser lösen kann und versuchst die Struktur des Problems auszunutzen, um eine geringere Laufzeitkomplexität zu erreichen. Und wenn du dann noch weitergehst, kannst du die Laufzeitkomplexität auch abhängig von der verwendeten Hardware berechnen, das ist allerdings VIEL schwieriger, als eine vereinfachte Laufzeitkomplexität zu berechnen. Bei letzter gehst du z.B. davon aus, dass ein Vergleich "einen Punkt" kostet usw. Das für richtige Hardware zu berechnen ist quasi unmöglich, also schlag es dir lieber aus dem Kopf und begnüg dich mit der vereinfachten Laufzeitkomplexität, das ist sinnvoller und bringt mehr Freude.

    1. Tach,

      1. wie funktioniert das internet (große frage ich weiß, aber ich verstehe nix von servern etc., ich kann sie zwar benutzen.... oder sowas in der art, aber verstehe nicht was da passiert)?

      Lies die entsprechenden RFCs zu den OSI Schichten. Von da wirst du weiterkommen.

      das Internet funktioniert nicht nach OSI und hat keine klar getrennten Schichten im OSI-Sinne (siehe z.B. Layering Considered Harmful. Um das Internet zu verstehen, würde ich als Startpunkt die Wikipedia empfehlen, Artikel zu IP, TCP, UDP, HTTP, DNS, Routing, HTML, ICMP, …

      mfg
      Woodfighter

        1. wie funktioniert das internet (große frage ich weiß, aber ich verstehe nix von servern etc., ich kann sie zwar benutzen.... oder sowas in der art, aber verstehe nicht was da passiert)?

        Lies die entsprechenden RFCs zu den OSI Schichten. Von da wirst du weiterkommen.

        das Internet funktioniert nicht nach OSI und hat keine klar getrennten Schichten im OSI-Sinne (siehe z.B. Layering Considered Harmful. Um das Internet zu verstehen, würde ich als Startpunkt die Wikipedia empfehlen, Artikel zu IP, TCP, UDP, HTTP, DNS, Routing, HTML, ICMP, …

        Fast alle der von dir genannten Artikel ist im OSI-Modell Artikel in der Wikipedia verlinkt. Deswegen ja auch mein "von da wirst du weiterkommen" und nicht "Das Internet funktioniert nach OSI" o.ä.
        Und warum er jetzt HTML und DNS für die Funktionsweise des Internets braucht... naja, da sind die anderen Sachen doch wesentlich grundlegender.

        1. Tach,

          Fast alle der von dir genannten Artikel ist im OSI-Modell Artikel in der Wikipedia verlinkt. Deswegen ja auch mein "von da wirst du weiterkommen" und nicht "Das Internet funktioniert nach OSI" o.ä.

          du schriebst, er soll die RFC zu OSI lesen (OSI ist übrigens nicht in RFC definiert worden, sondern von der ISO verabschiedet), nicht den Wikipedia-Artikel dazu; ich schrieb, warum ich OSI für einen falschen Einstieg halte. Einen Einsteiger erstmal zu etwas zu führen, dass er dann wieder vergessen muss, weil es sich nicht durchgesetzt hat, halte ich nicht für sinnvoll. Erinnert mich an meine Ausbildung und die vielen Berufsschulstunden, die mit unsinnigem Wissen über Classful-Routing gefüllt waren.

          Und warum er jetzt HTML und DNS für die Funktionsweise des Internets braucht... naja, da sind die anderen Sachen doch wesentlich grundlegender.

          Es gibt nicht viel, das grundlegender ist als DNS und HTML ist durchaus einer der wichtigsten Bestandteile des www und damit dessen, was die meisten unter Internet verstehen.

          mfg
          Woodfighter

  2. Hallo,
    Du hast ja schon ettliche sehr gute Antworten erhalten, deswegen ergänze ich nur, wo mir noch was einfällt:

    1. was liegt einer programmiersprache zugrunde? (interpretersprachen ausgenommen)

    Ich weiss nicht, wie weit Du Dich in die Theorie wagen willst - aber als Mathematiker interssierts Dich vielleicht ja auch. Du könntest Dich mit Berechenbarkeitstheorie und formalen Sprachen beschäfigen:
    Es gibt in der Berechenbarkeitstheorie den Begriff der Touring-Vollständigkeit. Der Begriff basiert auf einer (fiktiven), sehr einfachen Maschine (Touringmaschine), die potentiell in der Lage ist, jedes berechenbare Problem zu lösen. Kann eine Touringmaschine ein Problem nicht lösen, so gibt es KEINE Maschine (also auch keinen Computer), der dieses Problem lösen kann.
    Umgekehrt: Gibt es eine Maschine (= Computer), die ein Problem lösen kann, so kann diese Maschine grundsätzlich immer durch eine Touring-Maschine ersetzt werden.
    Eine Programmiersprache, die alle Funktionen einer Touringmaschine abdeckt, heisst "touring-vollständig" (oder auch "touring-mächtig").

    => JEDE Programmiersprache MUSS touring-mächtig sein (um damit sinnvoll programmieren zu können). Wenn man sich nun damit ein bisschen beschäftigt, was das genau heisst (also welche Elemente eine touring-mächtige Programmiersprache MINDESTENS haben muss), so kommt man schnell auf viele Gemeinsamkeiten, die ALLE Sprachen haben und somit auf die Antwort auf Deine Frage, was allen Programmiersprachen zu Grunde liegt.

    => Berechenbarkeitstheorie wäre ein Ansatz, sich Deiner Frage zu nähern (allerdings ein zugegeben sehr theoretischer).
    Wir haben im Studium hierzu "den Schöning" gelesen - didaktisch besonders toll find ich ihn aber nicht.
    Evtl. wirst Du auch in diesem Podcast fündig.

    1. wie funktioniert das internet (große frage ich weiß, aber ich verstehe nix von servern etc., ich kann sie zwar benutzen.... oder sowas in der art, aber verstehe nicht was da passiert)?

    Hierzu kann ich Computer Networking: A Top-Down-Approach featuring the Internet empfehlen. Es behandelt die verschiedenen Schichten des Internets, angefangen bei den untersten nahe der Hardware bis hoch zu den höheren Protokollen (http, DNS, Email usw.)

    Hope that helps,

    Jörg

    1. Om nah hoo pez nyeetz, mrjerk!

      Es gibt in der Berechenbarkeitstheorie den Begriff der Touring-Vollständigkeit. Der Begriff basiert auf einer (fiktiven), sehr einfachen Maschine (Touringmaschine), die potentiell in der Lage ist, jedes berechenbare Problem zu lösen. Kann eine Touringmaschine ein Problem nicht lösen, so gibt es KEINE Maschine (also auch keinen Computer), der dieses Problem lösen kann.
      Umgekehrt: Gibt es eine Maschine (= Computer), die ein Problem lösen kann, so kann diese Maschine grundsätzlich immer durch eine Touring-Maschine ersetzt werden.
      Eine Programmiersprache, die alle Funktionen einer Touringmaschine abdeckt, heisst "touring-vollständig" (oder auch "touring-mächtig").

      Turing
      Turing

      vs.

      Touring
      Touring

      ;-)

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Hang und Hangar.

  3. hi hm,

    toll! Gefällt mir, diese Wissbegierigkeit! Es wurde ja schon einiges genannt, dein Fragekatalog ist nunmal sehr komplex! Was fällt mir altem Hasen nun noch ein?

    • Lese Gödel, Escher, Bach
    • beschäftige dich ein wenig mit zellulären Automaten
    • schnuppere ein bisschen rein in die Chomsky-Hierachie
    • lerne C
    • beschäftige dich mit Forth
    • setze dich auseinander mit dem Begriff der Turing-Vollständigkeit
    • the beauty of a Turing-Machine
    • tolles Geschenk zu Weihnachten: taocp (knuth)
    • geh mal wieder baden und Bier trinken!

    old man.
    exhse