Deep C / C++
-
SideWinder schrieb:
http://www.slideshare.net/olvemaudal/deep-c
Ich konnte nicht alles beantworten, trotzdem den größten Teil. Scheinbar scheint sich aber keiner der drei daran zu stören, dass Sprachen die derartiges Detailwissen verlangen vielleicht schlichtweg Käse sind?
Wie denkt ihr da drüber? So tun als würde die Sprache viel abstrahieren aber letzten Endes dies nur tun wenn ich erst wieder über jedes Detail bescheid weiß...da habe ich doch nichts gewonnen...
MfG SideWinder
Es ist eben nicht so, dass die Sprache derartiges Detailwissen verlangen. Detailwissen ist hilfreich aber nicht immer notwendig. Man sollte wissen, was man tun darf und was nicht. Bei C sollte man wissen, wann undefiniertes Verhalten auftreten kann, aber warum und was die Folgen sind, ist unwichtig.
Es ist wie mit einem Automechaniker. Er muss wissen wie man ein Auto repariert, aber er muss kein Maschinenbauingenieur sein, der so ein Auto auch konstruieren kann.
Auch in anderen Sprachen ist Detailwissen hilfreich. Das viel gepriesene Java verlangt genauso Verständnis über den Garbage collector, wenn man wirklich das letzte raus holen will. Meistens reicht aber ein oberflächliches Wissen um gute Programme zu schreiben. Sicher braucht man bei C++ mehr Know-how als bei Java, aber das Know-how sollte jeder professionelle Softwareentwickler mit bringen.
-
Steffo schrieb:
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
xD Ja genau, weil Theoretische Informatik so viel mit Computern zu tun hat. Hahaha Alter, sei doch einfach still wenn du keine Ahnung hast.
-
knivil schrieb:
Die Fragen dienen dazu, das Verstaendnis ueber die Arbeitsweise des Computers zu testen.
Nein, es testet hauptsächlich, ob man die Arbeitsweise eines bestimmten Compilers unter bestimmten Optimierungsoptionen verstanden hat. Bei dem einen Beispiel das in etwa so aussah:
void bar(){int i = 42;} void foo(){ int a; printf("%d\n",a); } int main(){ bar(); foo(); }
kann alles raus kommen. Wenn der Compiler optimieren darf, kannst du nicht davon ausgehen, dass bar aufgerufen wurde. Du kannst auch generell nicht davon ausgehen, dass a an der selben Position im Speicher liegen wird, wie vorher i.
i könnte auch in einem Register liegen und a in einem anderen. Ich würde das dem Compiler sogar im Debug-Modus zutrauen.Erst nachdem du all diese Zusatzinformationen hast, dann testet der Test, wie der Computer funktioniert. Die Frage ist, ob das wirklich relevant ist.
-
Es ist wie mit einem Automechaniker. Er muss wissen wie man ein Auto repariert, aber er muss kein Maschinenbauingenieur sein, der so ein Auto auch konstruieren kann.
Der Vergleich hinkt. C-Programmierer bauen auch keine Computer.
Erst nachdem du all diese Zusatzinformationen hast, dann testet der Test, wie der Computer funktioniert. Die Frage ist, ob das wirklich relevant ist.
Ja. Dann anders: Das Maedel zeigt, dass sie ein bestimmtes Modell von Computer und Compiler im Kopf hat. Dieses Modell ist der Realitaet sehr nahe.
-
roflalter schrieb:
Steffo schrieb:
Ich denke, theoretische Informatiker verstehen von Computern mehr als C-Gurus.
xD Ja genau, weil Theoretische Informatik so viel mit Computern zu tun hat. Hahaha Alter, sei doch einfach still wenn du keine Ahnung hast.
Das Thema hat sich eigentlich insofern erledigt, wenn man sich die Frage stellt, was Computer überhaupt tun. Dann kann man sich fragen, was theoretische Informatiker machen.
Man merkt dir aufjedenfall an, dass du keinerlei Berührung mit diesem Thema hattest...
EDIT: C hat übrigens gar nicht so viel mit Computern zu tun. Es ist nur eine Sprache, welche zu handhaben, nicht gerade sonderlich großen Computerverständnis erfordert...
-
Steffo, du hast in einem solchen Thread nichts zu suchen. Jeder weiß, dass du keine Ahnung hast. Tu dir selbst also einen Gefallen und verzieh dich.
-
Vielleicht kannst du anschaulich erklären, was Computerverständnis mit C im speziellen zu tun haben soll?
-
Steffo schrieb:
Vielleicht kannst du anschaulich erklären, was Computerverständnis mit C im speziellen zu tun haben soll?
Merkst du nicht, dass du von allen nur ausgelacht wirst? Du kannst keine der Fragen wie das Mädel beantworten, wenn du nicht ein halbwegs gutes Verständnis für Computer hast. Register, Callstack, Pointer, Cache, all das muss bekannt sein.
Aber das war auch gar nicht der Witz an deinem Beitrag. Der war nämlich das "theoretische" vor "Informatiker", es hat einfach köstlich gezeigt wie wenig Ahnung du von dem hast, was du da von dir gibst.
-
roflalter schrieb:
Steffo schrieb:
Vielleicht kannst du anschaulich erklären, was Computerverständnis mit C im speziellen zu tun haben soll?
Merkst du nicht, dass du von allen nur ausgelacht wirst? Du kannst keine der Fragen wie das Mädel beantworten, wenn du nicht ein halbwegs gutes Verständnis für Computer hast. Register, Callstack, Pointer, Cache, all das muss bekannt sein.
Das hat nichts mit C im Speziellen nichts zu tun, weil du das auch in anderen Sprachen findest (Pointer nicht unbedingt) und außer vom Pointer musst du vom Rest theoretisch auch gar nichts wissen. Es kann natürlich hilfreich sein, wenn du abstrakte Vorstellungen davon hast, aber zwingend ist das nicht, da das Sache des Compilers ist (--> Hier brauchst du Ahnung von Computern und das geht auch in Richtung theoretischer Informatik!).
-
Steffo schrieb:
Hier brauchst du Ahnung von Computern und das geht auch in Richtung theoretischer Informatik!
Nein! Geht es eben nicht. So schwer kann das doch nicht sein sich mal eben schlau zu machen bevor man sich immer und immer wieder blamiert. Gerade die Theoretische Informatik beschäftigt sich mit völlig anderen Problemen, das hardwarenächste sind da Turingmaschinen. Technische Informatik, das geht in diese Richtung.
-
Und nein, du musst nicht wissen was ein Callstack ist um C zu können. Aber du musst es wissen um ein C Guru zu sein und die Fragen so zu beantworten wie das Mädel, darum ging es schließlich. Du kannst auch Java können ohne zu wissen was ein GC ist, trotzdem bist du dann kein Java Guru.
-
Steffo schrieb:
Hier brauchst du Ahnung von Computern und das geht auch in Richtung theoretischer Informatik!).
Bevor du dich noch laecherlicher machst als bisher poste ich mal folgendes Zitat von Edsger Dijkstra (ein Pionier der Informatik, der vor allem in der theoretischen Informatik forschte):
Edsger Dijkstra schrieb:
Computer science is no more about computers than astronomy is about telescopes.
Ich denke das braucht keien Uebersetzung.
-
roflalter schrieb:
Steffo schrieb:
Hier brauchst du Ahnung von Computern und das geht auch in Richtung theoretischer Informatik!
Nein! Geht es eben nicht. So schwer kann das doch nicht sein sich mal eben schlau zu machen bevor man sich immer und immer wieder blamiert. Gerade die Theoretische Informatik beschäftigt sich mit völlig anderen Problemen, das hardwarenächste sind da Turingmaschinen. Technische Informatik, das geht in diese Richtung.
http://www.tcs.ifi.lmu.de/lehre/ws-2011-12/compiler
http://www.willemer.de/informatik/compiler/index.htm
Ich wette, das überzeugt dich alles nicht, weil du es besser als die Quellen weist...
Ohne Kenntnisse der theoretische Informatik kann da nichts gescheites rauskommen. Die Hardwarekenntnisse... Darum kann sich dann der Programmierer kümmern, wenn in Assembler übersetzt werden soll, aber nicht mal das ist nötig, denn es gibt z. B. Compiler, die die Sprache in C übersetzen.
-
Als Argument dafür, dass die theoretische Informatik sich mit Computern beschäftigt, postest du jetzt Links für Compilerbau.
So langsam schreibe ich deine Logik endgültig ab, am besten du hörst einfach, so schwer es mir fällt das zu schreiben, auf Pi.
-
Compiler gehören wohl eher in den Bereich der praktischen Informatik. Zumindest beschäftigt sich bei uns der Lehrstuhl für praktische Informatik damit. Die theoretischen Informatiker beschäftigen sich eher damit, OB eine Sprache parsebar ist, und nicht wie. Theoretische Informatiker machen harte Mathematik. Deswegen sind das auch alles Informatiker. Ob die Ahnung von x86-Architekturen haben? ich bezweifle es.
-
Gut, dann haben Computer mit Compiler, Programmen, Algorithmen, Datenverarbeitung etc. nichts zu tun (weil das ja alles Bestandteil der theoretischen Informatik ist).
Vielleicht interpretierst du Computer zu sehr mit Hardware als als das, was die Computer tun!
-
Steffo schrieb:
Vielleicht interpretierst du Computer zu sehr mit Hardware als als das, was die Computer tun!
Der Satz macht nicht nur keinen Sinn, der ist sogar syntaktisch falsch.
Jetzt sind schon Mathematiker Computerexperten, weil sie sich u.A. mit dem beschäftigen was Computer machen? Oder Honigverkäufer Bienenexperten? Weil Bienen machen den Honig ja schließlich.
Nein, ich würde eher sagen, du hast einfach keine Ahnung und versuchst dich jetzt irgendwie da rauszuwinden. Wenn dir jeder widerspricht, solltest du mal überlegen, ob an deiner Vorstellung von "Ahnung von Computern haben" nicht irgendetwas ganz stark verschimmelt, sonst wird das nämlich immer peinlicher für dich.
-
Jetzt sind schon Mathematiker Computerexperten, weil sie sich u.A. mit dem beschäftigen was Computer machen?
Ein Mathematiker oder ein Physiker wird relativ problemlos einen Informatiker ersetzen können, umgekehrt sieht das aber ganz anders aus. Ich weiß: C/C++ Programmierer halten sich für die Götter der Informatik, aber so sieht die Realität nun mal aus: Mathematiker/Physiker > Informatiker! Dazwischen sind IMHO die theoretischen Informatiker.
Oder Honigverkäufer Bienenexperten? Weil Bienen machen den Honig ja schließlich.
Ne, aber ein Imker, der sowohl Honig verkauft als auch Bienen züchtet, wird wohl Ahnung von beidem haben...
Nein, ich würde eher sagen, du hast einfach keine Ahnung und versuchst dich jetzt irgendwie da rauszuwinden. Wenn dir jeder widerspricht, solltest du mal überlegen, ob an deiner Vorstellung von "Ahnung von Computern haben" nicht irgendetwas ganz stark verschimmelt, sonst wird das nämlich immer peinlicher für dich.
Drei, vier Leute, darunter ein Troll und ein anonymer Nutzer mit skurrilem Namen, sind also JEDER!
-
Ein Mathematiker oder ein Physiker wird relativ problemlos einen Informatiker ersetzen können, umgekehrt sieht das aber ganz anders aus. Ich weiß: C/C++ Programmierer halten sich für die Götter der Informatik, aber so sieht die Realität nun mal aus: Mathematiker/Physiker > Informatiker! Dazwischen sind IMHO die theoretischen Informatiker
Unsinn. Ein Mathematiker beschäftigt sich idr nicht mit Komplexitätstheorie und p-np Problemen (nur um 2 Beispiele zu nennen)
-
Unterteilung der Informatik von http://www.tinohempel.de/info/info/ti/informatik.htm:
Angewandte Informatik
Anwendung von technischer, praktischer und theoretischer Informatik in anderen Wissenschaften und Gesellschaftsbereichen.Technische Informatik
Untersuchung des funktionellen Aufbaus der Hardware; logischer Entwurf von Rechentechnik; maschinennahe ProgrammierungPraktische Informatik
Formulierung von Methoden, um Programmsysteme zu erstellen, einschließlich konkreter Entwicklungsumgebungen und Softwarewerkzeuge zur Unterstützung von Programmierenn und Anwendern.Theoretische Informatik
Theoretische Informatik ist ein Teilgebiet der Informatik, das die (meist mathematischen) Grundlagen der Information sowie ihre Darstellung und effiziente Verarbeitung untersucht.Compilerbau besteht aus folgende Teilgebieten:
Angewandte Informatik - Linguistik (ohne Sprachdesign gibst kein Zweck)
Technische Informatik - Prozessoren, Assembler, Laufzeitumgebung, Systemprogrammierung
Praktische Informatik - Realisierung, Design und Architektur
Theoretische Informatik - Formale Sprache (Syntax und Grammatik), Automatentheorie (Aufbau von Lexer und Parser), ...Kein Anspruch auf Vollständigkeit