MatzeA: Was war als erstes da?

Servus,

ich überlege gerade auch so nebenbei, was wohl als erstes da war.
Die Programmiersprache an für sich oder der Interpreter?

Viel Spass beim rätseln.

Gruss Matze

  1. Servus,

    ich überlege gerade auch so nebenbei, was wohl als erstes da war.
    Die Programmiersprache an für sich oder der Interpreter?

    Viel Spass beim rätseln.

    Da gibts nicht viel zu rätseln: Bill Gates war als Erster da.

    Gruss, rolf

    Ähhm: *g

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
  2. Hallo MatzeA,

    ich überlege gerade auch so nebenbei, was wohl als erstes da war.
    Die Programmiersprache an für sich oder der Interpreter?

    Die Programmiersprache. Entsprechende Compiler wurden von Hand
    geschrieben und assembliert.

    Grüße,
     CK

    --
    Death is God's way of telling you not to be such a wise guy.
    1. Servus,

      ich zähle nun aber durchaus
      AC 02 C0 D1 19 DD

      usw. usw. als Programmiersprache.

      Man muss also weiter in die Technik zurück.

      Gruss Matze

      1. Moin!

        ich zähle nun aber durchaus
        AC 02 C0 D1 19 DD
        usw. usw. als Programmiersprache.

        Man muss also weiter in die Technik zurück.

        Richtig, Bytes per Hand zu codieren und in Lochkarten zu stanzen mag zwar ziemlich "Basic" gewesen sein, aber dennoch muß man, um die Lochkarten überhaupt verwenden zu können, ja irgendeine Maschine habe, die sie verarbeiten kann. Und damit man diese Maschine bauen konnte, mußte festgelegt werden, was die alles können soll. Denn nur anhand solcher Spezifikationen konnte man sie bauen.

        Damit ist also klar: Nur wenn vorher der Befehlssatz feststeht, kann man hinterher einen passenden Lochkartenleser bauen.

        Und wenn du die Stanzlöcher als Befehle siehst, dann existierte die Programmiersprache eben zuerst. Ohne "Sprache" kein Computer.

        Also kein Henne-Ei-Problem.

        - Sven Rautenberg

        --
        "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
        1. Servus,

          Und wenn du die Stanzlöcher als Befehle siehst, dann existierte die Programmiersprache eben zuerst. Ohne "Sprache" kein Computer.

          Also kein Henne-Ei-Problem.

          Gehen wir mal sehr weit zurückzu 0 und 1.
          Ein Schalter wäre nun sehr überzogen betrachtet, ein interpreter, der nun aus dem wunsch Licht an Licht aus letzendlich ein Ergebniss liefert.

          Jetzt gehe ich weiter zu den ersten Chip Bausteinen.
          Die kannten teilweise ja schon funktionen.
          Die Programierung hingegen war ein Schaltplan und keine Sprache.
          Trotzdem interpredierten die ersten "Prozessoren" eingaben ....

          Damt war wohl die erste Computer Sprache der Zeichstift.
          Ist der Gedankengang zu weit her geholt?

          Gruss Matze

          1. Moin!

            Und wenn du die Stanzlöcher als Befehle siehst, dann existierte die Programmiersprache eben zuerst. Ohne "Sprache" kein Computer.

            Also kein Henne-Ei-Problem.

            Gehen wir mal sehr weit zurückzu 0 und 1.
            Ein Schalter wäre nun sehr überzogen betrachtet, ein interpreter, der nun aus dem wunsch Licht an Licht aus letzendlich ein Ergebniss liefert.

            Aber ein Schalter kann nicht programmiert werden. Unter Programmieren verstehe ich hierbei, dass ein-und-dieselbe Maschine je nach Input der Befehle mal das eine und mal das andere tut, oder auch beides individuell kombiniert.

            Ein Schalter hat in dem Sinne keinen Input. Und definitiv auch keine Möglichkeit, mal "beides" zu tun.

            Also ist das kein Interpreter, und auch kein Computer, erfordert keine Programmiersprache, und bietet keinen Ansatzpunkt zur Lösung der Fragestellung.

            Jetzt gehe ich weiter zu den ersten Chip Bausteinen.
            Die kannten teilweise ja schon funktionen.

            Auch hier gilt: Wenn du irgendein NAND- oder NOR-Gatter oder meinetwegen auch einen binären Addierer oder Schieberegister hast, dann sind das zwar alles elektronische Bauteile, aber sie sind keinesfalls programmierbar. Sie tun deterministisch immer exakt dasselbe. Der Weg von einem Stapel NAND-Gatter hin zu einer CPU ist da noch ziemlich weit.

            Aber irgendwann wird jemand diesen Weg wohl gegangen sein. Und hat sich ein Gerät gebastelt, welches diverse Bitfolgen aus einer Eingabevorrichtung auslesen konnte, damit diverse Bitfolgen einer Speichereinrichtung manipulierte und als Ergebnis gewisse Bitfolgen auf eine Ausgabevorrichtung ausgab.

            Und dieser jemand stand vor dem Problem: Was soll so ein Gerät denn überhaupt können?

            Und dankenswerterweise hat ein gewisser Herr Turing schon weit vor dieser Elektronik einen theoretischen Automaten erfunden, der über gewisse minimale Befehlsmöglichkeiten verfügt, aber damit trotzdem alle möglichen Aufgabestellungen, die sich programmieren lassen, lösen kann. Das war 1936.

            Zu derselben Zeit, etwas später (1936-1938) hat Conrad Zuse seinen Z1 gebaut, einen vollmechanische, freiprogrammierbaren Rechner. Um sowas aber bauen zu können, muß man irgendwie festlegen, was das Gerät können soll. Man muß also definieren, wie die Zahlen intern dargestellt werden (das Binärsystem macht die Entscheidung da sehr leicht), und man muß irgendwie festlegen, wie die Rechenbefehle dargestellt werden sollen.

            Da es hierbei keinerlei "natürliche Vorgaben" gibt, kann man die Befehle frei definieren. Nur: Tun muß man es natürlich, und zwar vor dem Bau, nicht hinterher. Also: Die Programmiersprache entsteht ganz bestimmt vor dem eigentlichen real existierenden Rechner.

            Die Programierung hingegen war ein Schaltplan und keine Sprache.

            Die "Programmierung" eines mechanischen Rechners ist weit weg von irgendeinem Schaltplan. :)

            Trotzdem interpredierten die ersten "Prozessoren" eingaben ....

            Naja, "interpretieren" ist so ein Wort, was eigentlich immer zutrifft. Weil die Befehle grundsätzlich frei definiert werden können, ist logischerweise eine Art von "Interpretation" im Spiel, wenn der "Rechner" auf 0x80 hin etwas addiert und auf 0xFF das Ergebnis wo hinspeichert. Könnte auch umgekehrt sein.

            Heutzutage wird selbst die Maschinensprache der x86-CPUs im wahrsten Sinne interpretiert, weil in der CPU ein Microcode abläuft, der die (eigentlich ja schon auf dem untersten Level befindliche) Maschinensprache interpretiert und entsprechend intern abarbeitet. Deswegen auch der Geschwindigkeitsvorteil von RISC-Prozessoren. Die arbeiten (ich vermute es so) als Maschinensprache direkt mit dem Microcode und interpretieren da nichts, oder zumindest nicht soviel. Sind dafür aber nicht binärkompatibel - deswegen läuft Windows da nicht, und niemand will sie. :)

            Damt war wohl die erste Computer Sprache der Zeichstift.
            Ist der Gedankengang zu weit her geholt?

            Doch, ist er. Mit dem Stift hat man die erste Computersprache aufgeschrieben, klar. Aber er selbst war ganz sicher keine Sprache.

            - Sven Rautenberg

            --
            "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
            1. Hallo

              Um's mal noch viiiieeel weiter herzuholen:

              der Schalter: ... erfordert keine Programmiersprache ...

              Irgendwer, im Normalfall die Eltern, bringen einem bei, das Ding bei Erreichen
              einer bestimmten Körperhöhe, alternativ eines gewissen Alters, zu betätigen.
              Der Betätiger wird also programmiert, ... in einer gewissen Sprache. ;-)))

              Wie gesagt/geschrieben _seeehhhr_ weit hergeholt. ;-)

              Tschö, Auge

              --
              Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
              (Victor Hugo)
              1. Moin!

                Wie gesagt/geschrieben _seeehhhr_ weit hergeholt. ;-)

                Da reicht ein ";-)" aber nicht für aus, so weit, wie das hergeholt ist. :) Da würdest du mit Sicherheit gegen die Mengenbegrenzung je Posting verstoßen, wenn du ausreichend ";-)" machen würdest.

                - Sven Rautenberg

                --
                "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
            2. Servus,

              Ein Schalter hat in dem Sinne keinen Input. Und definitiv auch keine Möglichkeit, mal "beides" zu tun.

              Das sicher nicht, stellt aber das erste Glied in der Kette dar, weil es ein Digitales Muter liefert.
              Nicht weit vom Schalter weg ist der Schütz, der nun mit Tastern bzw. "Eingängen" und entsprechender Verkabelung durchaus ein x beliebiges Gatter darstellen kann.

              Auch hier gilt: Wenn du irgendein NAND- oder NOR-Gatter oder meinetwegen auch einen binären Addierer oder Schieberegister hast, dann sind das zwar alles elektronische Bauteile, aber sie sind keinesfalls programmierbar. Sie tun deterministisch immer exakt dasselbe. Der Weg von einem Stapel NAND-Gatter hin zu einer CPU ist da noch ziemlich weit.

              Ja und nein.
              Meines wissens war der erste "Computer" bestehend aus Röhren, was letzendlich von der Funktionsweise nicht anderes war als eine vielzahl verschaltener Schütze.

              Das erste Programm war wohl die Berechnung von Zahlen addition subtraktion usw. Ein riesiger Rechner der einige Killowatt an Energie verheizte und für eine Berechnng von 5 * 17 mehrere Minuten benötigte.
              Eingestellt wurde die Zahl mit mehreren Wahlrädern.

              Das erste Programm, und auch der erste Prozessor somit war auf kleinen ein und ausschaltern gestützt.

              Schliesse einen Schütz an eine Spannung und klemme seine Stormversorgung auf seinen eigenen Unterbrecher und Du hast ein wesentliches Modul eines Prozessors, den Oszilator.

              Mit der entsprechenden Verkabelung baust Du dir ein System, dass genau das tut was Du entsprechend haben willst.

              Ich bin mir sicher, mit einem heiden aufwand kann man jede Deiner Programierten Anwendungen technisch nachbauen.
              Das der Aufwand grösser ist steht ohne zweifel dar.

              Somit hast Du ein System, das gegebenfalls Befehle bearbeitet z.B. 2 Zahlen zusammen zählen was man ja als Programm aktzeptieren kann.

              Die Hardware interpretiert nun die eingänge und berechnet dir eine entsprechende Zahl.

              Ich habe aber immer noch nicht`s programmiert.
              Du hast natürlich recht: Das eine kann man x mal wiederholen und ändern etc.
              Wenn man einen Chip baut ist das "Programieren" für jeden Chip eine einmalige Sache.

              Trotzdem kann der Chip entsprechend bearbeitet werden, dass er genau diese Rechenfunktionen übernimmt.

              Da es hierbei keinerlei "natürliche Vorgaben" gibt, kann man die Befehle frei definieren. Nur: Tun muß man es natürlich, und zwar vor dem Bau, nicht hinterher. Also: Die Programmiersprache entsteht ganz bestimmt vor dem eigentlichen real existierenden Rechner.

              Dann wären also die Mathematik die Programiersprache?!?

              Die "Programmierung" eines mechanischen Rechners ist weit weg von irgendeinem Schaltplan. :)

              Nein das glaube Ich nicht wirklich. Zumindest nicht was den ersten "Rechner" betrifft.

              Gruss Matze

              Ja gut er Stift hat keine Schuld :-)

              1. Moin!

                Das sicher nicht, stellt aber das erste Glied in der Kette dar, weil es ein Digitales Muter liefert.

                Ein Schalter ist ein Bauteil. Nicht mehr, nicht weniger. Es ist kein Computer.

                Nicht weit vom Schalter weg ist der Schütz, der nun mit Tastern bzw. "Eingängen" und entsprechender Verkabelung durchaus ein x beliebiges Gatter darstellen kann.

                Auch wieder ein Bauteil, nichts programmierbares.

                Meines wissens war der erste "Computer" bestehend aus Röhren, was letzendlich von der Funktionsweise nicht anderes war als eine vielzahl verschaltener Schütze.

                Da liegst du komplett falsch. Nach Historikermeinung ist der Z1 von Konrad Zuse der erste wirkliche Computer. Und der arbeitete mechanisch.

                Der erste elektrische Rechner, der Z3, war im Prinzip nur eine Umsetzung des Z1 mit mechanischen Relais. Also auch noch keine Röhren. Die kamen erst danach.

                Das erste Programm war wohl die Berechnung von Zahlen addition subtraktion usw. Ein riesiger Rechner der einige Killowatt an Energie verheizte und für eine Berechnng von 5 * 17 mehrere Minuten benötigte.
                Eingestellt wurde die Zahl mit mehreren Wahlrädern.

                Bedenke, dass es immer noch kein programmierbarer Computer ist, wenn man auf Eingabeeinheiten zwei Zahlenwerte einstellen kann, irgendwo die große Kurbel gedreht wird und dann das addierte Ergebnis herauskommt. Oder das multiplizierte Ergebnis.

                Kennzeichen einer Programmiersprache ist, dass Anweisungslisten eben nicht linear abgearbeitet werden, sondern dass es im Programmfluß auch Entscheidungen basierend auf Vergleichen gibt, welche den Programmfluß dann durch Sprünge in der Anweisungsliste individuell gestalten.

                Das erste Programm, und auch der erste Prozessor somit war auf kleinen ein und ausschaltern gestützt.

                Das sind sie heute immer noch, nur sind die Schalter heute noch wesentlich kleiner geworden.

                Aber das ändert nichts an der Tatsache, dass irgendjemand sich mal überlegen mußte, wie er diese Schalter zusammenbaut, und damit er sie sinnvoll zusammenbauen kann, muß er wissen, was er damit überhaupt machen will.

                Schliesse einen Schütz an eine Spannung und klemme seine Stormversorgung auf seinen eigenen Unterbrecher und Du hast ein wesentliches Modul eines Prozessors, den Oszilator.

                Und wozu brauche ich den nun wirklich? Es ist auch nur ein Bauteil. Mal abgesehen davon, dass ich so einem Taktgeber nicht vertrauen würde, allein aus mechanischen Gründen nicht. :)

                Im übrigen gehen die Forschungen bei Mikroprozessoren dahin, asynchrone Einheite zu entwickeln. Der zentrale Takt fällt also weg, es wird in den einzelnen Einheiten nur dann gearbeitet, wenn Arbeit da ist. Soll toll für die Energiebilanz sein und ganz viel Strom sparen.

                Mit der entsprechenden Verkabelung baust Du dir ein System, dass genau das tut was Du entsprechend haben willst.

                Dazu muß ich wissen, was ich haben will.

                Ich bin mir sicher, mit einem heiden aufwand kann man jede Deiner Programierten Anwendungen technisch nachbauen.

                Natürlich. Mit Schaltern, Kabeln etc. baust du problemlos eine Maschine, die genau das, was ich programmiert habe exakt löst.

                Und für das zweite Programm baust du wieder eine Maschine gleicher Größenordnung.

                Da ist das Zusammenbauen entsprechender Maschinen aber kein Programmieren. Sondern das Festlegen, was zu passieren hat, das ist das Programmieren. Und das geschieht zweifelsfrei vor dem Bau.

                Somit hast Du ein System, das gegebenfalls Befehle bearbeitet z.B. 2 Zahlen zusammen zählen was man ja als Programm aktzeptieren kann.

                Die Hardware interpretiert nun die eingänge und berechnet dir eine entsprechende Zahl.

                Ich habe aber immer noch nicht`s programmiert.

                Die Definition einer Programmiersprache ist, dass sie Abfragen (IF) und Sprünge kennt. Deswegen ist HTML keine Programmiersprache (die Conditional Comments für den IE sind zwar Bedingungen, aber es gibt keine Sprünge, um Dinge mehrfach oder unendlich zu wiederholen).

                Und deshalb ist deine einfache Addition auch nichts programmiertes. Denn sonst würde ja auch das Tippen auf einem einfachen Taschenrechner schon Programmieren sein. Klar, hinter dem Taschenrechner steckt eine CPU, die ist programmiert, und die Tastendrücke sind natürlich in einen passenden "GUI" eingebunden. Aber dennoch: Es gibt keine Abfragen oder Sprünge, die man programmieren könnte, man tippt seine Rechnung einfach nur ein und kriegt ein Ergebnis.

                Da es hierbei keinerlei "natürliche Vorgaben" gibt, kann man die Befehle frei definieren. Nur: Tun muß man es natürlich, und zwar vor dem Bau, nicht hinterher. Also: Die Programmiersprache entsteht ganz bestimmt vor dem eigentlichen real existierenden Rechner.

                Dann wären also die Mathematik die Programiersprache?!?

                Mathematik ist eine mögliche Form der Programmiersprache. Weil sie, wenn auch ungewohnt, Bedingungen und Sprünge kennt.

                Und dass Mathematik garantiert vor der ersten Rechenmaschine da war, ist wohl unbestritten.

                Die "Programmierung" eines mechanischen Rechners ist weit weg von irgendeinem Schaltplan. :)

                Nein das glaube Ich nicht wirklich. Zumindest nicht was den ersten "Rechner" betrifft.

                Dann überzeuge dich selbst von den Fähigkeiten des Z1.

                - Sven Rautenberg

                --
                "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
                1. Hallo.

                  Die Definition einer Programmiersprache ist, dass sie Abfragen (IF) und Sprünge kennt. Deswegen ist HTML keine Programmiersprache (die Conditional Comments für den IE sind zwar Bedingungen, aber es gibt keine Sprünge, um Dinge mehrfach oder unendlich zu wiederholen).

                  Wen du Conditional Comments mit http://selfhtml.teamone.de/html/kopfdaten/meta.htm#weiterleitung verbindest, erhältst du eine Abfrage, die zu einer Endlosschleife führen kann ;-)
                  MfG, at

                2. Servus,

                  Ein Schalter ist ein Bauteil. Nicht mehr, nicht weniger. Es ist kein Computer.

                  Genauso wie ein Transistor oder eine entsprechend geschaltene Diode.

                  Meines wissens war der erste "Computer" bestehend aus Röhren, was letzendlich von der Funktionsweise nicht anderes war als eine vielzahl verschaltener Schütze.

                  Da liegst du komplett falsch. Nach Historikermeinung ist der Z1 von Konrad Zuse der erste wirkliche Computer. Und der arbeitete mechanisch.

                  Ja gut mag sein, dann war es doch eine mechanische Maschine.
                  Geschichte war wohl nie meine stärke :-)

                  Der erste elektrische Rechner, der Z3, war im Prinzip nur eine Umsetzung des Z1 mit mechanischen Relais. Also auch noch keine Röhren. Die kamen erst danach.

                  Ob man nun an der Röhre drauf rumreiten muss?
                  Ging ohnehin erst mal um die Mechanik.

                  Kennzeichen einer Programmiersprache ist, dass Anweisungslisten eben nicht linear abgearbeitet werden, sondern dass es im Programmfluß auch Entscheidungen basierend auf Vergleichen gibt, welche den Programmfluß dann durch Sprünge in der Anweisungsliste individuell gestalten.

                  Wo siehst Du nun das Problem, soetwas mechanisch abzubilden?
                  Ich sehe da keines und wenn man nun den Z1 hernimmt, wobei ich pers. glaube, es gab schon vorher gute ansätze hierzu, steht immer noch die Mechanik im vordergrund die einige Aufgaben übernimmt.

                  Ich muss natürlich zugeben, dass ich mich mit dem Z1 nicht sonderlich gut auskenne. Die ersten Prozessoren mit denen ich gearbeitet habe, war ab dem Z80.

                  Aber das ändert nichts an der Tatsache, dass irgendjemand sich mal überlegen mußte, wie er diese Schalter zusammenbaut, und damit er sie sinnvoll zusammenbauen kann, muß er wissen, was er damit überhaupt machen will.

                  Das ist durchaus richtig, auch mit Deinen schleifen und bedingungen hast Du vollkomen recht.

                  Dann nehmen wir einfachste Steuerungen und Regelungen mit ins Boot, und Du hast Deine Schleifen und Abfragen.
                  Entsprechend verkabelt mit den Senoseren hast Du auch entsprechende Zeiger und Sprünge, die je nach anforderung etwas anderes bewirken können und somit gernau das tun, was Du als Programm eben definiert hast.

                  Einfachstes Beispiel: Wasserkraftwerk.

                  Zum einen wird anhand des Netzes und der Drehzah der Torbine das einspeisen ins Stromnetz geregelt.
                  Damit der Lastschütz nicht gerade in Flammen aufgeht wird natürlich zum optimalsten Zeitpunkt die Stromzuführung geschlossen.

                  Die verschiedenen Wasserstände werden ständig kontroliert.
                  Schleussen geöffnet und geschlossen.
                  Gegebenfalls bei Hochwasser z.B. das Turbinenhaus geschlossen.

                  Natürlich prüft ein Wasserhöhen Messer, ob der Durchfluss noch gross genug ist und betreibt unabhängig den Rechenreiniger.

                  Selbstverständich habe ich nur mal knapp und grob geschildert was da abläuft.
                  Eine entscheidung der Schaltkreise anhand Wasserstand zu hoch zu niedrig.... kann man wohl als if Schleife gelten lassen.
                  Die dadurch geaenderte Funktion oder Aufgabe, dürfte man doch als "Sprung" oder Zeiger in eine andere Funktionsweise gelten lassen oder?

                  Und wozu brauche ich den nun wirklich? Es ist auch nur ein Bauteil. Mal abgesehen davon, dass ich so einem Taktgeber nicht vertrauen würde, allein aus mechanischen Gründen nicht. :)

                  Ja das ist war zuverlässig st der bestimmt nicht. :-)

                  Im übrigen gehen die Forschungen bei Mikroprozessoren dahin, asynchrone Einheite zu entwickeln. Der zentrale Takt fällt also weg, es wird in den einzelnen Einheiten nur dann gearbeitet, wenn Arbeit da ist. Soll toll für die Energiebilanz sein und ganz viel Strom sparen.

                  »»

                  Da sind wir aber noch nicht und die Frage, was war vorher da, Sprache oder Interpreter wird damit wohl nicht beantwortet werden.

                  Und für das zweite Programm baust du wieder eine Maschine gleicher Größenordnung.

                  Was ist bei der Programierung? Wie oft wird das gleiche zig mal neu gemacht?

                  Die Softwareentwicklung ist auch nicht immer optimal.

                  Da ist das Zusammenbauen entsprechender Maschinen aber kein Programmieren. Sondern das Festlegen, was zu passieren hat, das ist das Programmieren. Und das geschieht zweifelsfrei vor dem Bau.

                  Richtig, nur bei obigem Beispiel mit dem Wasserwerk, wird wohl wirklich keiner der Ingeneure auch nur annähernd "Programieren".
                  Da sitzt der Entwickler tatsächlich mit dem Schaltpla bzw. einem Kontakt oder Funktionsplan da und baut sich das ganze entsprechend zusammen.

                  Keine Zeile Code.. aber hinterher trotzdem ein Programm, das "sebständig" ein System am laufen hält. Das nach vorgaben und entscheidung selbst erkennt und regelt.

                  Die Definition einer Programmiersprache ist, dass sie Abfragen (IF) und Sprünge kennt. Deswegen ist HTML keine Programmiersprache (die Conditional Comments für den IE sind zwar Bedingungen, aber es gibt keine Sprünge, um Dinge mehrfach oder unendlich zu wiederholen).

                  Sie oben.

                  Da es hierbei keinerlei "natürliche Vorgaben" gibt, kann man die Befehle frei definieren. Nur: Tun muß man es natürlich, und zwar vor dem Bau, nicht hinterher. Also: Die Programmiersprache entsteht ganz bestimmt vor dem eigentlichen real existierenden Rechner.

                  Ganz sicher? Du täuscht Dich mit Sicherheit.
                  Jeder Autmomat, der für sich Messwerte ermittelt, stellt schon ein System dar, das zwar beschränkte aufgaben übernehmen kann, diese jedoch "selbständig" ausführt.
                  Dass hierbei entscheidungen fallen, das System bzw. der automat anhand randkriterien eine Entscheidung fällen muss ist ohnehin klar.

                  Das dahinter Abfragen stecken und letzendlich Zeiger auf weitere / andere Funktionen dürfte einleuchten.

                  Mathematik ist eine mögliche Form der Programmiersprache. Weil sie, wenn auch ungewohnt, Bedingungen und Sprünge kennt.

                  Für das Beispiel des "Taschenrechners" würde es dann stimmen.

                  Und dass Mathematik garantiert vor der ersten Rechenmaschine da war, ist wohl unbestritten.

                  Stimmt.

                  Dann überzeuge dich selbst von den Fähigkeiten des Z1.

                  Denk mal über das Wasserkraft Beispiel nach und Du wirst festellen, dass Deine bisher gebrachte Definition einer Programiersprache auf obigen Anwendungsfall wunderbar passt.

                  Gruss Matze :-))

                  PS.  Grüble nicht so lange.

                  1. Moin!

                    Kennzeichen einer Programmiersprache ist, dass Anweisungslisten eben nicht linear abgearbeitet werden, sondern dass es im Programmfluß auch Entscheidungen basierend auf Vergleichen gibt, welche den Programmfluß dann durch Sprünge in der Anweisungsliste individuell gestalten.

                    Wo siehst Du nun das Problem, soetwas mechanisch abzubilden?

                    Es gibt da kein Problem. Nur: Man muß sich vorher überlegen, was man will, um es hinterher umzusetzen.

                    Der Witz ist, dass bei einem Computer mit einer Programmiersprache das Programm in einem Speicher steht und eine Berechnung durchführt, dort aber auch jedes anderen Programm stehen könnte, welches andere Berechnungen durchführt.

                    Damit das aber so ist, muß man vorher definieren, welche Befehle es geben soll. Darum gehts, denn das war die Ausgangsfrage: Was war zuerst da, Programmiersprache oder Interpreter - wobei der Interpreter in jedem Fall irgendwann irgendeine zentrale Verarbeitungseinheit ist, landläufig auch als CPU bekannt.

                    Aber das ändert nichts an der Tatsache, dass irgendjemand sich mal überlegen mußte, wie er diese Schalter zusammenbaut, und damit er sie sinnvoll zusammenbauen kann, muß er wissen, was er damit überhaupt machen will.

                    Das ist durchaus richtig, auch mit Deinen schleifen und bedingungen hast Du vollkomen recht.

                    Eben. Also ist die Antwort doch klar: Die Programmiersprache war zuerst da, denn nur wenn ich in der Theorie eine Sprache definiert habe, weiß ich, was mein Interpreter interpretieren soll, und erst dann kann ich den Interpreter praktisch umsetzen.

                    Oder programmierst du immer erstmal irgendwas dahin, um dadurch dann auf eine Aufgabe zu stoßen, die gelöst werden will? Gemäß dem Motto "Of course it doesn't work, but look how fast it is!".

                    Dann nehmen wir einfachste Steuerungen und Regelungen mit ins Boot, und Du hast Deine Schleifen und Abfragen.

                    Ein Regelkreis ist keine Schleife oder Abfrage, sondern eine Rückkopplung - was man aber wirklich nur mit größten Schmerzen auch nur in die Nähe von "Programmierung" rücken kann. Und eine Steuerung ist überhaupt keine Schleife oder Abfrage - das ist der Sinn einer Steuerung.

                    Entsprechend verkabelt mit den Senoseren hast Du auch entsprechende Zeiger und Sprünge, die je nach anforderung etwas anderes bewirken können und somit gernau das tun, was Du als Programm eben definiert hast.

                    Du kennst dich nicht wirklich mit Regelkreisen und Steuerungen aus.

                    Einfachstes Beispiel: Wasserkraftwerk.

                    WAAAHHH!!!!1 Ich lach mich tot. Ein Wasserkraftwerk ist vermutlich das komplexeste Beispiel, was du überhaupt hättest bringen können.

                    Was willst du mit diesem Beispiel zeigen? Dass ein Wasserkraftwerk programmiert wird? Ja klar, heutzutage sind Microcontroller überall drin und übernehmen Aufgaben, für die man früher ganz stinknormale herkömmliche Regelkreise gebaut hätte, zu einem Vielfachen des heutigen Preises.

                    Oder dass ein Wasserkraftwerk nicht programmiert wird? Ja klar, muß es nicht. Man kann auch alles mit herkömmlichen Regelkreisen betreiben - nur wird das keinesfalls heutigen Anforderungen gerecht werden, allenfalls im Inselbetrieb.

                    Zum einen wird anhand des Netzes und der Drehzah der Torbine das einspeisen ins Stromnetz geregelt.

                    Allein dieser Teilaspekt ist schon eine der komplexeren regelungstechnischen Aufgaben. Denn die Phasenabweichung zur Netzfrequenz darf natürlich nicht zu groß werden (es sei denn, man hat Inselbetrieb), und Lastspitzen weiß man (Wunschdenken) natürlich am besten eine Stunde vorher, und nicht hinterher, wenn durch den sprunghaften Lastanstieg am liebsten der Generator stehenbleiben will.

                    Die verschiedenen Wasserstände werden ständig kontroliert.
                    Schleussen geöffnet und geschlossen.
                    Gegebenfalls bei Hochwasser z.B. das Turbinenhaus geschlossen.

                    Noch eine komplexe Aufgabe, die aber auch keiner wirklichen Programmierung bedarf.

                    Natürlich prüft ein Wasserhöhen Messer, ob der Durchfluss noch gross genug ist und betreibt unabhängig den Rechenreiniger.

                    Dein "Wasserhöhen Messer" heißt Pegel, und dass dieser den Rechenreiniger betreibt, wäre mir neu. Bestenfalls liefert der Pegel Messdaten für die Steuerzentrale, vielleicht werden diese auch in einen Regelkreis eingespeist (wobei die Frage ist, was man daran ändern könnte, wenn kein Wasser mehr da ist - außer das Kraftwerk dichtmachen).

                    Selbstverständich habe ich nur mal knapp und grob geschildert was da abläuft.

                    Und genau deshalb ist dein Beispiel eben nicht vom Typ "einfachst", sondern vom Typ "komplex". Also ungeeignet.

                    Eine entscheidung der Schaltkreise anhand Wasserstand zu hoch zu niedrig.... kann man wohl als if Schleife gelten lassen.

                    Was sind eigentlich if-Schleifen? http://www.dclp-faq.de/q/q-terminologie-if.html

                    Und auf deine Aussage: Nein, kann man nicht. Weil es einen Unterschied macht, ob ein Pegelschalter einen Stromkreis öffnet oder schließt, oder ob man einen generischen Befehl "Wenn-dann" definiert, welcher in einer CPU zur Ausführung kommt.

                    Die dadurch geaenderte Funktion oder Aufgabe, dürfte man doch als "Sprung" oder Zeiger in eine andere Funktionsweise gelten lassen oder?

                    Auch nicht. Dein Wasserwerkbeispiel hat das Problem, dass es nicht "einfachst" ist, sondern komplexestes Multitasking und Parallelverarbeitung bedeutet. Der aktuelle Betriebszustand ist eine Mischung aus diversen Einzeldetails, welche sich in beliebiger Kombination zusammensetzen lassen. Ein paar dieser Kombinationen wird vom konstruierenden Ingenieur als "normal" definiert und ist durch die Regelung möglichst anzustreben. Andere Kombinationen sind als unerwünscht bzw. gefährlich definiert und je nach Gefahrpotential entweder regelungstechnisch oder per Notfallplan zu vermeiden.

                    Und für das zweite Programm baust du wieder eine Maschine gleicher Größenordnung.

                    Was ist bei der Programierung? Wie oft wird das gleiche zig mal neu gemacht?

                    Die Softwareentwicklung ist auch nicht immer optimal.

                    Die Frage, ob C&P angewendet wird, ist aber irrelevant für die Betrachtung, ob die erste Programmiersprache vor oder nach ihrem Interpreter entstand.

                    Richtig, nur bei obigem Beispiel mit dem Wasserwerk, wird wohl wirklich keiner der Ingeneure auch nur annähernd "Programieren".
                    Da sitzt der Entwickler tatsächlich mit dem Schaltpla bzw. einem Kontakt oder Funktionsplan da und baut sich das ganze entsprechend zusammen.

                    Heute wohl eher nicht mehr. Die Computer sind einfach nicht aufzuhalten.

                    Keine Zeile Code.. aber hinterher trotzdem ein Programm, das "sebständig" ein System am laufen hält. Das nach vorgaben und entscheidung selbst erkennt und regelt.

                    Du wirst es aber nicht schaffen, gegen solch ein Wasserwerk Schach spielen zu können. Es sei denn, du hast programmierbare Hardware eingebaut und änderst deren Programm.

                    Die Definition einer Programmiersprache ist, dass sie Abfragen (IF) und Sprünge kennt. Deswegen ist HTML keine Programmiersprache (die Conditional Comments für den IE sind zwar Bedingungen, aber es gibt keine Sprünge, um Dinge mehrfach oder unendlich zu wiederholen).

                    Da es hierbei keinerlei "natürliche Vorgaben" gibt, kann man die Befehle frei definieren. Nur: Tun muß man es natürlich, und zwar vor dem Bau, nicht hinterher. Also: Die Programmiersprache entsteht ganz bestimmt vor dem eigentlichen real existierenden Rechner.

                    Ganz sicher? Du täuscht Dich mit Sicherheit.
                    Jeder Autmomat, der für sich Messwerte ermittelt, stellt schon ein System dar, das zwar beschränkte aufgaben übernehmen kann, diese jedoch "selbständig" ausführt.

                    Definiere "Automat".

                    Ein "Automat, der für sich Messwerte ermittelt", wäre beispielsweise ein Pt100. Damit kriegst du in Abhängigkeit von der Umgebungstemperatur einen Widerstandswert. Den ermittelt "der Automat" vollkommen selbständig. Aber du willst mir jetzt nicht einreden, dass ein Stück Platindraht programmierbar wäre, oder?

                    Dass hierbei entscheidungen fallen, das System bzw. der automat anhand randkriterien eine Entscheidung fällen muss ist ohnehin klar.

                    Wie gesagt: Definiere Automat.

                    Das dahinter Abfragen stecken und letzendlich Zeiger auf weitere / andere Funktionen dürfte einleuchten.

                    Definiere Abfragen. Definiere Zeiger. Definiere Funktionen.

                    Mathematik ist eine mögliche Form der Programmiersprache. Weil sie, wenn auch ungewohnt, Bedingungen und Sprünge kennt.

                    Für das Beispiel des "Taschenrechners" würde es dann stimmen.

                    Und dass Mathematik garantiert vor der ersten Rechenmaschine da war, ist wohl unbestritten.

                    Stimmt.

                    Also wäre damit der Beweis erbracht: Zuerst gab es die Sprache, dann den Interpreter.

                    Dann überzeuge dich selbst von den Fähigkeiten des Z1.

                    Denk mal über das Wasserkraft Beispiel nach und Du wirst festellen, dass Deine bisher gebrachte Definition einer Programiersprache auf obigen Anwendungsfall wunderbar passt.

                    Nein. Dein Beispiel ist erstens zu wenig ausgearbeitet und diffus, zweitens in der Realität wesentlich komplexer, als du hier anführst - oder absolut unkomplex (nimm eine alte Mühle am Bach - ist auch ein Wasserkraftwerk, aber sicher nicht programmiert). Kurz: Einfach ungeeignet, irgendetwas zu zeigen.

                    - Sven Rautenberg

                    --
                    "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
                    1. Servus,

                      Und auf deine Aussage: Nein, kann man nicht. Weil es einen Unterschied macht, ob ein Pegelschalter einen Stromkreis öffnet oder schließt, oder ob man einen generischen Befehl "Wenn-dann" definiert, welcher in einer CPU zur Ausführung kommt.

                      Worin liegt der Unterschied im Ergebniss?
                      Worin liegt der Unterschied, einer Abfrage wenn dann, und dem technischen ein ausschalten wenn dann? Beides liefert eine 0 oder 1 ein ja oder nein eijn true oder false.

                      Worin liegt nun wirklich der Unterschied zwischen dem Programm und dem Verdrahteten Stück Hardware.
                      Da gibt es letzendlich keinen. Lediglich der Vorteil, dass sich der Code ratz fatz austauschen lässt hingegen so eine verdrahtete Kiste mit mühe und viel Aufwand erst in Betrieb nehmen lässt.

                      Sehe mal jeden definierbaren Zustand einer z.B. Wasserkraftanlage als seperaten Befehl an.
                      Dann hast Du schon Deinen Code Interpreter denn Deine Befehle sind der Input.

                      Tja der Zeiger:

                      In der Software Entwicklung gibt es sowas wie einen Zeiger, der auf Speicher Adressen verweist z.B. Mit dem Du Objekte oder Adressen direkt ansprechen kannst.

                      Das wirst Du als solches bei einer "Steuerung" natürlich nicht finden.
                      Aber ob die 1. Sprache an für sich das auch schon entsprechend konnte...

                      Es stellt sich nun die Frage was war den die erste Sprache und da liegt der Knackpunkt.

                      Gruss Matze

            3. Hallo.

              Deswegen auch der Geschwindigkeitsvorteil von RISC-Prozessoren. Die arbeiten (ich vermute es so) als Maschinensprache direkt mit dem Microcode und interpretieren da nichts, oder zumindest nicht soviel. Sind dafür aber nicht binärkompatibel - deswegen läuft Windows da nicht, und niemand will sie. :)

              Entweder der Smiley ist der falsche oder du verwechselst dort etwas. Natürlich läuft Windows auf RISC-Prozessoren [1], aber niemand will es.
              [1] Die Übergänge zwischen RISC und CISC sind dank der immer neuen Erweiterungen inzwischen fließend.
              MfG, at

              1. Hallo at,

                [1] Die Übergänge zwischen RISC und CISC sind dank der immer neuen Erweiterungen inzwischen
                fließend.

                Praktisch sind aktuelle x86-Prozessoren sowie die AMD64-Prozessoren intern RISC-Prozessoren,
                die den CISC-Code durch sog. Code-Morphing in RISC-Code umwandeln. Der erste Prozessor, der
                diese Technik einsetzte, war übrigens der Transmeta Crusoe. Der spielt durch Code Morphing
                Intel-Kompatiblität vor.

                Grüße,
                 CK

                --
                Der Mund ist das Portal zum Unglück.
                1. Hallo.

                  Praktisch sind aktuelle x86-Prozessoren sowie die AMD64-Prozessoren intern RISC-Prozessoren,
                  die den CISC-Code durch sog. Code-Morphing in RISC-Code umwandeln. Der erste Prozessor, der
                  diese Technik einsetzte, war übrigens der Transmeta Crusoe. Der spielt durch Code Morphing
                  Intel-Kompatiblität vor.

                  Damit äffen sie aber teilweise nur nach, was ihnen ASIC-Bausteine seit Jahren auf niedrigerem Level vormachen.
                  MfG, at

                  1. Hallo at,

                    [... Code-Morphing ...]
                    Damit äffen sie aber teilweise nur nach, was ihnen ASIC-Bausteine seit Jahren auf
                    niedrigerem Level vormachen.

                    Du meinst sicher BASIC-Bausteine? Nunja, das kann man IMHO nicht so ganz vergleichen ;-)

                    Grüße,
                     CK

                    --
                    Der Verstand ist der Hausherr, der Koerper sein Gast.
            4. Hallo Sven,

              Deswegen auch der Geschwindigkeitsvorteil von RISC-Prozessoren.

              RISC-Prozessoren sind nicht generell schneller. Sonst würden wir heute nur RISC-Prozessoren
              benutzen :-) RISC-Prozessoren sind für eine bestimmte Aufgabe designt worden und innerhalb
              dieser Aufgaben können sie schneller sein. Jedoch alle anderen Aufgaben müssen vom
              RISC-Prozessor durch aufwendigere Verfahren nachgebildet werden oder können gar nicht erfüllt
              werden.

              Die arbeiten (ich vermute es so) als Maschinensprache direkt mit dem Microcode und
              interpretieren da nichts, oder zumindest nicht soviel.

              RISC-Prozessoren haben einen auf eine Aufgabe spezialisierten Befehlssatz. Diese Befehle
              können effizienter implementiert werden, viele von den Befehlen sind auf der Hardware
              direkt umgesetzt also direkt "verlötet" worden. Für CISC-Prozessoren müssen diese
              Funktionen über Umwege nachgebildet werden, deshalb sind sie in dem Bereich, für den der
              RISC-Prozessor entwickelt wurde, langsamer. Dafür kann der RISC-Prozessor uU einige
              Aufgaben gar nicht erfüllen.

              Der Grund, warum CISC-Prozessoren sich im Moment durchgesetzt haben, ist der, dass
              CISC-Prozessoren im Grunde jede Aufgabe erfüllen können. Sie sind sozusagen Allrounder.
              Sie können einige Sachen zwar nur sehr, sehr langsam erfüllen, aber sie können es.

              Sind dafür aber nicht binärkompatibel

              Es gibt auch andere CISC-Prozessoren, die einen anderen Befehlssatz als den von Intel
              definierten benutzen. Der bekannteste dürfte wohl der Motorola 68000-Prozessor sein, der
              wird selbst heute noch sehr viel verbaut (z. B. zur Steuerung von Auto-Elektronik).

              • deswegen läuft Windows da nicht, und niemand will sie. :)

              Natürlich gibt es auch RISC-Plattformen, auf denen Windows läuft.

              Grüße,
               CK

              --
              Der Geist ist alles. Du wirst, was du denkst.
              1. Hallo.

                Es gibt auch andere CISC-Prozessoren, die einen anderen Befehlssatz als den von Intel
                definierten benutzen. Der bekannteste dürfte wohl der Motorola 68000-Prozessor sein, der
                wird selbst heute noch sehr viel verbaut (z. B. zur Steuerung von Auto-Elektronik).

                Gern auch in Laserdruckern und unter der Bezeichnung "Dragonball" in Taschen-Computern.
                MfG, at