Forum: PC-Programmierung C, Assembler usw. Parameter, Argument, Variable was ist das eigentlich verständlich erklären.


von Perihel (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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.

von DPA (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

c-hater schrieb:
> Sprich: das gesamte Gebiet der Numerik

;-)

Weshalb nicht auch die ganzen Gebiete von Automatentheorie und 
Berechenbarkeit?

: Bearbeitet durch User
von PittyJ (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

A. K. schrieb:

> Weshalb nicht auch die ganzen Gebiete von Automatentheorie und
> Berechenbarkeit?

Das ist für Fortgeschrittene...

Beitrag #6040885 wurde von einem Moderator gelöscht.
Beitrag #6040905 wurde von einem Moderator gelöscht.
Beitrag #6041000 wurde von einem Moderator gelöscht.
von Voltkrrraft (Gast)


Lesenswert?

> seit 30 Jahren mein Geld mit Programmieren

Da hast du so wie ich wohl mit FORTRAN1 angefangen.

999    CONTINUE

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von leo (Gast)


Lesenswert?

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 ...
1
  IF(X-Y) 10, 20, 30

leo

von Wilhelm M. (wimalopaan)


Lesenswert?

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.

von Voltkrrraft (Gast)


Lesenswert?

> 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.

von Sebastian S. (amateur)


Lesenswert?

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.

von leo (Gast)


Lesenswert?

Voltkrrraft schrieb:
>> IF(X-Y) 10, 20, 30
>
> Mussten da wirklich Klammern drum?

Keine Ahnung mehr, aber eher nicht

> oO ist das lange her.

Indeed.

leo

von Wilhelm M. (wimalopaan)


Lesenswert?

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++".

von Voltkrrraft (Gast)


Lesenswert?

> aber eher nicht

Siehst, sach ich doch.

Schoenen Abend noch

von Jemand (Gast)


Lesenswert?

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

von Peter M. (r2d3)


Lesenswert?

Perihel,

bist Du noch auf Empfang?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Voltkrrraft schrieb:
>> IF(X-Y) 10, 20, 30
>
> Mussten da wirklich Klammern drum?

Ja, sonst wäre

1
      IF X-42 10, 20, 30

mehrdeutig, da es auch als

1
      IF X-4 210, 20, 30

interpretiert werden könnte (Leerzeichen sind in Fortran keine
Delimiter).

von leo (Gast)


Lesenswert?

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

von UnbelehrbarerGreis (Gast)


Lesenswert?

Leute, leute.... ihr macht auch aus allem eine Wissenschaft.

von Wilhelm M. (wimalopaan)


Lesenswert?

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).

von zitter_ned_aso (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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?

von DPA (Gast)


Lesenswert?

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

Und trotzdem werden die wenigsten Programmierer werden wissen, was ein 
Ring ist, und können trotzdem programmieren.

von rbx (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Eric B. (beric)


Lesenswert?

c-hater schrieb:
> Passt. Programmieren ist nunmal angewandte Mathematik.

Nöh... Mathematik ist theoretische Informatik duck-und-weg

von Peter D. (peda)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.