Discussion:
C Programmieren wie die Profis
(zu alt für eine Antwort)
Martin Kleiner
2009-05-05 08:53:05 UTC
Permalink
Hi

Mir ist klar, dass nur Uebung den Meister macht. Trotzdem wuerde mich
interessieren, ob es vielleicht sowas wie ein C fuer Profis Buch gibt.
Ich bin nun relativ umgangssicher was C so alles anzubieten hat, kenn
mich auch mit Datenstrukturen relativ gut aus. Ein Bespiel was mich
interessieren wuerde ist wie ich Makros einsetzen kann um Programme
leichter lesbar zu gestalten.

Wenn jemand Quellen fuer sowas wie C-Advanced hat, dann bitte hier
posten. Danke fuer Eure Hilfe
Stefan Ram
2009-05-05 12:10:22 UTC
Permalink
Post by Martin Kleiner
Mir ist klar, dass nur Uebung den Meister macht. Trotzdem wuerde mich
interessieren, ob es vielleicht sowas wie ein C fuer Profis Buch gibt.
Die 80er Jahre waren die große Zeit der C-Bücher.

Ich sah damals eine Anzeige eines Buchhändlers in der
Zeitschrift »Byte« mit einem Dutzend Computerbüchern: Wenn man
sich die Bücher im Detail ansah, erkannte man, daß alle
ausnahmslos »C« im Titel trugen.

Heute gibt es sicher kaum noch Neuerscheinungen von Büchern
zu C. Es ist heute schwer, über irgendein EDV-Thema noch
genügend Bücher zu verkaufen.

http://successfulsoftware.net/2008/09/17/the-realities-of-software-book-publishing/

Während die Grundlagen von C sicher erkannt werden können,
kann man kein einheitliches Feld »fortgeschrittenes C«
ausmachen, da es viele verschiedene Richtungen gibt, in die
man sich dann spezialisieren kann.

Etwas in die von Dir angesprochene Richtung lesbarer Programme
geht: »Software engineering in C« (Springer books on
professional computing) von Peter A Darnell.

Wenn Du »wie ein Profi« programmieren willst, mußt Du jemand
finden, der dich für Dein Programmieren bezahlt. Dann bist Du
ein Profi.
Martin
2009-05-05 18:19:08 UTC
Permalink
  Etwas in die von Dir angesprochene Richtung lesbarer Programme
  geht: »Software engineering in C« (Springer books on
  professional computing) von Peter A Darnell.
Danke fuer deine ausfuehrlich Antwort. Habe mir grade das Feedback auf
Amazon angeschaut, da hoert sich das ganze eher so an als
ob dieses Buch eine gute Einfuehrung in C bietet. Suche aber eher
sowas wie Tips und Secrets fuer C Programmer ;). Vielleicht kennt
jemand gute online Ressourcen? Es gibt einiges zu C++ und Java, mit C
alleine finde ich im google leider nicht viel!
Enrico Labedzki
2009-05-05 20:08:42 UTC
Permalink
Post by Martin
Post by Stefan Ram
Etwas in die von Dir angesprochene Richtung lesbarer Programme
geht: »Software engineering in C« (Springer books on
professional computing) von Peter A Darnell.
Danke fuer deine ausfuehrlich Antwort. Habe mir grade das Feedback auf
Amazon angeschaut, da hoert sich das ganze eher so an als
ob dieses Buch eine gute Einfuehrung in C bietet. Suche aber eher
sowas wie Tips und Secrets fuer C Programmer ;). Vielleicht kennt
jemand gute online Ressourcen? Es gibt einiges zu C++ und Java, mit C
alleine finde ich im google leider nicht viel!
Du kannst auch gerne C++ Bücher verwenden, den C++ ist ja nur ne
Obermenge von C ;-).

Mfg Enrico

PS.: Aber Verlauf dich nicht in den Tiefen der Klassen das nämlich auch
bloß Strukturen.
Gerald Breuer
2009-05-05 21:45:19 UTC
Permalink
Post by Enrico Labedzki
Du kannst auch gerne C++ Bücher verwenden, den C++ ist ja nur ne
Obermenge von C ;-).
Er kann auch gleich C++ programmieren; das ist oft mit weniger
Aufwand verbunden als der Fußmarsch in C.
Enrico Labedzki
2009-05-06 04:23:48 UTC
Permalink
Post by Gerald Breuer
Er kann auch gleich C++ programmieren; das ist oft mit weniger
Aufwand verbunden als der Fußmarsch in C.
Das geht allerdings auch, Jap!

Mfg Enrico
Georg Bauhaus
2009-05-06 11:54:25 UTC
Permalink
Post by Gerald Breuer
Post by Enrico Labedzki
Du kannst auch gerne C++ Bücher verwenden, den C++ ist ja nur ne
Obermenge von C ;-).
Er kann auch gleich C++ programmieren; das ist oft mit weniger
Aufwand verbunden als der Fußmarsch in C.
Nur beantwortet C++ nicht des OP Frage.
Es gibt, jede Wette, einen ebenso großen
Anteil C++-Programmierer (Xyz-Programmierer),
die von einer "Advanced"-Unterweisung ähnlich
profitieren könnten, wie C-Programmierer.
Wie hoch ist beispielsweise die Menge der
C, C++, Xyz-Programmierer, die Rekursion
ungewohnt finden, oder die trotz file scope/
namespaces/Klasse immer noch keine Prinzipien
im Hinterkopf haben, nach denen sie ihre
Programme modularisieren, wie sie also diese
Mittel am besten einsetzen können?

Gibt es bspw. ein Buch, das erläutert, dass und wie
man systematisch in C projektspezifische Datentypen
isolieren kann, sodass die Portierung auf einen
anderen computer nur wenige Dateien zu ändern
erfordert? Systematisch? Und nicht--wie wohl
üblich--alle Dateien mühsam durchgesehen und
entwanzt werden müssen, bis hoffentlich alle
Anpassungen für die neue Plattform vorgenommen sind.

Welches Sprachmittel in C++ (oder Xyz) erzwingt denn
die dem entsprechende "advanced" Vorgehensweise,
die es in C nicht gäbe?
Also wie käme es in C++ dazu, dass die Programmierer
teure, portierungsfeindliche ad-hoc-Abhängigkeiten
eben nicht ins ganze Programm streuten, weil sie in
C++ und nicht C programmieren?
Martin
2009-05-06 19:31:18 UTC
Permalink
Post by Georg Bauhaus
Wie hoch ist beispielsweise die Menge der
C, C++, Xyz-Programmierer, die Rekursion
ungewohnt finden, oder die trotz file scope/
namespaces/Klasse immer noch keine Prinzipien
im Hinterkopf haben, nach denen sie ihre
Programme modularisieren, wie sie also diese
Mittel am besten einsetzen können?
Genau soetwas wuerde ich suchen! Vor allem effizientes
modulasieren von Programmen!

Danke auch Frank fuer die Tips, werd ich mir mal anschauen!
Georg Bauhaus
2009-05-06 21:21:04 UTC
Permalink
Post by Martin
Danke auch Frank fuer die Tips, werd ich mir mal anschauen!
Nebenbei, zum ADT aus den verlinkten ctips (int_stack),
es geht manchmal auch ganz abstrakt, ohne dass man einen
externen Quellcode-Generator ins Makefile schreiben müsste.
Hübsch ist das zwar nicht, bestimmt auch zu verbessern:

/* Namen herstellen. */
#define MN2(prefix, suffix) XPN2(prefix, suffix)
#define MN3(prefix, infix, suffix) XPN3(prefix, infix, suffix)
#define XPN2(prefix, suffix) prefix##_##suffix
#define XPN3(prefix, infix, suffix) prefix##_##infix##_##suffix

// --8<--8<--

#define TP int // Typ-Parameter, schlichter Name


// --8<--8<--

/* stack ADT */
#define ADT MN2(TP, stack) // lesbare Abkürzung
typedef struct ADT * ADT;

