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
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
> 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 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.
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
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.
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
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.
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.
> 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.
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
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:
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"
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.
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
structGeraete
2
{
3
intNummer;
4
charName[50];
5
unsignedcharLeistung[20];
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).
>> 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, "", "" }
};
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
structGeraete
2
{
3
intNummer;
4
char*Name;
5
char*Leistung;
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 *?
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
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.
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?
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.
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 ;-)
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..
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.
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:> 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.