In the Matter of Herb Schildt: an Analysis of “C: the Complete Nonsense”

Let’s now deconstruct Peter Seebach’s document “C: the Complete Nonsense”, an attack on Herb Schildt’s first edition of “C: the Complete Reference” which in becoming the sole source of subsequent claims that Schildt wrote “bad books”, which unfairly damaged his good name. Let’s examine it, line by line.

Note that the Amazon link to Schildt is not to the third edition reviewed by Seebach. However, Seebach has failed to update “C: the Complete Nonsense” to reflect fixes to errata, which is itself indicative the malice which makes libel, actionable. He does not even identify the edition he’s analyzing, and at various times, he has changed the online document without any audit trail. He and his friends nonetheless claim that this document is “valuable” consumer information. It is not anything of the sort for this reason alone, and as we’ll see.

Note that the above paragraph was changed when I learned from Seebach on clc that he’s now talking about the third edition, which is out of print. He has a nasty habit of lying online and then laughing as people waste their time and intellect on unsnarling his lies. This habit is one of the characteristics of incompetent programmers.

“C: The Complete Reference is a popular programming book, marred only by the fact that it is largely tripe. Herbert Schildt has a knack for clear, readable text, describing a language subtly but quite definitely different from C.”

In fact, there was more than one C at the time “C: the Complete Reference” and “C: the Complete Nonsense” were written and published (circa 1995), and there remain more than one despite the C99 “standard”. This is because the standard was high jacked by vendors who did not want to change compilers, since this would mean rehiring expensive compiler developers. As a result, the standard left significant parts of C undefined.

For example, because in the “old days” it was easiest for simple “one pass” compilers (compilers which read the source text once) to emit instructions to place the actual parameters of a subroutine call on the stack, you could not expect a(b=0, b) to work like you’d expect it to in a modern language. Other compilers were able to provide the expected left to right evaluation. They were supporting different languages neither with a solid claim to being the lingua franca except to that sort of amateur folk linguist who knows only his own language, and demonstrates for an “English only” society. Seebach seems to be this unpleasant type of person with regards to his favorite languages.

Seebach wanted Schildt to describe the C that Seebach knew.

In addition, Peter Seebach has a knack for unclarity, in his solecism “clear, readable text”. A careful writer would look up the meaning of clarity in the dictionary, and finding that it means contributing to understanding, would qualify “clarity” as “apparent”.

“This page aims to give people a good way to find out what’s wrong with it.”

…as opposed to letting readers figure that out, as if a book were a restaurant. This is what Theodore Adorno calls the “culinary” approach; an only apparently democratic but actually autocratic mode in which the prospective consumer is warned off a book as if the very possibility of critical reading has been erased; in a programming book, trying out code with typos and fixing it.

Furthermore, the document is about the first edition only and has not been updated, which means that it is egregiously poor as any sort of guide to people who want to buy Schildt’s fourth edition; because the market “liked” Schildt, he’s gone to four editions.

“Don’t bother contacting the publisher; they apparently don’t feel these errors are significant.”

We have learned from Seebach himself on comp.lang.c and comp.lang.c.moderated that he contacted McGraw-Hill, and that McGraw Hill actually offered him a temporary tech review job but they failed to offer him enough money for his tastes. And as we shall see, the errors are not that significant.

“The following is a partial list [1] of the errors I am aware of [2], sorted by page number. I am not including everything [3]; just many [4] of them.”

[1] Contradicts “currently known” below. Like Seebach’s solecism in the use of “clear”, which means understandable and providing a clear view of the truth, his slop-English allows him to lie to himself and others. “Currently known” means in the absence of further qualification, “these are all the known errors”.

[2] Implies that there are n errors and the list lists m<n. But what are they? We have no idea.

[3] Why not?

[4] When he says "I am missing several hundred errors", this could mean that Seebach wants people to join in a deliberate campaign to destroy Herbert Schildt's reputation (which is civilly liable, that is, libel) or that he somehow has determined that there are M~=~1000 errors, but he presents N=20. But in this context, N is not "many".

"I am missing several hundred errors [5]. Please write me if you think you know of any I'm missing. [6] Please also write if you believe one of these corrections is inadequate or wrong; I'd love to see it."

[5] This is a very disturbing statement, as above. Did he lose them? Did he forget them? Or did he seek to form a cybernetic mob and gang up on Herb Schildt?

[6] Very disturbing. Peter currently on comp.lang.c has a track record of posting awful code as if he’s seeking assistance. Here, he seems to be Open Sourcing, an Open Season, on Schildt’s reputation.

