Hacker News Comments on
Learn C the Hard Way: Practical Exercises on the Computational Subjects You Keep Avoiding (Like C) (Zed Shaw's Hard Way Series)
Hacker News Stories and CommentsAll the comments and stories posted to Hacker News that reference this book.
⬐ kasabali⬐ jacobolus⬐ sabootThis critique is completely incoherent. I read the first half, and I still have no idea what the author’s point is.
Most of it seems to be pedantic complaints stemming from the author’s overly literal interpretation and incomprehension of Zed’s sometimes ironic writing style.⬐ youngtaffThe reviewer fails to understand Zed's approach to teaching…
His approach is that new developers need to get something that works so the reward of it working is motivating before you explain how/why it works to them.
Based on my experiences with my kids I think it's a perfectly valid approach - an led that turns on motivates them to understand why it turns on.⬐ yarrelAuthor writes review criticising book for misleading readers.
Adds later note inline to explain that he really does know what he's talking about, and any accusations that he doesn't are either pedantic or comprehensively challenged.
Fails to reflect on how this may relate to the subject of the review.⬐ cushychickenThis guy encloses about 3 valid criticisms (the one about makefiles foremost among them) in a huge, dogmatic screed of nitpicks that he just assumes people will read and think "he's wrong he's wrong he's WRONG" about Zed.⬐ pan69I think the article of this author is pedantic. The articles written by Shaw will show how to create programs with a specific language such as C, Ruby or Python and the C version is, of course, no substitute for the K&R book.
The K&R book tells you all the ins and outs of the C language. The Shaw article gives you a practical way to build a program with the C language.
I would assume that an experienced programmer, such as the writer of this article seems the be, would understand this.Is there a table of contents anywhere? I remember wishing he finished the "Let's Make a Virtual Machine" section at the end of the html preview of this book. It was never updated which was disappointing as it sounded really interesting.⬐ comexOf course this comment thread is (judging by the comments so far) going to be mostly about whether Zed Shaw criticizing old fashioned C is right or not or whether the criticizers are right or whatever. Oi... against my better judgement, I'm going to call out a few relatively objectively objectionable points in the book (which are still there, as opposed to the removed K&R chapter):
- He repeatedly states that processing an invalid C string can loop infinitely, but it can't - except in extremely rare cases on exotic systems, which seem to be the exact opposite of what he's going for. In reality it will always crash (unless being exploited by an active attacker!). The hentenaar.com post already notes this, but this instance of him being objectively wrong is buried among a huge number of more stylistic and debatable points.
The error is not a big deal, since neither looping infinitely nor crashing is desirable, but I can't help but think it demonstrates the author's lack of experience in what he's supposed to be teaching.
- Also wrong: "The source of almost all bugs in C come from forgetting to have enough space, or forgetting to put a '\0' at the end of a string." Forgetting to null terminate is a newbie mistake. A claim that almost everything that can be incorrect about a C program comes from a buffer overflow seems obviously spurious, so I'll give the benefit of the doubt and assume he's referring to security problems. In that case, some bugs involve straight buffer overflows, but a good fraction of real-life security bugs involve other things like integer overflows and use-after-free.
Also not exactly a big deal - perfectly sufficient to worry about overflows just because they account for many bugs, rather than almost all - but it seems myopic with respect to real world code.
- "In fact it's so common and hard to get right that the majority of good C code just doesn't use C style strings." I guess it's technically subjective what counts as "good", but most C codebases use C strings to some extent, so this is pretty misleading.
As one example, OpenSSH, despite being very carefully written code that uses a safe buffer API for the low level protocol manipulation, also uses C strings all over the place. As another, Linux is generally considered reasonably high quality, and it makes no effort to avoid C strings. I think you'd have a hard time making a long list of well-known C programs that do use alternative string libraries exclusively. (Note: this has no bearing on whether or not doing so is a good idea.)
- "In C, there's not really a 'boolean' type" - there has been since 1999; a lot of code doesn't use it, but since this is aimed at modern C, are you really not even going to mention it?
- Type Conversion section doesn't mention (or incorrectly describes, I can't tell which) the "integer promotions"; these are an awful feature and relying on them is awful, but a manual for how implicit conversions are done shouldn't have an incorrect algorithm!⬐ comex⬐ coldteaSmall correction to self: when I said "always crash" I meant if it doesn't stop itself by finding a zero byte that happen to be in memory; the exception is a rather obscure exploit scenario where an attacker takes control before you get to that point. But the most common case is of course that it finds a zero which happens to be within a few bytes of the end of the buffer, because zeroes are common.
Point is, it won't infinite loop.⬐ cushychickenThis is way more coherent than Hentenaar's screed; thanks for posting it, I've always had a hard time understanding the points articulated against LCTHW.
I think all of the points you've mentioned are correct - Zed's said some stuff that isn't to-the-letter accurate. I guess the reason people get up in arms (wrongly, IMO) about pointing these things out is the worry that these details he got wrong will obscure the bigger picture of his work. I think it's a pretty silly thing to freak out about; Zed's taken a programming language that's frequently seen as daunting and difficult to learn and made it fairly accessible for a new/newish programmer. So what if he missed or misinterpreted a few finer points?
I guess that's why Zed Shaw comment threads end in flame wars on HN - half of the people are pissed at what they view as attempts to besmirch their teacher, and the other half are watching the first half get up in arms about what's essentially a code review and thinking "Jesus, you must be shitty programmers because of how personally you're taking this".
Just my opinion. Mileage may vary. :)>Let me start by saying that unlike Mr. Shaw, I am not a writer. I'm an engineer.
Such BS ad-hominen are not really need. As for the review, the first 12 paragraphs are empty blathering, and then we have empty criticisms that misunderstand the whole logic of the book. For example:
>So, finally printf() gets introduced. The author fails, in my opinion to explain what it actually does. This has the reader using format strings before even explaining (even briefly) what a format string is. This has become a repetitive theme in this book, and if I were a novice, I'd find it very confusing.
The whole idea of the book is that you learn by doing and repeatition first (like a kid does when learning to speak), and then you're told the concepts and details.⬐ mateuszbIt's not ad-hominem BS.
http://zedshaw.com/about/ "I am Zed A. Shaw and I write for fun and profit."
That is he is a writer, in a world where logic and reasoning applies.⬐ explosion⬐ JadeNBIs there any reason why one can't be both a writer and engineer simultaneously?⬐ wyclifI don't think he meant that the "I am not a writer" part was BS (obviously Zed is a writer; the OP is a link to his book), but rather that this is posturing instead of an argument.I'm sorry for a stupid question, but from where are you quoting? As of 19:53 on 2015 April 22, the link seems to be to an Amazon page for Shaw's book, with no customer reviews.⬐ sciurus⬐ andrewstuartThey are quoting from http://hentenaar.com/dont-learn-c-the-wrong-wayAlso, Zed Shaw isn't just "a writer", he's known for writing some really fine applications.
⬐ DonGateleyAll you need is K&R, honest.
C is a very simple language. I learned it from K&R in the '80s in an office in a building in a corn field on a back road halfway between Rockford, Il and Belvidire, Il. I went on to hire and assist eight others in acquiring it and then employed them to write, along with myself, a successful machine tool controller of serious sophistication employing a three way tightly coupled Mot 68010 MP system (using bus fault recovery to resolve address collisions) of my design. Not bragging, really, just being dramatic about what you can accomplish starting with just K&R.⬐ nzp⬐ ryanobjcDo note that Zed actually discusses in this book (at least in the online version) why it might not be the best idea to learn C from K&R today. His basic argument, IIRC, is that the examples in K&R are very bad when it comes to writing modern C. Sure, you'll learn the language in a formal sense, but K&R is hardly going to prepare you for the reality of C programming.⬐ DonGateley⬐ DonGateleyI'm curious what reality he considers missing from K&R.⬐ nzp"Reality" was my word, I tried to condense the essence of his argument. That chapter is online and as far as I see, only the "deconstructing" exercises part is missing. I've read it some time ago, so I'm not sure anymore if I would agree with everything he said because I don't remember every argument (but I don't feel competent enough about C to strongly comment either way anyway), but what he says in "Overall Critique Of Correctness" seems pretty reasonable.I'd like to add that this was not only before the public Internet but almost before the PC. :-)⬐ rhizome31Your statement assumes that one already has access to a copy of K&R. For those who don't, there's no reason not to start with a cheaper, more recent book.⬐ danieldkExcept that there are so many K&R copies floating around that it's easy to get a cheap second-hand copy. E.g. my local Amazon (.de) sells copies starting at 15 Euro.
K&R is really the definitive C book.I find the C backlash to the excesses of C++ fascinating.
On the flip side, I wonder how people deal with 'programming in the large' with C - other than 'just be really really careful'⬐ ninjin⬐ shadowmint> I find the C backlash to the excesses of C++ fascinating.
I whole-heartedly agree. Something that blew my mind back in undergraduate school was tree.h by Niels Provos,  which is a complete key/value-type agnostic Red-black Tree  in a single header file. Just recently when re-learning C I stumbled upon klib  which has a similar take on generic programming by "abusing" the preprocessor.
If I am allowed to side-track, I found "C The Hard Way" to be a good resource when re-learning C. I also had a lot of fun with "Expert C Programming", although it is a bit dated. I highly recommend it once you have a grasp of the language basics. I have heard good things about "21st Century C", but I am still wondering what other good resources there are out there.⬐ NoneNone⬐ noselasdYou don't always need preprocessor tricks to generate a special purpose red-black tree, you can use an intrusive variant like this: http://cgit.osmocom.org/libosmocore/tree/include/osmocom/cor.... This works together with the container_of macro: http://stackoverflow.com/questions/15832301/understanding-co...
In similar spirit, the linked list variant: http://cgit.osmocom.org/libosmocore/tree/include/osmocom/cor..., though the macros in sys/queue.h are also useful for linked lists.For better or worse an alpha copy of the sort of content for the book is here, for people who might want to find out a bit more about what the style/content/etc. is like, before getting the final book:⬐ ProAm⬐ ldonleySuch a good read, I wish he'd use line numbers in his code syntax blocks. Its so hard to read and re-reference without them. For those who cant see well it helps a lot, and most modern IDEs/text editors line number for you as well.⬐ saraid216That's odd, since in Learn Python, he pretty specifically goes out of his way to make sure the student enables line numbers... specifically for these reasons.Always happy to see another Zed Shaw book, especially after seeing how nice and helpful he is to others on HN. If this is anything like Learn Python the Hard Way then you should definitely check it out if you are trying to learn C.⬐ chatmasta⬐ doktrinFunny how his timing works...⬐ lampingtonOh come on, seriously? He's a fantastic coder, a great educator and a decent guy in what he does. Sure, he's abrasive and runs people up the wrong way. But let's not read stuff into timing.Excellent. There are relatively few books I'm tempted to pick up in paperback, but this would be on my short list (despite having worked through most of the material available online ~6 months ago).⬐ donatzskySlightly OT:
Can anyone recommend something similar for Java (Android specifically)? The tutorials I have found so far seem to assume I'm either a complete imbecile or have a CS degree.⬐ rquantzThis is exciting. I've been waiting to see how he filled out the later chapters for a while now, and presumably this means they're done, or at least will be by May. I want to see that tiny virtual machine get built!⬐ lobo_tuertoHope he publishes somewhere an .epub version of them (all his books).⬐ alexpopescuI haven't read any of Zed's book and Amazon doesn't have a decent number of reviews, so I was wondering if someone could provide the shortest "why should I get this book"
thanks⬐ cenhyperion⬐ akulberead the version he provides freely online and see if you like it: http://c.learncodethehardway.org/book/
I learned to write python (and program) through Learn Python the Hard Way.Ordered. Looking forward to this.⬐ siversFull-view (non-mobile) Amazon link: http://www.amazon.com/dp/0321884922