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: > Sprich: das gesamte Gebiet der Numerik ;-) Weshalb nicht auch die ganzen Gebiete von Automatentheorie und Berechenbarkeit?
:
Bearbeitet durch User
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.
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.
> seit 30 Jahren mein Geld mit Programmieren
Da hast du so wie ich wohl mit FORTRAN1 angefangen.
999 CONTINUE
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 ...
1 | IF(X-Y) 10, 20, 30 |
leo
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.
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
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++".
> aber eher nicht
Siehst, sach ich doch.
Schoenen Abend noch
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
Perihel, bist Du noch auf Empfang?
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).
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
Leute, leute.... ihr macht auch aus allem eine Wissenschaft.
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?
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.
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.
c-hater schrieb: > Passt. Programmieren ist nunmal angewandte Mathematik. Nöh... Mathematik ist theoretische Informatik duck-und-weg
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.