"Currently known:"

Followed by only 20 errors! So how many are there? Dozens? Hundreds? 20? Nobody knows. But here goes…

Page 19

Schildt: “In general, negative numbers are represented using the two’s complement approach…”

Seebach: “This is not a C feature. It is a common implementation, but it is specifically not required. (Binary is, but one’s complement is not unheard of.)”

Negative numbers are not ALWAYS represented in twos complement notation: but this is what the head of department said in my graduate level class on computer architecture, that in general twos complement is used. This was so students could understand error dumps.

Page 33

Seebach: “The following heading occurs: static Global Variables: no such thing. A static variable outside of a function has file scope, which is distinct from global scope.”

The important distinction in computer science is between variables which are static and have global scope, and variables which are allocated either at procedure startup or in blocks depending on the language, and have local scope.

It is more important to learn this in general for all programming languages so that one can learn new languages. However, Seebach has boasted, in comp.lang.c, that he has not taken a single computer science class, at the undergraduate or graduate level. Herb Schildt has a Master’s in computer science.

p. 53

printf("%f", sizeof f);
printf("%d", sizeof(int));

Seebach: “Clearly wrong; sizeof is not a double or float. It is also not an int; it is an unsigned integral type, thus, one of unsigned char, unsigned short,unsigned int, or unsigned long.”

“The only safe way to do this is: printf(“%lu”, (unsigned long) sizeof(int)); while this is larger, a clear explanation of why it is required will go a long way towards helping people understand C.”

Although I do not know why Herb used %f and %d format codes, he did know, as Seebach seems not to, that all ints are floats and all floats are doubles in well-structured languages. Because at the time and even, to an extent, now, C was almost as diverse of the languages of China, Herb used the educated programmer’s maxim, which is to first code as if the compiler writers and language designers knew at least as much as the intelligent programmer, and fix problems later.

p. 53

“Seebach: The following code:

/* Write 6 integers to a disk file. */
void put_rec(int rec[6], FILE *fp)
{
int len;

len = fwrite(rec, sizeof rec, 1, fp);
if (len != 1) printf("write error");
}

is described as causing all of rec to be written, no matter what size of array is being used.”

“Incorrect. As correctly noted elsewhere, when “int rec[6]” is an argument to a function, it actually specifies a pointer-to-int, not an array[6]-of-int. sizeof rec is sizeof(int *) here, and this code works only if sizeof(int *) is precisely 6 times sizeof(int). (Not impossible, but hardly likely.)”

“Further, who said fp was a disk file? fp could be stdout. (An admitted nit.)”

The put_rec code was errata. Peter has said on comp.lang.c that McGraw Hill offered him the chance to work collegially with Herb to fix errata; he refused, he has said, because they didn’t offer enough money. Because Schildt’s books were successful, he’s gone to several editions, and has fixed most of the errata.

Page 59

Schildt: “This shorthand works for all the binary operators.”

Seebach: “No, it doesn’t. It doesn’t work for ‘.’, ‘->’, ‘&&’, or ‘||’. For that matter, it doesn’t work for the function call operator or the array operator, both of which are, roughly, binary operators.

In college lectures which Seebach confesses he did not attend, “binary operators” often is a verbal shorthand for “the commonly known binary arithmetic operators, with logic operators being treated separately”.

The problem here is that adolescents fantasize that there can be unambiguous language, whereas in what Jurgen Habermas, the German “critical theorist” calls “civil discourse”, a common and grown-up search for truth from which competition for gain is excluded, there occurs a constant search among all participants, not only for substantive consensus on a truth, but also for support for that common consensus in the form of a common language, whose micro-rules vary in a language game…what Wittgenstein said was a form of life, as well.

Put more simply, for the same reason we can use a noun as a verb in “let me email you the email” and be understood perfectly, the human brain, as opposed to a computer, has an unparalleled ability to parse and reparse holistically and rapidly, while searching, not for the most advantageous parse to the owner of the brain, but for the best fit.

Therefore, in a college classroom, a teacher like Herb, who has just introduced the arithmetical binary operators, and who plans to address logical and other binary operators later, is understood by normal, and attentive students.

However, Peter Seebach has said on comp.lang.c that he is “attention disordered”. This would give him rights of charity save for the fact that he on that forum has called people he doesn’t like “morons” and “insane”, using a language which even Sarah Palin, of all people, correctly recognizes as discriminatory and abusive.

