Hallo, Ich möchte eine Datenbank rein in C erstellen. Ich habe ein Evaluation-board (lm3s6918) und mochte eine Datenbank erstellen, ohne mySQL oder ähnliches, habe auch keine Internetverbindung mit diesem Mikrocontroller. Ich möchte wissen, ob ich einfach in C eine Datenbank erstellen kann, die man von außen (lm3s6918 hat touchdisplay) einfach umschreiben kann und die ich dann für das eigentliche Programm weiterverwenden kann. Danke schon im voraus ;) Mfg. Thomas
Ja, aber je nach geforderten Funktionen/Performance/Datensicherheit/... ist "einfach" relativ.
Was hast du denn für Anforderungen? Eigentlich kannst du jede Datenstruktur irgendwie zu einer Datenbank formen. Der einfachste Fall wäre zum Beispiel ein Array von structs in C. Die kannst du dann im Speicher ablegen und via Index darauf zugreifen. Da fehlt dir dann natürlich eine komfortable Abfragesprache, wie SQL. Das ist auf einem µC aber sowieo overkill... Gruß Marius
Zur Not könnte man SQLite verwenden. Ist reines C und eigentlich überall einbindbar.
Gast
#2542546
Gast
#2542552
> Ich möchte wissen, ob ich ... in C eine Datenbank erstellen kann, Sicher, was meinst du, in was Datenbanken geschrieben wurden > einfach Alles ist relativ. Ich meine, wenn man schon so fragt, ist es wohl zu schwer, daber vermutlich brauchst du gar keine ganze Datenbank, sondern nur eine Datenstruktur, bei der sogar fraglich ist, ob du sie überhaupt persistent abspeichern können musst. Kurz gesagt: Millionen Programmeirer auf aller Welt können das.
ich würd eher sagen, es geht hier um ein (statisches?) config-file dass per ethernet (ab und zu) mal updated werden soll ??
Ich soll den Microcontroller LM3S6918 programmieren. Dieser soll funktionieren, ohne dass entweder PC oder sonstiges angeschlossen ist. Die Datenbank soll persistent abgespeichert werden und sollte von außen über Touchscreen verändert werden können. Und das Programm selber soll auch auf die Datenbank zugreifen können und die Werte auslesen.
ist das eine Hausaufgabe?
Nein, ein kleiner Teil von meiner Diplomarbeit ;)
Gast
#2542616
Thomas O. schrieb: > Ich soll den Microcontroller LM3S6918 programmieren. Ja, sowas soll vorkommen... Zumindest kenne ich jemanden, der behauptet, jemanden zu kennen, der auch schon mal sowas machen musste. > Dieser soll funktionieren, ohne dass entweder PC oder sonstiges > angeschlossen ist. Hm, ist das nicht die Natur eines Mikrocontrollers? - Zumindest die Typen, die ich so kenne, brauchen eigentlich nur eine Betriebsspannung und maximal noch einen Oszillator oder sowas... > Die Datenbank soll persistent abgespeichert werden und sollte von außen > über Touchscreen verändert werden können. Soso... Eine Datenbank mit Touch-Interface? - Also... Die Datenbanken, die ich so kenne, kommunizieren in der Regel via TCP... Darauf hat's in der Regel einen SQL-Dialekt oder (z. B. bei diversen NoSQL-DBs) eine HTTP-API. Es gibt natürlich auch Varianten mit z. B. nativem C-API... > Und das Programm selber soll auch auf die Datenbank zugreifen können und > die Werte auslesen. Ja, das macht Sinn. Zumindest fällt mir spontan kein Anwendungsfall ein, bei dem es Sinn macht, die Daten so abzulegen, dass sie nicht gelesen und/oder darauf zugegriffen werden kann.
Patrick schrieb: > Ja, das macht Sinn. Zumindest fällt mir spontan kein Anwendungsfall ein, > bei dem es Sinn macht, die Daten so abzulegen, dass sie nicht gelesen > und/oder darauf zugegriffen werden kann. Nie vom WOM gehört ? (Write Only Memory. 8 Dioden auf einen C ;))
Patrick schrieb: > Soso... Eine Datenbank mit Touch-Interface? - Also... Die Datenbanken, > die ich so kenne, kommunizieren in der Regel via TCP... Darauf hat's in > der Regel einen SQL-Dialekt oder (z. B. bei diversen NoSQL-DBs) eine > HTTP-API. Es gibt natürlich auch Varianten mit z. B. nativem C-API... das wesentliche ist, dass ich keine andere Verbindung habe, mit der ich auf eine Datenbank zugreifen kann. Deshalb denke ich mir, dass SQL nicht funktionieren wird oder?
Thomas O. schrieb: > Deshalb denke ich mir, dass SQL nicht funktionieren wird oder? Warum? Mit sqlite hast du ein Datenbank-File auf dem Board, keinen Serverdienst oder Netzwerk. Dein Programm öffnet (mit Hilfe der SQLite-Library) einfach das File und kann darauf SQL-Kommandos ausführen. Das File kannst du zum Bearbeiten einfach auf den PC kopieren, und dort mit den SQLite-Tools, ODBC-Treiber usw. verändern und zurückkopieren. Aber, je nachdem was du wirklich brauchst: Vielleicht reicht auch ein simples Textfile mit linearer Suche?
Thomas O. schrieb: > Deshalb denke ich mir, dass SQL nicht funktionieren wird oder? Doch, und zwar in Form von SQLite. Das ist eine in reinem C geschriebene SQL-Datenbank, die ihre Daten wahlweise in einem Dateisystem oder aber eben auch im Arbeitsspeicher ablegen kann. Da sind keine eigenständigen Datenbankprozesse, keine Interprozesskommunikation und erst recht keinerlei Netzwerkzugriffe erforderlich. SQLite braucht sehr wenig Code und ist vorzüglich für den Einsatz in Embedded Systems geeignet.
Dann werde ich das mal mit SQLite versuchen :) Danke an alle für die tolle Hilfe :) Wenn ich dann noch fragen hab, meld ich mich dann einfach nochmal ;) Mfg. Thomas
Gast
#2542662
Thomas O. schrieb: > Nein, ein kleiner Teil von meiner Diplomarbeit ;) Studiengang? Das hört sich ja alles sehr erschreckend an. Von Datenbanken oder Informatik an sich scheinst du im Studium nicht viel mitbekommen zu haben. Darum würde mich dein Studiengang schon interessieren.
Gast
#2542666
hallo, lern' doch einfach erstmal Programmieren. Wenn Du C lernen willst, nimm "The C Programming Language" von Brian W. Kernighan, Dennis M. Ritchie zum lernen von algorithmen und datenstrukturen nimm http://mitpress.mit.edu/algorithms/ zum arm coden guck dir hier die tutorials an. naja, egal
>Studiengang?
mit 19
das ist eine HTL!
Was für Daten sollten denn überhaupt gespeichert werden? Irgendwie erscheint mir der Begriff "Datenbank" fehl am Platze...
Robert L. schrieb: >>Studiengang? > > mit 19 > > das ist eine HTL! Und ich wünschte sie würden aufhören das ganze 'Diplomarbeit' zu nennen. Aber abgesehen davon hatten wir hier auch schon Diplomanden und sogar Doktoranden, die sich auch nicht besser angestellt haben. Die Frage, die sich mir so stellt, lautet: Braucht es überhaupt eine relationale Datenbank? Ich werde das Gefühl nicht los, dass hier (aus Unkentniss seitens des Fragestellers) versucht wird, mit Kanonen auf Spatzen zu schiessen.
Gast
#2542867
Sry das ich mich auch ins Gespräch einklinke, aber ich arbeite mit
Thomas O. zusammen:
Es geht darum einfachen Haushalts-Geräten Prioritäten zuzuordnen, mit
denen dann unser main-Programm arbeiten soll.
Wir brauchen eine Datenbank, um neue Geräte ein oder austragen zu
können, bzw. Prioritäten zu änder.
z.B.: Waschmaschine 50;
E-Herd 20;
whose 93 schrieb: > Sry das ich mich auch ins Gespräch einklinke, aber ich arbeite mit > Thomas O. zusammen: > > Es geht darum einfachen Haushalts-Geräten Prioritäten zuzuordnen, mit > denen dann unser main-Programm arbeiten soll. > Wir brauchen eine Datenbank, um neue Geräte ein oder austragen zu > können, bzw. Prioritäten zu änder. Dazu braucht man eine Datenbank? Das ist eine simple lineare Liste oder Array, wenns hochkommt ein binärer Baum, damit man bei 10000 Geräten schneller suchen kann. Da habt ihr mit der Portierung von SQLite mehr Arbeit, als wenn ihr einfach eure Kentnisse von Datenstukturen auspackt.
Gast
#2542885
> Wir brauchen eine Datenbank, um neue Geräte ein oder > austragen zu können, bzw. Prioritäten zu änder. > z.B.: Waschmaschine 50; E-Herd 20; Nein, ich braucht erst mal Grundlagenkenntisse. Für ein paar Zahlen und Namen braucht man keine Datenbank, sondern eine Liste. Und niemand hat in überhaupt einem Gebäude irgendwelche Lust irgendwas irgendwo einzutragen, und dann noch mit Nummern. Geräte werden eingesteckt, das war's, gehen auch manchmal kaputt, sind also nicht so wie die Liste glaubt daß sie wären. Völlig falscher Ansatz, das Problem, das übrigens 100% aller Totgeburten trifft. Eure Lehranstalt hat euch also offenbar auch nicht beigebracht, sinnvoll zu denken.
Hinweis:
In der Programmierung bezeichnet man oft etwas hochtrabend als
"Datenbank", was in Wirklichkeit einfach nur eine Sammlung von Daten
darstellt. Datenbank ist hier (sofern der Begriff in der
Aufgabenstellung vorkommt) als mehr als die Sammlung der Nutzdaten zu
sehen.
struct Person
{
char Vorname[50];
char Nachname[100];
}
struct Person Belegsschaft[2000];
ist so gesehen schon eine "Datenbank". Es ist die Sammlung der Daten der
Belegschaft einer Firma.
An das, was Hr. Müller da draussen aber als "Datenbank" (zb Access, zb
SQL) kennt, werden zusätzlich noch ganz andere Anforderungen gestellt.
Das hat mit der einfachen Datensammlung von da oben nur sehr wenig zu
tun, auch wenn man natürlich den Aufwand treiben kann, eine SQL
Datenbank nur zur Speicherung dieser Daten einzusetzen (was manchmal
sogar tatsächlich Sinn machen kann).
Aber wie sinnvoll es ist, erst mal Tage damit zu verbringen, eine echte
relationale Datenbank auf ein System zu portieren, nur um dann
festzustellen, dass man die Anpassung ans Filesystem sowieso wieder
selber machen muss, anstatt so ein Array einzusetzen und das von einem
File zu lesen und zu schreiben (oder in Form eines Cache immer nur Teile
im Speicher zu haben), das möchte ich jetzt erst mal in Frage stellen.
Gast
#2542900
Danke für die Info :)
Ich habe jetzt einfach eine Struktur erstellt, dass mit dem umschreiben
in der Struktur von außen mach ich später noch, aber das habe ich
einmal:
struct Geraete *G
{
int Geraetenummer;
char Name[50];
unsigned char Geraetleistung[20];
};
struct Geraete Geraet1 =
{
0,
"Testgeraet1",
"50"
};
struct Geraete Geraet2 =
{
1,
"Testgeraet2",
"100"
};
Aber mein Problem ist jetzt der Zeiger..
Ich möchte mit meinem Programm alle Gerätenummern durchlaufen lassen, um
zu sehen ob irgendein Gerät weniger Leistung benötigt als ich momentan
zur Verfügung habe, damit ich dieses dann einschalten kann. Und das
solange ich mehr Leistung zur Verfügung habe, als das Gerät verbraucht.
Wenn ich das mit dem Zeiger so mache:
G->Geraetenummer = 0;
kommt der Fehler:
ILOGS.c(348): error: #132: expression must have
pointer-to-struct-or-union type
Wahrscheinlich ist der Fehler für ein paar von euch eh offensichtlich,
aber ich habe vorher eigentlich nie programmiert und bin noch relativ
unerfahren darin ;)
Hoffe, dass ihr mir helfen könnt..
Mfg.Thomas
Du musst wie es oben schon steht ein Array deiner Struktur anlegen. Über dieses kannst du dann iterieren.
Thomas O. schrieb: > Wahrscheinlich ist der Fehler für ein paar von euch eh offensichtlich, > aber ich habe vorher eigentlich nie programmiert und bin noch relativ > unerfahren darin ;) Ja. G zeigt auf nichts. Du solltest Geraete als Array definieren, in etwa so:
1 | |
2 | |
3 | |
4 | |
5 | |
dann geht auch G = Ger[0].
Danke :) Werd ich gleich mal ausprobieren ;)
Joachim Drechsel schrieb: >
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
> > dann geht auch G = Ger[0]. und wie kann ich dann auf die Leistung zugreifen?
'tschullung, Tippfehler. Es muß heißen: G = &Ger[0]. Zugriff: Ger[0].Geraetleistung zB strcpy( Ger[0].Geraetleistung, "lau");
Wenn ich dass jz so schreibe:
struct Geraete
{
int Geraetenummer;
char Name[50];
unsigned char Geraetleistung[20];
};
struct Geraete Ger[] =
{
0, "Testgeraet1", "50",
1, "Testgeraet2", "100",
->(83) 0, NULL, 0
};
kommt der Error:
ILOGS.c(83): error: #144: a value of type "void *" cannot be used to
initialize an entity of type "char"
ILOGS.c(83): error: #29: expected an expression
und wenn ich das schreibe:
G = &Ger[0];
kommt der Error:
ILOGS.c(370): error: #513: a value of type "struct Geraete *" cannot be
assigned to an entity of type "int *"
und wenn ich das mache:
}while (Leistung >= Ger[0].Geraeteleistung);
ILOGS.c(376): error: #136: struct "Geraete" has no field
"Geraeteleistung"
Gast
#2545271
Thomas O. schrieb: > unsigned char Geraetleistung[20]; Thomas O. schrieb: > ILOGS.c(376): error: #136: struct "Geraete" has no field > "Geraeteleistung" Jeder Buchstabe zählt.
ah, danke ;)
Was mir hier nicht gefällt
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
diese Struktur beschreibt nicht mehrere GeräteE, sondern 1 Gerät. Daher sollte man die Struktur auch so benennen! Das mag dir jetzt lächerlich vorkommen, bei komplexeren Programmen sind solche Kleinigkeiten aber wichtige Hilfen, die dir dabei helfen, den Programmtext zu überblicken. Ein Gerät hat eine Nummer - die Gerätenummer. Das es sich dabei um die Gerätenummer handelt ist implizit schon dadurch gegeben, dass die Nummer eben zu einem Gerät gehört. Du brauchst daher die Variable nicht Geraetenummer oder Geraeteleistung nennen. Der Namensteil "Geraet" ist schon dadurch ausgedrückt, dass beides Teil der Struktur "Geraet" sind.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
das reicht völlig. Denn wenn du ein konkretes Gerät hast struct Geraet Staubsauger; dann hat dieser Staubsauger eine Nummer und eine Leistung Staubsauger.Nummer = 234; strcpy( Staubsauger.Leistung, "800 Watt" ); und du befreist dich damit von vieler Tipparbeit, die im Grunde nichts bringt. (Und warum die Leistung ein Array of unsigned char sein soll, musst du mir auch erst mal erklären. Wenn etwas zumindest im Prinzip ein Zahlenwert ist, dann speichere den auch als Zahlenwert).
Karl Heinz Buchegger schrieb: > Was mir hier nicht gefällt > >
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
> > diese Struktur beschreibt nicht mehrere GeräteE, sondern 1 Gerät. Daher > sollte man die Struktur auch so benennen! ist schon umbenannt ;) Danke Könntest du mir vielleicht mit den anderen Errors auch helfen? ;)
struct Geraete Ger[] =
{
0, "Testgeraet1", "50",
1, "Testgeraet2", "100",
->(83) 0, NULL, 0
};
Du kannst hier nicht NULL nehmen!
Ein Array kann nicht NULL sein. Aber ein String kann leer sein
struct Geraet Geraete[] =
{
{ 0, "Testgeraet1", "50" },
{ 1, "Testgeraet2", "100", },
{ 0, "", "" }
};
Danke, jz is der Error auch weg ;)
Karl Heinz Buchegger schrieb: > Du kannst hier nicht NULL nehmen! > Ein Array kann nicht NULL sein. Aber ein String kann leer sein Strenggenommen ja ... Ich verwende solche Strukturen etwas anders.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Die Reservierung von Speicher in Form eines Array macht nur Sinn wenn sich dessen Größe ändert.
Das mit der Struktur dürfte bei mir jetzt passen:
struct Geraet
{
int Geraetenummer;
char Name[50];
unsigned char Geraeteleistung[20];
};
struct Geraet Ger[] =
{
0, "Testgeraet1", "50",
1, "Testgeraet2", "100",
0, "", ""
};
Aber..
wenn ich das dann schreibe:
G=&Ger[0].Geraetenummer;
->(371) L=&Ger[0].Geraeteleistung;
do{
G++;
->(377) }while (Leistung >= L);
kommt dieser Error:
ILOGS.c(371): error: #513: a value of type "unsigned char (*)[20]"
cannot be assigned to an entity of type "unsigned char *"
ILOGS.c(377): error: #42: operand types are incompatible ("unsigned
char" and "unsigned char *")
was ist der Unterschied überhaupt zwischen unsigned char und unsigned
char *?
Joachim Drechsel schrieb: > Ich verwende solche Strukturen etwas anders. > >
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Sreng genommen hast du hier aber auch kein Array mehr, sondern einen Ankerpunkt (den Pointer) an den du ein Array anhängen kannst. (Im Sinne der Fähigkeiten des TO würde ich ihm allerdings davon abraten. Er hat schon genug mit anderen Dingen zu tun)
Thomas O. schrieb: > was ist der Unterschied überhaupt zwischen unsigned char und unsigned > char *? * Warum verwendest du Pointer, wenn du nicht weißt wie man mit ihnen arbeitet * denkst du nicht, dass bei einer Abschlussarbeit für die du einen Befähigungsnachweis bekommst, es schon ein bischen spät ist, sich in die Grundlagen einzuarbeiten? wenn du ein Array hast double a[10]; und eine einzelne Variable; double k; dann kannst du mit k = a[3]; dir eine Kopie des Wertes aus a (von einem bestimmten Element aus dem Arrays) nach k holen. Das ist bei einer Struktur bzw. einem Array aus Strukturelementen auch nicht anders. struct xy { double x; double y; } struct xy Punkte[10]; Punkte ist ein komplettes Array von xy-Objekten. Ein einzelnes Element aus diesem kompletten Arrray wäre Punkte[3] Das beschreibt also 1 Element aus den 10. Dieses 1 Element ist ein struct xy Objekt. Und als solches verfügt dieses eine xy-Objekt natürlich über einen x Member und einen y Member. Der x Member ist ein double und der y Member ist ein double. D.h. man kann schreiben struct xy Mittelpunkt; // ein komplettes xy Objekt xy = Punkte[3]; // Kopie des kompletten xy Objektes in // die Variable Mittelpunkt ablegen oder auch double mx; double my; mx = Punkte[3].x; my = Punkte[3].y; Ist alles völlig logisch und folgt daraus, wenn man sich überlegt, was man durch die Schreibweise beschrieben hat
1 | |
2 | |
3 | |
Karl Heinz Buchegger schrieb: > wenn du ein Array hast > > double a[10]; > > und eine einzelne Variable; > > double k; > > dann kannst du mit > > k = a[3]; > > dir eine Kopie des Wertes aus a (von einem bestimmten Element aus dem > Arrays) nach k holen. Der Adress Of Operator, liefert dir die Speicheradresse eines Objektes. Wenn also a[3] ein Element eines Array darstellt, dann ist &a[3] die Adresse des Objektes, wo es im Speicher liegt. DIese Adresse kann man nun hernehmen und in einer Variablen ablegen, die dazu geschaffen ist, Speicheradressen zu speichern - ein sog. Pointer double * AdrOfElement = &a[3]; Zusätzlich zu der Information, dass es sich bei AdrOfElement um eine Variable handelt, die eine Speicheradresse beinhaltet (ausgedrückt durch den *), hält AdrOfElement noch eine weitere Information. Nämlich, dass an dieser Stelle im Speicher in double Wert liegt. Folgerichtig, kann man sich mittels struct xy * pMittelPkt; eine Pointervariable einrichten, die auf ein struct xy Objekt zeigen kann. Punkte[3]; wäre so ein Objekt. Es besitzt, wie alles, eine Adresse im Speicher, welche man mittels &Punkte[3] bekommt. Und diese Adresse kann man in pMittelPkt ablegen lassen. pMittelPkt = &Punkte[3]; Man hat also so etwas gebaut pMittelPkt +------+ Punkte | o--------------+ +--------------+ +------+ | | x: | | | y: | | +--------------+ | | x: | | | y: | +------>+--------------+ | x: | | y: | +--------------+ | x: | . . . . pMittelPkt ist NICHT das struct xy Objekt selber. Es ist ein Verweis auf ein struct xy Objekt. Und dieses Objekt steckt seinerseits im Array. Die Adressierung zb des x Members über diesen Pointer würde so aussehen pMittelPkt der Pointer *pMittelPkt das Objekt, auf welches pMittelPkt zeigt also das struct xy Objekt (*pMittelPkt).x von diesem Objekt der x Member Da man diese Operation aber häufig braucht und die Schriebweise mit den Klammern Tippaufwand bedeutet, gibt es eine alternative Syntax pMittelPkt->x der x Member des Objektes, auf welches pMittelPkt zeigt. Sieh es im Kontext der Zeichnung so an pMittelPkt suche das Kästchen über dem pMittelPkt steht pMittelPkt-> von dort geht ein Pfeil aus, folge dem Pfeil pMittelPkt->y der Pfeil endet bei einem Kästchen, in dem es einen y Member geben muss. Nimm den Wert von diesem y Member.
Gast
#2545434
Hat da vielleicht jemand darüber nachgedacht, zunächst die Anforderungen an das "Werk" zu formulieren? Und zwar möglichst genau, damit die Kollegen zumindest selbst begreifen, WAS sie erreichen wollen. Dann könnte man nämlich bei WIE helfen. Einzelne Kompilerfehler zu "unterdrücken" hilft da recht wenig.
meine fresse schrieb: > Hat da vielleicht jemand darüber nachgedacht, zunächst die Anforderungen > an das "Werk" zu formulieren? Ich denke, so weit sind sie noch lange nicht. Es ist das klassische 'Ich hab mich in meinen Fähigkeiten übernommen' Syndrom. Warum man sich das immer wieder antut, eine Abschlussarbeit in einem Themenkreis zu suchen, von dem man wenig bis keine Ahnung hat und erst mal Grundagen durcharbeiten müsste, wird mir auf ewig ein Rätsel bleiben. Ich wähl mir für einen Abschluss ja auch kein Thema, welches die fehlerfreie Ausführung einer Blinddarm Operation erfordert, wenn ich noch nie ein Skalpell in der Hand hatte und ich mit Ach und Krach gerade mal ein Pflaster richtig anbringen kann. Was das alles mit einer richtigen relationalen Datenbank geworden wäre, darüber will ich lieber erst gar nicht nachdenken. Da ist sicherer Umgang mit Pointern und/oder Strings mehr oder weniger Pflicht. Sonst kannst du dir gleich die Kugel geben. So haben sie wenigstens die Chance etwa funktionierendes auf die Beine zu stellen, wenn auch die Performance leiden wird. Aber lieber ein langsameres Programm das funktioniert, als ein Superschnelles welches falsche Ergebnisse bringt. > Einzelne Kompilerfehler zu "unterdrücken" hilft da recht wenig. Dem stimme ich allerdings uneingeschränkt zu.
Zu wissen an welchem Ende des Schraubenziehers es weh tut, reicht auch nicht, einen Motor instandzusetzen. Ohne irgendwelche Grundlagen und einiges an Erfahrung kann das nichts werden, schom gar keine Abschlußarbeit.
Irgendwann, während meines Studiums, haben wir auch mal verkettete Listen in C programmiert. Wenn du also nicht weißt, wieviele Geräte es mal gibt und das dynamisch handhaben möchtest, solltest du mal Google nach "c list" (oder äahnlich) befragen. btw.: Was macht eigentlich der Gerät?
Gast
#2546407
Ich befürchte, dass die eigentliche Herausforderung in einer anderen Dimension liegt. Noch vor den Grundlagen fehlt die Methode! Das ist doch völlig unerheblich, was genau für ein Problem zu lösen gilt... sei es auch "Ausführung einer Blinddarm Operation" :) Die Entwicklung bewegt sich noch auf dem Niveau "ich möchte einem Patienten Blinddarm rein laparoskopisch übers Ohr entfernen... bin aber unentschieden, ob ich übers linke oder rechte Ohr gehen soll!" Bei der Absurdität der Fragestellung haben sie keine Chance, egal wie fleißig geholfen wird. Man fängt am besten klein an, nämlich die exakte Bedeutung der Begriffe zu lernen und die Zusammenhänge zu merken... Das absolute Minimum für die ursprüngliche Fragestellung wäre: Programmiersprachen - Was ist eine imperative Sprache (wie z.B. assembler oder C)? Welche Sprachen gibt es noch und wofür sie gut/schlecht sind? (Da kommt die erste Überraschung: obwohl SQL tatsächlich meistens in C implementiert wird, verhalten sich diese Sprachen zueinander etwas anderes, als z.B. C zum assembler... :) - Was ist / wie funktioniert ein Prozessor? - Welche Speicherarten gibt es / wie sie funktionieren? - Was sind (in einer imperativen highlevel-Sprache wie C) eine Variable, eine Struktur und ein Zeiger? Was bedeutet zuweisen - referenzieren - dereferenzieren - vergleichen? - Was bedeutet char[] (wie genau funktionieren die Zeichenketten)? - Was ist ein Aufruf, eine Routine? Wie Funktioniert das? Algorithmen und Datenstrukturen - Was ist eine Datenstruktur? Welche Datenstrukturen gibt es und wofür sie geeignet/ungeeignet sind? Wie und wofür platziert man die Daten(strukturen) im Speicher? - Wie / mit welchen Algorithmen verwaltet man die Daten im Speicher (einfügen/entfernen/suchen)? - Was ist eine Datenbank und insb. eine relationale Datenbank? - Was ist *QL (z.B. SQL)? Was ist DDL? - Was ist eine DB-Engine / ein DB-Server (z.B. SQLite oder mySQL)? Wie funktioniert das? Was bedeutet "eine Verbindung erstellen", "eine Datenbank erstellen" etc. pp.? - Was sind: Mengen/Relationen, was sind: Tabellen Schlüssel Indexe / Sequenzen, was sind: Queries Resultsets Views? Elektronik - Was ist eine Anzeige? - Was ist ein Touchscreen? Wie funktioniert das? - Wie wird es angesteuert / ausgewertet? (Bloß damit man versteht, was bedeutet "die Datenbank wird vom Touchscreen umgeschrieben") (Software)entwicklung allgemein - Was ist ein System / Subsystem? - Was ist eine funktionale / nichtfunktionale Anforderung? Wie und wofür erhebt / systematisiert man die Anforderungen? - Was sind die Spezifikationen / Randbedingungen? - Wie konzipiert man die Systeme, wie geht man mit der Komplexität um? - Was ist ein Interface (eine Konvention ein Protokoll API)? - Wie teilt man die Entwicklung einzelner Teile zwischen mehreren Entwickler auf? Ich nehme an, man sollte zumindest davon mal gehört haben, bevor man eine solche Abschlussarbeit schreibt, oder?.. Und das macht auch extrem viel Sinn, da erst wenn man mit den "Kleinigkeiten" soweit ist, kann man das Problem überhaupt analysieren (in die Einzelteile zerlegen) und reflektieren (was davon habe/kenne/kann ich, und was nicht). Erst dann ist einer in der Lage Fragen zu stellen, die ihn tatsächlich weiter (zur Synthese der Lösung) bringen.
Ohne diese Grundkenntnisse reicht das bestenfalls für ein Diplom in Jura ... Ich kann nur aus eigener Erfahrung sagen, man lernt C nicht in 2 Wochen.
meine fresse schrieb: > "ich möchte einem Patienten Blinddarm rein > laparoskopisch übers Ohr entfernen... bin aber unentschieden, ob ich > übers linke oder rechte Ohr gehen soll!" ist auf jeden Fall mal ein innovativer Ansatz, das sollte man konzeptionell weiter ausarbeiten ;-)
Gast
#2546459
meine fresse schrieb: > Ich befürchte, dass die eigentliche Herausforderung in einer anderen > Dimension liegt. Noch vor den Grundlagen fehlt die Methode! ... > > ... Ich nehme an, man sollte zumindest davon mal gehört haben, bevor man > eine solche Abschlussarbeit schreibt, oder?.. Und das macht auch extrem > viel Sinn, da erst wenn man mit den "Kleinigkeiten" soweit ist, kann man > das Problem überhaupt analysieren (in die Einzelteile zerlegen) und > reflektieren (was davon habe/kenne/kann ich, und was nicht). Erst dann > ist einer in der Lage Fragen zu stellen, die ihn tatsächlich weiter (zur > Synthese der Lösung) bringen. Ja, traurig und wahr. Aber heutzutage gibt es doch für alles Codeschnipsel "in Google". Also schnell den ganzen Schund "zusammenguttenbergen", den eigenen Namen reinschreiben und ein Diplom dafür kassieren. Am erschreckensten empfinde ich jedoch den Umstand, das diese "Möchtegern-1337-programmierer" tatsächlich in der freien Wirtschaft unterkommen und es oftmals Jahre dauert, bis das gesamte Ausmass deren Unfähigkeit "demaskiert" wird. Vermutlich weil Personaler und Vorgesetzte auf ähnliche Weise an ihre "Qualifikation" gelangt sind. Etwas Gutes hat die Situation jedoch: Der auf vielen Dingen angebrachte Hinweis "Made in Germany" erfüllt nunmehr wieder die ihm damals von den Inselbewohnern zugedachte Funktion als Warnung vor von hirnentkernten Diplomdeppen zusammengeschlonztes Bastelkram, garantiert unausgegoren, unerprobt, ständig funktionsgestört, mit idiotischen Bedienkonzept, ... aber dafür hoffnungslos überteuert! Gruß, Günni
guenther schrieb: > Etwas Gutes hat die Situation jedoch: Der auf vielen Dingen angebrachte > Hinweis "Made in Germany" erfüllt nunmehr wieder die ihm damals von den > Inselbewohnern zugedachte Funktion als Warnung vor von hirnentkernten > Diplomdeppen zusammengeschlonztes Bastelkram, garantiert unausgegoren, > unerprobt, ständig funktionsgestört, mit idiotischen Bedienkonzept, ... > aber dafür hoffnungslos überteuert! Daseinszweck einer Firma ist Geld verdienen, nicht technischer Fortschritt. Zumindest mittlerweile ...
>ob ich >übers linke oder rechte Ohr gehen soll!" das trifft es zu 110% ... dazu kommt dann noch, dass sie bereits das Skalpell in der Hand haben, und schon mal ein paar Probeschnitte gemacht haben..
Gast
#2546469
Joachim Drechsel schrieb: > Ich kann nur aus eigener Erfahrung sagen, man lernt C nicht in 2 Wochen. "Lernen" geht sich schon aus. Beherrschen braucht ein wenig länger... Auf Pointerarithmetik sollte man zu Beginn eher verzichten. Im Allgemeinen bin ich positiv überrascht wie hilfreich hier geantwortet wird. Ich wäre schon ein wenig stinkig, wenn hier jemand C vorgekaut haben will anstatt dass er sich selbst ein wenig einliest, oder gar im Unterricht besser aufpasst. Das erinnert mich an meine HTL-Zeit wo im Zweig "Betriebsinformatik" nach der Matura gerade einmal 15% ein Programm schreiben konnten das etwas über "Hello World" hinausging.
Gast
#2546495
meine fresse schrieb > Ich befürchte, dass die eigentliche Herausforderung in einer anderen > Dimension liegt. Vielen Dank für diese ausführliche Abhandlung! Du sprichst mir aus der Seele. Ich persönlich beschäftige mich seit meiner Jugend (ursprünglich nur hobbymäßig) mit Elektronik und Hard-/Softwareentwicklung. Ich habe in diesen Bereichen keinerlei Ausbildungen absolviert. Dennoch ergaben sich im Laufe meiner "Arbeit" die von dir beschriebenen Dinge wie von selbst. Ich programmierte z.B. meine erste verkettete Liste für einen Z80-Prozessor zu einer Zeit, als ich den Begriff "verkettete Liste" noch gar nicht kannte - das Prinzip ergab sich einfach aus meiner Aufgabenstellung. Natürlich kam ich auch damals schon von selbst auf die Idee, mir das eine oder andere Fachbuch zuzulegen - auch wenn das für mich ein ziemlich teurer Spaß war und sich einmal sogar ein Buchhändler sehr darüber wunderte, warum sich so ein Jüngling wie ich (ich war da wohl ca. 13 Jahre alt) ein (nicht gerade billiges) Buch über Zeitzeichen-Empfänger zulegte. Mir ist bis heute immer klar, welche Art von Mitteln für einen gegebenen Zweck geeignet ist, und ich schieße nie "mit Kanonen auf Spatzen". Daher wundere ich mich, warum heute viele Menschen, welche eine passende Ausbildung abschließen oder abgeschlossen haben, diese Fähigkeiten, die ich ganz ohne Ausbildung besitze, nicht haben. Ein Aspekt dieser Tatsache ist auch, dass heutzutage offenbar sogar Technikstudenten Nachhilfeunterricht benötigen, den sie dann unter anderem von mir (für ziemlich viel Geld) bekommen. Es ist doch irgendwie witzig, dass ich (ohne irgendeine technische Ausbildung zu haben) Studenten in vielen Bereichen der Elektronik, der Informatik und sogar der höheren Mathematik bestens unterstützen kann. Auch wenn ich eine Menge Kritik an die Ausbildungsanstalten zu richten hätte (z.B. die extreme Praxisferne mancher Studiengänge), frage ich mich dennoch, nach welchen Kriterien Menschen heutzutage ihre Ausbildungen auswählen. Ich stelle nämlich immer wieder fest, dass sich selbst Studenten für die von ihnen gewählte Studienrichtung in Wahrheit gar nicht interessieren. Da ist doch irgendetwas faul ...
Seltener Gast schrieb: > Da ist doch irgendetwas faul ... der Student?
Gast
#2546555
Seltener Gast schrieb: > Ich persönlich beschäftige mich seit meiner Jugend (ursprünglich nur > hobbymäßig) mit Elektronik und Hard-/Softwareentwicklung. Ich habe in > diesen Bereichen keinerlei Ausbildungen absolviert. Jeder kompetente Hard-/Softwareentwickler den ich kenne hat so angefangen und seine Fähigkeiten später mit entsprechender Ausbildung verfeinert. Ohne eigenen Interesse geht es nicht. Man sollte ein vernünftiges Informatik-/Elektronikstudium nicht unterschätzen. Selbst wenn man vorher meint, schon recht gut unterwegs zu sein und auch ohne weiteres produktiv arbeiten kann, bekommt man doch einen ganz anderen Einblick in die Thematik die einem als Autodidakt nur sehr schwer zugänglich ist. ZB kenne ich keinen Analogdesigner für integrierte Schaltungen der ohne Studium ausgekommen ist. Wie auch, wenn die Tools im 6-stelligen Eurobereich anfangen? Allerdings gibt es auch genügend Studenten die sich irgendwie durchmogeln. Da wundert es mich dann nicht, dass selbst jemand ohne entsprechende Ausbildung mehr Plan von der Materie hat.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.