ADT MN3(make, TP, stack)(void);
void MN3(destroy, TP, stack)(ADT);
void MN3(push, TP, stack)(ADT, TP);
TP MN3(top, TP, stack)(const ADT);
void MN3(pop, TP, stack)(ADT);
TP MN3(is_empty, TP, stack)(const ADT);
Claus Reibenstein
2009-05-07 07:03:17 UTC
Permalink
Post by Georg Bauhaus
/* Namen herstellen. */
#define MN2(prefix, suffix) XPN2(prefix, suffix)
#define MN3(prefix, infix, suffix) XPN3(prefix, infix, suffix)
#define XPN2(prefix, suffix) prefix##_##suffix
#define XPN3(prefix, infix, suffix) prefix##_##infix##_##suffix
// --8<--8<--
#define TP int // Typ-Parameter, schlichter Name
// --8<--8<--
/* stack ADT */
#define ADT MN2(TP, stack) // lesbare Abkürzung
typedef struct ADT * ADT;
ADT MN3(make, TP, stack)(void);
void MN3(destroy, TP, stack)(ADT);
void MN3(push, TP, stack)(ADT, TP);
TP MN3(top, TP, stack)(const ADT);
void MN3(pop, TP, stack)(ADT);
TP MN3(is_empty, TP, stack)(const ADT);
Solltest Du beim Wettbewerb "Obfuscated C" einreichen ...

Gruß. Claus
Gerald Breuer
2009-05-06 22:29:19 UTC
Permalink
Post by Martin
Danke auch Frank fuer die Tips, werd ich mir mal anschauen!
Wenn Du Möglichkeiten suchst ein Programm intelligent zu
strukturieren, dann nimm C++; da hast Du dank OOP und Name-
spaces viel elegantere Möglichkeiten. Ist vielleicht nicht
immer drin C++ zu verwenden, aber wenn, dann sieht's sowohl
in Sachen Übersichtlichkeit als auch der Produktivität bes-
ser aus - vorausgesetzt man kann mit der Sprache umgehen.
Rainer Weikusat
2009-05-07 11:31:58 UTC
Permalink
Post by Gerald Breuer
Post by Martin
Danke auch Frank fuer die Tips, werd ich mir mal anschauen!
Wenn Du Möglichkeiten suchst ein Programm intelligent zu
strukturieren, dann nimm C++; da hast Du dank OOP und Name-
spaces viel elegantere Möglichkeiten.
'Eleganz' ist, wie alle aesthetischen Kategorien, notwendigerweise
vollkommen subjektiv, ins Deutsche uebersetzt hiesse obiges also
ungefaehr "ich finde, C++ ist viel schoener als C".
Gerald Breuer
2009-05-09 17:02:56 UTC
Permalink
Post by Rainer Weikusat
Post by Gerald Breuer
Wenn Du Möglichkeiten suchst ein Programm intelligent zu
strukturieren, dann nimm C++; da hast Du dank OOP und Name-
spaces viel elegantere Möglichkeiten.
'Eleganz' ist, wie alle aesthetischen Kategorien, notwendigerweise
vollkommen subjektiv, ins Deutsche uebersetzt hiesse obiges also
ungefaehr "ich finde, C++ ist viel schoener als C".
Wenn das so ist, dann ist auch strukturierte Programmierung bzw.
Programmierung in einer Hochsprache wohl reine Geschmackssache.
Georg Bauhaus
2009-05-10 11:59:28 UTC
Permalink
Post by Gerald Breuer
Post by Rainer Weikusat
Post by Gerald Breuer
Wenn Du Möglichkeiten suchst ein Programm intelligent zu
strukturieren, dann nimm C++; da hast Du dank OOP und Name-
spaces viel elegantere Möglichkeiten.
'Eleganz' ist, wie alle aesthetischen Kategorien, notwendigerweise
vollkommen subjektiv, ins Deutsche uebersetzt hiesse obiges also
ungefaehr "ich finde, C++ ist viel schoener als C".
Wenn das so ist, dann ist auch strukturierte Programmierung bzw.
Programmierung in einer Hochsprache wohl reine Geschmackssache.
http://www.duden.de/definition/elegant

Eleganz dürfte, wie andere ästhetische Begriffe, ein sozial
bedingter "subjektiver" Begriff sein: man findet - in jeweils zu
bestimmenden Kreisen von Menschen - dies oder jendes elegant.[*]
Was ist der Sinn des prätentiöse Gehabes, auch noch in
Computerprogrammen nach Eleganz suchen, ohne angeben zu können,
was elegant im *Unterschied* zu strukturiert etc. ist?
Naja, man wird eben das elegant finden, was die
Programmierprasix-Theorie zeitgenössisch als So-Macht-Mans-Vorgabe
in die Welt setzt: Das ist nicht verkehrt, aber eben sozial bedingt,
nicht technisch. Und wäre deswegen bis auf Weiteres OT, wenn nicht
diese oder eine andere Eleganz der Nachwelt so oder so gestaltete
Software hinterließe.

Nett, das Buch von Spinellis.

___
[*] Die Enghosen-Göre aus dem "Arbeiterviertel" benennt höufig etwas
anderes elegant, als die Notarsstochter oder die Steuerberaterin
aus anderer Wohnlage. DSDS... Nachweise zahlreich in entsprechender
Fachliteratur seit den 70ern verfügbar. Klammern sind ästhetisch.
Stefan Ram
2009-05-10 13:45:27 UTC
Permalink
Post by Georg Bauhaus
Eleganz dürfte, wie andere ästhetische Begriffe, ein sozial
Ich empfinde eine Lösung als elegant, wenn sie viel einfacher
oder kürzer ist als eine typische Lósung, wie sie ein
durchschnittlicher Erfinder finden würde.

(Im Begriff der Mode und Kleidung mag der Begriff anders
kodiert sein, was aber in einer technischen Gruppe nicht
unbedingt beachtet werden muß.)
Erich Fruehstueck
2009-05-10 15:17:05 UTC
Permalink
Post by Georg Bauhaus
Eleganz dürfte, wie andere ästhetische Begriffe, ein sozial
Ich empfinde eine Lösung als elegant, wenn sie viel einfacher oder
kürzer ist als eine typische Lósung, wie sie ein durchschnittlicher
Erfinder finden würde.
Damit hast Du noch immer einen ästhetischen Begriff.
Was heißt einfach? Ist ein Kode einfach, weil er ohne
Bibliotheksfunktionen auskommt, oder ist er einfach,
weil er möglichst viel Funktionalität in Bibliotheksfunktionen auslagert?
Oder bedeutet einfach, das er gut lesbar und klar verständlich ist.

Und kurz? Sind IOCCC Lösungen elegant, weil die Lösungen kürzer
als typische Lösungen sind?

Und klarerweise sind meine eigenen Programme elegant, weil ich sie so
schreibe, wie es meinem ästhetischen Empfinden entspricht ;)

Erich
--
EFEU 3.2 is released!
Get the open source from http://efeu.cybertec.at.
Gerald Breuer
2009-05-10 17:15:03 UTC
Permalink
Post by Georg Bauhaus
Post by Gerald Breuer
Wenn das so ist, dann ist auch strukturierte Programmierung bzw.
Programmierung in einer Hochsprache wohl reine Geschmackssache.
http://www.duden.de/definition/elegant
...
Ach Gott, hätte ich gewusst, dass ich wieder Spinner auf den Plan
gerufen habe.
Claus Reibenstein
2009-05-10 19:50:33 UTC
Permalink
Post by Gerald Breuer
Ach Gott, hätte ich gewusst, dass ich wieder Spinner auf den Plan
gerufen habe.
Gleich und Gleich gesellt sich nunmal gern ...

Gruß. Claus
Gerald Breuer
2009-05-10 20:34:31 UTC
Permalink
Post by Claus Reibenstein
Post by Gerald Breuer
Ach Gott, hätte ich gewusst, dass ich wieder Spinner
auf den Plan gerufen habe.
Gleich und Gleich gesellt sich nunmal gern ...
Was ich damit sagen wollte war im Prinzip, dass Oberflächen
-Logiker wie es Programmierer nun mal oft sind dazu neigen,
dass es eine einzige Definition für einen Begriff gibt.
Das ist in der Kommunikation zwischen Computern so, aber bei
Menschen ist das nun mal nicht so und in dem Zusammenhang
Eleganz im Wörterbuch nachzuschlagen ist komplett hirnrissig.
Alexander Bartolich
2009-05-10 21:09:35 UTC
Permalink
Post by Gerald Breuer
Post by Claus Reibenstein
Post by Gerald Breuer
Ach Gott, hätte ich gewusst, dass ich wieder Spinner
auf den Plan gerufen habe.
Gleich und Gleich gesellt sich nunmal gern ...
Was ich damit sagen wollte war im Prinzip, dass Oberflächen
-Logiker wie es Programmierer nun mal oft sind dazu neigen,
dass es eine einzige Definition für einen Begriff gibt.
Wieviele Programmierer und Programmiersprachen kennst du denn so?