Here, Peter, for personal advantage (in fact, I believe, to dishonestly establish himself to be a clever programmer despite his lack of academic background in computer science or any evidence of programming competence in code swatches he has posted this year on comp.lang.c) interrupts the flow of civil discourse in a virtual classroom and is the bane, in fact of computer instructors: the student with a chip on his shoulder who wants to show off his “knowledge”.

Page 63

Seebach: “If scanf fails, the variable guess is referenced before it has been initialized; accessing an uninitialized object introduces undefined behavior.”

Errata. Seebach was invited to work collegially on the sort of errata which creeps into computer books when the publishers don’t allow the authors post-PDF control, and he refused. Most of these errors were fixed in subsequent editions.

Page 131

Schildt: “Memory allocated by C’s dynamic allocation functions is obtained from the heap — the region of free memory that lies between your program and its permanent storage area and the stack.”

Seebach: “C does not specify that there is a stack – only that functions can call each other. The “heap” is a DOS term, and the layout is not a part of the C language. It is not atypical for the layout to be radically different, and certainly, there is no call for describing a specific choice as ‘what happens’.”

Seebach lays an egg. Like a like a Maoist student during the Cultural Revolution, he leaps up to admonish the teacher not to talk about stacks as if it’s even possible to implement C’s runtime, or any language runtime, without stacks.

He then surpasses this, and says “the ‘heap’ is a DOS term”. The “heap” is most definitely not a DOS term: Seebach is ignorant of OO languages which formalize a heap…and a stack. Here is where Seebach’s lack of education is most obvious.

It is formally impossible, in fact, to implement a runtime with support for recursive procedures (supported by all C compilers and runtimes since day one) without a stack, that is, a LIFO data structure. It is painfully possible to go without a stack, and save and return general registers in work areas provided by the caller; this was done on the IBM 360 in BAL in my direct experience. But it does not work if a procedure calls itself directly or indirectly. Some sort of LIFO stack, implemented in an unspecified way, is needed.

The only reason why the C99 standard document fails to use the word “stack” that I can imagine is a long-standing American prejudice against the stack, which surfaced both in the design of the IBM/360 (whose designers knew about stacks, probably, but used general registers instead) and much later in the RISC kiddie’s hatred of stacks.

Page 132

Schildt: “After the assignment, p points to the first 1000 bytes of free memory.”

Seebach: “No, p points to at least 1000 bytes of allocated space, which is not free memory. There is also no reason to assume it was the ‘first’ 1000 bytes; top-down allocation is not atypical, and further, there’s no reason to assume this code fragment runs in isolation.”

Schildt like most good writers, tries to be conversational in presenting difficult material. “Free” was a minor solecism.

But, far more perniciously, Seebach actually equates negative claims with positive claims and often prefers, whether writing about Schildt or C standards, the negative claim as being not only true, but also easier to defend because harder to disprove by men of good will.

Seebach has blogged in public, circa 2000, his preference for George Bush. He, like most former Bush supporters, has disclaimed further support. Nonetheless, his support for Bush is interesting, because for Bush’s henchman Karl Rove (a college dropout who like Seebach considers himself a genius autodidact), it was only necessary to claim that Saddam Hussein, in 2003, had weapons of mass destruction, and let the (huge) antiwar movement try to “prove a negative”.

Therefore here and elsewhere, Seebach would “teach” C in a faux-Zen way, beating students who conclude from the behavior of anyone compiler and runtime that “C” works “this” way. To him, their knowledge is Sophistry, but as an “expert” his is the larger Sophistry. This is his false belief that C has been “standardized” by negative truths to wit that various behaviors (order of evaluation of actual parameters, when pre and post increment operators are evaluated) when a language standard must actually be useful and therefore, deterministic.

Schildt is like a competent high school geometry teacher who uses a specific triangle with a specific metric to demonstrate the Pythagorean theorem. Seebach, who isn’t paying attention and may be autistic, is interrupting the class to ask whether the nonzero width of the chalk marks should be accounted for.

This would be an intelligent question…in an “advanced” class. But in computer science, there are no “advanced” classes in being a language lawyer, since (1) being a language lawyer doesn’t help much in problem solving for the most part and (2) Seebach is in a language where, even after standardization and in the standard itself, the “law” is “unspecified” in too many places.

Page 162

Seebach: “Functions are not of type void; functions are of various types, called collectively the function types. A function may have a return of type void, which means that its type is something like ‘function taking (…) and returning void’.”

Mr. Snoid is lost in the void. Herb knows very well that to return “void” is to return nothing and not return anything. Syntactically, in a way the student needs to know, the type of a void function is “void”.

