Softpanorama
May the source be with you, but remember the KISS principle ;-)

Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

Best C language textbooks

News Selected Computer Books C language Algorithms Introductory Advanced Reference Classic Computer Books
Style Optimization of code C++ as better C C on Unix Pointers C++ Debugging Compiler Construction Best Assembler x86 Textbooks
OS Internals, Algorithms and Design Principles Systems programming Errors and Debugging Reengineering Software Testing C history Software Engineering Etc

Introduction

C is a classic language. But unfortunately is not very good as a first programming language (still you can use C interpreter instead of compiler and that helps a bit).  After all, you can think about C as a "portable assembly language" but without assembler transparency and closeness to machine architecture.

But it is better then some alternatives that are used in Universities all over the world ;-).  It definitely beats Java as the fist language as typical Java course is overloaded with OO junk and that makes learning programming more difficult not easier.

When it comes to leaning C, no single book can possibly cover all the topics equally well. Be especially vary if the book states on the back cover "Whether you're a novice or experienced programmer [...]". This is typical misleading advertizing.  If you're an absolute beginner, you can well find such a book difficult and disorienting. On the other hand, if you're already fluent in another programming language - especially one which has some similarities to C you can find many explanations redundant and unnecessary. So large part of the book became way too trivial.

Probably the best method of trying to learn C yourself is to subscribe to free Harvard's CS 50 podcast or similar video course from O'Reilly. Harvard RSS feed can be found  using Google, or you can search for "Harvard Computer Science 50" within the iTunes store. The podcast includes separate video and audio tracks of lectures by David J. Malan. He also provides PDF's of the problem sets along with copies of the class's quizzes and answers. The course filmed is fall 2007 I believe. The first few episodes from week 0 are slow, but the course quickly picks up speed after that. If you want to get right into C, then I recommend that you start at week 1 (Week 0 is spent going over the basic workings of computer hardware components and some time is spent on a program called "Scratch").

Two major schools of teaching programming

There are two ways (and two major schools of teaching) to master programming which can be called "bottom-up" and "top-down" approaches:

Both schools are valid approaches. I actually think that the first ("bottom-up") approach is a better one, as it corresponds to historical development of programming languages. But scriting language provide also very powerful abstracting when you operate essentially in a virtual machine and with a good debugger you also can learn a lot pretty quickly. For example Perl has simply great debugger.  Knuth used to say something long those lines -- debugger is probably as important if not more important then the language.

The modern universities are great in spoiling the broth and present you with the third, the worst option: typically you start "in the middle" with something like Java, which is not high-enough to belong to scripting languages family and at the same time not low enough to expose underling hardware architecture (knowing which actually gives you tremedous insight into programming).  It obscures the answer to the fundamental question “What does the program actually do?”  under heavy smoke of classes and frameworks (as well as less fundamental “How much does it cost?”).

So if your first language is C you need to thank God that it's not C++ or Java ;-). Those days that rarely happens and probably you will be fed Java diet no matter what. Java stands between compiled languages and scripting languages and the course that is taught typically is burdened with overemphasis on OO. Which is probably the most efficient way to kill any interest in programming ;-).

In other words it is as far from ideal first language as one can get, but nobody cares about student interests. Generally in teaching programming languages like in IT in general fashion rules and each generation of CS students became an unsuspecting victims of the current IT fashion trend. And whatever language makes money in business typically is stupidly pushed as the first language.  As a result more students hate programming that it would be if they teach something  simpler and without excessive zeal toward OO from the very beginning. Teaching OO in the first programming language makes the course more obscure then it should be.

The value of learning C

Even if your univesity is occupied by complexity junkies that want to teach you Java in the first course with overdoze of OO, you have a chance to learn C by youself or by taking course is some community college (just do not tell anybody about it, if you attend a prestigious university ;-). That can dramatically improve your chances in understanding Java and even might make Java course enjoyable. And C is simply a must for enthusiasts who love programming as it is lingua franka of Unix.

As a language C exists for more that 40 years, so there are some really good books on the market. For an introductory book on C (especially high-school level book) I would recommend a book that use flowcharts and figures extensively (C by Example) and has decent typographical quality.   Beginning C book by  Ivor Horton (4th and 5th editions are now available from Apress) also is also not bad and well illustrated (probably the forth edition is the best; avoid fifth). Please be aware of the recently ratified new standards. Not all compiles implement the most recent standard and that't the problem with fifth edition of Ivor Horton "Beginning C" book. As you understand it does not matter much for introductory books whether the language described adhere to the most recent standard.  At the same time too old books have a problem that some useful features are not desrtibed as at this time they were not included in the C standard. Books published less then 10 years ago generally are OK and using older edition usually allow you to save money. At the same time some old book have excellent description of certain parts of the language (usually any single author is not equally good in describing all parts of the language; pointers are especially tricky subject)  and are dirt cheap. You can benefit from owning them too.

Books with a compiler on CD used to be a nice way to get a decent compiler if you do not have any and use Windows. Now Microsoft provides  Visual C++ Express for free which is a very nice, professional package. GCC is also available for free with any Linux installation or Cygwin installation on Windows.

Or you can pay for  Visual Studio standard edition (that contains a set of very decent compilers suitable for beginners).  That's much better investment then buying some stupid $150 book that many economics courses require (looks like economics professors are especially corrupt, but statisticians are close ;-).  Please note that if you waist so much money for university credits on courses taught by clueless Java-loving complexity junkies (category to which is probably more the 33% of university first programming course teachers belong ;-) or OO fundamentalists (another 33% of university first programming course instructors ;-) buying your own version of Visual Studio is a minor expense. 

About additional help in your introductory programming classes

Programming is a complex subject. Modern courses are quite complexes and present a lot of material in a short period of time. That put you in danger of getting low grade for the course (as you probably will be competing with students, who have better background)  or worse hating programming for the rest of your life. It is also not that great to feel that you need to drop the course and waist all money spend on those credits.

Takes this course seriously. This is a challenge that you need to pass with flying colors and that's impossible without paying proper attention to it.  I am telling that to you as an old university professor: abilities are not everything in this course.  University environment and the instructor can be a serious obstacles instead of help.

So getting additional help in a form on DVD-based course, better compiler/IDE is just common sense. because you get not so much into world of programming but in a very cruel world of oversized egos of instructors. Insurance for your investment in form of some reputable third party video course and better compiler in a must in this case because you need all the help you can get.

BTW using University tutors  is also a must as it gives you a (supposedly knowledgeable ;-) person to speak with.  And just ability to speak to other person and explain your problems sometimes solve those problems.  "Lone wolfs" are rarely successful in programming.  The main danger for you is that with insufficient help at the end you will really hate programming and want to do nothing with it in the future. That means that all (OK 90% ;-) of your money and time were wasted.

Using additional books, alternative video couces and University tutors can help. Tutors are especially important as it gives you a (supposedly knowledgeable ;-) person to speak with.  And just ability to speak to other person and explain your problems sometimes solve those problems.  "Lone wolfs" are rarely successful in programming.  The main danger for you is that with insufficient help at the end you will really hate programming and want to do nothing with it in the future. That means that all (OK 90% ;-) of your money and time were wasted.

In Linux gcc is free and more or less OK,  but it should be used with IDE (such as Komodo) with integrated debugger ( I repeat with integrated debugger). Komodo editor is free and should be used if you are unable to buy a full version.  Linux is perfect if you are tight with money and are using self-study book. Moreover  working in Linux environment exposes you to the beauty of Unix and as such might help to prevent development of the "hate of programming" disease that I already talked about. The disease the modern universities spread. Overcomplexity of environment makes you feel like a hero of a Kafka novel: and that is probably the typical feeling of students studying a complex language like Java in the first course.

Still, interpreter is great accept in studying first programming language and even if you run Linux I would recommend to try to use C interpreter such as EiC. While it does not eliminate all problems but at least it might somewhat ease your pain.  Other interpreter include CINT C and C++ Interpreter,   UPS Debugger (C Interpreter). Decent editor is also a must.  Also you can use Midnight commander or Total Commander in Windows as your pseudo-IDE. 

There are also multiple free compilers but please be aware that using compiler different from recommended in your textbook increases the difficulties your experience in the course. But they are quite OK, or even preferable, for self-study. The list below in in no way exhausting:

The simplest way to start learning programming in C is not to type examples from scratch, but cut and paste a suitable example from the book and then gradually modify it until it will perform what you want to accomplish.

That means that book without a downloadable examples (or examples on CD for very old books) is a very bad choice.  As diagnostic in C compilers is pretty bad you should never try to type examples for which you can find a suitable prototype. 

A book without a downloadable examples (or examples of CD) is a very bad choice. It's much better to start with an example and modify it for your needs then to write a program from scratch

I would like to stress it again: never ever try to type your first C programs ;-). You will be very disappointed by the quality of C diagnostics. Beginner should start with working example that is similar to what he needs and gradually, step by step  modify it. Again you need to understand that diagnostics is really horrible and I am not joking or exaggerating the situation here. If an example you can and paste runs OK before your changes, than each time you make changes you know where you can introduce an error and thus you are in much better position to accomplish a task without unnecessary frustration. Please remember that programming is not about writing program, it's about modifying existing programs ;-). Using prototype  you will be able to compile and execute modified program probably in half of the time and with far less  problems. If you use VC++ 5.0 or better than after opening existing C-file, the project will be created for you automatically.

Using examples from the book has another implicit advantage: you will copy the author style in your programs and thus will be introduced to a more or less consistent style of programming. In good books each example starts with a comment line that describes it. Also it uses some reasonable naming conversion for variables and provides comments in the body.

Downloadable code for examples is a must (those days all mainstream publishers has freely downloadable code for their programming books, but that was not the case 10 or 20 years ago), Availability of a e-text of the book (especially in HTML format) is desirable -- in this case you can include your notes into the text, search for words and phrases, etc.  But you can survive without e-text and making notes is actually an important part of learning process and it should not be made too easy :-). The key is the quality of the book: there is a big difference in results when you study C from a good book then when you use average or, God forbid, bad book. 

There are also some decent free/open books on the subject, downloadable in HTML format. Search them on the Web.   For example Teach Yourself C in 24 Hours  (24 hours actually means 24 one hour lectures; amount of work you need to put to master the material can vary greatly)  is pretty decent, written in a nice style open book.

Picture is worth thousand of words

Do not believe that flowcharts are obsolete -- for beginners they are tremendously important and teachers/books that ignore them put students in a very serious disadvantage.  From my teaching experience I firmly believe that a beginner book based on flowcharts has huge advantage over any other approach.

In general illustrations are extremely important too. Book without illustrations usually is definitely less clear and hostile to the student that book with decent illustration in almost any area of C (especially pointers). For an example of decent illustrations see Chapter about pointers  from Practical C Programming (Nutshell Handbook) that is available online. Again, C by Example is a nicely illustrated book.

As for intermediate books I strongly recommend K&R book. This is a classic that worth reading and you  can always benefit from reading a book that is part of the history of  programming, even if some ideas are no longer relevant and some language constructs it describes are outdated.

Beware of OO propaganda-based mixed C/C++  books. C is an interesting enough and complex enough language to study separately and only then move to C++, if at all . C++ is an extensible language and this extensibility presents several unobvious for beginners dangers in complex programming tasks. IMHO the value of OO outside visual interfaces is questionable. And even in this narrow domain in many cases one will be much better served by combination of Tcl/Tk+C or Python and C++  and other pair of scripting language and a compiled language. Same simple GUI programs can be implemented via LAMP paradigm. 

Watching video lessons is really important

Nowadays you can find free lessons in video format.  Try to search "Youtube C programming" and you will see what is available. Some of those lectures are of decent quality. This is especially important for learning debugging. See also

Probably the best method of trying to learn C yourself is to subscribe to free Harvard's CS 50 podcast or similar video course from O'Reilly. Harvard RSS feed can be found  using Google, or you can search for "Harvard Computer Science 50" within the iTunes store. The podcast includes separate video and audio tracks of lectures by David J. Malan. He also provides PDF's of the problem sets along with copies of the class's quizzes and answers. The course filmed is fall 2007 I believe. The first few episodes from week 0 are slow, but the course quickly picks up speed after that. If you want to get right into C, then I recommend that you start at week 1 (Week 0 is spent going over the basic workings of computer hardware components and some time is spent on a program called "Scratch").

Debugging needs your attention too

Debugging is really difficult in C and it's even more difficult in C++. I strongly recommend using two displays (what is called extended desktop in Windows)  for debugging. For a laptop that often means that you need a docking station to connect them (or USB 3 based video adapter for the second display); Dell laptops such as E6330 has nice docking station that allows you connect two monitors). Used 19" display can be bought for ~$40 on eBay. Dell 24" display is around $120 and is a better deal. After 24" return on investment is negligible and do not recommend larger displays for debugging. 