http://en.wikipedia.org/wiki/There_is_more_than_one_way_to_do_it
Post by Gerald Breuer
Das ist in der Kommunikation zwischen Computern so, aber bei
Menschen ist das nun mal nicht so und in dem Zusammenhang
Eleganz im Wörterbuch nachzuschlagen ist komplett hirnrissig.
Theologen, Juristen und Politiker sind da anderer Ansicht.
--
seq 100 | sed 's/.*/Romani Ite Domum./'
Gerald Breuer
2009-05-10 21:24:25 UTC
Permalink
Post by Alexander Bartolich
Post by Gerald Breuer
Was ich damit sagen wollte war im Prinzip, dass Oberflächen
-Logiker wie es Programmierer nun mal oft sind dazu neigen,
dass es eine einzige Definition für einen Begriff gibt.
Wieviele Programmierer und Programmiersprachen kennst du denn so?
Um meine Analogie zu vervollständigen: Wenn zwei Rechner z.B. SMTP
sprechen, dann müssen beide exakt das selbe Verständnis vom Proto-
koll haben. Sowas gibt's bei der Kommunikation zwischen Menschen
selten bzw. dort gibt es i.d.R. Mehrdeutigkeiten die man abhängig
von Person und Situation i.d.R. richtig versteht.
Post by Alexander Bartolich
Post by Gerald Breuer
Das ist in der Kommunikation zwischen Computern so, aber bei
Menschen ist das nun mal nicht so und in dem Zusammenhang
Eleganz im Wörterbuch nachzuschlagen ist komplett hirnrissig.
Theologen, Juristen und Politiker sind da anderer Ansicht.
Ja, und mancher Geek.
Alexander Bartolich
2009-05-10 21:53:50 UTC
Permalink
Post by Gerald Breuer
Post by Alexander Bartolich
Post by Gerald Breuer
Was ich damit sagen wollte war im Prinzip, dass Oberflächen
-Logiker wie es Programmierer nun mal oft sind dazu neigen,
dass es eine einzige Definition für einen Begriff gibt.
Wieviele Programmierer und Programmiersprachen kennst du denn so?
Um meine Analogie zu vervollständigen: Wenn zwei Rechner z.B. SMTP
sprechen, dann müssen beide exakt das selbe Verständnis vom Proto-
koll haben. Sowas gibt's bei der Kommunikation zwischen Menschen
selten bzw. dort gibt es i.d.R. Mehrdeutigkeiten die man abhängig
von Person und Situation i.d.R. richtig versteht.
Dann kannst du mir sicher sagen, was eigentlich ein "Killer-Spiel"
ist.
Post by Gerald Breuer
Post by Alexander Bartolich
Post by Gerald Breuer
Das ist in der Kommunikation zwischen Computern so, aber bei
Menschen ist das nun mal nicht so und in dem Zusammenhang
Eleganz im Wörterbuch nachzuschlagen ist komplett hirnrissig.
Theologen, Juristen und Politiker sind da anderer Ansicht.
Ja, und mancher Geek.
Weder der 30jährige Krieg noch der Holocaust wurden von Geeks
begangen.
--
seq 100 | sed 's/.*/Romani Ite Domum./'
Gerald Breuer
2009-05-11 04:45:42 UTC
Permalink
Post by Alexander Bartolich
Post by Gerald Breuer
Um meine Analogie zu vervollständigen: Wenn zwei Rechner z.B. SMTP
sprechen, dann müssen beide exakt das selbe Verständnis vom Proto-
koll haben. Sowas gibt's bei der Kommunikation zwischen Menschen
selten bzw. dort gibt es i.d.R. Mehrdeutigkeiten die man abhängig
von Person und Situation i.d.R. richtig versteht.
Dann kannst du mir sicher sagen, was eigentlich ein "Killer-Spiel"
ist.
Äh, da würd ich mich auf Glatteis bewegen. Denn einerseits ist das
so wie es politisch verstanden wird einfach zu verstehen, anderer-
seits könnte man meinen ich würde das gleichermaßen werten.
Aber eigentlich tut das nix zur Sache; die Ausnahme bestätigt die
Regel und dass Du hier so abschweifst sagt mir, dass Du zu viel
Stress hast. *g*
Post by Alexander Bartolich
Post by Gerald Breuer
Ja, und mancher Geek.
Weder der 30jährige Krieg noch der Holocaust wurden von Geeks
begangen.
Klar, wenn man die Maßstäbe richtig wählt sind die nun frei
von Schuld.
Alexander Bartolich
2009-05-11 08:54:18 UTC
Permalink
Post by Gerald Breuer
Post by Alexander Bartolich
Post by Gerald Breuer
Um meine Analogie zu vervollständigen: Wenn zwei Rechner z.B. SMTP
sprechen, dann müssen beide exakt das selbe Verständnis vom Proto-
koll haben. Sowas gibt's bei der Kommunikation zwischen Menschen
selten bzw. dort gibt es i.d.R. Mehrdeutigkeiten die man abhängig
von Person und Situation i.d.R. richtig versteht.
Dann kannst du mir sicher sagen, was eigentlich ein "Killer-Spiel"
ist.
Äh, da würd ich mich auf Glatteis bewegen. Denn einerseits ist das
so wie es politisch verstanden wird einfach zu verstehen,
Die in der Diskussion genannten Beispiele fallen in die Kategorie "First
Person Shooter" (der hier zu Lande verwendete Begriff "Ego-Shooter" ist
den Angelsachsen unbekannt). Dummerweise ist das aber auch das Spiel-
prinzip des allseits beliebten "Moorhuhn". Offensichtlich sind süße,
unrealistische, den Vorgang des Tötens verharmlosende Spiele ok. Oder
doch nicht?
Post by Gerald Breuer
andererseits könnte man meinen ich würde das gleichermaßen werten.
Aber eigentlich tut das nix zur Sache; die Ausnahme bestätigt die
Regel
Du willst Ausnahmen? Wie wärs denn mit Steuerrecht, Gewerbeordnung,
Dosenpfand und der legendären europäischen Gurkenkrümmungsrichtlinie?
Post by Gerald Breuer
und dass Du hier so abschweifst sagt mir, dass Du zu viel
Stress hast. *g*
Möglich.
Post by Gerald Breuer
Post by Alexander Bartolich
Post by Gerald Breuer
Ja, und mancher Geek.
Weder der 30jährige Krieg noch der Holocaust wurden von Geeks
begangen.
Klar, wenn man die Maßstäbe richtig wählt sind die nun frei
von Schuld.
Der Auslöser der Reformation war ein Streit um die richtige Übersetzung
eines obskuren altgriechischen Textes. Und beim Holocaust gab es eine
"Rassenlehre", die sich einerseits in esoterischen Details wie der Ver-
messung von Schädelknochen oder der Klassifizierung von Menschen als
"Achteljuden" verlor, und andererseits dies zu einer Frage von Leben
und Tod machte.

