Skimming through the first chapters of the book I can say it doesn't seem to assume any prior knowledge of C or even a background in programming, it explains all the basic concepts (conditionals, types etc...)
That being said I'm not entirely convinced that implementing a programming language is the best toy project for learning C since one of the first things you have to write is a parser and we all know string handling in C is a pity.
That being said it looks very interesting, I know C quite well but I might read it for the "implementing lisp" parts.
Author here. Actually a parser combinator library is used for the parsing. As you mention, I think there should be some interesting things inside for people with any experience in C.
I've only just had a quick scan through, but it looks thorough and well-paced; there are examples, exercises and useful looking pull-outs. Anecdotally, It definitely looks worthwhile for a self-teaching beginner and going in the "implementing your own LISP" direction is an interesting approach.
I also did a scan of the book; it seems pretty good!
However, if you're serious about learning C then I strongly recommend getting the K&R book [0]. It's short and quickly gets down to business --- the first chapter alone gives you a condensed but working overview of the language as a whole.
Even experienced C programmers seem to keep the book around as it's good as a reference as well.
I strongly recommend people to learn C. It's a small, beautiful and very powerful language and the lingua franca for language ABIs. In fact, many popular dynamic languages are implemented in C (Python, Ruby, Lua and countless others).
Or King's C Programming: A Modern Approach, which lacks the conciseness (and affordability) of K&R but is probably the best single text out there, and unlike K&R is updated through C99.
In fact, this one (implementing Lispy thing, I mean) seems the best to me so far. Why? Paradoxically, because it's so obviously incomplete, so it makes you search something by yourself while you read it and helps to actually understand a little bit more.
Both K&R and "Modern Approach" lack that word "Modern" very much, yet are written with undertone "it's everything you have to know about C", when it isn't. Person who doesn't know C very likely doesn't know how OS works, what architecture layers are behind the software he uses every day. He just knows somehow he wants to learn C, but doesn't really understand what C is, yet he knows that virtually everything is written in C, and "everything" usually doesn't run in terminal, but processes and produces sound, images, video, can have GUI, use some external devices, run in parallel, run on GPU. Also, it's pretty obvious (especially if you've used some language like Python already) that nobody writes everything from scratch these days, but there're many libraries that proved to be useful.
And stuff like branching and cycles seems to be pretty obvious even for somebody without coding experience, as far as I can judge from what I've seen so far. Yet we have plenty books that spends 20 pages to explain "if" keyword and mentions every function in standard library (why?! it's 2014, people, we have cplusplus.com now!)and covers nothing in sense of what useful libraries are out there, what are these domains where you still should use C today (because feet to meter converter shouldn't be written in C today and you probably should choose Python if there's no specific reason to use C), what tools to use for testing and debugging and such.
And while it can be justified for K&R (jeez, how old is that book!) it's just ridiculous that book that has "Modern" (well, it was 2008, but still…) in it's title covers almost nothing of what person who wants to program in C should know today. Worse, you'll see that only after reading these 800+ pages.
"C the Hard Way" is a little bit better, but still not as good as this one. This one also isn't perfect, but is the best of what I've seen so far.
I was one of the beta readers. The book makes quite a different trade off from most other beginner C books. Most other books follow the K&R model of short examples and a lot of detail on the topic in question, while Build your own Lisp is just one project. So you actually see how the parts fit together.
I would think that either way you can learn C. Which way is better for you depends if you are more motivated by going through one long project, or if you prefer to have many small ones.
Admittedly, while I'm interested to look at this book, it really looks to me like you should come in with at least a basic knowledge of C. The book appears to hold your hand through most of what goes on to create a basic Lisp-like language, but it really jumps fairly quickly over the basic C stuff at the beginning so you can get to the coding. That may actually be fine for you if you already have a basic C knowledge though.
> it really jumps fairly quickly over the basic C stuff at the beginning
In fact, for me it seems to be the best thing about this book. It mentions everything you need to hear once to be able to use search engine and clarify anything you don't understand. So help yourself! You don't know syntax of "switch" statement? Google it (or duckduckgo, or whatever)! You don't know how to use printf? You've been shown the way to cplusplus.com already, take your time and find out everything you want to know about that function. Then come back for a new piece of information to think about.
The only two things I guess are missing is "make" (I'd mention it from the start to help everybody save some time, with gdb and valgrind) and a little bit more information about pointers from the very beginning, because searching for help about "free" function will be no good if you don't know about stack/heap allocations.
Like others, I would suggest K&R. Perhaps after that, Lourdon's "Mastering algorithms with C". I've found that structuring any program around well understood datastructures and keeping it KISS after that takes you a very long way. Also applies to C. Like others have commented, stylistically the code in the linked book is perhaps not the best place to learn the best conventions for C. But! Writing an interpreter gives a huge kick and reading other peoples code is always nice.
For real world projects, it's not a bad idea to implement your own memory manager (even if it's only a wrapper for malloc and free). For real world interpreters Lua (www.lua.org) is written in C, is quite widely used and is not too large - if interpreters are your interest. If you are into lisps Structure and Interpretation of Computer Programs http://mitpress.mit.edu/sicp/full-text/book/book.html contains a the instructions for writing a lisp interpreter in any language.
I disagree with recommendation of Lua. Lua is a production-grade interpreter, and a production-grade interpreter is usually not a good educational material for those "interested in interpreters".
In particular, Lua uses no intermediate representation (there is no Lua AST!), which makes its compiler portion a quite confusing read. Its interpreter portion is no less confusing, being a register VM with a register window scheme and a non-recursive eval using goto and a separate call stack. Do not be fooled by "not too large" aspect. Lua is worth studying, but it is definitely not a beginner material.
You will probably hate me for giving some graphic details but I had never used Toilet paper for the first 21 years of my life.(I am 22 BTW). I didn't even use a bidet. Just my left hand and water. I know this might be considered very disgusting but it is very common from where I am.
I still don't use toilet paper. I used one when I had access to it(in a hotel). I knew toilet paper existed as once when I saw it in movies or read about it.
Can I inquire as to where you grew up? I've genuinely never heard of anyone using just their hand, but I suppose it makes sense for poorer parts of the world. (no offense intended whatsoever)
India. No offense taken. FWIW, I can afford toilet paper. I just don't use it as I am habituated to using my hand. In case you are wondering, I can guarantee that the number of people who use their hand to clean their bottoms is much more than the combined population of USA.
I wouldn't care if they made it an option so people could choose "I want a chrome clone that doesn't violate my privacy" and get the chrome-ified UI, or choose either the 'Firefox menu' Office 2007-ish one, or the classic interface. Instead, they removed just about every customisability-related feature they could.
Not to be that guy but regardless is the correct form. Irregardless is considered as non-standard or incorrect. But if you do know this, please don't mind this nitpick.
I smiled reading this comment.
If you make a mistake and someone corrects you, I assume you also try to learn from it.
On HN, I believe that people are trying to make a positive contribution when the post, and while correcting people on the internet can seem pedantic, I take it to be a positive contribution and an opportunity to learn something.
I was a typesetter for sometime(never released a typeface officially) and during another recent discussion on typefaces, I heard about source code pro. I swear I told many people that consolas is the best mono-space font. But source-code pro changed it. It became my main coding font now and it is simply amazing.
Most important thing that comes to my mind is space. I have no idea about the size occupied by a single "batch" but I can say that two small ones require more space. One more thing is, maintaining one large "reactor" is easy when compared to 10 small ones.
I used to design typefaces as a hobby. It is not so easy. You might think that your typeface looks fine but some experienced typeface designer will rip your design to pieces saying the bowls are not smooth, the stems are not having consistent thickness etc(he is not wrong. I just didn't have the "eye" for spotting such things).
But as they say, practice makes man perfect. Good Luck.
It takes around 6-7 months to design just a "regular" typeface. Be patient if you ever take this up.
I Do Not encrypt any files. I have a desktop at my home and i never saw need to. Although I don't live in a first world country. So no first world problems.