Introduction

We are often asked by our customers what books we recommend for various areas of computing. This is a very hard question because many areas of "embedded" computing cross large swathes of computer science and require knowledge in several fields.

Because of these issues it's very hard to give recommendations so instead here's a novel approach to the question we hope you will find useful. Presented here is the bookshelf of one of our senior programmers. Hopefully this will act as a guide as to what we find useful in developing the varied software needed for our products. Not all of these are definite recommendations but the comments should explain the books relevance (if any).

Please note the view expressed here are by definition subjective and your opinion may differ from ours. Links are given to Amazon for convenience but there are other book vendors.

Bookshelf

Selected book

Books on theory

The books in this section do not generally concern a specific
implementation but rather give a grounding in an area of computer
science. These books are usually used by the more advanced programmer
to develop new strategies or to learn a subject new to them.

The Art of Computer Programming: Sorting and Searching

If you need to know how a searching or sorting algorithm works this is pretty much the definitive work. A word of warning, this book pulls no punches and is pretty heavy going in places. Ensure you get the second edition as it's more up to date than the original.

Computer Networks

Computer networks pretty much covers all the fundamental principles of modern networking. Get at least the third edition as this is a book that whilst covering fundamentals needs to be kept updated because of its rapidly changing subject.

Design patterns : elements of reusable object-oriented software

Design Patterns is based on the idea that there are only so many design problems in computer programming. This book identifies some common program-design problems--such as adapting the interface of one object to that of another object or notifying an object of a change in another object's state--and explains the best ways (not always the obvious ways) that the authors know to solve them. The idea is that you can use the authors' sophisticated design ideas to solve problems that you often waste time solving over and over again in your own programming.

Refactoring: Improving the Design of Existing Code

Your class library works, but could it be better? Refactoring: Improving the Design of Existing Code shows how refactoring can make object-oriented code simpler and easier to maintain. Besides an introduction to what refactoring is, this handbook provides a catalogue of dozens of tips for improving code. The best thing about Refactoring is its remarkably clear presentation, along with excellent nuts-and-bolts advice, from object expert Martin Fowler. The author is also an authority on software patterns and UML, and this experience helps make this a better book, one that should be immediately accessible to any intermediate or advanced object-oriented developer.

UML in a Nutshell

Sometimes a customer needs a solution to be modelled before implementation. UML is a suitable language for this task. There are other books on this subject and the original UML in a nutshell is unfortunately showing its age.

Networking

These books typically concentrate on networking technologies such as TCP/IP.

UNIX Network Programming Vol 1: Networking APIs - Sockets and XTI

One of the seminal works for anyone who needs to write networking code on UNIX. It's not the only book in this area but its one of the old reliable sources and many have learnt their trade from this book. The second edition or later is a must although the death of Stevens hasn't slowed down the work on later editions by others thus keeping the work up to date.

Cascading Style Sheets the Definitive Guide

Not the only book on the subject, possibly not even the best but a good solid all round examination of CSS especially useful if you're designing embedded webserver applets and want to be able to change the look and feel without altering the code.

Squid the Definitive Guide

If you need to set up or administer a squid web proxy this is the book for you. This comes up more often than you might think in the embedded world where a number of embedded devices need to operate against a single webserver.

ActionScript: The Definitive Guide

If you must do flash scripting (avoid it if possible - there are almost always better solutions) this book will help. Its possibly not the most accessible book but certainly warrants its "definitive" moniker.

Unix/Linux books

Linux Device Drivers

If you want to learn how to write a Linux driver then you should probably buy this book. It gives a very good background into the workings of the Linux device module system. The text is very readable and usually puts (some very complex) ideas across in a manner that doesn't scare the reader off.

Learning the Korn Shell

This book introduces the Korn shell, a variation on the classic Bourne shell used almost universally as the default unix command line shell and scripting language. This book is somewhat old now, today you are probably more likely to want a book which covers the bash shell.

Electronics

The Art Of Electronics

At some point you will probably meet the hardware, this book makes that meeting if not pleasant then at least understandable. Widely accepted as the single, authoritative text and reference on electronic circuit design, both analog and digital. This book revolutionised the teaching of electronics by emphasising the methods actually used by circuit designers, a combination of some basic laws, rules of thumb, and a large bag of tricks. The result is a largely nonmathematical treatment that encourages circuit intuition, brain storming, and simplified calculations of circuit values and performance. The second edition is a must, the only drawback is that some of the microprocessor sections are a little dated but the fundamentals are sound.