Möglicherweise hat es den Geeks bisher nur an der Gelegenheit gefehlt,
sich schuldig zu machen. Aber solange Skynet nicht in Betrieb ist,
sollten die Non-Geeks mit dem Vorwurf unmenschlicher Pedanterie vor-
sichtiger umgehen.
--
seq 0 1 99 | xargs -I. echo 'Romani Ite Domum!'
Gerald Breuer
2009-05-11 09:07:23 UTC
Permalink
Post by Alexander Bartolich
Post by Gerald Breuer
Äh, da würd ich mich auf Glatteis bewegen. Denn einerseits ist das
so wie es politisch verstanden wird einfach zu verstehen,
Die in der Diskussion genannten Beispiele fallen in die Kategorie "First
Person Shooter" (der hier zu Lande verwendete Begriff "Ego-Shooter" ist
den Angelsachsen unbekannt). Dummerweise ist das aber auch das Spiel-
prinzip des allseits beliebten "Moorhuhn". Offensichtlich sind süße,
unrealistische, den Vorgang des Tötens verharmlosende Spiele ok. Oder
doch nicht?
Die ganze "Problematik" ist mie egal.
Post by Alexander Bartolich
Der Auslöser der Reformation ...
Au weia! Zu was eine einfache Bemerkung in Sachen Sprach-(Un)-Ein-
deutigkeit alles führen kann; Du solltest das behandeln lassen!.
Claus Reibenstein
2009-05-11 09:41:04 UTC
Permalink
Post by Gerald Breuer
Post by Alexander Bartolich
Der Auslöser der Reformation ...
Au weia! Zu was eine einfache Bemerkung in Sachen Sprach-(Un)-Ein-
deutigkeit alles führen kann; Du solltest das behandeln lassen!.
Kannst Du bitte mal wieder auf Normallevel runterkommen?

Gruß. Claus
Georg Bauhaus
2009-05-11 09:48:30 UTC
Permalink
Post by Gerald Breuer
Die ganze "Problematik" ist mie egal.
Post by Alexander Bartolich
Der Auslöser der Reformation ...
Au weia! Zu was eine einfache Bemerkung in Sachen Sprach-(Un)-Ein-
deutigkeit alles führen kann; Du solltest das behandeln lassen!.
(Ein typisches Beispiel einer eleganten "Lösung"? ;-)


Immerhin, Stefan Ram hat einen Hinweis geben können,
welche C-Programme er elegant findet: Wenn sie sich
durch relative Einfachheit auszeichnen. Die Bestimmung
von "einfachen C-Programmen" ist zwar nicht offensichtlich
(dazu Erich Fruehstuecks Antwort), aber immerhin
könnten sich interessierte Profis dieser Frage
annehmen, bevor sie gelangweilt abhaken...

Daher wieder beim Thema: Wann hat ein C-Profi eine
einfache Lösung gefunden, was sind deren Merkmale?
Wenn sie angegeben werden können, dann werden die
Merkmale fürs "Programmieren wie die Profis" zu einer
nachvollziehbaren (Daumen)Regel, denke ich.

Rainer hat vielleicht auch, meine ich, einen Hinweis
gegeben: Es ist eleganter (oder nur: professioneller
oder angemessener, denn es wird nichts Überflüssiges
verwendet...),
statt eines nicht weiter verwendeten Schleifenindex
einen Zeiger zu verwenden: das genügt, um mit diesem
Zeiger den Schleifenblock zu iterieren.


for (i = 0; ary[i]; ++i) ...
oder
while (*ary) ...

Dazu fand ich die Unreal-Studie sehr hilfreich:
"The Next Mainstream Programming Language:
A Game Developer’s Perspective "
besonders die Abschnitte
"Usage of integer variables in Unreal"
“For” loops in Unreal

Gerade bei Schleifen über arrays etc. reden die fans
funktionaler Sprachen ohen Unterlass von Eleganz
von map, fold, etc. (wenn auch ohne uns zu offenbaren,
was sie mit Eleganz meinen.)
Alexander Bartolich
2009-05-11 13:00:19 UTC
Permalink
Post by Georg Bauhaus
[...]
Daher wieder beim Thema: Wann hat ein C-Profi eine
einfache Lösung gefunden, was sind deren Merkmale?
Meine zwei Cent: Redundanzfreiheit.
Post by Georg Bauhaus
Wenn sie angegeben werden können, dann werden die
Merkmale fürs "Programmieren wie die Profis" zu einer
nachvollziehbaren (Daumen)Regel, denke ich.
Beziehungen zwischen Programmelementen sollten explizit dargestellt
werden.

Trivialfall: Wenn z.B. die Zahl 6 an mehreren Stelle im Code auf-
taucht, und die Änderung einer Stelle die Änderung der Änderungen
zwingend nach sich zieht, dann sollte man dafür eine gemeinsame
Definition dieser Konstanten verwenden.
Nicht mehr so trivial: Dies gilt auch für abgeleitete Werte.
Für Fortgeschrittene: Sowie für nicht offensichtliche Redundanz.
Post by Georg Bauhaus
[...]
Rainer hat vielleicht auch, meine ich, einen Hinweis
gegeben: Es ist eleganter (oder nur: professioneller
oder angemessener, denn es wird nichts Überflüssiges
verwendet...),
statt eines nicht weiter verwendeten Schleifenindex
einen Zeiger zu verwenden: das genügt, um mit diesem
Zeiger den Schleifenblock zu iterieren.
for (i = 0; ary[i]; ++i) ...
oder
while (*ary) ...
Nun, ein Vorteil dabei ist, dann man sich um den Typ von i bzw. den
Wertebereich der Indizes in ary nicht kümmern muss. Mit der Deklara-
tion von

int i;

geht der Programmierer davon aus, dass ary nicht mehr als INT_MAX
Elemente belegt. Wenn INT_MAX * sizeof(ary) größer dem Maximalwert
von size_t ist, ist das trivialerweise erfüllt. Wenn sizeof(size_t)
aber z.B. doppelt so groß wie sizeof(int) ist, gilt das aber nicht
mehr.
--
seq 0 1 99 | xargs -I. echo 'Romani Ite Domum!'
Markus Wichmann
2009-05-12 08:41:07 UTC
Permalink
Post by Alexander Bartolich
Dann kannst du mir sicher sagen, was eigentlich ein "Killer-Spiel"
ist.
Ein Spiel, das schon Menschen umgebracht hat. Demzufolge ist World of
Warcraft ein solches, denn ich kenne eine Geschichte von einem Spieler,
der beim Spielen dieses Spieles verhungert ist...

SCNR,
Markus
--
GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"
Holger Suhr
2009-05-11 16:26:12 UTC
Permalink
Post by Gerald Breuer
Post by Claus Reibenstein
Post by Gerald Breuer
Ach Gott, hätte ich gewusst, dass ich wieder Spinner
auf den Plan gerufen habe.
Gleich und Gleich gesellt sich nunmal gern ...
Was ich damit sagen wollte war im Prinzip, dass Oberflächen
-Logiker wie es Programmierer nun mal oft sind dazu neigen,
dass es eine einzige Definition für einen Begriff gibt.
Das ist in der Kommunikation zwischen Computern so, aber bei
Menschen ist das nun mal nicht so und in dem Zusammenhang
Eleganz im Wörterbuch nachzuschlagen ist komplett hirnrissig.
Wenn die Begriffsdefinitionen im Zwischenmenschlichen
so weit weg von der Definierbarkeit sind, und eine
Duden-Erklärung des Wortes keine Relevanz hat, wie
können sich Menschen dann überhaupt unterhalten?

