Developing for Developers

Tools, techniques, and theory for measuring and improving the power and performance of developers and their code

  • Developing for Developers

    Functional list processing in C# 2.0 with anonymous delegates

    • 12 Comments
    One of the benefits of functional languages is their great flexibility in list manipulation, which enables them to express certain computations concisely that would require one or more verbose loops in procedural languages. Many of the features that functional...
  • Developing for Developers

    How does JPEG actually work?

    • 7 Comments
    JPEG is an image encoding designed to compress photographs and similar images effectively, often 5 to 15 times over a raw bitmap format. It's a lossy format that exploits properties of human vision to eliminate information that is difficult to distinguish...
  • Developing for Developers

    Cache-oblivious data structures

    • 10 Comments
    In most data structure and algorithms classes, the model used for basic analysis is the traditional RAM model: we assume that we have a large, random-access array of memory, and count the number of simple reads/writes needed to perform the algorithm....
  • Developing for Developers

    Factoring large numbers with quadratic sieve

    • 20 Comments
    Today I'm going to talk about how the quadratic sieve factoring algorithm works, giving a comprehensive description assuming knowledge of only basic university-level mathematics. The foundation of the most popular public-key cryptography algorithm...
  • Developing for Developers

    Integer division by constants

    • 8 Comments
    Today I'm going to discuss a few clever algorithms for dividing values by constant values known at compile-time, without the use of the division instruction. In compiler optimization theory, the basic problem we attempt to solve is to create algorithms...
  • Developing for Developers

    The Visitor pattern and multiple dispatch

    • 14 Comments
    Today I'll talk about multiple dispatch, a programming language feature that increases flexibility of method calls and eliminates the need for awkward pattern constructions, at the cost of some additional complexity in the dispatch algorithm. The Visitor...
  • Developing for Developers

    P-complete and the limits of parallelization

    • 3 Comments
    We're entering an era where CPU clock speeds will soon cease to scale upwards and instead CPU manufacturers are planning to put more and more independent cores on a chip. Intel plans to release an 80-core chip within 5 years . Consequently the research...
  • Developing for Developers

    Software transactional memory

    • 7 Comments
    Software transactional memory ( STM ) is a scheme for concurrent programming with multiple threads that uses transactions similar to those used in databases. Today I'll discuss what STM is, how it works, some implementations, and why you should care....
  • Developing for Developers

    Unrolled linked lists

    • 9 Comments
    Today I'll be discussing unrolled linked lists , a simple variant of the linked list which has many of its desirable properties but exploits the cache to yield considerably better performance on modern PCs. In elementary data structures classes, students...
  • Developing for Developers

    Literate programming

    • 10 Comments
    Literate programming , invented in 1981 by the same Donald Knuth who wrote The Art of Computer Programming and the document language TeX, is a technique in which a program is written as a human-oriented document interspersing discussion and code. The...
  • Developing for Developers

    Custom building and code generators in Visual Studio 2005

    • 11 Comments
    I'm a fervent fan of using code generator tools wherever possible to make your life easier. Although they come with issues related to effective building, diagnostics, and debugging, the amount of value they add to your application is immense: they can...
  • Developing for Developers

    Efficient selection and partial sorting based on quicksort

    • 6 Comments
    Most people who have studied algorithms remember quicksort, the ubiquitous sorting algorithm available in the standard library of nearly every programming language implementation in existence, including C, C++, Java, and the .NET Framework. Quicksort...
  • Developing for Developers

    Succinct data structures

    • 4 Comments
    Sorry for the long hiatus, everyone. Today I'm going to talk about succinct data structures, which are informally data structures that use very close to the absolute minimum possible space. This material is largely based on lectures by MIT professor Erik...
  • Developing for Developers

    Bloom filters

    • 11 Comments
    Imagine you're writing a simple spell checker in C. You've already collected a dictionary of 100,000 words, and you want to process the document a word at a time and find any words that aren't in the dictionary. You don't care about providing suggestions...
  • Developing for Developers

    K-nearest neighbor spatial search

    • 7 Comments
    I apologize to everyone for the hiatus - I realise a post is more than a little overdue and will try to be more regular in the future. I appreciate the support that I've received for the blog and continuing it. Consider the following problem: you're...
  • Developing for Developers

    Robin's theorem

    • 2 Comments
    Most computer scientists are familiar with the P = NP problem, which asks essentially whether we can verify more problems in polynomial time than we can solve. So fundamentally does complexity theory hinge on this result that the Clay Mathematics Institute...
  • Developing for Developers

    Persistent data structures

    • 3 Comments
    When learning to program in a functional language such as Lisp, Ocaml , or Haskell , one of the most difficult aspects of the paradigmic shift is that data in these languages is almost entirely immutable, or read-only. In purely functional programs, there...
  • Developing for Developers

    Color quantization

    • 8 Comments
    If you've ever done work with Web graphics, I'm sure that at some point you reduced an image with thousands of colors, such as a screenshot or photograph, to an image with only 256 colors, for example to store the image in the GIF format. Remarkably,...
  • Developing for Developers

    Modular arithmetic and primality testing

    • 7 Comments
    Number theory is, roughly speaking, the study of properties of integers. Often a problem which is easy for real numbers, such as factoring or linear programming, seems to be considerably more difficult when restricted to integers (in fact, integer...
  • Developing for Developers

    Dependency tracking in builds

    • 6 Comments
    Happy Valentine's Day, everyone! Today I'm going to talk about the important problem of successfully tracking dependencies in builds in an automatic manner. In short, there are two kinds of build systems: the ones where all dependencies are tracked...
  • Developing for Developers

    Stop writing header files

    • 5 Comments
    Although one of my favorite languages, C++ has a number of issues that make it difficult to write and maintain. One of the worst is its compilation model: you import declarations using fragile literal text inclusion ( #include ), and you have to waste...
  • Developing for Developers

    Non-nullable types

    • 5 Comments
    If you write programs in C, C++, Java, or C#, you've gotten used to having the null value around. The null value is a special reserved reference (or pointer) value indicating that a reference does not refer to any object. It's useful for constructing...
  • Developing for Developers

    New blog: Papers in Computer Science

    • 1 Comments
    Hey all - I apologize for the (extremely) long period of no updates, I've been prioritizing other things. I've been accepted this Fall to begin my Ph.D. at University of California, Berkeley. Since I won't be at Microsoft any longer, I've started a new...
  • Developing for Developers

    Secret sharing

    • 2 Comments
    One of the most difficult problems in cryptographic key management is keeping a secret key safe from both compromise and loss. If you don't make enough backups, the key might be destroyed in a hardware failure or natural disaster. But if any backup...
  • Developing for Developers

    The point location problem

    • 0 Comments
    Computational geometry is a field that studies efficient solution of geometric problems, which are critical in mapping, manufacturing, and particularly graphics applications. If you find data structures and algorithms interesting, it's likely you'd also...
Page 1 of 2 (30 items) 12