Both Seebach and Schildt are using reifying language, treating our ideas about what electrons do in a computer as things. Peter would renarrate the void function as returning something named “void”, which does not exist, and Schildt’s language is better, since void functions are something of a special [syntactical] type, which is not returned.

Page 163

Schildt: “You may also declare main() as void if it does not return a value.”

Seebach: “Specifically untrue. ANSI mandates two declarations for main, and says that main may have declarations compatible with those. Both return int.”

C was not standardized at the time this book was written, it existed in several different dialects. In fact, I discovered (on behalf, as it happens, of John “A Beautiful Mind” Nash) that the Microsoft compiler, which many of Schildt’s readers were using, is nonstandard at least as regards the evaluation of compile-time constant expressions. While it has become a Shibboleth or Secret Handshake among non-Microsoft Illuminati that you must declare main as int, it’s actually better style to make it void unless you have an important message, such as “up yours!” to the OS.

But this shibboleth has become an article of faith amongst the anti-Microsoft crowd who compensate for the meaninglessness of their lives and general incompetence by fantasizing that they are Special, and the OS gives a hoot.

Page 197

Seebach: “It is redundant to give a size of char in bytes as 1 as an “assumption” – it’s the definition, sizeof() gives the size in *chars*.”

Shibboleth. And here, Peter Seebach is here critiquing writing as a technical editor when he gave evidence in the prologue above that he can’t write with charity, clarity (the clarity of truth), coherence or consistency.

Page 247

Seebach: “The stream fp is opened with mode “r”, the mode to open a text file. Then, fseek is called on fp, with the 2nd argument not a value returned by a previous call to ftell.”

“ANSI 7.9.9.2: For a text stream, either offset shall be zero, or offset shall be a value returned by an earlier call to the ftell function on the same stream and whence shall be SEEK_SET.”

“In other words, this is blatantly invalid.”

Genuine errata of the sort to be expected under deadline pressure. Pompous and exhibitionist quotation from a standard doesn’t change this.

Page 253

Schildt: “In most implementations, the operation fails if the file specified in the open statement does not exist on the disk.”

Seebach: “To the best of my knowledge, POSIX (the standard for the open() call) documents and requires the functionality of the O_CREAT flag.”

But, the operation fails if the file does not exist on the disk. Seebach’s point is “I’m real smart”.

Page 283

Schildt’s code:

#include string.h // corner chars deleted to format

char s1[] = "hello ";
char s2[] = "there.";

void main(void)
{
int p;
p = strcat(s1, s2);
}

Seebach: “It is correctly noted that this generates a warning. Not mentioned is that it’s invalid; although s1[] is a modifiable array, it is an array large enough to hold “hello ” (and the terminating null byte), so it has room for 7 bytes. The strcat overflows the array, producing undefined behavior.”

“(And, of course, the declaration of main is invalid.)”

Genuine errata. Seebach is not doing so good. Only 2/14 at this point.

Page 284

Seebach: “All of the header files are listed in capitals; the standard specifies them in lower case. It is not required that a C compiler reject all-caps, but nor is it required that it accept them.”

“But nor is it required”? A completely illiterate grammatical solecism. How dare does Seebach pretend to be a tech editor? He was offered a job finding errors. He found a few.

And furthermore, C should reject all-caps: it would do so if it were a truly consistent language. But it as a real language in practice it allows them because of Microsoft’s market power.

Page 314

Schildt: “However, since EOF is a valid integer value, you must use feof() to check for end-of-file when working with binary files.”

Seebach: “Not merely a little bit untrue, but utterly wrong, and specifically missing the point of the rule (correctly stated) about returning the char as ‘unsigned char converted to int’ (actually stated in the standard in 7.9.7.1, under fgetc()).”

“Since EOF is a negative integral constant, it can never compare equal to any unsigned char. When you are reading from a binary file, the values you get willnever compare equal to EOF, until getchar() returns EOF because the file is empty.”

“This correlates with a mistake made in all of the examples where loops break on ‘$’, ‘A’, or ‘ ‘ because the return from getchar() is immediately put into a char variable.”
“This is a more serious flaw than many, because it results in poorly written, inefficient code.”

“(Couple this with the consistent attempts to use feof() to see if the next read will fail, when in fact feof() only returns true when the previous read failed, and you get a completely wrong description of the standard I/O library.)”

“Also, several of the programs given loop forever if an end of file is reached, because EOF is not checked for in a loop.”

“(The astute reader will note that he is correct for implementations in which char and int are the same size; I disregard this because: This violates the spirit, if not the letter, of the standard. The implementation he is discussing does not have this problem.”

“In such an environment, the “correct” thing to do is probably to use fread and check for failure. feof() will still not warn you that your next read will fail.)”