Gruß Holger
Rainer Weikusat
2009-05-11 17:30:08 UTC
Permalink
Post by Holger Suhr
Post by Gerald Breuer
Post by Claus Reibenstein
Post by Gerald Breuer
Ach Gott, hätte ich gewusst, dass ich wieder Spinner
auf den Plan gerufen habe.
Gleich und Gleich gesellt sich nunmal gern ...
Was ich damit sagen wollte war im Prinzip, dass Oberflächen
-Logiker wie es Programmierer nun mal oft sind dazu neigen,
dass es eine einzige Definition für einen Begriff gibt.
Das ist in der Kommunikation zwischen Computern so, aber bei
Menschen ist das nun mal nicht so und in dem Zusammenhang
Eleganz im Wörterbuch nachzuschlagen ist komplett hirnrissig.
Wenn die Begriffsdefinitionen im Zwischenmenschlichen
so weit weg von der Definierbarkeit sind, und eine
Duden-Erklärung des Wortes keine Relevanz hat, wie
können sich Menschen dann überhaupt unterhalten?
Das ist ein Problem, welches sich Propagandisten, denen es
typischerweise ohnehin nur auf die Konnotation und nicht auf die
Denotation der von ihnen zweckentfremdeten Begriff ankommt, nicht
stellt.
Gerald Breuer
2009-05-11 17:43:27 UTC
Permalink
Post by Holger Suhr
Wenn die Begriffsdefinitionen im Zwischenmenschlichen
so weit weg von der Definierbarkeit sind, und eine
Duden-Erklärung des Wortes keine Relevanz hat, wie
können sich Menschen dann überhaupt unterhalten?
Tja, je "akzentuierter" ein Mensch, desto Werte-geprägter
(Wert mal als wert-freier Begriff gesehen) sind bei ihm
bestimmte Begriffe. Ich bekomm eigentlich immer recht
schnell heraus wie jemand gepolt ist und wie die Begriffe
zu interpretieren sind. IT-Leute denken/handeln oft in
festen Mustern (gibt ja sogar ne Menge zwanghafter ITler)
und denen ist sowas sicher eher ein Problem als Leuten
die in der Lage sind Personen- und Situations-abhängig
ihre Umwelt zu verstehen.
Georg Bauhaus
2009-05-11 21:54:27 UTC
Permalink
Post by Gerald Breuer
Tja, je "akzentuierter" ein Mensch, desto Werte-geprägter
(Wert mal als wert-freier Begriff gesehen) sind bei ihm
bestimmte Begriffe. Ich bekomm eigentlich immer recht
schnell heraus wie jemand gepolt ist und wie die Begriffe
zu interpretieren sind. IT-Leute denken/handeln oft in
festen Mustern (gibt ja sogar ne Menge zwanghafter ITler)
und denen ist sowas sicher eher ein Problem als Leuten
die in der Lage sind Personen- und Situations-abhängig
ihre Umwelt zu verstehen.
Dann kann ich mir die Deutungshoheit über die Situation
in d.c.l.c mal anmaßen! :-) "In diesem Zusammenhang"
erscheint der Verzicht auf *jede* Begriffsbestimmung von
Eleganz (von C-Programmen) als nicht untypische Beliebigkeit,
sehr nützlich für situatives Blendwerk, rhetorische
Hintertüren, und Argumentationen über Situationen,
nicht in Situationen (z.B. der Programmierung und und und).
Stehen zu bleiben bei Personen- und Situations-abhängiger,
nicht recht genannter Umwelteinsicht würde die Gelegenheit
versäumen, greifbare Hinweise darauf zu erhalten,
was denn unter Eleganz von C-Programmen verstanden
werden könnte. Seien die Hinweise auch wenig endgültig,
über konkrete Arbeitshypothesen von Eleganz kann man
jedenfalls besser reden, als über den Hinweis auf den
Charakter angeblicher und fixer Definitionen und
ihrer Träger.[*]

Jedenfalls dürfte es Ertragreicheres zur Eleganz von
C-Programmen geben, als metasituative Logik. (Vulgo: Butter
bei die Fische.) (Wenn überhaupt von "Eleganz" und ihrem
Beanspruchen ein Ertrag erwartet werden kann, wovon ich
in mehrerer Hinsicht überzeugt bin: Es gibt ganze
Berufe, die von Eleganz leben. Auch in Eleganz.)
Sehr wahrscheinlich werden die Hinweise auf mögliche
Bedeutung von Eleganz in C-Programmen sogar abhängig
von Personen und von Situationen sein. Man kann das aus
den Antworten in diesem thread bisher ersehen.
Ich erlaube mir, das so zu sehen:

Von Stefan: Elegant ist relative Einfachkeit und Kürze
im Vergleich mit typischen Lösungen durchschnittlicher
Erfinder. (Mit Erichs Kritik, die nach operationalen
Definitionen von Einfachheit fragt und mögliche Kriterien
nennt).

Von Erich (im Scherz?): Elegant sind die eigenen Programme,
die dem eigenen ästhetischen Empfinden entsprechen.
(Handwerkerstolz oder Narzismus?)

Von Rainer (wenn ich's aus dem Zusammenhang nehmen darf):
Wenn "dubiose" Konstrukte im Quellcode umgangen sind.

Von Alexander: Redundanzfreiheit. Beziehungen
zwischen Programmelementen sind explizit.


Mit "Material" wie diesem wird es möglich, an
einem Versuch über "Eleganz in C-Programmen"
zu arbeiten, der zu nutzbaren Ergebnissen führt,
und sei es, dass ein anderes Wort als "Eleganz"
dabei heraus kommt:
Oben offensichtlich sind unter Anderen auch weit
gehende C-Kenntnisse von Nöten, um die vorgebrachten
Hinweise auf Eleganz nachvollziehen zu können.
Ganz unausweichlich schimmern auch Personen durch
("eigen", "dubios", "durchschnittlich", ...)



___
[*]Der Duden liefert keine Definition.
Der Duden versammelt einige Hinweise auf Herkunft und
mögliche Bedeutungen des Wortes "elegant". Sie zur Kenntnis
zu nehmen bereichert das Denken, erlauben sie doch multisituative
Assoziationen. Einige der Assoziationen könnten mit
C-Programmierung in Zusammenschau gebracht werden. Es sei denn,
man lehnt ab und sich auf der Metaebene zurück.
Rainer Weikusat
2009-05-11 08:13:44 UTC
Permalink
Post by Gerald Breuer
Post by Rainer Weikusat
Post by Gerald Breuer
Wenn Du Möglichkeiten suchst ein Programm intelligent zu
strukturieren, dann nimm C++; da hast Du dank OOP und Name-
spaces viel elegantere Möglichkeiten.
'Eleganz' ist, wie alle aesthetischen Kategorien, notwendigerweise
vollkommen subjektiv, ins Deutsche uebersetzt hiesse obiges also
ungefaehr "ich finde, C++ ist viel schoener als C".
Wenn das so ist, dann ist auch strukturierte Programmierung bzw.
Programmierung in einer Hochsprache wohl reine Geschmackssache.
Fuer mich sind das zunaechst mal zwei unabhaengige Aussagen, deren
inhaltlichen Zusammenhang ich nicht verstehe.
Georg Bauhaus
2009-05-11 22:01:31 UTC
Permalink
Post by Gerald Breuer
Wenn das so ist, dann ist auch strukturierte Programmierung bzw.
Programmierung in einer Hochsprache wohl reine Geschmackssache.
Geschmack hat ganz technische Bezüge:
Man muss ihn entwickeln.
Thomas Rachel
2009-05-07 11:40:31 UTC
Permalink
Post by Gerald Breuer
Er kann auch gleich C++ programmieren; das ist oft mit weniger
Aufwand verbunden als der Fußmarsch in C.
Das ist mit vielen Sprachen so. Diese vielen Sprachen haben aber oft den
Nachteil, daß sie auf der anvisierten Zielplatttform nicht laufen...


Thomas
Rainer Weikusat
2009-05-06 07:27:25 UTC
Permalink
Post by Enrico Labedzki
Post by Martin
Post by Stefan Ram
Etwas in die von Dir angesprochene Richtung lesbarer Programme
geht: »Software engineering in C« (Springer books on
professional computing) von Peter A Darnell.
Danke fuer deine ausfuehrlich Antwort. Habe mir grade das Feedback auf
Amazon angeschaut, da hoert sich das ganze eher so an als
ob dieses Buch eine gute Einfuehrung in C bietet. Suche aber eher
sowas wie Tips und Secrets fuer C Programmer ;). Vielleicht kennt
jemand gute online Ressourcen? Es gibt einiges zu C++ und Java, mit C
alleine finde ich im google leider nicht viel!
Du kannst auch gerne C++ Bücher verwenden, den C++ ist ja nur ne
Obermenge von C ;-).
C++ ist keine Obermenge von C, es gibt lediglich eine grosse,
gemeinsame Schnittmenge.
Enrico Labedzki
2009-05-07 20:38:33 UTC
Permalink
Post by Rainer Weikusat
C++ ist keine Obermenge von C, es gibt lediglich eine grosse,
gemeinsame Schnittmenge.
So könnte man das auch betrachten!

