Hallo
in den Verschiedenen Programmiersprachen werden Parameter, Argumente,
Konstanten, Variablen, Definitionen, Funktionen usw. in
unterschiedlichen Umfang benutzt.
Wenn ich jetzt irgendwas davon in einer mir bekannten, und auch so
mancher unbekannten, Programmiersprache im entsprechenden Programm
erkennen soll bzw. einer Fragen würde wo befindet sich den z.B. die
Variable x in diesen Programm kann ich das (meistens).
Aber wenn mich ein "echter" aber interessierter Laie fragen würde: Was
ist eine Variable, ein Argument, eine Definition usw. in der Welt des
Programmierens - und insbesondere in der Welt der µC, dann habe ich
echte Probleme das ohne weitere Fachbegriffe, oder zumindest mehrdeutige
Begrifflichkeiten zu erklären.
Wohl aber nicht nur ich wie ich selbst beim Erlernen oder Suchen von
eingängigen Erklärungen erfahren habe.
Nicht nur der Begriff Variable hat sehr viele, aber auch recht ähnliche
Bedeutungen in vielen Bereichen wozu halt auch so einige aus dem
"normalen" Leben gehören.
Irgendwas Veränderliches - oft aber nicht immer ein Zahlenwert... mhhh
irgendwie unbefriedigend das als Erklärung für eine Variable in einer
Programmiersprache einen Laien als Erklärung zu geben.
Wenn es den zu Begriffen wie Argument, Funktion kommt dann wird es noch
schwieriger:
Denn diese Begriffe haben im Alltag eine ganz andere (oder eigentlich
auch nicht so 100%, was man aber erst dann wirklich "irgendwie" erkennt
was das in einer Programmiersprache ist) Bedeutung.
Nach der langen Rede die kurze Frage:
Wie würdet ihr diese und weitere Begriffe einen Laien erklären (Einer
mit "normaler" Ausbildung und "Vergessen" bzw. "Verdrängen" was mal in
Mathematikunterricht ab der 8 Klasse erlernt wurde was wohl auf
mindestens 80% der Bevölkerung zutrifft) der aber technisch interessiert
ist und z.B. unbedingt "endlich" auch mal einen µC Programmieren möchte?
-"Lerne (wiederhole) erst mal die Mathe"
-"Dass kann man nicht erklären"
-"Das kommt automatisch wenn du dich mit der Programmiersprache
beschäftigst"
(Auch wenn es zutrifft und ich es letztendlich dort wirklich erlernt
habe).
-"Die Funktion hier benötigt ein Argument damit die interner Variable
einen Wert übergeben bekommt" - Was so ziemlich die schlimmste aber gar
nicht mal so ungewöhnlich Art von einer "Erklärung" in vielen Büchern
und Tutorials ist...
und ähnlich leider typische Antworten möchte ich nicht gelten lassen,
denn genau das "schaffe" ich auch, bzw. hatten mir "früher"auch nie das
geringst genutzt.
Perihel
Perihel schrieb:> Was so ziemlich die schlimmste aber gar> nicht mal so ungewöhnlich Art von einer "Erklärung" in vielen Büchern> und Tutorials ist...
Einfach mal vernünftige Bücher lesen, statt Tutorials und "Büchern".
Und davon verabschieden, dass man komplexe Dinge einfach so mit einem
Satz korrekt erklären kann.
Man könnte das so beschreiben:
Mit einer Funktion kann man teile der Dinge, die das Programm tun soll,
Zusammenfassen, und dann an anderen Orten kann man sie "Aufrufen", also
dem Programm sagen, "tue diese Teilaufgabe jetzt". So eine unteraufgabe
kann z.B. 2 Zahlen zusammenzählen sei. Wir könnten also eine Funktion
definieren, und dieser den Namen "summe_berechnen" geben, und dann an
anderen stellen verwenden. Nun braucht es aber einen weg, der funktion
zu sagen, welche Daten sie verarbeiten, oder hier, welche Zahlen sie
zusammenzählen soll. Wir können bei der Funktion angeben, dass diese 2
Zahlen braucht, dass sind die Parameter der Funktion. Beim
Verwenden/Aufrufen der Funktion müssen müssen wir ihr diese Zahlen dann
mitgeben, dass sind die Argumente des Funktionsaufrufs.
Aber ich glaube, das sollte jeder selbst herausfinden. Wenn einem jemand
etwas Erklärt, denkt man es sich nicht selbst, man weiss es, aber man
versteht es nicht, denkt nicht über das Wieso nach, stellt sein neues
Wissen nicht in frage. Das fürt dann dazu, dass sie Programme schreiben,
aber nicht wissen, wie oder warum diese Funktionieren. Auch gefährlich
ist, wenn sich dadurch eine "Wie geht X, es soll einfach X
tun."-mentalität bildet, wo einfach nur Code kopiert wird, und nicht
über dinge wie "Ich habe A, aber hier brauch ich B" oder über "Um X zu
tun, muss ich erst Y tun, das könnte ich mit A und B tun, oder ich nehme
C D, aber dann brauch ich Z" nachgedacht wird.
Es macht eigentlich wenig Sinn, wenn ein Anfänger einem muggle
irgendwelche Internas abstrakt erklären will. Wenn eine Kumpel kein Auto
fährt und noch nie einen Motor gesehen hat, macht es keinen Sinn, ihm
einen Anlasser zu erklären. Mit seinem Tesla im Kopf, würden wir uns
nicht verstehen.
Nein, man nimmt ein Auto (eine Sprache) macht die Motorhaube auf (sieht
sich einen Quelltext an) und erklärt die konkreten Dinge
Perihel schrieb:> Wie würdet ihr diese und weitere Begriffe einen Laien erklären (Einer> mit "normaler" Ausbildung und "Vergessen" bzw. "Verdrängen" was mal in> Mathematikunterricht ab der 8 Klasse erlernt wurde was wohl auf> mindestens 80% der Bevölkerung zutrifft) der aber technisch interessiert> ist und z.B. unbedingt "endlich" auch mal einen µC Programmieren möchte?>> -"Lerne (wiederhole) erst mal die Mathe"
Passt. Programmieren ist nunmal angewandte Mathematik. Das muss man
nicht mögen. Ist aber so. auch wenn es immer wieder irgendwelche
Flachwichser gibt, die das negieren oder zu verbergen versuchen (siehe
Arduino, gemacht von Gierigen für Vollidioten, die dafür löhnen, weil
sie halt strunzblöd sind..)
Was man neben der allgemeinen Mathematik noch kapieren muss, sind die
Einschränkungen, die aus der Verwendung von Rechentechnik mit endlicher
Genauigkeit resultierenden Probleme, die leicht mal Abweichungen von der
idealen Mathematik produzieren können. Sprich: das gesamte Gebiet der
Numerik, bezogen auf das Programmieren insbesondere: die sinnvolle Wahl
von Datentypen.
c-hater schrieb:>> Passt. Programmieren ist nunmal angewandte Mathematik. Das muss man> nicht mögen. Ist aber so. auch wenn es immer wieder irgendwelche> Flachwichser gibt, die das negieren oder zu verbergen versuchen (siehe> Arduino, gemacht von Gierigen für Vollidioten, die dafür löhnen, weil> sie halt strunzblöd sind..)>
Quatsch. Das, was ich zum Programmieren brauche, sind die
Grundrechenarten, die man bis zur 6ten Klasse erlernt.
Solange man nicht im graphischen Bereich unterwegs ist, braucht man
nicht einmal sinus etc. Selbst eine Quadratwurzel habe ich die letzen 5
Jahre nicht gebraucht.
Da frage ich mich auch, wozu man in einer SQL-Datenbank selber jemals
eine Wurzel anwenden sollte.
An den TE: früher (TM) gab es bedrucktes Papier, das nannte man Bücher.
Diese konnte man sogar kostenlos in größeren Städten ausleihen.
Millionen von Menschen haben damit Antworten auf alle deine Fragen
bekommen. Versuche einen Zeitsprung, evtl kommst du noch an ein
Exemplar.
c-hater schrieb:> Programmieren ist nunmal angewandte Mathematik.
Es schadet zwar auch einem Programmierer nicht, etwas Ahnung von
Mathematik zu haben, für die konkrete Fragestellung ist sie aber eher
hinderlich, da Begriffe wie Variable, Funktion, Parameter usw. in der
Programmierung i.Allg. anders verwendet werden als in der Mathematik.
c-hater schrieb im Beitrag #6040885:
> Integer overflow z.B. ist eine Sache, […]
Ja, das ist ein weiteres Beispiel, wo sich die Programmiererei von der
Mathematik unterscheidet: In der Mathematik gibt es keine Overflows.
Aber schon deine Wortwahl lässt vermuten, dass dein Bildungsniveau dich
nicht in die Lage versetzt, dich ernsthaft mit der Mathematik zu
beschäftigen. Das ist auch nicht weiter schlimm, nur solltest du dann
nicht bei jeder Gelegenheit in so peinlicher Weise auf den Putz hauen.
Voltkrrraft schrieb:>> seit 30 Jahren mein Geld mit Programmieren>> Da hast du so wie ich wohl mit FORTRAN1 angefangen.>> 999 CONTINUE
Modernes Zeug da, so geht das ...
Perihel schrieb:> der aber technisch interessiert> ist und z.B. unbedingt "endlich" auch mal einen µC Programmieren möchte?
Ich weiß nicht, warum viele so oft auf dem µC programmieren lernen
möchten. Das ist die ungeeignetste Umgebung dazu.
Nicht nur, dass man dort einfach nur für einen Anfänger unkomfortabel
arbeiten kann. man arbeitet auch viel zu sehr in technische Details und
wird dadurch behindert, das große Ganze zu erkennen.
In meinen Augen ist es wesentlich zielführender, vom Abstrakten zum
Konkreten vorzugehen. Das bedeutet, das es in meiner Erfahrung einfacher
ist, (abstrakte) Datentypen als Konzept zu verwenden. Und ja, dass geht
m.E. mit C++ z.B. leichter als mit Java. Auch weil technische Details
wie die Unterscheidung von Wert- und Referenztypen bei C++ erstmal
weglassen werden kann. So kann man die Begriffe Datentyp, Variable,
Objekt, und Wert am Beispiel gut erklären. Zu viele Details verwirren am
Anfang mehr als dass sie nutzen. Interessanterweise verstehen Neulinge
sehr schnell, was das Konzept eines Containers ist und etwa
std::vector<int> bedeutet. Auch einige der Standardalgorithmen sind auf
dieser Ebene schnell erklärt. Zudem sind damit einigermaßen interessante
Beispiel möglich, was die Motivation extrem hebt. Erst danach sollte man
in die Details eintauchen - ganz zum Schluss die die Hardware.
> IF(X-Y) 10, 20, 30
Mussten da wirklich Klammern drum?
oO ist das lange her.
Ich koennt ja ins IBM-704 FORTRAN Manual gucken, aber das waere
ja unspochtliches Spoilern.
Ich würde Dir "C für Dummies" oder ein ähnliches Buch empfehlen.
Die meisten Bücher fangen nämlich mit Tempo 100 an und wie man dann
feststellen muss: Der Schreiber hat echt Ahnung, kann es aber nicht
rüberbringen.
Sebastian S. schrieb:> Der Schreiber hat echt Ahnung, kann es aber nicht> rüberbringen.
Bei vielen vermeintlichen (deutschen) Lehrbüchern geht es nur damit zu
zeigen, dass der Autor ein toller Hecht ist.
Eine Ausnahme in diesem unserem Umfeld ist: "Einführung in die
Programmierung mit C++".
PittyJ schrieb:> Quatsch. Das, was ich zum Programmieren brauche, sind die> Grundrechenarten, die man bis zur 6ten Klasse erlernt.> Solange man nicht im graphischen Bereich unterwegs ist, braucht man> nicht einmal sinus etc. Selbst eine Quadratwurzel habe ich die letzen 5> Jahre nicht gebraucht.
Für einen Getränkeautomaten mag das reichen
Yalu X. schrieb:> Leerzeichen sind in Fortran keine> Delimiter).
In C auch nicht. Aber "Woerter" auseinanderreissen hat ja auch nichts
mit Delimitern zu tun. D.h. eine Sequenz \w+ kann man nur ganz parsen.
leo
UnbelehrbarerGreis schrieb:> Leute, leute.... ihr macht auch aus allem eine Wissenschaft.
Da es hier im wesentlichen um ein Wissenschaft geht, wäre es
verwunderlich, wenn es anders wäre.
Auch wenn man recht hemdsärmelig mit dem Programmieren beginnt, sollte
das so nicht bliben. Sondern man sollte sich dann den wissenschaftlichen
Methoden zuwenden. Ansonsten bleibt es ein planloses Herumstochern, was
letztlich dazu führt, dass man bestimmte Dinge gar nicht erklären kann
(s.o. TO).
Eigentlich ist das ganze noch viel "schlimmer" und es hat nichts mit
Mathe zu tun.
Wenn du uController programmieren willst, musst du dich zumindest etwas
mit Elektronik auskennen. Das ist ja kein PC.
Yalu X. schrieb:> Es schadet zwar auch einem Programmierer nicht, etwas Ahnung von> Mathematik zu haben
Ich behaupte: Ohne Mathematikkenntnisse zumindest im Umfang des
Schulstoffes kann man KEINESFALLS programmieren.
Wer das negiert, ist in meinen Augen als Programmierer nicht
ernstzunehmen.
c-hater schrieb:> Yalu X. schrieb:>>> Es schadet zwar auch einem Programmierer nicht, etwas Ahnung von>> Mathematik zu haben>> Ich behaupte: Ohne Mathematikkenntnisse zumindest im Umfang des> Schulstoffes kann man KEINESFALLS programmieren.>> Wer das negiert, ist in meinen Augen als Programmierer nicht> ernstzunehmen.
Was meinst Du denn damit, abseits der Grundrechenarten und
aufgabenspezifischer Funktionen (also z.B. sin oder Phythagoras wenn ich
einen Kreis zeichnen will). Gleichungen? Also das y=x*x etwas ganz
anderes ist beim imperativen Programmieren?
Mein erster Gedanke war hier Analogien benutzen. Z.B. eine Uhr
beschleunigen.
Was hier aber auch noch eine wichtige Rolle spielt, sind Datentypen und
Formatierungen.
Genauso wichtig in diesem Zusammenhang (wie auch sehr spannend) ist die
geschichtliche Entwicklung der "Datentypen".
(also sowas wie "vom "Int zum MP-3-Player" oder so ähnlich)
Relativ gute Argumente zum Erklären (wie auch zum wirklich
Durcheinanderkommen) bietet das Buch:
http://book.realworldhaskell.org
von Bryan O'Sullivan, Don Stewart, and John Goerzen.
DPA schrieb:> Yalu X. schrieb:>> Ja, das ist ein weiteres Beispiel, wo sich die Programmiererei von der>> Mathematik unterscheidet: In der Mathematik gibt es keine Overflows.>> Kommt auf den Zahlenraum drauf an.>> https://en.wikipedia.org/wiki/Ring_(mathematics)> https://en.wikipedia.org/wiki/Modular_arithmetic
Beim Restklassenring gibt es aber keinen Overflow, da sowohl die Summe
als auch das Produkt beliebiger Elemente eindeutig definiert ist. Das
trifft bspw. in C zwar für unsigned int¹, nicht aber für signed int zu.
—————————————
¹) (unsigned int,+,*) bildet einen Restklassenring modulo UINT_MAX+1
rbx schrieb:> Relativ gute Argumente zum Erklären (wie auch zum wirklich> Durcheinanderkommen) bietet das Buch:> http://book.realworldhaskell.org
Das Buch ist super. Allerdings nutzt Haskell die vom TE nachgefragten
Begriffe (Funktion, Variable und viele weitere, nach denen der TE noch
gar nicht gefragt hat) in einer Weise, die ihrer mathematischen
Definition entsprechen oder zumindest stark daran angelehnt sind.
Damit sind diese Definitionen i.Allg. nicht auf "gewöhnliche" (d.h.
imperative Programmiersprachen) übertragbar.
Ein schönes Beispiel dafür, dass Begriffe aus der Programmierung oft
nicht allgemein, sondern nur im Kontext einer ganz konkreten Sprache
erklärt werden können, ist der Funktor:
In Haskell entspricht er in etwa der Definition in der Mathematik:
https://de.wikipedia.org/wiki/Funktor_(Mathematik)
Prolog (wie sollte es auch anders sein) legt die Definition aus der
Logik zugrunde:
https://de.wikipedia.org/wiki/Funktor_(Logik)
In C++ ist ein Funktor ein Funktionsobjekt:
https://de.wikipedia.org/wiki/C%2B%2B-Standardbibliothek#Funktionsobjekte
Diese drei Definitionen haben so gut wie nichts miteinander zu tun,
weswegen es sinnlos wäre, sie allgemeingültig erklären zu wollen.
Perihel schrieb:> Aber wenn mich ein "echter" aber interessierter Laie fragen würde: Was> ist eine Variable, ein Argument, eine Definition usw. in der Welt des> Programmierens - und insbesondere in der Welt der µC, dann habe ich> echte Probleme das ohne weitere Fachbegriffe, oder zumindest mehrdeutige> Begrifflichkeiten zu erklären.
Google wurde schon erfunden, z.B.:
https://www.peacesoftware.de/ckurs3.html