Probably Herb’s most serious error, but of the sort which creeps into most computer books, including Seebach’s Apress title as he admits. Software books disclaim warranty protection for the consumer in the same way software warranties make this disclaimer.

Page 333

Seebach: “After

char str[80];

sprintf(str,"%s %d %c", "one", 2, 3);

it is asserted that str will contain ‘one 2 3’. This is incorrect; it would contain “one 2 ^C”. (That’s ‘control C’ in ASCII, or a character with the value 3)”

Errata. And grandstanding.

Page 348

Schildt: “This program checks each character read from stdin and reports all uppercase letters:”.

Seebach: “He is wrong.”

#include ctype.h // corner chars deleted to format
#include stdio.h

void main(void)
{
char ch;

for (;;) {
ch = getchar();
if(ch == ' ') break;
if(isupper(ch)) printf("%c is uppercase\n", ch);
}
}

“The code works only if there are no uppercase letters following the first space in the standard input stream; further, a file consisting only of the word ‘hello’ will prevent this horribly broken code from terminating – because it doesn’t check for EOF, only for a space.”

“Once again, even a slight clue about EOF would help a lot here.”

Errata. Most of Seebach’s points about EOF handling are valid, but what’s broken is the way C, whether “standardized” or not, handles EOF.

Constant is the tendency to make an inferential leap from error to ignorance, and from special to general ignorance. It is adolescent.

Page 434

Schildt: “free() must only be called with a pointer that was previously allocated with one of the dynamic allocation system’s functions (either malloc(), realloc(), or calloc()).”

Seebach: “Also specifically untrue. ANSI states that free(NULL) is valid and has no effect. (Also note that it must be called with a pointer to space previously allocated, not with a pointer previously allocated, and that the pointer must not have been already freed or passed to realloc().)”

There is no sensible use for free(NULL) save in code generation with the preprocessor or other tool: this fact is obscure and shouldn’t be presented at this point. The latter part of Seebach’s comment is again a Maoist attempt to prove that he’s smarter than the teacher. Herb is giving advice that is practical and true which if followed, works.

Page 735

Seebach: “This is spectacularly wrong; the ‘corrected’ “

x = *p * (*p++);

“is EXACTLY equivalent in terms of C; as correctly noted earlier, the order of evaluation IS NOT SPECIFIED.”

“The code is still invalid (p is used to determine *p on the left of the *, as well as modified on the right), and the parentheses aren’t affecting the code at all.”

“In this code, p can be incremented anywhere in the line; the only requirement would be that the value of (*p++) be the same as the value of (*p) before the increment. It is not specified whether the other *p happens before or after the increment.”

“In fact, because the code modifies an object (p) and uses the value of the object to do something other than determine the new value (The first “*p”), it is invalid. Completely; a compiler is allowed to reject the code, and many will produce surprising results from this operation.”

“This is not merely wrong, it’s wrong while discussing the problem, which is doubly bad.”

The order of evaluation is indeed specified in the variant behavior of C compilers, whose writers, as mere programmers, were given no guidance by the standard.

This was because C standardization occured after the “Reagan Revolution” empowered private companies and computer thugs to use the public good for private gain. In the C99 standard, Job One seems to have been not making vendors rehire compiler developers so that their stock price was maintained. The standard is useless to mere programmers, who are considered serfs today.

At this point in “C: the Complete Nonsense”, Peter Seebach has identified only 5 errata, of the sort that exist in all books unless the publisher allows the authors to use a system to avoid errata. And yet he writes at the end:

“There are dozens of others, and I’m sure there’s an effective drinking game lurking in this book.”

In other words, Seebach Open Sources here an Open Season on Schildt based on his malice. This is civilly actionable libel.

Seebach needs to remove this document, which is “hit” by Google higher than Schildt’s book’s fourth edition, which dishonestly misdescribes the current edition, and which is the source, as far as I can determine, of all subsequent attacks on Schildt’s output. He needs to replace it by an apology to Herb.

Seebach appears to me stuck at the level of the vicious adolescent. In “You Are Not A Gadget”, Jaron Lanier (a musician, computer scientist, and philosopher) writes that what he calls “drive-by anonymity”, the marshalling of an assault on a Chosen target by anonymous posters can indeed scale up, from the personal anguish caused Herb and his family when his name was transformed, based exclusively on “C: the Complete Nonsense” to “Bullschildt”, to the death threats received by Java author Kathy Sierra, to the “tea party” attacks on Obama…and beyond.