Mfg Enrico
Markus Wichmann
2009-05-08 19:30:07 UTC
Permalink
Post by Enrico Labedzki
Post by Rainer Weikusat
C++ ist keine Obermenge von C, es gibt lediglich eine grosse,
gemeinsame Schnittmenge.
So könnte man das auch betrachten!
Mfg Enrico
Sorry, aber da ist die Mengenlehre unerbittlich: Damit C++ eine
Obermenge von C ist, müssen _alle_ Elemente von C in C++ sein. Es gibt
in standardgemäßem C++ jedoch keine stdio.h oder stdlib.h. Erstere gibt
es unter anderem Namen, bei letzterer weis ich es nicht genau. Außerdem
gibt es in C++ keine restrict-Pointer.

Wieso hat man die Sprache eigentlich "C++" getauft? Sicher erhöht C++
den Wert von C, das ist jedoch erst nach dem nächsten Sequenzpunkt zu
bemerken.

Tschö,
Markus
--
GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"
Markus Raab
2009-05-08 20:41:54 UTC
Permalink
Post by Markus Wichmann
Sorry, aber da ist die Mengenlehre unerbittlich: Damit C++ eine
Obermenge von C ist, müssen _alle_ Elemente von C in C++ sein. Es gibt
in standardgemäßem C++ jedoch keine stdio.h oder stdlib.h. Erstere gibt
es unter anderem Namen, bei letzterer weis ich es nicht genau. Außerdem
gibt es in C++ keine restrict-Pointer.
Du hast schon recht dass nicht alle Elemente von C 100% gleich in C++ sind.
<stdio.h> und <stdlib.h> existiert allerdings in C++ (siehe ISO/IEC
14882:2003(E) Annex D (normative) Compatibility features Seite 709).

Der C99 Standard hat allerdings einiges, was noch nicht im C++ Standard
vorhanden ist, dieser Umstand könnte sich allerdings mit C++0x ändern.

mfg Markus
Stefan Ram
2009-05-08 21:17:03 UTC
Permalink
Post by Markus Raab
Du hast schon recht dass nicht alle Elemente von C 100% gleich in C++ sind.
http://david.tribble.com/text/cdiffs.htm
Juergen Ilse
2009-05-08 22:24:24 UTC
Permalink
Hallo,
Post by Markus Raab
Post by Markus Wichmann
Sorry, aber da ist die Mengenlehre unerbittlich: Damit C++ eine
Obermenge von C ist, müssen _alle_ Elemente von C in C++ sein. Es gibt
in standardgemäßem C++ jedoch keine stdio.h oder stdlib.h. Erstere gibt
es unter anderem Namen, bei letzterer weis ich es nicht genau. Außerdem
gibt es in C++ keine restrict-Pointer.
Du hast schon recht dass nicht alle Elemente von C 100% gleich in C++ sind.
<stdio.h> und <stdlib.h> existiert allerdings in C++ (siehe ISO/IEC
14882:2003(E) Annex D (normative) Compatibility features Seite 709).
Ein Unterschied ist, dass die Konstante 'A' in C++ vom Typ char ist,
waehrend sie in C vom Typ int ist (aj, das ist ein deutlicher Unter-
schied, der in vielen Umgebungen auch durchaus relevant sein kann ...).
Post by Markus Raab
Der C99 Standard hat allerdings einiges, was noch nicht im C++ Standard
vorhanden ist, dieser Umstand könnte sich allerdings mit C++0x ändern.
Eine vollstaendige Kompatibilitaet wird wohl niemals erreicht werden
(ist aber auch nicht wirklich angestrebt).

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
--
Ein Domainname (auch wenn er Teil einer Mailadresse ist) ist nur ein Name,
nicht mehr und nicht weniger ...
Gerald Breuer
2009-05-08 22:27:14 UTC
Permalink
Post by Markus Wichmann
Wieso hat man die Sprache eigentlich "C++" getauft?
Damit die Pedanten sich für den Rest ihres Lebens mit dieser
Frage beschäftigen und davon abgehalten sind mit sonstigen
Pedanterien anderen auf den Sack zu gehen.
Frank Fischer
2009-05-06 07:06:35 UTC
Permalink
Post by Martin
Vielleicht kennt
jemand gute online Ressourcen? Es gibt einiges zu C++ und Java, mit C
alleine finde ich im google leider nicht viel!
Du kannst ja mal folgende Seite anschauen:

http://users.bestweb.net/~ctips/

Ich weiß nicht, ob du das unter 'Advanced' verstehst, enthält aber eine
ganze Reihe interessanter Tipps, auch mit großen C-Programmen und
den üblichen Problemen, die dort auftauchen, umzugehen
(Überprüfen von Array-Grenzen, Speicherverwaltung, Fehlersuche, ...).


Viele Grüße,
Frank
Frank Fischer
2009-05-06 07:10:25 UTC
Permalink
Post by Martin
Vielleicht kennt
jemand gute online Ressourcen? Es gibt einiges zu C++ und Java, mit C
alleine finde ich im google leider nicht viel!
Du kannst ja mal folgende Seite anschauen:

http://users.bestweb.net/~ctips/

Ich weiß nicht, ob du das unter 'Advanced' verstehst, enthält aber eine
ganze Reihe interessanter Tipps, auch mit großen C-Programmen und
den üblichen Problemen, die dort auftauchen, umzugehen
(Überprüfen von Array-Grenzen, Speicherverwaltung, Fehlersuche, ...).


Viele Grüße,
Frank
Ole Hinz
2009-05-07 18:30:37 UTC
Permalink
Post by Stefan Ram
Wenn Du »wie ein Profi« programmieren willst, mußt Du jemand
finden, der dich für Dein Programmieren bezahlt. Dann bist Du
ein Profi.
Um etwas über die Entwicklung zu lernen, hilft es aus meiner Erfahrung,
wenn man 1. "gezwungen" ist, sich mit entsprechendem Source-Code
auseinanderzusetzen und 2. eine Art "Guru" neben sich sitzen zu haben,
der genügend Erfahrung und Tricks mitbringt.
Den Punkt 1 kann man durch eine Anstellung erreichen; wenn man in einen
"Haufen" alten Code geworfen wird. Hoffentlich hat man dann den Guru
neben einen sitzen, damit man nicht durch die zigtausend Zeilen Code
erschlagen wird.

Ob man nun dabei lernt "aufgeräumten" Code zu schreiben oder vielleicht
einen nicht so gut lesbaren aber hoch-optimierten Code hängt von der Art
der Anwendung ab. (Und von den historischen Altlasten...)

Gruß
Ole Hinz
Stefan Ram
2009-05-07 18:58:38 UTC
Permalink
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Roland Damm
2009-05-07 23:34:05 UTC
Permalink
Moin,
Post by Stefan Ram
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Die Frage ist, ob mit eigenem oder mit fremdem Code.

CU Rollo
Rainer Weikusat
2009-05-08 10:49:09 UTC
Permalink
Post by Roland Damm
Post by Stefan Ram
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Die Frage ist, ob mit eigenem oder mit fremdem Code.
Das macht keinen wesentlichen Unterschied[*]: Eigener Code, den man
ein paar Jahre lang nicht gesehen hat, ist auch schon ziemlich fremd
geworden.

[*] Gewisse, qualitative Mindeststandards fuer
Quelltextformatierung vorrausgesetzt, dh keine vier
unterschiedlichen Einrueckungs- oder
Nichteinrueckungkonventionen in einer Datei.
Juergen Beisert
2009-05-08 11:11:53 UTC
Permalink
Post by Rainer Weikusat
Post by Roland Damm
Post by Stefan Ram
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Die Frage ist, ob mit eigenem oder mit fremdem Code.
Das macht keinen wesentlichen Unterschied[*]: Eigener Code, den man
ein paar Jahre lang nicht gesehen hat, ist auch schon ziemlich fremd
geworden.
LOL. Ja, bei mir langen schon manchmal ein paar Wochen und ich bin über
jeden noch so blöden Kommentar in den Quellen heilfroh, der mich (wegen
Hardwarenähe) wieder auf die richtige Spur bringt, *warum* ich etwas so
geschrieben habe und nicht anders...

jbe
Anton Müller
2009-07-05 05:43:29 UTC
Permalink
Post by Rainer Weikusat
Post by Roland Damm
Post by Stefan Ram
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Die Frage ist, ob mit eigenem oder mit fremdem Code.
Das macht keinen wesentlichen Unterschied[*]: Eigener Code, den man
ein paar Jahre lang nicht gesehen hat, ist auch schon ziemlich fremd
geworden.
Dann hat man bei der Kommentierung schlampig gearbeitet ;-)))).