C/C++ Programming Language

The C programming language

This book is probably the closest thing to a definitive guide to the C language that exists. It would certainly be difficult to argue with the authors as they created the language! Often referred to as "K n R" most C programmers of note have this one on their shelf. Its not a beginners introduction to programming however, if thats whats needed try the books by Kelley & Pohl, K.N.King or Gottfried(Schaum series). Its concise and complete but ensure you get the second edition and note that many dislike the indentation style the authors prefer.

Advanced Programming in the UNIX Environment

If you are an C programmer with a working knowledge of UNIX, you cannot afford to be without this tutorial on the system call interface and the most important functions found in the ANSI C library. Stevens describes more than 200 system calls and functions; since he believes the best way to learn code is to read code, a brief example accompanies each description.

Programming Pearls

Not to be confused with the perl language this book attempts to show the "art" of programming well in C by defining a problem well and achieving a fast and efficient solution. It has been argued that this book is no longer relevant with modern computers with vast amounts of memory and disk but a solid understanding of reducing these requirements is critical to the embedded engineer.

Other Programming Languages

The other languages represented here make up only a small fraction
of what is available. These languages are generally used where a
compiled language is inappropriate.

Learning Perl

Learning Perl draws on the expertise of two of the major supporters of this highly flexible language, Randal Schwatrz and Tom Christiansen, to produce an introductory manual which manages to be concise yet informative throughout.

Weighing in at a mere (for a computer manual) 271 pages it achieves admirably what it sets out to do--teach Perl basics and no more. From the introduction to the different variable types through hash arrays, file access, process management and coding for the World Wide Web, it's a well-paced easy-to-understand book which assumes a rudimentary knowledge of programming but no more.

Programming Python

This book offers an extremely comprehensive guide to Python development. Though densely packed with information, Lutz is a lively and witty writer whose focus is on getting things done using the natural strengths of the Python language. Python is one of a growing number of interpreted languages suitable for all manner of medium to small scale applications, this could easily have been a book on lua, ruby or several others.

Databases

MySQL & mSQL

A pretty good book about using the Mysql RDBMS. There are other database systems which are popular for different reasons almost all are SQL driven systems. There are even SQL database engines that operate on flat files such as SQLLite which can give great flexibility and scale in embedded systems.

Other technologies

XML in a Nutshell

If you need to know about the underlying technologies of XML this book is for you. The book doesn't cover the application of these technologies in any specific language but thats not really its aim. The subject changes a lot so the latest edition possible is always useful.

802.11 Wireless Networks the Definitive Guide

A book which gives a thorough technical grounding in the IEEE 802.11 wireless networking standards. It wont give hints on practical network design but is covers everything you need to know as a programmer or designer.

Essential CVS

A good book on the CVS revision system. This is again a book that represents a whole gamut of code revision systems such as subversion, arch, mono and git. The major point is that any project must have a code revision system agreed and used by all the developers. It comes a surprise when embedded developers don't use such a system but it still happens far too frequently.

Sendmail

This book is a must if your configuring sendmail as a Mail Transport Agent. Our advice is don't use sendmail, this old grandfather of the Internet mail systems can be replaced with more modern and less cumbersome solutions such as exim or postfix.

Programming with QT

It's a good book if you have absolutely no idea about Qt, but it probably won't help you if you want insight in more advanced or subtle Qt. There are better books about Qt, and more current (this one is getting a bit old, even more with Qt4)

Everything else

The books in this section are everything that doesnt fit into the other categories.

Tools for Thought: The History and Future of Mind-expanding Technology

Introductory Circuit Theory

Like most books with the word "introductory" in the title this book is anything but...it goes from ohms law to complex circuit theory in nothing flat. Only kept on the bookshelf to remind the programmer in question of how bad he performed at the subject at university.

LISP: Gentle Introduction to Symbolic Computation

This book just shows the programmer's age. Except for extremely rare cases lisp is no longer seen "in the wild" of interest only to archaeological students.

Online Support

Disclaimer

Information contained in these publications regarding device applications and the like is intended as suggestion only and may be superseded by updates.

It is your responsibility to ensure that your application meets with your specifications. No representation or warranty is given and no liability is assumed by Simtec Electronics with respect to the accuracy or use of such information, or infringement of patents or other intellectual property rights arising from such use or otherwise.