In many respects C is an assembly level language with similar traps and pitfalls. Please read C Traps and Pitfalls the only book that honestly discusses the problems with the language. It might be better to buy it as a second book than two very similar introductory level books on the subject, but you should read it only after the first half or the course is over. Before that it is more confusing then enlightening.

Conclusions

Be skeptical.  My suggestions presented above should be critically evaluated. Do not treat them uncritically. Select what suits you carefully. But the truth is that its simply amazing how much simpler is to learn C using really great books than to do the same using average books...  And how much a good video course can help you in comparison with a typical mediocre lectures. Do not consider yourself to be stupid if you do not understand something on the lecture or from the book. It might be that the problem is with the book or instructor not you :-). That's why having several books in addition to the used in the course book is important. As well as watching video. Which can be fun. With the current prices  used books are very affordable and in no way you need the most recent edition for such books.  

I would like to repeat that YouTube is also a great resource and some lectures and tutorials are worth watching.

For obvious reasons I prefer books that have e-text available.  In case case you can extract some fragment and example for you own summary of the course supplementing your lecture notes (which can be scanned and then edited as images). You can try to organize those as a web site if you already know this staff. With editors like Frontpage it's really simple and here you can collaborate with your friends. Again, if you already took a course in HTML before your C class you might benefit putting all you examples and lecture notes in a simple Web site. This is a great way to organize information and it really helps to study the language (and improve your understanding of HTML as well).  FrontPage is a great tool for this and free version (called Microsoft SharePoint Designer 2007 ) is downloadable from Microsoft, there is also a more late free version  of Microsoft Expression Web 4 (Free Version)  which is even better.

Dr. Nikolai Bezroukov


Top updates

Softpanorama Switchboard
Softpanorama Search


NEWS CONTENTS

Old News ;-)

[Nov 08, 2015] The Anti-Java Professor and the Jobless Programmers

Nick Geoghegan

James Maguire's article raises some interesting questions as to why teaching Java to first year CS / IT students is a bad idea. The article mentions both Ada and Pascal – neither of which really "took off" outside of the States, with the former being used mainly by contractors of the US Dept. of Defense.

This is my own, personal, extension to the article – which I agree with – and why first year students should be taught C in first year. I'm biased though, I learned C as my first language and extensively use C or C++ in projects.

Java is a very high level language that has interesting features that make it easier for programmers. The two main points, that I like about Java, are libraries (although libraries exist for C / C++ ) and memory management.

Libraries

Libraries are fantastic. They offer an API and abstract a metric fuck tonne of work that a programmer doesn't care about. I don't care how the library works inside, just that I have a way of putting in input and getting expected output (see my post on abstraction). I've extensively used libraries, even this week, for audio codec decoding. Libraries mean not reinventing the wheel and reusing code (something students are discouraged from doing, as it's plagiarism, yet in the real world you are rewarded). Again, starting with C means that you appreciate the libraries more.

Memory Management

Managing your programs memory manually is a pain in the hole. We all know this after spending countless hours finding memory leaks in our programs. Java's inbuilt memory management tool is great – it saves me from having to do it. However, if I had have learned Java first, I would assume (for a short amount of time) that all languages managed memory for you or that all languages were shite compared to Java because they don't manage memory for you. Going from a "lesser" language like C to Java makes you appreciate the memory manager

What's so great about C?

In the context of a first language to teach students, C is perfect. C is

Java is a complex language that will spoil a first year student. However, as noted, CS / IT courses need to keep student retention rates high. As an example, my first year class was about 60 people, final year was 8. There are ways to keep students, possibly with other, easier, languages in the second semester of first year – so that students don't hate the subject when choosing the next years subject post exams.

Conversely, I could say that you should teach Java in first year and expand on more difficult languages like C or assembler (which should be taught side by side, in my mind) later down the line – keeping retention high in the initial years, and drilling down with each successive semester to more systems level programming.

There's a time and place for Java, which I believe is third year or final year. This will keep Java fresh in the students mind while they are going job hunting after leaving the bosom of academia. This will give them a good head start, as most companies are Java houses in Ireland.

[Nov 08, 2015] Abstraction

nickgeoghegan.net

Filed in Programming No Comments

A few things can confuse programming students, or new people to programming. One of these is abstraction.

Wikipedia says:

In computer science, abstraction is the process by which data and programs are defined with a representation similar to its meaning (semantics), while hiding away the implementation details. Abstraction tries to reduce and factor out details so that the programmer can focus on a few concepts at a time. A system can have several abstraction layers whereby different meanings and amounts of detail are exposed to the programmer. For example, low-level abstraction layers expose details of the hardware where the program is run, while high-level layers deal with the business logic of the program.

That might be a bit too wordy for some people, and not at all clear. Here's my analogy of abstraction.

Abstraction is like a car

A car has a few features that makes it unique.

If someone can drive a Manual transmission car, they can drive any Manual transmission car. Automatic drivers, sadly, cannot drive a Manual transmission drivers without "relearing" the car. That is an aside, we'll assume that all cars are Manual transmission cars – as is the case in Ireland for most cars.

Since I can drive my car, which is a Mitsubishi Pajero, that means that I can drive your car – a Honda Civic, Toyota Yaris, Volkswagen Passat.

All I need to know, in order to drive a car – any car – is how to use the breaks, accelerator, steering wheel, clutch and transmission. Since I already know this in my car, I can abstract away your car and it's controls.

I do not need to know the inner workings of your car in order to drive it, just the controls. I don't need to know how exactly the breaks work in your car, only that they work. I don't need to know, that your car has a turbo charger, only that when I push the accelerator, the car moves. I also don't need to know the exact revs that I should gear up or gear down (although that would be better on the engine!)

Virtually all controls are the same. Standardization means that the clutch, break and accelerator are all in the same place, regardless of the car. This means that I do not need to relearn how a car works. To me, a car is just a car, and is interchangeable with any other car.

Abstraction means not caring

As a programmer, or someone using a third party API (for example), abstraction means not caring how the inner workings of some function works – Linked list data structure, variable names inside the function, the sorting algorithm used, etc – just that I have a standard (preferable unchanging) interface to do whatever I need to do.

Abstraction can be taught of as a black box. For input, you get output. That shouldn't be the case, but often is. We need abstraction so that, as a programmer, we can concentrate on other aspects of the program – this is the corner-stone for large scale, multi developer, software projects.

[Nov 08, 2015] Beginning C, 5th Edition by Ivor Horton

From Amazon review: "The level of detail is about the same as Kochan but less than Prata. One of the nicest features is that there are many small, complete programs with detailed explanation. The C version assumed (in the 5th edition) is C11 and there is no discussion of differences with C89 and C99."... " I recommend the 4th edition as a decent beginner's text, I don't recommend the 5th. To be fair, the 5th edition is the only book I know of at the moment that has sections (however brief) on uchar.h and threads.h."
Amazon.com
Scanf on May 28, 2014
Decent tutorial with a direct style

Most introductions to C are targeted at those who don't have any programming experience. This can make tedious reading for those who do. Horton also assumes that you know nothing about programming, but marches through the material at a more brisk pace than usual.

The writing is a bit dry compared to the other best self-study books. The technical level is about the same as Gookin's Beginning Programming with C for Dummies, but with less hand-holding and the explanations can be a bit harder to follow. Presentation is more concise though sometimes less clear than Kochan's Programming in C or Prata's C Primer Plus.

The level of detail is about the same as Kochan but less than Prata. One of the nicest features is that there are many small, complete programs with detailed explanation. The C version assumed (in the 5th edition) is C11 and there is no discussion of differences with C89 and C99.

The 5th edition is almost identical in content to the 4th. There are short sections on the new Unicode facilities (uchar.h) and threads (threads.h). The biggest change is a rewrite of the material on strings and arrays (more on that below). Following a general trend I have noticed in Apress books the past couple of years, the typesetting and graphics in the 5th edition aren't as nice as in the 4th.

Many years ago, Microsoft developed a C extension library that added bounds checking to the string operations. They submitted this extension for addition to the C Standard Library and it became known as TR 24731. After years of acrimony and over the objection of seemingly the majority of the C community, it was added to C11 as an optional facility, Annex K (Bounds-Checking Interfaces). Horton rewrote the relevant sections of the 5th edition to use the Annex K versions exclusively and insists that any right-thinking programmer will follow suit. There is no warning about the limited acceptance of Annex K.

Due to this issue, while I recommend the 4th edition as a decent beginner's text, I don't recommend the 5th. To be fair, the 5th edition is the only book I know of at the moment that has sections (however brief) on uchar.h and threads.h.

Danemanon October 1, 2013

Great learning tool!

Who am I? I have messed with computers since my TRS-80 Model III back in the 80's when I was a kid. For two years, I was a computer science major in college in the early 90's. Back then, I learned BASIC, Pascal, Cobol, & Fortran. I know Pascal fairly well.

Right now, I am mostly a high-end user of computers in my work. I decided to get back into the art of programming somewhat for fun & also as a way to integrate some of the at knowledge in what I do know, which is work in social services. I decided that I was going to learn C.

It was available back in the 90's when I when to school and had wanted to learn about what others had told me is a powerful language. I get that C is not used as much since the advent of C++, C#, and Objective C. Eventually, I want to learn C++ & Objective C, but my old fashioned thinking had it set that I would probably do well to learn C first. I had an old copy of this book by Horton (2nd edition) and it appeared dated.

Decided to spend the money and get an updated copy that I can read on my iPad. This is turning out to be a very informative book. I find it very detailed and fairly easy to read given the fact that I have some knowledge of programming already. Judging from what I read, I think that someone new to programming could probably find it useful as well as he does appear to be following what I learned as sound programming practices. Horton takes the time to explain most everything about the sample programs he uses and the various ways to accomplish the same tasks using different methods. He appears to have natural ability to simplify what is really a rather complex subject.

If there was one thing I would criticize is his over-reliance on the C11 standards. I am limited to the gcc compiler, which only accomodates some of the standards. In fact, in my research, there are few compilers that actually are completely faithful to this standard. While this is not a huge issue, I did find it a bit irritating since that standard is so new and most of the major compilers are not yet there. That is the only complaint that I have about it to date.

So far, i am on chapter 7 and learning about pointers, which is probably one of the most complex things in C. Horton is making it sound pretty manageable. I would recommend this book to novice programmers and for those who have some experience programming and want to learn about C.

[Sep 14, 2015] Learn C the Hard Way Practical Exercises on the Computational Subjects You Keep Avoiding

This is a book by author who previously wrote Python book. So it is a modern book, that should be head above "C-only" authors book, who do not have proper perspective to cover the language. . The author uses videos as an integral part of the book which is an interesting idea but it it is porely executed (see below). See also reviews of his Zed Shaw's Learn Python the Hard Way

Paperback: 384 pages
Publisher: Addison-Wesley Professional; 1 edition (September 14, 2015)
Language: English
ISBN-10: 0321884922
ISBN-13: 978-0321884923

M. F. Watson on September 19, 2015

Needs a new editor

I find it very difficult to give this anything other than 5 stars, as I have found all of Zed's work to be immensely helpful. This book, taken with the beta website and the companion videos, is probably one of the best and quickest crash courses in C available. This book is the quick-and-dirty, yet somehow very clean, way to get you programming in C in an expedited fashion.

However, the one glaring problem with this book is the editing. There are exercises in the book where the program examples have been updated from the beta website, yet the program output examples have been left the same. Added on top of that, some parts of the text will talk about the book version of the program, while others will reference the website version. It's as if whoever was responsible for editing the book got halfway through and then decided to take an early vacation.

I was able to get through with very little problem because I had already used the website extensively before purchasing the book, but I can imagine that this would pose some difficulty for someone new to the language. This urgently needs a reediting and a second edition to iron out the flaws.

Despite the three stars, I still strongly recommend this book, but only when taken along with the videos and the beta website, and only if the reader is willing to take the extra time to go back and forth between the three. I would only ask Zed to take another pass at making the the solid, standalone, programming book that it obviously has the potential to be.

Amazon Customer on August 25, 2015

[resolved] Missing important accompanying material.

Format: Kindle Edition Verified Purchase 5 of 5 people found this review helpful
Interesting concept. I am a big fan of Zed Shaw's Learn Python the Hard Way. It's a great method that fits well with how I like to learn.

So I purchased the Kindle version of the "Learn C the Hard Way". But right of the start the author emphasizes the importance of "accompanying videos" which are integral to the book, and they are nowhere to be found.

There is a section in later chapters of the book with a procedure on how to get the videos but after registering and following the procedure on the Informit website the book links to, I did not get a download link.

I opened a support ticket with Informit and 2 days later got a response with a suggestion I contact Amazon. Pretty poor experience if you ask me.

I just needed a quick refresher since I hadn't used C in some years, so I opted for a different book instead due to the issues of missing accompanying material of this book.