... ok, als Programieranfänger steht es mir nicht zu, Profis solche
Ratschäge zu geben und ich geb auch zu, dass mir die besten Kommentare zu
einem Code auch immer dann einfallen, wenn ich irgend welche alten
Progrämmchen von mir sehe, in die ich mich neu reindenken muss. Denn *dann*
weiß ich anschließend, was ich damals an Kommentar vergessen hab und weiß,
wie ich die zu kommentieren hab, dass ich auch nach ein paar Monaten noch
weiß, was warum ich irgendwo getan hab.

mfG Anton
Claus Reibenstein
2009-07-05 11:38:06 UTC
Permalink
Post by Anton Müller
Post by Rainer Weikusat
Das macht keinen wesentlichen Unterschied[*]: Eigener Code, den man
ein paar Jahre lang nicht gesehen hat, ist auch schon ziemlich fremd
geworden.
Dann hat man bei der Kommentierung schlampig gearbeitet ;-)))).
Kommentierung soll in erster Linie dazu dienen, sich innerhalb des Codes
zurechtzufinden. Sie ist _kein_ Ersatz für eine vernünftige
Programmdokumentation. Letztere ist meist das eigentliche Problem, denn
nicht selten fällt sie aus terminlichen Gründen komplett unter den
Tisch, was sich später, wenn man dann doch noch einmal an den Code ran
muss, oft fürchterlich rächt.
Post by Anton Müller
.... ok, als Programieranfänger steht es mir nicht zu, Profis solche
Ratschäge zu geben und ich geb auch zu, dass mir die besten Kommentare zu
einem Code auch immer dann einfallen, wenn ich irgend welche alten
Progrämmchen von mir sehe, in die ich mich neu reindenken muss. Denn *dann*
weiß ich anschließend, was ich damals an Kommentar vergessen hab und weiß,
wie ich die zu kommentieren hab, dass ich auch nach ein paar Monaten noch
weiß, was warum ich irgendwo getan hab.
Du bist nicht allein :-)

Gruß. Claus
Rainer Weikusat
2009-07-05 13:35:19 UTC
Permalink
Post by Anton Müller
Post by Rainer Weikusat
Post by Roland Damm
Post by Stefan Ram
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Die Frage ist, ob mit eigenem oder mit fremdem Code.
Das macht keinen wesentlichen Unterschied[*]: Eigener Code, den man
ein paar Jahre lang nicht gesehen hat, ist auch schon ziemlich fremd
geworden.
Dann hat man bei der Kommentierung schlampig gearbeitet ;-)))).
Wenn man Algorithmen sinnvoller in Deutsch (oder Englisch) beschreiben
koennte, als in einer Programmiersprache, dann gaebe es keine.
Post by Anton Müller
... ok, als Programieranfänger steht es mir nicht zu, Profis solche
Ratschäge zu geben und ich geb auch zu, dass mir die besten Kommentare zu
einem Code auch immer dann einfallen, wenn ich irgend welche alten
Progrämmchen von mir sehe, in die ich mich neu reindenken muss. Denn *dann*
weiß ich anschließend, was ich damals an Kommentar vergessen hab und weiß,
wie ich die zu kommentieren hab, dass ich auch nach ein paar Monaten noch
weiß, was warum ich irgendwo getan hab.
Ein intelligenter Mensch hat mal gemeint, dass man Code, der so
kompliziert sei, dass er einen Kommentar als Erlaeuterung zwingend
braeuchte, eher geeignet vereinfachen als kommentieren sollte. Es gibt
Faelle, in denen das wirklich nicht geht, zB bei workarounds fuer
Fehler in anderer Software und da ist eine ausdrueckliche
Dokumentierung sehr nuetzlich. Aber

/* increment i */
i++;

dokumentiert nur des Verfassers mangelnde Kenntnis der benutzen
Sprache. Und darueber will man im allgemeinen nicht auch noch mehr
wissen :->.
Markus Wichmann
2009-07-05 17:47:40 UTC
Permalink
Post by Rainer Weikusat
Wenn man Algorithmen sinnvoller in Deutsch (oder Englisch) beschreiben
koennte, als in einer Programmiersprache, dann gaebe es keine.
Gausscher Algorithmus ist in Deutsch schneller beschrieben als in C.
Dafür ist er in C genauer. Euklidischer Algorithmus dito. Bogosort geht
in Deutsch sowohl schneller als auch genauer als in C.

Der Witz an der Sache ist, dass Programmiersprachen einfach genug sind,
dass man sie Maschinen verständlich machen kann, gleichzeitig aber
komplex genug, um menschliche Gedankengänge abbilden zu können.
Post by Rainer Weikusat
Ein intelligenter Mensch hat mal gemeint, dass man Code, der so
kompliziert sei, dass er einen Kommentar als Erlaeuterung zwingend
braeuchte, eher geeignet vereinfachen als kommentieren sollte. Es gibt
Faelle, in denen das wirklich nicht geht, zB bei workarounds fuer
Fehler in anderer Software und da ist eine ausdrueckliche
Dokumentierung sehr nuetzlich. Aber
/* increment i */
i++;
dokumentiert nur des Verfassers mangelnde Kenntnis der benutzen
Sprache. Und darueber will man im allgemeinen nicht auch noch mehr
wissen :->.
Wie wäre es mit den nicht offensichtlichen Gedanken? Mit den Gedanken
dahinter? Anders: Mit dem Grund für diesen Code? Ein Beispiel aus dem
POSIX-Bereich: Ich möchte vier verschiedene Kommandos ausführen und alle
per Pipe zusammenbinden. Das erste Kommando soll seine Eingabe aus einer
Datei holen, das letzte soll seine Ausgabe an stdout geben. Dazwischen
sind wie gesagt die Pipes. Die Pipes sollen vor dem großen Forken
erstellt werden. Das ist zwar einfacher als die Pipes während des
Forkens zu erstellen, bedingt aber, dass ich die Pipes in jedem
Kindprozess einzeln schließen muss. Problem an der Sache ist nur, dass
ja genau zwei Pipe-FDs offen bleiben müssen: Einer zum Lesen und einer
zum Schreiben. (pipes[j][0] ist die Lese-Seite, pipes[j][1] die
Schreibseite) Und genau da liegt der Hase im Pfeffer:

//...
int pipes[3][2];
static char* comms[][] = {
{ "tr", "-c", ... },
{ "sort" },
//restliche Kommandos
};
//Eingabedatei öffnen und nach stdin legen
//Pfade der Kommandos rausfinden
//Pipes erstellen
for (unsigned int i = 0; i < 4; i++)
{
//...
for (unsigned int j = 0; j < 3; j++)
{
if (j != i - 1)
close(pipes[j][0]);

if (j != i)
close(pipes[j][1]);
}
if (i > 0)
{
close(0);
dup2(pipes[i-1][0], 0);
}
if (i < 3)
{
close(1);
dup2(pipes[i][1], 1);
}
//execv ausführen
}

So, der Code ist auf das Wesentliche zusammen gestrichen. Nun die Frage:
Was macht die j-Zählschleife?

Ohne Kommentar muss man jetzt erstmal herausarbeiten, dass diese
Zählschleife nur pipes[i-1][0] und pipes[i][1] offen lässt und alle
anderen Elemente von pipes schließt. Aber warum gerade die beiden? Weil
jedes der Kommandos aus pipes[i-1][0] ließt und nach pipes[i][1]
schreibt. Aber das muss man erst mal herausfinden. Und dann stellt sich
ja noch die Randwertfrage: Was passiert denn beim ersten Kommando? Da
wird die Eingabe vom Elternprozess vererbt. Und beim letzten? Dito mit
der Ausgabe. Ebenfalls Gedanken, die man sich erstmal machen muss. Und
die sich zu machen man sich sparen könnte, brächte man sie zu
Papier^WPlatte.

