How to Think Like a Computer Scientist
An introduction to Computer Science, with versions for C++ , Java , and Python .
The Eight Fallacies of Distributed Computing - Peter Deutsch
Twelve Ways to Fool the Masses When Giving Performance Results on Parallel Computers
Three Sins of Authors in Computer Science and Math from the author of Ifile.
Information Retrieval : Data Structures & Algorithms (Baeza-Yates)
Source code of many chapters - Information Retrieval: Data Structures and Algorithms
Handbook of Algorithms and Data Structures in Pascal and C (Baeza-Yates and Gonnett)
Oleg's Varied FTP Site (Scheme, C++, Mac, Unix, Be, more...)
Definitions of Algorithms, Data Structures, and Problems - CRC dictionary of computing
AlgoVista - The Algorithmic Search Engine
Just enter a small number of data samples that describe the behavior of the algorithm you are looking for -- or the structure of the combinatorial object you want to classify -- and AlgoVista will search its vast database for the closest match.
An approach to programming not entirely unlike Unix streams, but that uses typed data, thus more closely paralleling Lisp streams, or, to some degree, CORBA messaging.
FBP is based on three principles:
Asynchronous processes
Strongly typed data packets with a lifetime of their own
External definition of connections
Thus, you can hook flows together, or hook things to flows, in much the manner that JCL allowed attaching files to program inputs/outputs on MVS.
A page on how to make Java code perform well.
Optimization: Your Worst Enemy
An interesting essay on how optimizing code can be counterproductive.
Mathematical Limits to Software Estimation
A paper that shows that claims of purely objective estimation of software complexity/schedule estimation/reliability contradict one of the theorems of Kolmogorov complexity, and so are wrong.
In effect, this means that estimates of how long a programming task will take cannot in general be objectively correct.
You may indeed be able to come up with a framework to "objectively" assess how long it will take for certain very carefully specified types of programming tasks, although it is arguable that those sorts of tasks may be so automatable that they oughtn't require an actual programmer.
But once you open things up to be "programming, in general," all bets are off. Someone who claims to have an objective framework probably doesn't know about statistics...
SourceForge.net: Project Info - General purpose dynamic array - Judy
Judy Arrays are an interesting alternative to hashing, as a sort of compressed digital trie designed to take advantage of modern CPUs' penchants for processing data in cache.
Donald Knuth created the concept of Literate Programming when he was writing TeX. The basic concept is that you write the program together with its documentation, using, wherever possible, code to describe code. A "tangle" processor can then be used to extract the executable code out of the documentation to compile as necessary; a "weave" processor builds a TeX file to typeset the documentation including extensive crossreferences.
The extremely good quality of the TeX program can be at least partially attributed to this development approach.
Versions have been created to process C, FORTRAN, Pascal, APL, LISP, as well as to handle multilingual projects.
A very simple, language-independent WEB that can emit HTML, TeX, and LaTeX. One thing that this "Webber" eschews is automated pretty-printing of code.
Here is the the classic letter Go To Statement Considered Harmful - by Edsger W. Dijkstra. Donald Knuth later issued a sort of "rebuttal" in the form of an article on the use of "structured GOTO" statements. In summary, people can and often do use GOTO badly. That may not mean that the capability should be removed altogether.
MMIXware: A RISC Computer for the Third Millennium
MIX was an artificial machine language created by Donald Knuth as the "implementation language" for algorithms in The Art Of Computer Programming. Knuth has created MMIX as a more modern, RISCy machine language, to use for new releases in that series.
There is an ongoing effort to convert the programs in The Art of Computer Programming volumes 1 to 3 from the MIX assembly language to MMIX.
CLMIX - a MIX emulator written in Common Lisp.
Why Threads Are A Bad Idea (for most purposes)
Ousterhout presents that threading is a problem. It is very difficult to create threaded code that both performs well and which works correctly. It is easy to introduce bugs that are difficult to find, replicate, and debug.
This essay presents a cogent argument as to why threads are a problem. In short, they are strongly nondeterministic, and it takes a great deal of effort to do deterministic computation in the presence of threads.
The Pthreads standard
Introduction to Multithreading, Superthreading and Hyperthreading