But, you may say, Seebach is not anonymous. Lanier, in fact, misses the social structure of enabling. In the case of Sierra, named, non-anonymous bloggers at the defunct site http://www.meankids.org started in on Sierra. This enabled anonymous bloggers in the same way anonymous commenters say the most broad and overgeneralized things about all of Schildt’s books, based on “C: the Complete Nonsense” and documents which cite CTCN directly or indirectly, the “paper trail” seeming to ignorant people a vast amount of real evidence.

Hitler was not anonymous; but his followers were, in many cases. And Mike Godwin is wrong; the probability of comparision to Hitler in online discussions “converges to unity” not because people are being shrill and foolish, but because Hitler is our inner troll, as Lanier calls it. He’s the face in the crowd in Munich in August 1914 baying for war who yearns to be on the podium, and non-anonymous.

Actually I should have been able to deduce Fascism from the memory of my childhood. It sent its emissaries there in advance, like a conqueror into the most distant province, long before it arrived: my school comrades. If the bourgeois class harbored since time immemorial the dream of the wild popular community, the oppression of all by all, then children with first names like Horst and Jürgen and last names like Bergenroth, Bojunga and Eckhardt, theatrically staged the dream, before the adults were historically ripe enough to realize it. I felt the violence of the image of horror they were striving for so clearly, that all happiness afterwards seemed to be revocable and borrowed. The outbreak of the Third Reich did indeed surprise my political judgment, yet not my fearful premonitions. So closely had all the motifs of the permanent catastrophe brushed against me, so inextinguishably were the warning signs of the German awakening burned into me, that I recognized each one all over again in the features of the Hitler dictatorship: and often it appeared to my foolish horror, as if the total state had been invented solely against me, in order to inflict on me what I had been hitherto spared in my childhood, that state’s prehistory. The five patriots who attacked a single schoolmate, beat him up and, when he complained to the teacher, defamed him as a classroom snitch – aren’t they the same ones, who tortured prisoners, in order to prove the foreigners wrong, who said that torture was occurring? Whose hullaboo knew no end, when the smartest student made a mistake – didn’t they surround the Jewish camp prisoner, grinning and embarrassed, making fun of him, after he all too clumsily sought to hang himself? Who couldn’t write a single decent sentence, but found every one of mine too long – didn’t they abolish German literature and replace it through their scribing [Schrifttum]? Many covered their chests with mysterious insignia and wanted to become naval officers in a landlocked country: they declared themselves leaders of storm troopers and detachments, the legitimizers of illegitimation. The involuted intelligent ones, who had as little success in class as the gifted tinkerer without connections under liberalism; who for that reason curried favor with their parents with woodsaw work, or indeed drew for their own pleasure on drawing-boards with colored inks during long afternoon days, helped the Third Reich to its cruel efficiency and are being betrayed once again. Those however who always defiantly stirred up trouble against the teacher and, as one called it, disturbed the lesson, the day – indeed, the hour – they graduated from high school, they sat down with the same teachers at the same table with the same beer, as a confederation of men, who were born followers, rebels, whose impatient blows of the fist on the table already drummed the worship of the masters. They need only stay put, to catch up with those who were promoted to the next class, and revenge themselves on them. Since they, officials and candidates for death sentences, have stepped visibly out of my dreams and have expropriated my past life and my language, I don’t need to dream of them any longer. In Fascism, the nightmare of childhood has realized itself.

Theodore Wiesengrund Adorno, Minima Moralia, 1948

Advertisements