Tschö,
Markus
--
GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"
Rainer Weikusat
2009-07-07 12:13:56 UTC
Permalink
Post by Markus Wichmann
Post by Rainer Weikusat
Wenn man Algorithmen sinnvoller in Deutsch (oder Englisch) beschreiben
koennte, als in einer Programmiersprache, dann gaebe es keine.
Gausscher Algorithmus ist in Deutsch schneller beschrieben als in C.
Dafür ist er in C genauer.
Zum einen hast Du den bestimmt nicht 'in Deutsch' beschrieben, sondern
bestenfalls ein paar 'ad hoc'-Flusskontrollkonstrukte zu der
mathematischen Beschreibung hinzugefuegt. Dann spricht man in einer
Diskussion ueber 'Programmcodeverstaendlichkeit' natuerlich von
Dingen, wie man sie in einem Programm vorfindet, dh nicht von
(technisch vollkommen obsoleten) Berechnungsvorschriften fuer
$sonstwas unter der Annahme, das ein 'Computer', also 'Berechner',
zwangslaeufig ein Mensch sein muesste. Fuer den konkreten Fall hiesse
das, eine Implementierung des Gauss'schen Algorithmus in einem
Programm mit einer natuerlichen Sprache in der gebotenen Exaktheit
besser beschreiben zu koennen, als das in einer Programmiersprache
ginge. Das faellt von vorneherein schon deswegen flach, weil die
natuerliche Sprache ueberhaupt keine Kontrollstrukturen
unterstuetzt. Typischerweise hilft man sich dann mit einer
BASIC-artigen Notation dafuer, dh numerierte Zeilen, deren
Zeilennummern Sprungmarken sein koennen. Das ist nicht 'das bessere
Verfahren' (obwohl es immer gerne mal wieder neuerfunden wird, =>
udev) wie auch seit einiger Zeit als bekannt gelten kann. Schliesslich
ist das 'genauer' (wie bereits angedeutet) ein Euphemismus dafuer,
dass das beschriebene Verfahren unzureichend ist und deswegen
sinnvoller Interpretation durch einen intelligenten Leser/ Anwender
bedarf.
Post by Markus Wichmann
Post by Rainer Weikusat
Ein intelligenter Mensch hat mal gemeint, dass man Code, der so
kompliziert sei, dass er einen Kommentar als Erlaeuterung zwingend
braeuchte, eher geeignet vereinfachen als kommentieren sollte. Es gibt
Faelle, in denen das wirklich nicht geht, zB bei workarounds fuer
Fehler in anderer Software und da ist eine ausdrueckliche
Dokumentierung sehr nuetzlich. Aber
/* increment i */
i++;
dokumentiert nur des Verfassers mangelnde Kenntnis der benutzen
Sprache. Und darueber will man im allgemeinen nicht auch noch mehr
wissen :->.
Wie wäre es mit den nicht offensichtlichen Gedanken? Mit den Gedanken
dahinter? Anders: Mit dem Grund für diesen Code? Ein Beispiel aus dem
POSIX-Bereich: Ich möchte vier verschiedene Kommandos ausführen und alle
per Pipe zusammenbinden. Das erste Kommando soll seine Eingabe aus einer
Datei holen, das letzte soll seine Ausgabe an stdout geben. Dazwischen
sind wie gesagt die Pipes. Die Pipes sollen vor dem großen Forken
erstellt werden. Das ist zwar einfacher als die Pipes während des
Forkens zu erstellen, bedingt aber, dass ich die Pipes in jedem
Kindprozess einzeln schließen muss.
[...]

,----
| Ein intelligenter Mensch hat mal gemeint, dass man Code, der so
| kompliziert sei, dass er einen Kommentar als Erlaeuterung zwingend
| braeuchte, eher geeignet vereinfachen als kommentieren sollte.
`----

In diesem Fall wuerde ich allerdings einen Kommentar, der mir 'den
Gedanken dahinter' ueberzeugend dalegt, erwarten. In Abwesenheit
dessen (und die uebliche Beschreibung der Mechanik ist nicht ihre
Rechtfertigung), naehme ich mir die Freiheit, davon auszugehen, dass
der Autor des Codes wohl Matsch im Hirn hatte und diese Stelle 'bei
Gelegenheit' ersetzt werden sollte (was, fuer den Fall eines Fehlers,
durchaus 'sofort' sein koennte).

Georg Bauhaus
2009-05-08 07:57:28 UTC
Permalink
Post by Stefan Ram
Post by Ole Hinz
Um etwas über die Entwicklung zu lernen, hilft es aus meiner
Erfahrung, wenn man 1. "gezwungen" ist, sich mit entsprechendem
Source-Code auseinanderzusetzen
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Damit sind wir gewissermaßen bei der Ausgangsfrage:

Wo gibt es Quellcode, von dessen Studium man etwas Gutes
lernt? Wodurch zeichnet sich im Gegenteil Quellcode aus,
der besser so nicht geschrieben worden wäre? Und in
welchem C-Buch steht so etwas?
Elmar Sack
2009-05-09 06:30:08 UTC
Permalink
[source code]
Wo gibt es Quellcode, von dessen Studium man etwas Gutes
lernt? Wodurch zeichnet sich im Gegenteil Quellcode aus,
der besser so nicht geschrieben worden wäre? Und in
welchem C-Buch steht so etwas?
"Code Quality", Diomidis Spinellis, Addison Wesley.

Beinhaltet eine Menge Beispiele guter und weniger guter S/W. Es gibt - nicht
nur von diesem Autor - auch andere gute Bücher.
Ole Hinz
2009-05-10 16:43:02 UTC
Permalink
Post by Stefan Ram
Die richtigen Programmierer, sind die Leute, die man
zwingen müßte, sich mit etwas anderem auseinanderzusetzen
als mit Source-Code.
Gut, dass ich kein "richtiger Programmierer" bin. (Ich nenne mich ja
auch Softwareentwickler und nicht Programmierer... :-))
Dafür bietet das Leben zu viele tolle Möglichkeiten neben dem Computer
und außerdem steht beruflich mehr die Problemlösung im Vordergrund und
nicht nur die Programmierung.

Jedenfalls hat es mir geholfen, dass ich mit einem "Berg" von altem mehr
oder weniger tollen Code konfrontiert wurde, meinen eigenen Stil zu
entwickeln. Und wenn ich jetzt in die Teile schaue, die ich selber
geschrieben habe, dann ist ein Merkmal, dass ich auch nach über einem
Jahr sofort verstehe, was der Code macht.
Allerdings ist er nicht in allen belangen Laufzeit- oder
Speicherplatzoptimiert. Für mich steht der Aspekt der Verständlichkeit
fast immer im Vordergrund und nur, wenn ich weiß, dass ein Teil der
Software zu langsam ist, optimiere ich.

Im übrigen fand ich z.B. "Code Craft" von Goodlife ein lesenswertes Buch.

Gruß
Ole Hinz
Thomas Rachel
2009-05-08 12:00:50 UTC
Permalink
Post by Stefan Ram
Wenn Du »wie ein Profi« programmieren willst, mußt Du jemand
finden, der dich für Dein Programmieren bezahlt. Dann bist Du
ein Profi.
Eben, das ist eine Schritte weiter.

Un zu programmieren wie ein Profi, reicht es aus, so gut programmieren
zu können, wie einer da Geld damit verdient. Das tatsächliche
Geldverdienen ist davon unabhängig; deswegen heißt es ja "wie ein Profi"
und nicht "als Profi".


Thomas
Rainer Weikusat
2009-05-14 14:56:00 UTC
Permalink
Post by Thomas Rachel
Post by Stefan Ram
Wenn Du »wie ein Profi« programmieren willst, mußt Du jemand
finden, der dich für Dein Programmieren bezahlt. Dann bist Du
ein Profi.
Eben, das ist eine Schritte weiter.
Un zu programmieren wie ein Profi, reicht es aus, so gut programmieren
zu können, wie einer da Geld damit verdient.
Das heisst jetzt allerdings ziemlich exakt gar nichts. Zwangslaeufig
muss jemand, der 'Geld damit verdient', wenigstens dann und wann mal
Code schreiben, der wenigstens im wesentlichem das tut, was er sowohl
nach Ansicht des Autors als auch nach Ansicht desjenigen, der ihn
dafuer bezahlt, tun sollte. Weiter nichts.
Lesen Sie weiter auf narkive:
Loading...