Not always, but often.
However, this has a corollary: It is *useful* to be literal-minded when
dealing with the computer.
This is only partially correct. Some people do in fact learn from formal
definitions.
That said, I agree. People mostly learn from explanations -- which is why
it's extremely important that the explanations be right, because a
persuasive-sounding explanation which is wrong will be extremely hard for
the reader to later correct.
All very true. However, you're missing something.
We don't let non-teachers tell teachers what or how to teach in
general, and when we do, the results are about half the time pretty
bad.
If Dennis Ritchie or Brian Kernighan had written an anti-Schildt rant
we would take it seriously because both have a combination of
verifiable academic qualifications and industrial experience to rank
them ABOVE Schildt.
Likewise, why do you suppose academic journals "peer review" by
sending submissions to faculty at prestigious universities?
Why do you suppose tenure decisions are not made by university
administrators or state assembly members except in cases of political
interference?
Sure, the instructional content of K-12 teachers is monitored pretty
closely for political and scholastic reasons in the USA, but part of
this monitoring is political.
You are in fact not a real programmer by your own admission, but some
sort of bug finder who may indeed program very good tools for your own
use and the use of your group, and you have no academic certification
in computer science. Whereas Herb was both employed as a programmer
and completed an MSCS.
You have confirmed this when you foolishly mis-represented Michael L.
Scott, the author of Programming Language Pragmatics as writing about C
++ on p. 111 of that book when he was writing about C, and you said on
two occasions that he was also wrong to speak of Forbidden Things,
such as "the" stack...when you haven't shown us how to implement C
runtime without a stack, and when this would involve disproving Noam
Chomsky's typology of languages, and Hopcroft and Ullman's typology of
automata.
Yet you were the source of a rumor campaign which has seriously
damaged Schildt because of the Internet in which (1) it is hard to
determine whether information is credible unless it originates at
a .edu site and (2) the ease of reproduction of a single claim makes n
claims seem quickly to be n times a tens power of actual facts.
Your errata was rejected by technical people at McGraw Hill yet to my
knowledge you have NOT ONCE sought confirmation of your claims by
having them reviewed by a real C programmer with academic
qualifications, writing experience, and knowledge of both Microsoft
and unix-based technology.
As a result you harmed a man's reputation.
It's time to apologize and withdraw "C: the Complete Nonsense".
Agreed. However, Schildt's problems are not "skating over details".
Let me give you an example of "skating over details for pedagogical
purposes". I'm afraid it's from a shell book, 'cuz that's what I had
handy.
If you try to assign a value including spaces to a variable,
you will discover that the shell splits the line into words before
trying to assign variables. Thus, this doesn't work:
$ name = John Smith
sh: Smith: command not found
$ echo hello, $name
hello,
A brief explanation of what went wrong follows in the next section;
a full explanation of what went wrong is found in Chapter 3. For now,
the key lesson is that the assignment doesn't work, and you need a way
to prevent the shell from splitting words.
That's how you "skate over details". The reader is warned that there's
more lurking, but is given a workable first approximation.
This approach doesn't work in the business world. Of course, the
business world sucks since it's based on systematic inequality.
Nonetheless, programmers confronted with a new language don't want to
hear that "I will explain all this later since right now you swine are
too stupid to get it".
Instead, they want a working model which they can examine.
This working model, as an Aristotelean instantiation of a Platonic
idea, will have any number of aporias. However, REAL programmers
understand that life sucks and only approximates the Platonic for the
same reason that I figured out that Sherman's Programming and Coding
Digital Computers was describing a single-address fixed word length
machine, but that not all machines need conform to this model.
Any given time-slice of a classroom on a video or in a transcript will
consist of stops and starts and half-truths.
An autistic-Platonic teacher, that refuses to speak unless he's
speaking "the truth" is a bore, and a damned fool, because learning
STARTS in stories with partial, at times almost mythological truth.
Haven't you ever taken calculus? Most of Calculus 101 is bullshit from
the standpoint of modern mathematics, and students struggle with the
material.
Their "flash of insight" is often a CRITICAL flash of insight where
they realize that what the teacher said was under some interpretation
WRONG. The real teacher, like Wittgenstein, knows
6.54 My propositions are elucidatory in this way: he who understands
me
finally recognizes them as senseless, when he has climbed out through
them, on them, over them. (He must so to speak throw away the ladder,
after he has climbed up on it.) He must transcend these propositions,
and then he will see the world aright.
"But professor Schildt told us that the stack grows toward the heap
and the heap grows down to the stack! You've got it backwards! Your
code won't work!"
"Don't be an ass. The POINT is that the stack and the heap are of
varying size with no apriori bound, dipshit, whereas the size of the
compiled code is fixed. Therefore, the IMPORTANT point is that the
stack and the heap have to occupy what's left over when my program is
given a fixed amount of memory on startup, a quantum which is not
modified in our OS."
Should "professor" Schildt have said this? Not if it's going to
confuse the class.
You think, autistically, that there's something out there called the
"truth" and it's to be found in data systems. But ultimately, "the
truth" is ethical. It's what contributes to human survival and human
flourishing, not, in the last analysis, to the "correctness" of
computer code, half of which is bullshit computer games, one quarter
of which could be thrown away, and one quarter of which gets people
killed as part of advanced high-tech weaponry used for shits and
giggles in places like Gaza.
Less often in books than in production code, because books are aimed at
teaching people how to do things.
"Those who can't do, teach" goes the saw. But I'd add that those who
can't teach should not teach the teacher, although teaching (and
jailing, and shooting) teachers is a favorite hobby world-wide of
Fascists, Taliban, and it seems autistic twerps who simply did not
have the chops to criticise Herb, and need to apologize.
I don't think this is the case. None of your categories cover the
sizeof(rec) example. The error is not trivial at all -- the code will
absolutely not work as described on any system currently in existence.
And, crucially, it's *not* just a bug in the code -- it's a bug in
the explanation given. The explanation, which is the crucial part that
the reader will be learning from, is more wrong than the code.
Had you focused on the genuine errors, where errors exist in most
large computer books with code examples, your errata would have been
accepted. What was unacceptable for you to speak without recognizable
incompetence of Schildt in general.
Similarly, Schildt doesn't "skate over details" -- he gives details which
are incorrect or only correct in some specific contexts, without any hint
at all that he's describing something that may not be universal.
You're confusing computer science and programming language training
here.