EDIT**: The curse of the "early adopter" strikes back! Read the comment bellow this review. It's from the editor herself. They remedied the issue and now I'm a happy camper! Highly recommend this book. Zed Shaw's method is unique and a very fun way to learn.

Update 8/26/15: The video files are now available. You can access them by following the instructions on the "Where Are the Companion Content Files?" page at the end of your eBook. If you have any additional problems, please do reach out to me directly: dayna.isley@pearson.com. Apologies once again for the inconvenience.

[Aug 28, 2014] Programming in C (4th Edition) by Stephen G. Kochan

You can save money buying third edition From Amazon review: "... Unlike many C texts however, I am rather pleased with the coverage on pointers, a VERY important concept which is often given short shrift in C texts. Here we have a full chapter of over 40 pages. ..."

Paperback: 600 pages
Publisher: Addison-Wesley Professional; 4 edition (August 28, 2014)
Language: English
ISBN-10: 0321776410
ISBN-13: 978-0321776419
Product Dimensions: 7 x 1.4 x 8.9 inches
Shipping Weight: 1.9 pounds (View shipping rates and policies)
Average Customer Review: 4.2 out of 5 stars See all reviews (27 customer reviews)

Scanf on September 22, 2014

False advertizing

The blurb states, "All the features of the C language are covered in this book, including the latest additions added with the C11 standard." This is not true at all. In the whole book, I counted just six sentences that were added to mention the existence of C11. In fact, the 4th edition is essentially identical to the 3rd.

I rated the 3rd edition highly and still do. This is an elementary introduction and the new features of C11 are things that would not naturally be covered at this level. The one-star rating is because of the false claim and because the changes to the text are really too trivial to justify printing a new edition.

Darren Kirby on November 10, 2014

so I'd probably not recommend purchasing the fourth edition if you already have the ...

I have a dead-tree version of the third edition which has served me well over the years. I was interested to see the changes for the fourth edition, so I obtained a PDF version. The fourth introduces a few new concepts and features related to the newest C11 standard, however, these additions could be quickly referenced using the net alone, so I'd probably not recommend purchasing the fourth edition if you already have the third. There is not a lot of new content.

If you don't own a previous version however, then this book makes a great introduction to programming in C. The author claims that no previous programming experience is assumed, but the text is certainly not 'dummied down', new concepts are presented and demonstrated somewhat tersely before moving on to the next. I realize this may be necessary to keep the book from being 1000+ pages, but I have to think it may move a bit too fast for someone with no previous programming experience. I think it is probably perfect for those with at least some knowledge of higher-level languages such as Python or Ruby.

The code examples are all self-contained free standing programs which can be compiled and run. As with most programming texts, this means the examples can be quite contrived. I have noticed some newer programming texts use a sort of overlying 'project' to introduce code examples. The project is re-factored and improved as new concepts are introduced, resulting in a non-trivial program by the end of the book. I am not sure if this is a 'better' way to learn by any metric, but it does solve the problem of contrived examples.

I very much like the design and layout of this book. The fonts chosen for the text and code examples are clean and legible. There are no text boxes, asides, 'warnings' etc segregated from the main text breaking up the flow. Nothing but top-level content throughout the entire text.

The text is complete. It covers the entirety of the C language, which while reminding us how amazingly compact C is, may leave some of the more important and complicated aspects with too little coverage. Unlike many C texts however, I am rather pleased with the coverage on pointers, a VERY important concept which is often given short shrift in C texts. Here we have a full chapter of over 40 pages. Again, as with most introductory texts on C, the Standard Library (necessary to write almost anything useful) does not get enough coverage, just a quick reference to some of the common headers in an appendix.

Appendix A, on the other hand, provides a very useful quick-reference for C features for after you have worked through the book and just need a quick reminder on matters of syntax. Chapter 18 (Object-Oriented Programming) seems unnecessary to me. It introduces a few OOP concepts with some examples in Objective-C and C++. I am unsure of its purpose here. It is much to short to even begin to cover OOP, and thus may just be confusing to a beginner.

So, would I recommend this book to a complete programming novice? Yes, with caveats. You will not learn C just by reading this book. The author recommends downloading the example code and running it. I would recommend manually typing in the code and running it. The simple act of writing the code is very important IMO for wrapping your head around the concepts presented. You will not learn much copying and pasting. I would also recommend working through all of the problem sets at the end of each chapter. Again, you will learn much more by doing than just passively reading. Personally, I am certainly no C expert, but I do work on non-trivial C projects from time to time, and though I have several C titles on my bookshelf, Programming in C is the one I reach for when I need a refresher on some topic.

[Dec 6, 2013] C Primer Plus (6th Edition) by Stephen Prata

Shephen Prata published first edition of this book in 1984 (see C Primer Plus Mitchell Waite, Donald Martin, Stephen Prata which coverd C++ and later in 1990 The Waite Group's New C Primer Plus (9780672303197) Mitchell Waite, Stephen Prata. (768 pages) So the initial concept and key ideas are 25 years old.
This is the sixth edition of a well-know introductory book but it is difficult to teach old dog new tricks. The stress is her is the this is very "introductory" book. But this is a good introductory book, polished due to many editions. No complex topics covered and coverage of difficult elements of the language is pretty superficial. Probably not much changed since 5th edition. So you can buy 5th or 4th edition for the fraction of money. Fifth edition (2004) is around $7 and forth(2001) around $1.
December 6, 2013 | Amazon.com

Paperback: 1080 pages
Publisher: Addison-Wesley Professional; 6 edition (December 6, 2013)
Language: English
ISBN-10: 0321928423
ISBN-13: 978-0321928429
Product Dimensions: 7 x 2.4 x 9 inches
Shipping Weight: 3.6 pounds (View shipping rates and policies)

Steven on December 20, 2013

An Excellent Book on C Programming.

A preface about my programming knowledge: I am an experienced C programmer (since 2001) and have programmed for Linux, DOS, Windows, Palm OS, Mac OS X, and a few other systems (including my own OS). I have experience programming for x86, PowerPC, MIPS, ARM, and some SPARC. I also know C++, Java, and Pascal.

As for my review of the book, I have read the first 5 chapters of this book then skimmed the remaining portions of the book stopping at various unspecified locations to read the text. I have spotted an error or two but as long as you read enough of the surrounding text you should be able to figure out what it should be.

The text is descriptive and concise, it covers the current topic at hand with good context and detail. There are forward references to later concepts you will read about in later chapters, however when they are used it is not in a way that would confuse you if you never have programmed C before. I have not found any imposing of stylistic issues such as whether to use tabs or spaces, curly braces on the next line or same line, asterisk placement, etc., although the book sticks to one style (except in the cases to show valid programs formatted differently).

There are many different implementations of C and 3 major versions of C such as C89, C99, and C11. This book differentiates between such standards to inform you of whether a feature is part of C89, C99, or C11. The oldest standard throughout the book is C89 at least so you will not find K&R style function declarations. There are also mentions to note that if you run into trouble, such as compilation errors, that your compiler supports too old of a standard.

As for implementations and systems, the book says that you should not expect one system to be the same as another, which is something that I like. There is a short reference at the back of the book as per the functions in the standard library along with information on which standard it is available for.

So in short, whether you are very new to programming or an old pro, this is a good book to have in your library.

[Feb 20, 2011] Programming in C (3rd Edition) by Stephen G. Kochan

Nuey (San Francisco, CA USA)

Awesome!, March 23, 2005

I was still left scratching my head after having read twice and attempting the problems in K&R. Literally, I was excited as I read Kochan's book. His presentation is so clear, with the right balance of explanation and examples without being too wordy/vague/simplistic (SAMS C in 21 Days) or too terse (K&R).

This book is an excellent introduction to C language (covering all the fundamentals and then some) with some consideration on good programming practices. I'm happy to see they've released a new edition.

After Kochan definitely consider any or all of the following:

C Traps and Pitfalls, Expert C Programming, C Companion, C Puzzle Book, and Memory as a Programming Concept in C/C++. Cheers!

[Feb 19, 2011] C Primer Plus (5th Edition) by Stephen Prata

This is fifth edition of well-known and pretty good introductory book... Minor In looking differences with the fourth edition.

Charles Ashbacher , Marion, Iowa

A for content, F for the lack of differences from the 4th, January 4, 2005

In the fall of 2004, I used the fourth edition of "C Primer Plus" as the text for my class in introductory programming in C.

Although I was not part of the decision to use it, I found it to be more than satisfactory. The explanations are detailed and the order of the coverage is appropriate, although like almost everyone else, I altered the order of presentation a bit. It covers what we commonly refer to as "plain vanilla C"; in other words programs run from a command line interface. The coverage is complete, everything that one would cover in any beginning course in C is present. The exercises and programming examples are generally well done, and the answers to the review questions are included.

In looking through the fifth edition, I found very little that was different from the fourth edition. The order of the material and the explanations are almost identical. Therefore, my evaluation of the book is a bit different. I give it poor marks as a new edition, as I did not see anything that justified publishing a new edition.

However, since the fourth edition worked so well, this one is also a good choice for learning C. Therefore, my rating of this book is simultaneously an A for content and an F in terms of being justified.

[Oct 20, 2006] Beginning C- From Novice to Professional by Ivor Horton

This is forth edition and you can currently skip 5th edition as it uses features not availble in all compilers yet. Book errata is available on line

Hardcover: 640 pages
Publisher: Apress; 4 edition (October 20, 2006)
Language: English
ISBN-10: 1590597354
ISBN-13: 978-1590597354

Neil G. Matthews on December 13, 2010

Excellent Introduction to C

This book is written in a Course Reference Text style with clearly worked examples, chapter summaries and exercises (with code and solutions to exercises on line), explaining and reinforcing code usage. I can recommend this book to anyone wishing to learn or re-acquaint themselves with C. The clear code explanations enable the author to include some clever coding techniques, e.g. the conditional operator ?: with the examples providing a useful basis for your own coding efforts.

Coding examples in the book are not specific to Windows or Unix/Linux/Mac, though a Windows example is included to show how to escape the "\" character in file path strings. Examples are well chosen with alternative approaches (e.g. pointer and non-pointer solutions) provided to solve a given programming challenge as new material is covered. Larger example programs are fleshed out as you work through the chapter illustrating the code development process. Some of the programs become quite sophisticated, such as a full Othello game.

The book commences with an outline chapter of how a C program is produced, the components of a C program and the design, implementation and testing process. Chapter 2 goes in to detail on the different C variable types, how they use memory and how the compiler handles conversions between variable types. The different options available in C to make decisions are covered in Chapter 3, which feeds into the different loop constructs in Chapter 4.

Arrays are introduced in Chapter 5, which naturally extends into how strings and text are managed in Chapter 6. This naturally segues into pointer usage in Chapter 7, and how this can be used as an alternate (and often better way) of manipulating arrays. Pointer usage is appropriately given a large amount of coverage in the book, with the pointer chapter comprising 10 percent of the book and subsequent chapters building on the foundations of this chapter.

Chapter 8 looks at the importance of structuring your program using functions, how variable scope assists with compartmentalising your program development and maintenance, how to pass and return data and how pointers can assist with this process, with Chapter 9 going into greater depth on functions. Input from the keyboard and output to the screen and printer are covered in chapter 10, which introduces input and output streams and character formatting. Formatted and binary file reading, writing and updating is provided in chapter 12 (about 10% of the book).

Data structures are covered well in chapter 11, showing the power of using pointers to structure members. How to share memory between variables is covered as is how to define your own data types. Those with a specific interest in embedded programming, where storage is tight and techniques to change and access bits in an I/O register will be disappointed with the brief coverage of bit-fields. The book is rounded out with a final chapter on the supporting features you should be looking for in your C programming IDE, with preprocessor macros, directives, conditional compilation and debugging methods covered along with a brief foray into date and time library functions.

There are four Appendices followed by a 33 page index.
A. Computer Arithmetic - binary and hexadecimal numbers, negative binary numbers, Big and Little Endian Systems and Floating Point numbers
B. ASCII Character Code Definitions - but no mention of unicode, despite unicode formatting being covered in the text.
C. Reserved Words in C - the power of C is ably demonstrated by the fact that so much can be done with just 37 reserved words!
D. Input and Output Format Specifications (this is a useful reference supporting the many worked examples provided in several chapters)

My only complaint is that here are more errors in this book (albeit minor) than I'd expect in a Fourth Edition. Book errata is available on line and the author did respond to some errors I submitted.

A. comjean "acomj" (boston)

5.0 out of 5 stars Outstanding, June 24, 2010

I went back to C programming after programming in other languages for a bit. This book gives excellent and clear explanations of concepts, including pointers/strings and arrays. The book has many example programs in each chapter are well thought out and make the concepts clear.

This would be an excellent book to learn from or if your going back to C from some time away. Despite the Beginning C title it covers a lot of topic (preprocessing/# defines etc.). It mainly covers C syntax and isn't a how to design a program kind of book.

I find it makes an excellent reference as well and I reach for it more often than the other C books I have which are both decent , Kernighan and Richie book and the more advanced. "C: A Reference Manual (5th Edition)" .

[Feb 1, 2002] C and Unix Programming A Comprehensive Guide by N. S. Kutti

About the Author
Dr. N. S. Kutti has been teaching computer science courses for more than two decades and is now writing textbooks in the United States and abroad. His research interests include real-time systems, operating systems, distributed systems, and programming. Dr. Kutti is also the co-author of Data Structures in C++, published by Prentice-Hall, Inc.

Book Description
Reviewers of the earlier version of this book credited it with both an original approach and creative explanations for the various concepts. This comprehensive new edition covers both C and Unix programming. It follows the ANSI standard in C programming and the POSIX standard in Unix programming, which makes the text a useful tool for writing programs for industry.

Using numerous examples, C and Unix Programming: A Comprehensive Guide explains the basic concepts of the C language by creating the C-Virtual Machine, a unique, effective approach to helping students grasp technical ideas.

Everyone from high school graduates who are interested in programming to IT professionals, scientists, researchers, and other sophisticated computer users will benefit from the techniques and examples provided.

Among its many key features, this book:

[Jun 2, 2000] Applied C An Introduction and More by Alice E. Fischer, David Eggert, Stephen M. Ross

Paperback - 1136 pages (June 2, 2000)

Computing McGraw-Hill; ISBN: 0070217483

[Mar 1, 2000] C for Java Programmers by Tomasz Mueldner

Textbook Binding - 500 pages 1 edition (March 1, 2000)
Addison-Wesley Pub Co; ISBN: 0201702797 ; Dimensions (in inches): 1.08 x 9.06 x 7.36
Amazon.com Sales Rank: 727,258
Avg. Customer Review: 4 out of 5 stars
Number of Reviews: 1

[Dec 22, 1999] Sams Teach Yourself C for Linux Programming in 21 Days by Erik de Castro, et all

768 pages 1 edition (December 22, 1999)

C Unleashed (Unleashed) by Richard Heathfield, et all.

A very good book. See review below.

Paperback - 1344 page, Sams

[Jun 14, 1999] Unix System Programming : A Programmer's Guide to Software Development by Keith Haviland, et al,1999

Prev version was published in 1988 !!

Almost Guinness style gap between first and second edition. Exactly like Fortran 88 and 99 standards ;-)

[Jun 4, 1999] C Programming - The Essentials for Engineers and Scientists by David R. Brooks, D. Gries (Editor), F. B. Schneider

Looks like Intermediate to advanced university textbook that is suitable as an into "Algorithms and Data Structures" textbook. I do not know much about David Brooks but David Gries was a talented author when he was young. Later he went into verification fundamentalism and published nothing on real value. I hope that the book is in the style of Primer on Structured Programming Using Pl/1, Pl/C and Pl/Ct by Richard Conway, D. Gries, which was on of the best intro books on its time. They start the book with explaining of basic I/O. The book also covers some classic algorithms like Searching&Sorting (Ch.8), Basic statistics (Ch.9) and Binary Trees (Ch.10) and probably can be used as a intro "Algorithms and Data Structures" textbook.

J. Montoya on July 11, 2006

CAUTION!

This is possibly the best book I've ever seen for engineers and scientists trying to learn how to program in C. However, supplementary material that aids in learning examples found in this book no longer exist. I wrote the author an email asking why his website for his c-code examples no longer exist, and I was informed that the book is "too old!" Without the supplementary material I need, I'm sure I will have a difficult time learning chapter 3 when it requires c-code created in chapter 6.

[Jun 1, 1999] C Programming- The Essentials for Engineers and Scientists by David R. Brooks, D. Gries (Editor), F. B. Schneider (Editor)

Looks like Intermediate to advanced university textbook. I do not know much about David Brooks but David Gries was a talented author when he was young. Later he went into verification fundamentalism and published nothing on real value. I hope that the book is in the style of Primer on Structured Programming Using Pl/1, Pl/C and Pl/Ct by Richard Conway, D. Gries, which was on of the best intro books on its time. They start the book with explaining of basic I/O. I see the main value of the book that it covers classic algorithms like Searching&Sorting (Ch.8), Basic statistics (Ch.9) and Binary Trees (Ch.10) and thus can be used as a intro "Algorithms and Data Structures" textbook.

[Feb 1, 1998] Data Structures : A Pseudocode Approach With C by Richard F. Gilberg, Behrouz A. Forouzan.

Hardcover (February 1998)

Pws Pub Co; ISBN: 0534951236
5 out of 5 stars
Number of Reviews: 1

A reader

5 out of 5 stars Very well written Data Structures text! May 28, 1999

This is an incredibly rich Data Structure text presented in a easy to read and straightforward manner. The text layout is appealing to the eye with lots of supporting pictures, diagrams, tables, Pseudocode algorithms, and program code. The Pseudocode is general for any language yet closely relates to C.

The program code is in C. The Pseudo code logic covers all data structures very well. ~J Franzmeier

Data Structures : An Advanced Approach Using C by Jeffrey Esakov, Tom Weiss. Paperback

Optimizing C ++ Steve Heller, 1998

Actually this is not a book about C++ -- it is mainly about optimizing C.

C Programming : The Essentials for Engineering and Scientists (Undergraduate Texts in Computer Science) David R. Brooks, D. Gries(editor), F. B. Schneider (editor), 1999

David Gries was a nice guy, when he was younger ;-). I still remember his excellent Compiler Construction for Digital Computers. After than he participated in the creation of PL/C -- a great compiler for an educational dialect of PL/1(much better than Pascal) and wrote a decent book about the language. But then he wrote really weak fundamentalist-style book The Science of Programming (Texts and Monographs in Computer Science) and I lost my respect for him. Lets hope he did not spoil the book as an editor.