15 Responses to “In the Matter of Herb Schildt: an Analysis of “C: the Complete Nonsense””

  1. spinoza1111 Says:

    I shall of course myself post my own “errata” to Seebach’s errata. This isn’t an infinite process because discrete errata converge to zero.

    p. 53: Herb’s code IS wrong: C won’t convert the value to an integer and this won’t appear properly as %f format. As I say above, Herb’s book, produced as commercial product with disclaimer of warranty, has errors in them as does Seebach’s Apress title.

    This still means that only 6/20 of the Seebach “errors” are errors and that the maximum number is 20 according to Seebach himself.

    Furthermore, Seebach is here on trial, and not Schildt. The question is whether “C: the Complete Nonsense” is a worthy-enough document to be cited in such a way as to damage a reputation, and it clearly is not.

  2. “Seebach’s document … the sole source of subsequent claims that Schildt wrote “bad books””

    Sole source???

    http://accu.org/index.php?module=bookreviews&func=search&stype=author&q=schildt

    11 results where author contains ‘schildt’ :

    C/C++ Programmer’s Reference 2ed. by Herbert Schildt
    C: The Complete Reference 4ed by Herbert Schildt
    C++ from the Ground Up by Herbert Schildt – Not recommended
    C++ from the Ground Up (2nd ed) by Herbert Schildt – Not recommended
    C/C++ Programmer’s Reference by Herbert Schildt – Not recommended
    Expert C++ by Herbert Schildt – Not recommended
    Java Programmers Reference by Herbert Schildt&Joe O’Neil – Not recommended
    MFC Programming from the GROUND UP 2nd Ed by Herbert Schildt – Not recommended
    STL Programming from the Ground Up by Herbert Schildt – Not recommended
    Teach Yourself C++ 3ed by Herbert Schildt – Not recommended
    Windows NT 4 Programming from the Ground Up by Herbert Schildt – Not recommended

    • spinoza1111 Says:

      These reviews appear to me to be all “drive by shootings” motivated by the fact that Schildt was targeted by Seebach back in 1996. It became a fashion statement to find “errors” in Schildt, since Schildt refused to focus on unix or Linux.

      In all cases they find fault with errors, but in Seebach’s case we find that in his own practice, Seebach makes far worse errors. I suspect that this is also the case with these authors since to my knowledge, the basic problems of software reliability haven’t been solved, which makes practitioners hypersensitive about errors.

      In real offices, the usual practice is to excuse one’s own errors by claiming that “management wants this delivered fast and dirty” or that the errors are de minimis, while the errors of others, including Schildt, are generalized into the claim that the other guy is globally incompetent.

      Furthermore, these plebiscites, where a small number of posts or reviews are selected, are meaningless because selective and gerrymandered.

      Herb is a generalist who’s been successful purveying an elementary understanding of what are, even when presented “precisely” facts about what society does, not part of science. Since any truly competent practitioner can in principle redefine C (for example, as did Bjarne Stroustrup, who used C itself in the form of a preprocessor to create a different language’s first implementation), we need not treat its shibboleths with a respect best reserved for religion.

  3. You haven’t shown that everyone who did a negative review was “motivated by” Seebach, you just assert it, without knowing any of the people involved.

    “a small number of posts or reviews are selected”

    The selection was EVERY review of a book by Schildt. As it happens, most were negative.
    If you have links to reviews that are positive, please share them. It’s hard to believe that every reviewer was following Seebach’s lead. Is he some kind of Charles Manson? Why are you (apparently) the only person who will go on record as praising Schildt?

  4. spinoza1111 Says:

    I’m not praising Schildt.

    Friends, Romans, Countrymen, lend me your ears:
    I come to bury Caesar, not to praise him:
    The euill that men do, liues after them,
    The good is oft enterred with their bones,
    So let it be with Caesar.

    I’m saying that the number of posters have all been influenced by a small set of posts all of which originate in “C: the Complete Nonsense”. This is shown by the fact that it pops up for “Schildt” on a Google search at the top; Google searching is driven by number of hits.

    Furthermore, all posters act in the same way. Deaf to clarity and not knowing themselves how to teach, they act as if Schildt was supposed to write a reference manual for them and not introductory material for others.

  5. “I’m saying that the number of posters have all been influenced by a small set of posts all of which originate in “C: the Complete Nonsense”.”

    You keep saying that.
    None of the other reviewers used their own judgement, none of them has their own opinion.
    This must be a very powerful document to have caused everyone who reads it to believe it implicitly, except fortunately you.

    And correlation is not causation. Because people have linked to an article does not mean they were inspired by it, it means they thought it was relevant. And obviously it is, as you have written 10 times as much as the original document in discussing it. You have probably done more to raise its pagerank than anyone.

    Rather than quoting Shakespeare, how about quoting a qualified reviewer (not some random Amazon poster). That would convince more than Mark Antony.

  6. spinoza1111 Says:

    Well, yes. Most programmers are untrained in critical thinking and tend to be conformists. Paradoxically, this was shown as younger programmers in the 1970s, were permitted to depart from IBM-style dress codes. Instead of expressing a variety of personal styles, younger programmers all wound up looking like Abba or the BeeGees.

    Unix was supposed to be a revolutionary OS with which programmers would “fight the power” of IBM. However, Linux, instead of being any sort of real advance over unix, essentially cloned it and became a new orthodoxy in the service of none other than IBM, if anything a far more uncaring corporation than Microsoft; at least Ballmer is a human being as well as a human wrecking ball.

    The result is that programmers fallen under the corporate spell will act alike at a distance. Unable in fact to master complexity, they’ll scapegoat.

    Shakespeare helps us understand rhetoric, and that Brutus’ logic is insufficient because Brutus destroyed a Republic. I’ve analyzed the case against Schildt extensively here and on comp.lang.c from a straight technical point of view, showing (for example) that void main() violates the expectations of compilers only as regards “hosted” applications, and furthermore that the Standard was a standard only for compiler developers, not intended to be read or understood by ordinary programmers. Furthermore, I’ve shown that the Standard is crap and malfeasance because in order to protect vendors, it failed to define C’s semantics.

    Any reviewer who doesn’t understand this has no standing.

  7. “Any reviewer who doesn’t understand this has no standing.”

    It seems you are the only person in the world who does understand this.
    Congratulations.

  8. spinoza1111 Says:

    Actually, replacing “in the world” by “in or near the MOB”, you’re absolutely right. A cybernetic mob was created by Seebach’s post and it’s been raging ever since. I’m “crazy” because I don’t join the mob.

  9. spinoza1111 Says:

    Look at the 1940s crime scene photograph above. That’s what you are. You get your rocks off watching someone’s reputation being trashed. Your type made me sick growing up, seeing those twisted faces, and you make me sick now. Welcome to my spam queue.

  10. Nilges, just what do you think you will achieve in your continual attempts to vandalise the Schildt Wikipedia page?

    You keep deleting stuff and inserting your rants. It’s very tiresome.

    Isn’t it obvious that several people have a watch on the page so they will get an alert every time you try to fuck it up, and then revert you in two clicks.

    You’re not convincing anyone by your usual “convenience store clerks/Nazis” etc, etc rants, you just make yourself look like a complete loon.

    What you’ve achieved so far: 1) Motivated Seebach to write a longer and more detailed excoriation of Schildt’s book. 2) Gotten yourself blocked from editing Wikipedia by being an obnoxious twat. 3) Made yourself a laughing stock in comp.lang.c.

    What an achievement!

    Of course you won’t publish this, no problem. Have a nice day cocksucker.

    • spinoza1111 Says:

      Hey, thanks, pal. Thanks for an excellent example of how this shit plays out.

      Someone attacks a person in the name of some lifeless crap, be the lifeless crap the Idea of the German *Volk*, some corporation, some stupid encyclopedia, or some clone of unix. He does so in the quasi-educated tones of an Alfred Rosenberg or Peter Seebach.

      This becomes “you cocksucker” as the anonymous beer hall thugs pile in to do the dirty work in hopes of getting noticed by Adolf or Jimbo.

      That’s how it works. That’s what happened to Kathy Sierra and Herb Schildt.

      Thanks for an illustration in prose of the stupid, hate-filled, staring faces of the crime scene photograph.

      Fascism is the nightmare of the return to childhood and the oppression of all by all.

  11. wikiwaki Says:

    Which anonymous beer hall thug said “Using expletives is a VICTIMLESS action”?

    http://groups.google.com/group/comp.lang.c/msg/a996fd7b596ac0bd
    From: spinoza1111
    Date: Fri, 26 Feb 2010 07:08:18 -0800 (PST)
    Local: Fri, Feb 26 2010 11:08 pm
    Subject: Re: usage of size_t

    No, I don’t think he does. And as far as I’m fucking concerned,
    asshole, the time for a good, solid motherfucking expletive est
    arrive, since ten fucking years of trying to make you behave with
    common decency have not changed your cunt character. Using expletives
    is a VICTIMLESS action, whereas your constant attacks on reputations
    and good names here, based on a series of temp jobs and a pathetic
    book, has damaged people and wasted our time.

    • spinoza1111 Says:

      Depends on what you mean, asshole. “Fuck you” means “why don’t you lighten up”. Whereas you’re clearly making threats and stalking.

      You see, you’re defending…a bad encyclopedia. I’m defending a person’s reputation. This means there’s no moral equivalence, because people are more important than machines, operating systems and bad encyclopedias.

  12. wikiwaki Says:

    “This means there’s no moral equivalence, because people are more important than machines, operating systems and bad encyclopedias.”

    So when you call Heathfield and Seebach (and Wales, and me and… anyone who disagrees with you) “cunts”, “motherfuckers”, “assholes”, as well as “vicious”, “dishonest” etc, etc, it’s okay, because they’re not “people”.

    Because in your worldview, no one is human except you.

    Well, time to move on. The only talent you have is being a world class troll*, and I was foolish to rise to your bait.

    *And fuck you and your “Lanier-Troll” bullshit. You’re a troll in the sense everyone online understands it.
    http://catb.org/jargon/html/T/troll.html

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: