To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
This book by Professor Daniel Pauly is for people interested in fishes, in Charles Darwin, or just plain interested in natural history. Darwin is known for writing about many things, with superb works on orchids and barnacles and, of course, on natural selection. Many authors have written about him and we often hear reference to ‘Darwin's finches’. I suspect few people connect Darwin with fishes: this now will change. Daniel Pauly has done a superb job in this book in showing us the many connections between Darwin and fishes. He does this in a delightful way, mixing subtle, cryptic humour with academic discussions. Pauly gives us a tour in discovering fascinating facts; it's a great way to learn about fishes.
Daniel Pauly is internationally known for his work on fish growth and mortality, tropical fisheries management, and ecosystem modelling. A recognized leader in studies of fish population dynamics, he is also well known for his insights into the historic and socio-economic factors that intervene when fish populations are exploited. These, combined with his wide interests in evolutionary subjects, allowed a masterful treatment of Darwin's contributions to ichthyology, the subject of this book.
The book is arranged like an encyclopedia, with items in alphabetical order. The generous cross-references allow the reader to start with a given term of interest and go on an exciting voyage of discovery, exploring all sorts of worlds.
The document below is a transcription of the part devoted to fishes of the *Zoological Notes compiled by Charles Darwin (CD) during the voyage of the *Beagle. This was originally copied by Syms *Covington in 1838 or thereabouts. CD contributed corrections and additional text to the manuscript of 20 pages, kept in the Darwin Archive at the Library of Cambridge University as DAR 29.1.
I have in the main followed for this transcription the practice established by the editors of CD's *Correspondence (see alsoConventions used in the text). Thus, this transcription was as literal as possible, though in a few cases, Jenyns' Fish (which often cites ‘Fish in Spirits of Wine’ verbatim) and Keynes' (2000) Zoology Notes, were used to select from a range of options. Also, I have attempted to reproduce the form of the original document: as already noted by Porter (1985), the right side of Fish in Spirits of Wine reproduces CD's field notes, while the left side mainly contains the species names resulting from Jenyns' identifications (including preliminary identifications, and names he subsequently rejected).
Computers are changing almost every aspect of our lives. They're changing how we relate to one another and even changing how we think of ourselves. The very idea that my brain is a biological computer that could be, in some fundamental mathematical sense, no more powerful than the laptop on which I'm typing these words is mind-boggling. The fact that I can program a computer to control a robot, play chess, or find a cure for disease is tremendously empowering.
This book is organized as a series of essays that explore interesting and fundamental topics in computer science with the aim of showing how computers and computer programs work and how the various aspects of computer science are connected. Along the way I hope to convey to you some of my fascination with computers and my enthusiasm for working in a field whose explosive growth is fueled in no small measure by the ability of computers to support collaboration and information sharing.
While not meant to be exhaustive, this book examines a wide range of topics, from digital logic and machine language to artificial intelligence and searching the World Wide Web. These topics are explored by interacting with programs and experimenting with short fragments of code while considering such questions as:
How can a computer learn to recognize junk email?
What happens when you click on a link in a browser?
It's difficult to work with computers for long without thinking about the brain as a computer and the mind as a program. The very idea of explaining mental phenomena in computational terms is obvious and exciting to some and outrageous and disturbing to others. For those of us working in artificial intelligence, it's easy to get carried away and extrapolate from current technology to highly capable, intelligent and even emotional robots. These extrapolations may turn out to be fantasies and our robots may never exhibit more than rudimentary intelligence and sham emotions, but I think not.
Scientific knowledge about brains and cognition has expanded dramatically in recent years and scholars interested in the nature of mind are scrambling to make sense of mountains of data. Computer software is surpassing human ability in strategic planning, mathematical reasoning and medical diagnosis. Computer-controlled robots are cleaning offices, conducting guided tours in museums, and delivering meals in hospitals. However, a lot more is at stake here than solving engineering problems or unraveling scientific puzzles.
The various claims concerning the nature of mind are complicated and hotly contested. Many of them date back thousands of years. Some are believed to threaten the moral, religious and social fabric of society. It's feared by some that if individuals believe certain claims – whether or not they are true – they will no longer be bound by prevailing social and moral contracts.
The technology supporting the World Wide Web enables computations and data to be distributed over networks of computers, and this lets you use programs that you don't have to install or maintain and gain access to information that you don't have store or worry about backing up. The World Wide Web is essentially a global computer with a world-wide file system.
Many of the documents in this huge file system are accessible to anyone with a browser and a network connection. Indeed, their authors really want you to take a look at what they have to offer in the terms of advice, information, merchandise and services. Some of these documents, we tell ourselves, contain exactly what we're looking for, but it isn't always easy to find them.
It's difficult enough to search through files full of your own personal stuff – now there are billions of files generated by millions of authors. Some of those authors are likely to be somewhat misleading in promoting whatever they're offering, others may be downright devious, and some will just be clueless, ignorant about whatever they're talking about. How can we sift through this morass of data and find what we're looking for?
SPIDERS IN THE WEB
Billions of files are stored on web servers all over the world and you don't need a browser to access them.
In Daniel Dennett's Darwin's Dangerous Idea: Evolution and the Meanings of Life, the dangerous idea is natural selection, Charles Darwin's name for the mechanism governing the evolution of species that he codiscovered with Alfred Russel Wallace. Natural selection is the “process by which individual characteristics that are more favorable to reproductive success are ‘chosen,’ because they are passed on from one generation to the next, over characteristics that are less favorable”.
Natural selection explains how characteristics that promote reproductive success persist and under certain circumstances can come to dominate less favorable characteristics, but it doesn't explain how those characteristics are passed on or how new characteristics come into being. It was Gregor Mendel, living around Darwin's time, who suggested that heritable characteristics are packaged in the discrete units we now call genes and that offspring inherit a combination of their parents' genes.
When you combine Darwin's and Mendel's ideas, you have the basis for genetic algorithms, an interesting class of algorithms generally attributed to John Holland that take their inspiration from evolutionary biology. These algorithms simulate some aspects of biological evolution – while ignoring others – to tackle a wide range of problems from designing circuits to scheduling trains. Genetic algorithms allow the algorithm designer to specify the criterion for reproductive success by supplying a fitness function, alluding to the idea that in a competitive environment only the fittest survive to reproduce.
On the morning I began this chapter, I was driving into work and passed a sign near a grade school advertising a “Bug Safari”. When I got to work, I found out from the Web that “Butterfly Walks”, “Spider Safaris”, “Pond Dips” and similar excursions are regular fare at summer camps and neighborhood activity centers. This intrigued me: who would lead these tours? I initially thought that the most likely candidates would be trained entomologists or specialists such as lepidopterists. An entomologist studies bugs, beetles, butterflies, spiders and the like (not to be confused – as I usually do – with the similar-sounding etymologist, someone who studies the derivation of words), while lepidopterists specialize in lepidoptera, butterflies and moths.
But then I realized that it's a rare specialist who can resist being distracted by his or her own specialty. I thought about what this tendency might portend for my attempt to speak to a general audience about concepts in computer science. By most accounts, I'm an expert in computer science and a specialist in artificial intelligence. But just as a trained and practicing physicist is not an expert in all matters spanning the length and breadth of physics, from quantum electrodynamics to cosmology, so I'm not an expert in all areas of computer science.
In this chapter, I'll be talking about programming languages, an area of computer science about which I know a fair bit but certainly am not an expert.
Have you ever wondered what's going on when you click your mouse on some underlined text in a browser window and suddenly the screen fills with text and graphics that clearly come from some other faraway place? It's as if you've been transported to another location, as if a window has opened up on another world. If you're on a fast cable or DSL (“digital subscriber line”, the first of many acronyms in this chapter) connection, the transformation is almost instantaneous; if you're using a slow modem, then updating the screen can take several seconds or even minutes, but in any case the behind-the-scenes machinations making this transformation possible leave little evidence. Occasionally, however, you'll catch fleeting glimpses of the machinery through little cracks in the user interface.
If you use a dial-up connection and modem to connect with your Internet service provider, you may hear an awful squawking as your modem and the service provider's modem initiate two-way communication. Similar noisy exchanges can occur when one fax machine attempts to communicate with a second. In both cases, computer programs at each end of a telephone connection are validating, handshaking, synchronizing and otherwise handling the transmission of information. As smarter modems and fax machines replace older technology, these noisy accompaniments are being silenced, since a human need no longer overhear them to check that things are proceeding as desired.
There is a reason I liken computations to evanescent spirits. They are called into being with obscure incantations, spin filaments of data into complex webs of information, and then vanish with little trace of their ephemeral calculations. Of course, there are observable side effects, say when a computation activates a physical device or causes output to be sent to a printer, displayed on a screen or stored in a file. But the computations themselves are difficult to observe in much the way your thoughts are difficult to observe.
I'm exaggerating somewhat; after all, unlike our brains, computers are designed by human beings. We can trace every signal and change that occurs in a computer. The problem is that a complete description of all those signals and changes does not help much in understanding what's going on during a complex computation; in particular, it doesn't help figure out what went wrong when the results of a computation don't match our expectations.
An abstraction is a way of thinking about problems or complex phenomena that ignores some aspects in order to simplify thinking about others. The idea of a digital computer is itself an abstraction. The computers we work with are electrical devices whose circuits propagate continuously varying signals; they don't operate with discrete integers 0, 1, 2, …, or for that matter with binary digits 0 and 1.
Often when you're trying to solve a problem, you pull out a pen or pencil and grab a handy piece of paper to write down a column of numbers, draw a diagram, or make a list. In solving the problem, you might sum the numbers, trace lines in the diagram, or match items of the list with items of a second list. These auxiliary scribblings are used to organize information – as with the list or column of numbers – or represent objects so they can be easily manipulated – as with the diagram. Data structures are the algorithmic analog of these handy pieces of paper.
In Chapter 11 we saw that browsers and web servers in a computer network exchange information by bouncing small packages of data from one computer to another until they arrive at their final destination. How can we represent a computer network so that an algorithm can figure out what sequence of computers to use in transferring a data package? For that matter, how do we represent airline schedules, circuit diagrams, computer file systems, road maps and medical records so that they can be manipulated algorithmically?
Many algorithms use special data structures to represent their inputs and outputs or to perform intermediate calculations. In Chapter 7 we used lists and vectors to keep track of journal entries.
Hardly a day goes by that I don't write at least one short computer program: a few lines of code to explore an idea or help organize my thoughts. I think of it as simply talking with my computer, and more and more often there is a computer available to talk with, often several of them joining in the conversation simultaneously. Each time you click on a link in a browser, you cause a sequence of computations involving dozens if not hundreds of computers scattered all over the world.
Making a computation happen is not, however, the same thing as programming. There are lots of powerful programs written by talented programmers that you can call up with a click of a mouse or few keystrokes. These programs animate computers, breathing life and spirit into lumps of metal and plastic. Even if you know what's going on inside computers and computer programs, it's easy to imagine that programs are spells and the programmers who create them are sorcerers. When you click on the icon for a program, you invoke these spells and the spells conjure up spirits in the machine. But this book isn't about invoking the spells of others; it's about creating your own spells and conjuring spirits of your own design.
This is not to say I won't encourage you to use code written by other programmers. Quite the contrary: an important part of the power of computing is that good spells can be reused as often as needed.
When I use the term “hacker” I mean someone who enjoys programming and is good at it. Hackers in my experience tend to be an opinionated and individualistic lot and they tend to appreciate strong opinions and independence of thought in others. The slogan of the Perl language is “There's more than one way to do it”, and most hackers are motivated to exploring different ways of doing the same job. That said, if adopting a standard way of doing something provides leverage for building better software, then most hackers will agree to adopt the standard (after much dickering about the details, of course).
If you write code because you want other people to use it, it behooves you to use a language that others are familiar with, adopt standard conventions for input and output so that others can interact with your code without learning some new set of conventions, and provide your code in a format so that others can use it as a component of a larger project without having to understand all the details of your implementation. The struggle to meet these basic criteria requires the hacker to negotiate, make concessions and, generally, work within a community of potential users to produce, adopt and adhere to reasonable standards.
Building great software requires a great deal of discipline and interpersonal skill – in sharp contrast with the stereotype of a hacker as an unkempt, uncommunicative obsessive compulsive lacking basic hygiene and addicted to highly caffeinated drinks.