Hardcover - 380 pages (March 1999)

Springer Verlag; ISBN: 0387986324

[Jan 1, 1997] Pointers on C

A very important topic that is rarely well covered in general C-texbooks here is covered as a separate book

Kenneth A. Reek, / Paperback / Published 1997

[Jul 28, 1993] Sparc Architecture, Assembly Language Programming, and C by Richard P. Paul

Paperback - 448 pages 1 edition (July 28, 1993)
Prentice Hall; ISBN: 0138768897 ; Dimensions (in inches): 0.77 x 9.22 x 7.00

Joseph D. Bissell(bissell@cis.udel.edu from University of Delaware):

This is an excellent book about SPARC Assembly Language.

For anyone interested in learning about the SPARC Architecture/Instruction Set (and RISC machines in general) this book is invaluable. It is especially useful for optimizing iterative and decision making C/C++ constructs. In fact, if one follows the tenets espoused in this book, one can learn to hand optimize time-critical sections of C/C++ code that is better than that produced by gcc or cc - the aversion of the UNIX community to write any code in assembly language notwithstanding.

The book really delivers what its rather verbose title implies. That is, a really outstanding feature of the text is the way in which the author translates the standard C/C++ constructs to their low-level counterparts. He does this in stages - creating a variety of examples that progress from functional but grossly inefficient code fragments up to superbly succinct variants. I have used this book in a one semester undergraduate course at the University of Delaware for three years and have also used excerpts from it when I have taught the MIPS Architecture. There is no other book that treats RISC (or CISC) architecture from Professor Paul's relational premise, with which I totally agree. Having taught INTEL stuff for 10+ years, I firmly believe that much of its content could be effectively utilized in CISC courses. The book is also used as the secondary text in the graduate compiler course at U.D.

The book is not without flaws, most of which are because of an incredible number of typographical errors - I have counted over 60 just involving commas! Hopefully the new edition which I believe is due to be published soon will have been edited/typeset with more care. Also, there are some minor changes to the gnu software (gdb and gcc) that need to be upgraded.

Glibc

Glibc : A Comprehensive Reference to Gnu/Linux Libc Jeff Garzik, 2000

See Also


Classic

[Mar 22, 1988] The C Programming Language : ANSI C Version by Brian W. Kernighan, Dennis M. Ritchie

***** Classic book. For example, the very first exercise given is to print "hello, world" became a standard way of introducing new language in a programming books.  Not for the beginner, you need to know well at least one other language before reading this book. Might serve as a quick reference too. Written when memory was expensive, hence it takes all the short cuts to save storage. Therefore some examples (hort implementation of famous UNIX commands) are no longer represent recommended way of coding them.
It shows its age. In 2003 one can see weaknesses and their tool-oriented approach looks somewhat naive in view of existence of scripting languages like Perl, Python, TCL, etc.  Still it is a valuable book that somewhat illuminated (sometimes questionable) tradeoffs in designing C as a hybrid of BCPL and PL/1.  From the point of view of PL/1 heritage especially problematic was C treatment of strings (downgrading them into a library) and you can find some interesting info about this design decision in the book. The exercises are challenging and some of them are pretty creative, reminding The Art of Computer Programming  (there is a "solutions book" by different authors)

March 22, 1988 |  Prentice Hall PTR

Paperback: 274 pages ; Dimensions (in inches): 0.78 x 9.22 x 7.02

2nd edition

ISBN: 0131103628

Other Editions: Hardcover (2nd) | All Editions

Average Customer Review: 4.74 out of 5 stars Based on 186 reviews.  

 Eric Kent:

Yes, this is the classic text on C, but in 2003, there are better books. If you want to know what went on in the designers mind in the creation of C, get this book.

If you need a tutorial about C, there are better choices.

A reader (New York, USA)
4 out of 5 stars not the best, June 26, 2002

with all due respect to K&R, i have to point out that there are better C programming books for beginners. <C a software engineering approach>(3ed), is a good example: it does a better job cleaning the dusty corners of C.

for this K&R's book, one thing i don't understand is that they seem to be obssessed with using string processing functions as examples. the matter of fact is, the C standard library does a lousy job processing strings: most of the string processing functions are type unsafe and tedious to use.

as for why C is so popular (hence this book), one is because C is relatively easy to learn and use, compared with C++, ML etc. the other reason is that unix and most unix libraries are written in C. but with virtual machine around the corner, it's time to move one level up. even though i use C all the time for writing compilers and kernel drivers, other languages like java/ ML/ python/ lisp are much more fun to use.

HiRez (from California, USA ):
5 out of 5 stars Great Reference Book, Beginners Look Elsewhere, October 30, 2002

"The C Programming Language" is NOT a book for beginning programmers, or for those very new to C who wish to learn gradually. It is not much of a tutorial. It's written for either very experienced programmers coming from other languages, or for those who know the basics of C and need a reference book. The descriptions and examples are terse, and the learning curve is steep. Once you are comfortable programming in C, however, this is the one book you want next to you (and it will likely be the ONLY reference book you will ever need for straight ANSI C). Since it was written by the original authors of the C language, it's hard to imagine anyone being more authoritative on the subject, and although there's little hand-holding, it is well-written and pleasant enough to read through cover-to-cover. When you're ready to really get your hands dirty, do not hesitate to order this book.

casenagi (Peoria, AZ. United States )
4 out of 5 stars A great Bible. Not a great tutorial., June 28, 2003

I got this book and tried to use it to learn C. I got very frustrated and eventually went out and bought "C by Example" which is more of a beginners type book. After getting my feet wet with the basic concepts I came back to this book and could actually use it to learn from.

If you have no programming experience than I do not reccommend this as your first book. Get a more introductory book first and then dive into the K&R book.


Introductory (High school/community college level)

 C by Example

Beginning C

 Absolute Beginner's Guide to C C Programming in 12 Easy Lessons

[Dec 13, 1999] C by Example

****  Very readable and nice introduction to C, but no WEB site and no e-text. Contains more material than Absolute Beginner's Guide to C (see below). Decent use of figures and flowcharts. Probably one of the best illustrated C book that I saw (I still want to take a look on  the Illustrating C, though ;-). Small but important from teaching standpoint fact: the author always use brackets in if statements.  The book was typeset and organized well. Each chapter contains summary and exercises. I personally prefer having an abstract before each chapter, but summary is also important.  In this edition you can download all examples publisher page( Que.).
It is interesting to note that Greg Perry is one of the most prolific computer book authors I know and he wrote/coauthored more then two dozens of books !!!  It seems that he published his first book in 1984 Graphics and Sound on the Commodore 64 (Book and 48K Disk).
Shortcomings: Explanation of files and string operations is not that great.

Amazon price: $19.99
Paperback - 500 pages  (December 13, 1999)
Que Education & Training; ISBN: 0789722399 ;
Avg. Customer Review: 3.5 out of 5 stars
Number of Reviews: 13

[Nov 10, 1998]  Beginning C by Ivor Horton

****  It is a good book for beginners and its pretty cheap. There is a newer edition (Apress; 5th ed. 688 pages (February 26, 2013))  It's not great but still good in explaining pointers (some good information about this topic is available from the WEB -- see my C links). The chapters contains summaries, but does not contain questions or exercises, so it is less suitable than  C by Example for academic environment. Examples are good and code can be downloaded the Wrox Web site.  The author use the main sequence loops(ch4)-arrays(ch5)- strings(ch6)-pointers(ch7) which is a pretty reasonable approach for teaching the language to a beginner.  Pointer examples 7.1, and 7.8 are a really excellent graphical explanations of "what is what".
The shortcoming that I see is that the chapter on pointer can have several more typical examples. The chapter on string manipulation is really weak -- for example the author do not mention such important functions as str2cpy.
For an introductory book it's rather small book (only 525 pages). This book can be considered as the author third book on C (the first one was in 1994). See also the author interview  to amazon.com (it would be interesting to ask him why he does not consider illustrations as an important method of making programming more approachable for beginners ;-):

I think programming is easier that it looks to folks who haven't tried it, and I enjoy trying to make programming more approachable for beginners. My primary interest and motivation in writing lies in finding better ways to communicate the ideas -- to simplify them as much as possible, and to put them in an understandable context. I get a real kick out of every reader that writes in to Wrox saying they thought one of my books was great.

Ivor Horton authored 3 other books on C and the only problem with him that he managed to published three more books the same year ;-). 

1

  • Paperback: 525 pages
  • Publisher: Wrox Press; 2nd edition (August 1997)
  • Language: English
  • ISBN-10: 1861001142
  • ISBN-13: 978-1861001146
  • Product Dimensions: 8.4 x 7 x 1.5 inches

Paperback, 525pp

tony@pittarese.com (Pensacola, FL) , November 10, 1998

Generally a good beginning text

I've taught C classes using this as the textbook and find the students generally receptive to the book. As a previous reviewer mentioned some of the things the author does (such as define main with a void return type) are not correct, and he picks up the pace of coverage significantly in difficult areas such as pointers.

If you do buy this book, buy a good reference book such as "The C Programming Language" by Kernighan and Ritchie to go with it. Many library functions are not well documented in the Horton book.

If you know nothing about C and want to pick it up on your own, this book is one of the best I've seen at making it approachable. Its few errors are just (relatively) minor annoyances.

[Apr 18, 1994] Absolute Beginner's Guide to C by Greg M. Perry

***+ This book competes with Teach Yourself C in 24 Hours  If you've never programmed in C before, this is a good starting point, but probably C by Example is better. The book is friendly, clear and what is most important for high school it is not boring. Decent typographical quality, but again C by Example is better. The author introduced concepts of maps as a substitute for summary before each chapter -- a very interesting innovation. Maps contain a very useful information.  
This is an excellent book for a 15 years old. BTW pretty large subset of C is covered... More advanced and more suitable for high school is C by Example that was published 1993.

Carl A. Schreiber on August 10, 2000

Buy this book if you don't know where to start

Just wanted to add my name to the list of highly satisfied purchasers of this book. This is an excellent programming book for beginners, even if you have never programmed before. I originally started out with K&R C, but it was just too dry. Perry's book gives you the basics and the confidence to move on to more advanced books (like K&R C, Pointer on C, etc).
The only downside to the book is that there are no "problems" to work out. (Sure you can put his code in and watch it run--but where is the problem-solving in that?) However, there are numerous Computer Science Departments out there that do post their course work problems on the Net which can be easily downloaded and printed. Although, few also post the answers, so...good luck :)

Watch out for the chapters on getchar() and getch(). getch() only gets a page or two of explanation and leaves a hapless beginner to founder. K&R C did help here at this point, takes some hacking away at it, but it comes eventually. (Or maybe it will come really quickly and you'll think, that tripped him up? What a geek!)

Lastly, don't waste your hard-earned cash on a fancy-smancy C compiler. There are lots of good (and free) C compilers out there (GNU's gcc, borland DOS-based from [...] etc). Pick one, spend some time learning the switches and optimizations on it and then get to coding.

From there on out it is just code, code and code. And then debug...and debug...and debug...cry...and debug...

After this book I recommend cutting your teeth on K&R C (there's a reason they call it the C Bible). You can easily see the basics you picked up with Perry in K&R. It was a big help for me when I could see something familiar in the concepts and was able trudge on through.

C Programming in 12 Easy Lessons by Greg M. Perry, 1994

CD provides code and the genuine Windows 3.0 Turbo C++ 2.0 compiler. At least one reader got it with MS VC++ CD ROM.

NO LONGER A BEGINNER

I read this book, and shortly after began my own little business of C/C++ programming! This book is excellent, and if you use it right, can help you in many ways!

 C for Yourself : Learning C Using Experiments by Richard P. Halpern

Interesting approach which to a certain extent (and with certain success) was  used by Bruce Eckel in his Thinking in C++ and Thinking in java books...

Paperback / Published 1997

[June 1, 1994] llustrating C : (Ansi/Iso Version)  by Donald Alcock

So far I saw only one decently illustrated C book -- C by example. By there should be C -books for the visual thinker like me. I believe a picture is worth a thousand words. In this book drawings are used to illustrate important concepts and constructs. Includes complete list of ANSI standard library functions with prototypes and descriptions. Good examples of linked lists, b-trees, stacks, etc.

Donald Alcock / Paperback / Published 1994

Format: Spiral bound paperback, 2nd ed., 222pp.
ISBN: 0521468213
Publisher: Cambridge University Press
Pub. Date: June 1994

From the reader review:

I got an "A" in my C course. And I used 5 text books. The ONLY textbook that really helped was Alcock's "Illustrating C". It uses diagrams in a truly "revolutionary" way that really helps understanding. It's like moving from black and white to colour. The intention is to provide the student with a set of course notes, complete with instructor black-board diagrams -- only better. It really works. It's enjoyable. Did I mention I got an "A"? I hope that other textbook writers pick up on Mr. Alcock's unique style! Bravo

Table of Contents
 

  Preface  
Ch. 0 Starting from Zero

1

Ch. 1 An Overview of C

5

Ch. 2 Lexical Elements, Operators, and the C System

69

Ch. 3 The Fundamental Data Types

107

Ch. 4 Flow of Control

147

Ch. 5 Functions

197

Ch. 6 Arrays, Pointers, and Strings

245

Ch. 7 Bitwise Operators and Enumeration Types

331

Ch. 8 The Preprocessor

365

Ch. 9 Structures and Unions

407

Ch. 10 Structures and List Processing

447

Ch. 11 Input/Output and the Operating System

493

Ch. 12 Advanced Applications

555

Ch. 13 Moving from C to C++

593

Ch. 14 Moving from C to Java

625

App. A The Standard Library

641

App. B Language Syntax
  Preface  
1 Introduction 1
2 Concepts 11
3 Components 27
4 Control 51
5 Organization 65
6 Pointers, Arrays, Strings 79
7 Input, Output 107
8 Structures, Unions 125
9 Dynamic Storage 143
10 Library 163
11 Summaries 195
  Bibliography 209
  Index 210

Introductory-II (University level)

 C: Step-by-step

 A book on C

Beginning C

 C : Step-By-Step   by Mitchell Waite, Stephen W. Prata, 1989

**** I would recommend this as your first book for the university-level course. It is reasonably priced and pretty recent. A very nice presentation. Designed for a 1- or 2-semester course. Includes exercises and quizzes. Instructor's guide is available. There is also C++ book of the same authors C++ Primer Plus that with some reservations can also be used as an intro book.

Paperback - 629 pages (April 1989)
Sams; ISBN: 0672226510 ; Dimensions (in inches): 1.10 x 9.17 x 7.39
Amazon.com Sales Rank: 106,932
Avg. Customer Review:
Number of Reviews: 2

Preface
Acknowledgements
Trademarks
1 C and Programming 1
2 Introducing C 21
3 Data and C 45
4 Character Strings and Formatted Input/Output 77
5 Operators, Expressions, and Statements 113
6 C Control Staing 151
7 C Control Statements: Branching and Jumps 197
8 Character Input/Output and Redirection 239
9 Functions 273
10 Arrays and Pointers 313
11 Character Strings and String Functions 353
12 File Input/Output 395
13 Storage Classes and Program Development 429
14 Structures and Other Data Forms 465
15 Bit Fiddling 507
16 The C Preprocessor and the C Library 529
App. A - Additional Reading 569
App. B - C Operators 571
App. C - Basic Types and Storage Classes 579
App. D - Expressions, Statements, and Program Flow 583
App. E - ASCII Table 591
App. F - Standard I/O Functions (ANSI C) 595
Answers to Odd-Numbered Review Questions 599
Index 617

A Book on C : Programming in C by Al Kelley, Ira Pohl

***+ Good... It is a university type book and not very suitable for high school students. If you solve the exercises (and they are doable) you will be on a decent level of mastering the language (libraries are quite a different story). Only 593 pages devoted to C and that diminish the value of the book -- the second part of the book is essentially useless and diminish the value -- there are plenty of C++ and Java books on the market. On a positive side it provides the useful introduction to pointers and pointer arithmetic. The examples are well integrated into the flow of presentation, and it is well indexed (it is an excellent reference book).
Paperback - 726 pages 4th edition (January 1998)
Addison-Wesley Pub Co; ISBN: 0201183994 ;

You can read an interview with Ira Pohl.

lore. There is a very minimal amount of code in the book. Learning the correct way to free a singly-linked list and how to declare arrays and function pointers is by no means in the "expert" category in my opinion. Much of the material in this book is presented in a first semester course on programming and all of the topics that are superficially covered in this tiny book are better explained in other books.

I found about 4 to 5 pages of useful information in the book and the rest was just fluf. If you want to learn about operating systems, assembly language, pointers and dynamic memory management, data structures, or algorithms, then get books that deal with topics explicitly. You wont find that kind of information in this little book. This book concerns itself with topics that show how to unscramble poorly written code like: z = y+++x; I dont know anyone who writes code like that!

If your still having trouble with arrays and pointers, then this book can be of help, otherwise I dont think the price of this book is justified.

Mike Vanier (mvanier@bbb.caltech.edu) from Pasadena, California , March 18, 1999 ****
Generally excellent, but marred by lots of typos
This book is an extremely valuable discussion of a variety of topics about the C language that are poorly described in other books, ranging from how to read complicated typedefs to how your C program compiles and runs on the computer. The material on C++ is quite dated (the book dates from 1994). However, the most annoying thing is the large number of typos. There is a whole figure missing on one page, and there are numerous smaller typos (mostly obvious) throughout the text. There are two big errata sheets on the author's web site for prevt the author's offer to pay $1 for mistakes in the book reported to him DOES NOT apply to typos, only to technical corrections.

nonblonde5@aol.com , September 11, 1998 *
Dark star: Burned out Slag!
I you really find anything in this book very helpful you'll never make it as a C programmer. Any reasonablly bright programmer can figure out everything in this book fairly quickly. If you want to learn C study the standard library and emulate it. Pay attention to th details, to the way pointers are used, etc. Learn tactics to eliminate any habitual errors you're making and read the code listings in magazines. If you run accross mangle code like this book deciphers, fire the programmer or find another job! Professionalism prohibits one from writing obscure and ill-convieved code such as this. There is one absolute truth in programming, badly written code stems from poorly understanding the problem. (Not from the language you're using!) Study the problem until you understand it well enough to explain it easily to someone else and your code will magically become simple, fast, efficient and elegant. If you want a good laugh buy a comic book, its cheaper and more targeted to that end.

*** Programming in ANSI C by Stephen G. Kochan, 1994

Solid but there are better general (university level) books on C. Often can be bought with 50% discount.

**+ C : A Software Engineering Approach by Peter A. Darnell, Philip E. Margolis,1996

Contains good introduction to pointers...

Practical C Programming (Nutshell Handbook) by Steve Oualline,1997

**+ C by Discovery by L.S. Foster

Expensive university style book. The author does not have a real grasp of the language as a whole, so the language is presented as a sequence of non related elements that one needs to know.  Very dull, boring with vulgar and non-related to topics illustrations. Very bad typographic quality. IMHO not suitable for self-study. Probably can be OK in a university environment with a strong professor, but even in this case you better buy another one.


C on Unix

The C-Unix Programmer's Guide by Jason W. Bacon

Paperback: 670 pages ; Dimensions (in inches): 1.50 x 9.75 x 7.00

Publisher: Acadix Software & Consulting; (April 1999)

ISBN: 0967059607

the author

0 out of 5 stars Why I wrote "The C/Unix Programmer's Guide", April 8, 1999 When I started teaching C at UW-Milwaukee, students would often come to me with simple questions about library functions, using "make", and the like. Not being one to give up answers easily, my first response was usually "did you check the man page?" In response, students would often say things like, "yes, but the language it's written in isn't offered at this school". After a short time, I began to think, "Hey, wouldn't it be nice if someone wrote a book about this stuff?". We looked around, couldn't find one, and resigned ourselves to using generic C books, along with two additional recommended books, which were grossly underutilized, and really cut into the students' entertainment budget. A few years later, I thought to myself, "Hey, wouldn't it be nice if someone wrote a book about this stuff?" (Dejavu!) Then it hit me that SOMEONE had to take action, and that's how "The C/Unix Programmer's Guide" came to be.

I've programmed on many different platforms over the past 18 years, and C and Unix provide the most enjoyable environment I've found. I hope you'll find this book helpful in getting you into Unix programming, so you can share in the experience!

ANNMARIE K MANZITTI from Saint Clair Shores,
The C Unix Programmer's Guide was the only book I could find that provided useful background information as well as thoughtful, applicable coding examples. What impressed me most is the fact that all the information found in the man pages on C as well as further insight was combined into an easily readable and searchable format. As a student of computer science, I was familiar with Borland/Microsoft C++, but I had no previous experience with C or Unix. This book helped me get an A (one of three) in Operating Systems! While my classmates struggled on assignments, I was able to find exactly what I needed to complete the assignments on time. I truly believe that without this book I would not have performed nearly as well. Thank you Mr. Bacon for writing such a great book!
Sams Teach Yourself C for Linux Programming in 21 Days by by Erik de Castro Lopo, Bradley L. Jones, Peter G. Aitken

Table of contents

Paperback - 768 pages 1 edition (December 22, 1999)
Sams; ISBN: 0672315971 ; Dimensions (in inches): 1.80 x 9.08 x 7.40
Geoff Thornton (see more about me) from Oakey, Australia

***** Right on Target

I have been learning C++ for a while on a linux platform, and started to look at some C stuff in the kernel and other programs to broaden my knowledge. I saw that that although C++ is derived from C it doesn't necessarily do stuff the same way, so I picked up this book. It was right on the mark! and explained some peculiar C stuff right away and in a good easy to read style. It consolidated my knowledge well an added to my understanding, particularly with pointers to pointers by including well thought out text and pictures well done. It also provides a good tutorial into basic GCC usage and the peculirities of programming for Linux, I recomend it.

***** EXCELLENT TUTORIAL

Aside from teaching myself BASIC on my Commodore 64 way-back-when...this is the first programming language I have learned and I owe it all to this book. It is fantastic. Step-by-step, they take you from defining/describing what C is, to writing real-world programs.

You would do well to ignore the ignorant reviewers who complain about the title "21 days" (or 24 hours). These people are only looking for excuses. All the 'Teach yourself in 21 Days' books should be seen as 21 LESSONS (and the 24 hours as 24 LESSONS). Could I do it in 21 days? Yes, following the book's plan I could. Easily. But, I have a full time job, family, etc. and these factors can NOT be held accountable by the authors. 21 Excellent Lessons.

Days, Hours, months...whatever YOUR pace is, this book does an EXCELLENT job of teaching you what you need to know to write real-world, practical C Programs. I first learned Unix with using of the 'Teach yourself' books and have been a devoted reader ever since.

Some days I have time to go through 2 lessons while other times a single lesson may take me a day or 2 due to time constraints. Bottom line: I LEARNED C FROM THIS BOOK AND YOU CAN TOO.

I am NOT a computer science major. I am a self-taught Linux hacker who never wrote a line of code (except for a little BASIC 15 years ago) and I am now writing C code and tinkering with Open Source programs. (I'm running Slackware and Debian, if you were wondering).

Other tutorials are fine but many assume you are using Windows 95/98. "C is C is C", but this book is written in 'Linuxland' for Linux users; GCC is carefully explained and used here. I use and love the Nedit editor which was one of several recommended in the book.

New to C? Or want a fresh start from the beginning while in a Linux environment? GET THIS BOOK and digest all 21 LESSONS at your own pace!

Glibc : A Comprehensive Reference to Gnu/Linux Libc by Jeff Garzik, 2000

**** Advanced Unix Programming by Marc J. Rochkind,1986

**** Unix Systems Programming for Svr4 (Nutshell Handbook) by David A. Curry,1996

??? [ June 14, 1999] The C/Unix Programmer's Guide by Jason W. Bacon

[ June 14, 1999] Unix System Programming : A Programmer's Guide to Software Development by Keith Haviland, 1999

Previous  version was published in 1988 ! Candidate for Guinness record -- 11 year since the first edition.

It Would be Interesting to Read the Following Books

??? C for Yourself : Learning C Using Experiments ~ Usually ships in 24 hours

Richard P. Halpern / Paperback / Published 1997
Amazon price: $36.00

Interesting approach which to a certain extent (and with certain success) was  used by Bruce Eckel in his Thinking in C++ and Thinking in java books...

??? Illustrating C : (Ansi/Iso Version)  

Donald Alcock / Paperback / Published 1994
Amazon Price: $24.95

Format: Spiral bound paperback, 2nd ed., 222pp.
ISBN: 0521468213
Publisher: Cambridge University Press
Pub. Date: June 1994

So far I saw only one decently illustrated C book -- C by example. By there should be C -books for the visual thinker like me. I believe a picture is worth a thousand words. In this book drawings are used to illustrate important concepts and constructs. Includes complete list of ANSI standard library functions with prototypes and descriptions. Good examples of linked lists, b-trees, stacks, etc. From the reader review:

I got an "A" in my C course. And I used 5 text books. The ONLY textbook that really helped was Alcock's "Illustrating C". It uses diagrams in a truly "revolutionary" way that really helps understanding. It's like moving from black and white to colour. The intention is to provide the student with a set of course notes, complete with instructor black-board diagrams -- only better. It really works. It's enjoyable. Did I mention I got an "A"? I hope that other textbook writers pick up on Mr. Alcock's unique style! Bravo

Table of Contents

  Preface  
Ch. 0 Starting from Zero

1

Ch. 1 An Overview of C

5

Ch. 2 Lexical Elements, Operators, and the C System

69

Ch. 3 The Fundamental Data Types

107

Ch. 4 Flow of Control

147

Ch. 5 Functions

197

Ch. 6 Arrays, Pointers, and Strings

245

Ch. 7 Bitwise Operators and Enumeration Types

331

Ch. 8 The Preprocessor

365

Ch. 9 Structures and Unions

407

Ch. 10 Structures and List Processing

447

Ch. 11 Input/Output and the Operating System

493

Ch. 12 Advanced Applications

555

Ch. 13 Moving from C to C++

593

Ch. 14 Moving from C to Java

625

App. A The Standard Library

641

App. B Language Syntax
Preface
1 Introduction 1
2 Concepts 11
3 Components 27
4 Control 51
5 Organization 65
6 Pointers, Arrays, Strings 79
7 Input, Output 107
8 Structures, Unions 125
9 Dynamic Storage 143
10 Library 163
11 Summaries 195
Bibliography 209
Index 210

Advanced

There are several other sources of advanced C programming knowledge then books devoted directly to C:

Advanced Programming in the Unix Environment  by W. Richard Stevens

Addison-Wesley

Hardcover / Published 1992
Classic book.

C Interfaces and Implementations : Techniques for Creating Reusable Software  by David R. Hanson

*****

Addison-Wesley  

David R. Hanson / Paperback / Published 1997
Average Customer Review: 5 out of 5 stars
TOC

Preface

Home page for C Interfaces and Implementations

Chapter 3 Atoms

This is the most impressive advanced C book. Devid Hanson is the author of  lcc A retargetable C compiler (with Chris Fraser, the author of copt, a simple, retargetable peephole optimizer).

Please visit the author Home page

5 out of 5 stars Probably the best advanced C book in existance...
Reviewer: tqbf@pobox.com from San Francisco, CA      August 4, 1999
Clearly written and well organized, this book presents more than 20 _highly_ useful library interfaces for containers, string management, mathematics, and memory management. There isn't a line of code in the whole book that you couldn't take and use, verbatim, in a project today --- after reading this book, you'll probably never have a compelling reason to write a string library or a hash table interface again.

More importantly, though, each example library illustrates ways to effectively design consistant and useable library interfaces, from generic ADTs to system service wrappers. After reading this book, you'll not only have an arsenal of useful code to leverage, but also a good understanding of how to design clean, modular, reuseable components for your application.

Hanson's C code is extremely clear and concise. Even if you've been programming professionally for a long time, you are likely to pick up a useful technique or two just by reading the source code in the book. If you're not very experienced, you will learn about C programming idioms that will be valuable to you in future work.

I really like how this book, and Hanson's other book ("A Retargetable C Compiler: Design and Implementation") are put together. Hanson employs Literate Programming techniques to weave the code he's discussing together with his discussion. This makes it very simple to track what portions of the code are being talked about at any point

 5 out of 5 starswonderful C book.
Reviewer: Defang Zhou (dzhou@zoo.uvm.edu) from Vermont, USA      July 15, 1999
This book is a highway leading you form toy project to real-life project. The author told you exactly what you want when you programming. The book detailed a lot of tricky stuff which would haunted you for a long time before you read this book.

The C-Unix Programmer's Guide by Jason W. Bacon

Paperback: 670 pages ; Dimensions (in inches): 1.50 x 9.75 x 7.00

Publisher: Acadix Software & Consulting; (April 1999)

ISBN: 0967059607

the author

0 out of 5 stars Why I wrote "The C/Unix Programmer's Guide", April 8, 1999 When I started teaching C at UW-Milwaukee, students would often come to me with simple questions about library functions, using "make", and the like. Not being one to give up answers easily, my first response was usually "did you check the man page?" In response, students would often say things like, "yes, but the language it's written in isn't offered at this school". After a short time, I began to think, "Hey, wouldn't it be nice if someone wrote a book about this stuff?". We looked around, couldn't find one, and resigned ourselves to using generic C books, along with two additional recommended books, which were grossly underutilized, and really cut into the students' entertainment budget. A few years later, I thought to myself, "Hey, wouldn't it be nice if someone wrote a book about this stuff?" (Dejavu!) Then it hit me that SOMEONE had to take action, and that's how "The C/Unix Programmer's Guide" came to be.

I've programmed on many different platforms over the past 18 years, and C and Unix provide the most enjoyable environment I've found. I hope you'll find this book helpful in getting you into Unix programming, so you can share in the experience!

ANNMARIE K MANZITTI from Saint Clair Shores,
The C Unix Programmer's Guide was the only book I could find that provided useful background information as well as thoughtful, applicable coding examples. What impressed me most is the fact that all the information found in the man pages on C as well as further insight was combined into an easily readable and searchable format. As a student of computer science, I was familiar with Borland/Microsoft C++, but I had no previous experience with C or Unix. This book helped me get an A (one of three) in Operating Systems! While my classmates struggled on assignments, I was able to find exactly what I needed to complete the assignments on time. I truly believe that without this book I would not have performed nearly as well. Thank you Mr. Bacon for writing such a great book!
 

Glibc : A Comprehensive Reference to Gnu/Linux Libc by Jeff Garzik, 2000

**** Advanced Unix Programming by Marc J. Rochkind,1986

**** Unix Systems Programming for Svr4 (Nutshell Handbook) by David A. Curry,1996

[Jun 14, 1999] The C/Unix Programmer's Guide by Jason W. Bacon

[Jun 14, 1999] Unix System Programming : A Programmer's Guide to Software Development by Keith Haviland, 1999

Previous  version was published in 1988 ! Candidate for Guinness record -- 11 year since the first edition.

[Jul 7, 2000] C Unleashed (Unleashed) by Richard Heathfield, et all

This huge (1400 pages!) intermediate/advanced book on C covers wide range of topics including algorithms. Can be used in Advanced C courses. Should not be your first or only book.  You need some understanding of C to benefit from the book. It covers pretty advanced things. It reminds that C is a simple but extremely powerful language and that in certain areas it can give any other language including Java a run for the money ;-)  I think this is one of the best books in Sams Unleashed series and one of the most important C books published recently. It’s really well written and comprehensive.

Paperback - 1344 pages Book & Cd edition (July 7, 2000)
Sams; ISBN: 0672318962 ; Dimensions (in inches): 2.20 x 9.10 x 7.34

Unfortunately amazon.com does not provide the table of contents for the book, which is pretty impressive. Here is a very compressed TOC:

Part I: The C Language Revisited ..... 1 1: C Programmer Unleashed! ..... 3 2: Holy Wars: Programming Standards-Causes and Cures ..... 21 3: Optimization ..... 75 4: Dealing with Dates ..... 113 5: Playing with Bits and Bytes ..... 131 6: Offline Data Storage and Retrieval ..... 161 7: When Things Go Wrong: Code-Mending ..... 203 8: Managing Memory ..... 259 9: Simulations and Controllers ..... 299 10: Recursion ..... 315

Part II: Data Organization ..... 341 11: Simple Abstract Data Structures ..... 343 12: Binary Search Trees ..... 455 13: Rapid Sorting Techniques ..... 507 14: Tries ..... 571 15: Sparse Matrix ..... 591 16: Working with Graphs ..... 641

Part III: Advanced Topics ..... 709 17: Matrix Arithmetic ..... 711 18: Digital Signal Processing ..... 759 19: Expression Parsing and Evaluation ..... 839 20: Making Software Tools ..... 911 21: Genetic Algorithms ..... 977 22: Cross-Platform Development: Communications Programming ..... 1001 23: Writing Common Gateway Interface (CGI) Applications in C ..... 1053 24: Arbitrary Precision Arithmetic ..... 1087

As one can see the book covers a wide range of topics including such forgotten in programming things as optimization of code and  expression parsing and evaluation. Some topics like sorting, searching, tries, graph algorithms actually belong to a typical algorithms and data structure course. But the book covers them much more realistically.  Examples are written in a very decent style using the latest version of the language and are quite useful.

And for such amount of information the price is very good.

All-in all this is a rare solid C book in the current C++ oriented world and I highly recommend it for developers and university students.

Book Description

Covers the recently ratified new C standard - C9X

Focuses on portable programming, providing code that is useful across all platforms, including mainframes

CD-ROM contains arbitrary precision math and matrix math libraries, tree and sorting libraries, debugging trace routines, Julian date conversion routines, memory allocation tracking source code, DJGPP compiler and a draft of the new C9X standards

Book Info
Presents focused explanations of the core features and complexities of C, including optimization and performance, handling I/O streams, managing memory, debugging and diagnostics, trees and advanced data structures, matrix arithmetic, digital signal processing, encryption, and more. Softcover.

Practical C Programming (Nutshell Handbook)  by Steve Oualline, Andy Oram

***+

 (Editor) / Paperback / Published 1997
Amazon price: $26.36 ~ You Save: $6.59 (20%)

Paperback - 454 pages 3rd edition (September 1997)
O'Reilly & Associates; ISBN: 1565923065 ; Dimensions (in inches): 0.93 x 9.19 x 7.03
Amazon.com Sales Rank: 3,420
Avg. Customer Review: ****
Number of Reviews: 22

Fun to read.  Covers floating point numbers and their pitfalls. Non Unix related stuff is outdated and weak. Chapter about pointers in available online. It has very good graphic and generally can be considered as the best explanation of pointers on the WEB.  The source code is available on the publisher's Internet server. One of the best things about this book is the exercises that it gives, at the end of each chapter.

Table of Contents

Preface

I. Basics

1. What Is C?

2. Basics of Program Writing

3. Style

4. Basic Declarations and Expressions

5. Arrays, Qualifiers, and Reading Numbers

6. Decision and Control Statements

7. Programming Process

II. Simple Programming

8. More Control Statements

9. Variable Scope and Functions

10. C Preprocessor

11. Bit Operations

12. Advanced Types

13. Simple Pointers

14. File Input/Output

15. Debugging and Optimization

16. Floating Point

III. Advanced Programming Concepts

17. Advanced Pointers

18. Modular Programming

19. Ancient Compilers

20. Portability Problems

21. C's Dustier Corners

22. Putting It All Together

23. Programming Adages

IV. Other Language Features

A. ASCII Table

B. Ranges and Parameter Passing Conversions

C. Operator Precedence Rules

D. A Program to Compute a Sine Using a Power Series

Glossary

Index

4 out of 5 stars Very good, not perfect, July 23, 2000
Reviewer: Chad C. Keep from northglenn, co USA
The author has many good points about style, many valid. Except that I find his over use of comments unessicary, especially when commenting declarations of variables. Simply unneeded (most of the time) If you name variables correctly. While I definitely do not subscribe to the idea that hard code to write should be hard code to read. Some basic literacy, in common variable names such as I or j for integer counters. I am about Ѕ way though the book, I particularly liked chapter 7 (Programming process). My only other criticism of this good book, is it doesn't prepare the reader much to some of the common bad conventions and bad habits some people have, and likely will see. The book is pretty easy to read and it's a good beginner book, if not the preferred beginner book, just mildly over hyped. I learned some new things, a good read.

 

5 out of 5 stars The BEST C book this C programmer has ever read!, January 26, 1998
Reviewer: lpike@cybertron.com from Florida, USA
I own literally shelves full of C and C++ books, and I've been programming in C professionally for almost ten years. This is THE book to have on C. I insist that every junior programmer I work with has a copy! It addresses not only programming syntax but good software engineering practices, and it has the most realistic real-world types of problems I have ever seen. When he asks you to find the bug in a section of code, those are exactly the type of bugs I see in novice programmers' code again and again. C is not a language for people who need to be coddled, and this book doesn't hold your hand; it just gives you lots of great information on C and how to do good software engineering. If you are a serious C professional, you should own this book.

C & C++ Code Capsules: A Guide for Practitioners  by Chuck D. Allison

In his review Stan Kelly-Bootle (skb@crl.com) -- a respectable author himself (of Understanding Unix and  The Computer Contradictionary fame) -- wrote: 

One of the best C/C++ books I've encountered. For a more detailed review, please see my Devil's Advocate column in UNIX Reveiw/Performance Computing Feb'99

Unix Systems Programming for Svr4 (Nutshell Handbook) 

David A. Curry / Paperback / Published 1996
Amazon price: $27.96 ~ You Save: $6.99 (20%)

Unix Network Programming : Networking Apis: Sockets and Xti (Volume 1)

W. Richard Stevens;

Hardcover 

IMHO system programming now became to a large extent network programming

UNIX Network Programming: Interprocess Communications (Volume 2) -- W. Richard Stevens; Hardcover\

Practical Unix Programming : A Guide to Concurrency, Communication, and Multithreading 

Kay A. Robbins, et al / Hardcover / Published 1996
Amazon price: $56.00

Advanced C/Book and Disk

Peter D. Hipson / Paperback / Published 1992
(Not Available from Amazon)

Decent and can be bought with 50% discount or more from  deep discount bookstores...

Expert C Programming by Peter van der Linden

3 out of 5 stars Interesting but not oustanding., July 30, 2003
 
  Reviewer: secretbearer (see more about me) from San Diego, CA United States
At first glance the book purports to be similar to other early Bell Labs books about C, specifically, "The C Programming Language", "The Elements of Programming Style", "The C Standard I/O Library", and (not bell labs but another great book) "C: A Reference Manual", etc.

However, the author suffers from being a compiler-writer who doesn't really understand the design philosophy of the C language. This is the same afflication that Bjarne Stroustroup and other language designers suffer from. For example, he complains that only 3% of switch statements in his own compiler have case statement fall-throughs, therefore "We conclude that default fall-through on switches is a design defect in C." (p. 38). This is a rant of a dangerous person. Two underlying concepts of the C language are, "No hidden instructions generated where I cannot see them," and "When in doubt, provide open operators for maximum expressiveness - do not restrict expressiveness". Just because this particular compiler-writer lacks the inventiveness to do interesting things with a switch statement he proposes to force his biases upon the rest of the world. I have seen and written macro libraries that allow you to suspend & resume function calls, and these libraries perform fall-through 100% of the time. Therefore, this book is in error and the author is a victim of his own lack of creativity.

Another thing I disliked was a tendency to try to impress the reader with irrelevant facts that are not germane to the subject, such as typos in the ANSI C standard or tired-out stories on how to burn out IBM PC displays. These things are irrelevant and do not belong within the book.

I recommend you check out the book from a library (as I did) and please do not waste your money on this book.


Style

***** The Elements of Programming Style by Brian W. Kernighan, P. J. Plauger,1988

This is classic book on programming style. Must have. See my classic bookshelf.

The Elements of C Programming Style by Jay Ranade, Alan Nash,Published 1992

C Elements of Style : The Programmer's Style Manual for Elegant C and C++ Programs by Steve Oualline,1992


Reference

[Feb 21, 2002] C : A Reference Manual by Samuel P. Harbison, Guy L. Steele

***** It might be a bad time for good reference books. I have found its index to be inadequate. One interesting review from Amazon.com states that it's a very difficult task to write a decent reference book -- you need to compete with web sites that have much better searching and hyperlinking than the book.
Still Guy Steele is a unique author and the book worth reading.

 

Paperback: 560 pages ; Dimensions (in inches): 0.83 x 9.28 x 7.04

Publisher: Prentice Hall; 5th edition (February 21, 2002)

ISBN: 013089592X
 

It might be a bad time for good reference books. I have found its index to be inadequate. One interesting review from Amazon.com states that it's a very difficult task to write a decent reference book -- you need to compete with web sites that have much better searching and hyperlinking than the book.

Still Guy Steele is a unique author and the book worth reading.

Gerry (see more about me) from Perth, Western Australia

5 out of 5 stars A reference + more, September 14, 2003

My friend borrowed this book from me about two weeks ago and won't give it back, I have since turned to my left side over 20 times looking for it to no avail (serious). If I was to describe this book in one word it would be "Clean", everything in this book is just beautiful, from the ease of use, to the technical details, to even it's fonts and thickness of the pages, everything is so clean and precise that the book makes you want to read it and perhaps even keep it on a pillow next to you at night (but enough about my sheltered life).

One thing that I did not expect before receiving this book was the amazing language overview that comes with the book, they could have sold the book with just that part and it would have still been great. The overview goes into great detail and is really good at pointing out things that other C books miss and the fact that the author is well versed on all the features of the latest C99 Standard adds even more to the wealth of information. My favorite part of the book is the part on the C Pre-processor, which had a great deal of information that I was not previously aware of.

Apart from that, there is the reference side which has all the detail you could ever want in a standard library reference book, all in a very simple to search format (Oh yeah and I should mention, the index kicks ....).

So long story short, if you want a single book that you can turn to for 99.9% of your standard C problems, divorce your wife and give that spot in your bed to "C: A Reference Manual (5th Edition)"... or 6th if it's out by the time you read this review.

ps. If your looking for this book in a bookstore make sure the lady types in "C: A Reference Manual (5th Edition)" and not "See: A Reference Manual (5th Edition)", long story, I'll tell you another time.

Here is counterview:

Despite the rave reviews, I found this book rather disappointing. It reads like the ISO/ANSI official language grammar, that is, JUST THE FACTS AND IN TECHNICAL TERMS ONLY, with very few examples of how to use the language constructs. If this is your only C reference, then your in for some long hours at the computer. I would only recommend this book if you have an additional C reference manual that shows examples of how to use a construct. This book only gives you the technical definition

for the construct i.e. parameters and return values along with unnecessary technical jargon in 90 percent of the book.

It is an ok REFERENCE book if you don't have the official ISO/ANSI C grammar lying around. But look elsewhere for how to use the grammar productions effectively!

Here is another review that I got directly from a reader (it does not answers the question of closeness to ISO/ANSI official document raise in the prev review, though):
I totally disagree on the reviews you quoted from Amazon.com. Don't forget this book is written as a reference manual. As such, it is assumed that the readers should have some fundamental knowledge of C. That is also why it is written the way it is.

I have been using the 3rd edition of the book for quite a while now. Since buying the book, I have never had the need to turn to any other books. I think this book thoroughly deserves the rave reviews that it received. It certainly deserves more than the 3 stars you gave it.

Like all C programmers, I keep a copy of K&R's C book on my bookshelf just in case. But I haven't turned to it since I bought "C : A Reference Manual".  It has been widely discussed on the Net about the K&R C book, and it is universally accepted as a very terse book - not very readable, especially for beginners. Written by the inventors of the language, of course it is
natural to regard it as the definitive reference. But it doesn't necessarily make it a better book than the others. I think as a C book, it probably only deserves 3 stars!

The Standard C Library by P. J. Plauger,1991

A Customer

Written by Plauger in when he was at his sharpest., May 13, 1997

P.J. Plauger was operating at full-tilt when he wrote this excellent guide to the implementation and use of the C library. In particular, his treatment (and history) of <stdio.h> is outstanding.

Unfortunately, the Plauger of recent history is apparently being held captive by Microsoft. His "C/C++ User's Journal" is brimming with non-portable Windows topics of little value to those interested in Standard C and, of course, the Unix platform...where C began. Plauger has apparently forgotten the roots of the C programming language. Nonetheless, this is among the five "must have" books for the serious C programmer

The Essentials of C Programming Language (Essentials) by Ernest C. Ackermann, James R. Ogden,1998


Pointers, Memory Management, Functions and Files

[Jul 25, 1997] Pointers on C by Kenneth A. Reek,1997

[Reek1997] Even if the title of the book is "Pointers on C", it doesn't talk about the pointer all through this book. Instead, it just puts more emphasis on pointers and teaches you C.
VANCE CHEN (see more about me) from Boston, MA
4 out of 5 stars My 2nd C Book, November 13, 2002

After knowing the basics of C. It's my second C book.
Generally, not suitable for "pure" novice without any programming experience, but if you want to know a little more about C or if you already have learned some other languages, you can try this book.

This is a very good book for sure. It points out the common programming error, tips and the differences between K&R C and ANSI C. However, the only thing I am disappointed with this book is "a good start, but not a very good end". Those latter chapters really show the concepts we need to know but without sufficient examples to demonstrate them out.

Even if the title of the book is "Pointers on C", it doesn't talk about the pointer all through this book. Instead, it just puts more emphasis on pointers and teaches you C.

Lee Carlson (Global Mathematics, Saint Louis, Missouri USA )
5 out of 5 stars The best book on C in print, April 11, 2002

For those who need an up-to-date ANSI overview of the C programming language, this book would be an excellent introduction. Pointers are usually a stumbling block for those programming C initially, but the author does an excellent job of detailing the use of pointers in this book. The use of pointers dominates the entire book, and after studying it, readers will have a thorough, practical knowledge of how to take advantage of the performance power of C language, due mostly to its use of pointers. For those programming in a commercial/business environment, where coding practices are strictly enforced, this book would be a good desk reference, as the author includes discussion of sound programming practices throughout the book. The book would also serve well those involved in teaching C in the classroom, as it contains many exercises, ranging from very easy to highly advanced. And for those readers frequently facing legacy code in C, such as scientific programmers, the author cites the differences between the older "Kernighan-Ritchie" C, and the more modern ANSI C, the latter being used in the book. These differences are indicated in the margin of the book, and are of an enormous help for those who must take older code and get it to run on more up-to-date compilers.

The author also endeavors to organize the C code for those who are going on to study C++ and the accompanying object-oriented approach to programming. In addition, he emphasizes how to write C code so as to make it more portable. For those writing commercial applications in C that must be used on different platforms, this is a very important issue of course. Particularly well-written is the author's discussion on the storage class of a variable, noting, for those such as I who are pre-disposed to using recursion, that the formal parameters to a function cannot be static if recursion is to be supported.

The book is full of examples such as this that give readers insight on the workings of C that fit their particular programming style. He does discuss 'goto' statements in relation to function scope and in C statement structures, but, thankfully, recommends such statements never be used. He gives an interesting counterexample to those who say that goto statements must be used to break out of nested loops.

Also, the author discusses the difference between L- and R-values, and this is not usually included in beginning books on C. Dynamic memory allocation has been at times a somewhat painful aspect of programming in C, but the author shows how to do straightforwardly in the book.

Having a book like this that is predominantly about pointers is quite a blessing for those who are inexperienced with them or for more experienced programmers who are still uncomfortable with their use. It is not uncommon these days to have to write programs in one's professional work that involve triple pointers or even quadruple pointers. In addition, for embedded systems programming, the use of pointer arithmetic is almost mandatory. This also is true for writing applications in cryptography using C. The author does pay careful attention to pointer arithmetic in the book.

The performance pay-off for using pointers is undeniable, and so a thorough knowledge of their use and pit-falls is of upmost importance for those C programmers who are involved in writing performance-sensitive applications. The author discusses in detail what can happen when pointers are misused and gives many examples of what to avoid and good hints for the proper use of pointers. He recommends against the use of the 'null' pointer in array searching, and recommends a strategy for circumventing them. Some very helpful diagrams are given for explaining pointer expressions. In addition, the author gives helpful hints on when to use pointers and not subscripts when manipulating arrays in C. The performance issues involved in this are extremely important in scientific programming using C. The author gives a very interesting example of the differences in performance using pointers involving a program to copy the contents of one array into another. Arrays of pointers, useful in data mining applications, are also given ample treatment in this book, and the author addresses the issue of when to use a matrix instead of an array of pointers.

The author also gives an effective presentation of functions in C, particularly the construction of recursive functions, and he employs some useful diagrams to illustrate how the variables in a recursive function call change on the stack. The performance hit experienced by using recursion versus iterative loops is discussed in a standard way via the Fibonacci series. Those readers raised in the functional programming paradigm will want to pay notice these performance issues when using C to do recursion. Along the same lines, the author shows how to implement functions with variable argument lists in C. This is another topic that is frequently passed over in beginning books on C.

The author's treatment of data structures in C is also very nicely done, and he includes again a topic not usually treated in beginning books on C, namely the concept of a self-referential data structure. These are very important in applications in artificial intelligence, and the author shows how to implement them in C using a data structure that points to itself. This leads to a discussion of incomplete declarations. Very helpful diagrams are used again to discuss how to access members of data structures and how to point to data structures. Bit fields, so often used in embedded system applications, are also given a detailed treatment.

Introductory C : Pointers, Function, and Files by Richard L. Petersen, Richard L. Peterson, 1996

Mastering C Pointers : Tools for Programming Power/Book With Disk by Robert J. Traister,1993

C Pointers and Dynamic Memory Management/Book and Disk by Michael C. Daconta,1993


Optimization

Optimizing C ++ by Steve Heller, 1998

Actually this is not a book about C++ -- it is mainly about optimizing C.

Optimizing C With Assembly Code by Peter Gulutzan, Trudy Pelzer

Efficient C by Thomas Plum, Jim Brodie,1985

Efficient C Programming : A Practical Approach by Mark Allen Weiss,1995


Errors and Debugging

**** C Traps and Pitfalls by Andrew Koenig

Textbook Binding - 147 pages (October 1988)
Addison-Wesley Pub Co; ISBN: 0201179288 ; Dimensions (in inches): 0.38 x 9.19 x 6.24
A reader (Plano, Texas)
You must read this book. December 27, 1999

If you program in C or C++, you must read this book if you want to consider yourself a superior programmer. If you are a college student, definitely read this book. Koenig fills in a lot of gaps left by authors of introductory books on C or C++. Why do I mention C++? Because C++ is far more than just objects and classes. The lower level implementation of functions is still basically C programming. He includes chapters on linkage, the preprocessor, and portability. It is a short book that is definitely worth reading.

A reader from Cambridge, MA
A rare and unusual book for experienced programmers.July 23, 1999

Along with Holub's 'The C Companion', this is one of the few programming books that I've read in 13 years of C programming that talks about real programming issues instead of simply rehashing what a for loop is. A must read for C programmers.

A reader
Enormously entertaining and exceedingly helpful! May 13, 1997

This is among the five "must have" books on the astute C programmer's bookshelf. Actually, it spends little time on the shelf since one refers to it time and time again. This slim volume packs a lot of information about those "gotchas" that still "getcha" (when you least expect it). The Introduction is "Chapter 0", your first hint that Koenig knows and respects the subject. His treatment of unscrambling complex declarations is especially good.

Why a 9 instead of a 10? Simple. Andy: please release a new version! The ANSI/ISO standard is almost ten years old. :)

[Jan 26, 2000] Debugging Applications by John Robbins

***** Useful for Windows programmers...

Paperback - 466 pages Bk&Cd Rom edition (January 26, 2000)
Microsoft Press; ISBN: 0735608865 ; Dimensions (in inches): 1.37 x 9.23 x 7.35
 

Osiris Pedroso (see more about me) from SF Bay Area
5 out of 5 stars Do you aspire to be a serious developer? If so, read this bk March 11, 2000

John Robbins did a great job on this book. I was very impressed both on the depth and breadth of the issues treated. 

At first, I though on skipping the chapter on Visual Basic debugging, since I am strictly a VC++ developer, but I am glad I did not. Even that chapter gave me insights that I can use on my day to day, for example, when he runs the VB compiler while in the debugger and is able to see how VB uses the C compiler's code generation (second pass).

Some great insights and lots of good example on how to resolve problems and how to use all the capabilities of the debugger to ones best advantage.

It will teach you what to do when the debugger gets you to a source line that before that line, everything is working properly, after that line the world has turned upside down. It will teach you enough X86 assembly to make you dangerous and be able to read between the (source) lines in the process. Even if you thought you knew it already.

Could it be improved ? Yes, can't it always ? Coverage on tracking memory leaks could be expanded, for example, to cover MFC's shortcomings when reporting them, but this book is a close to perfection as I have seen them.

And it is a great read too. His style is easy to follow, even though some of the subjects are deep and complex, but John transfers the knowledge so easily, it is amazing.

Once I completed my first read, I really felt like I had just finished listening to a very good rendition of a Beethoven or Mozart simphony.

Every developer that aspire to be a serious developer should read it and reread it.

And thank you, John Robbins. I will be buying every book you write.

EJ Bartelds from Rotterdam, The Netherlands
4 out of 5 stars Good, but could be even better March 5, 2000

When I first heard John Robbins was writing a book on Win32 debugging, I was delighted. I've been a fan of his MSJ Bugslayer articles since the beginning, and John's debugging knowledge, displayed in those articles, has helped me tremendously. 

However, for someone who has read all his MSJ work, this book is a bit of a disappointment. The reason is that the second part of the book is a collection of his (slightly-rewritten) MSJ articles, with almost no new content added as far as I can see.

The first part of the book, however, is worth every dollar, as other reviewers have already mentioned, even though I was missing coverage of the WinDbg debugger, and MS tools such as userdump. Maybe in a second edition?

To summarize, I suspect this book to be a 5-star for anyone who is fairly new to debugging and has not read John's MSJ columns. For others, who have been exposed to his columns, and have some experience, I'd rate this book 3-stars.

Debugging with GDB: The GNU Source-Level Debugger for GDB version 4.18 by Richard M. Stallman, Cygnus Solutions,1999

The C Puzzle Book by Alan R. Feuer,1998

Error Coding Cookbook : Practical C/C++ Routines and Recipes for Error Detection and Correction by C. Britton Rorabaugh,1996


Systems Programming

The classic here is Lions' Commentary on Unix : With Source Code

C-C++ Treasure Chest; A Developer's Resource Kit of C-C++ Tools and Source Code Victor Volkman (Editor)

Paperback - 224 pages Bk&Cd-Rom edition
R&D Books; ISBN: 0879305142 ; Dimensions (in inches): 0.61 x 9.01 x 7.07
clif@cflynt.com (from Dexter, MI)
****Helps you find the code you need February 6, 1999

The C/C++ Users Group has been collecting source code and making it available for the past 15 years. The trick has been finding the package that has what you need. This book makes a big dent in solving that problem. It contains brief descriptions of hundreds of C and C++ programs, libraries, and documentation, indexed by keyword, type of functionality, OS/CPU and title.  

Along with the book is a CD-ROM containing the complete C Users Group code distributions with HTML indexes to direct users to the package they need. These indexes and HTML pages make the difference between 400 packages of data, and 400 packages of information. 

The range of code available is astounding. It ranges from AI toolkits to compression utilities, from DOS TSR toolkits to Unix utilities from games to ray-tracing image generation, and almost anything else you can name. 

Most important, you can find the code you need.

Using and Porting GNU CC for Version 2.8 by Richard Stallman

The FreeDOS Kernel by Pat Villani,1996

Modern Compiler Implementation in C by Andrew W. Appel, Maia Ginsburg, 1998


Bad Books

[alt.comp.lang.learn.c-c++] - FAQ list

16: Why do many experts not think very highly of Herbert Schildt's books? A good answer to this question could fill a book by itself. While no book is perfect, Schildt's books, in the opinion of many gurus, seem to positively aim to mislead learners and encourage bad habits.

Schildt's beautifully clear writing style only makes things worse by causing many "satisfied" learners to recommend his books to other learners. Do take a look at the following scathing articles before deciding to buy a Schildt text. http://www.lysator.liu.se/c/schildt.html http://herd.plethora.net/~seebs/c/c_tcr.html

The above reviews are admittedly based on two of Schildt's older books. However, the language they describe has not changed in the intervening period, and several books written at around the same time remain highly regarded. The following humorous post also illustrates the general feeling towards Schildt and his books. http://www.qnx.com/~glen/deadbeef/2764.html

There is exactly one and ONLY one C book bearing Schildt's name on its cover that is at all recommended by many C experts - see Q 25.

**+ C by Discovery by L.S. Foster

Expensive university style book. The author does not have a real grasp of the language as a whole, so the language is presented as a sequence of non related elements that one needs to know.  Very dull, boring with vulgar and non-related to topics illustrations. Very bad typographic quality. IMHO not suitable for self-study. Probably can be OK in a university environment with a strong professor, but even in this case you better buy another one.



Etc

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available in our efforts to advance understanding of environmental, political, human rights, economic, democracy, scientific, and social justice issues, etc. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Title 17 U.S.C. Section 107, the material on this site is distributed without profit exclusivly for research and educational purposes.   If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner. 

ABUSE: IPs or network segments from which we detect a stream of probes might be blocked for no less then 90 days. Multiple types of probes increase this period.  

Society

Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

Quotes

War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

Bulletin:

Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

History:

Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

Classic books:

The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

Most popular humor pages:

Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

The Last but not Least


Copyright ฉ 1996-2016 by Dr. Nikolai Bezroukov. www.softpanorama.org was created as a service to the UN Sustainable Development Networking Programme (SDNP) in the author free time. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License.

The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info

Disclaimer:

The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

Last modified: February 21, 2017