software development, the main task at hand is limiting and controling complexity of various kinds. One way this is done is re-use: A less optimized solution with re-use is usually preferable to an optimized special-purpose solution. (Notwithstanding that some libraries and frameworks are too bloated to always be acceptable.) We can hope for the return of small Unix tools that each individually are of sufficiently low complexity that such measures are not needed; however, in reality, we are stuck with ever growing applications with ever increasing complexity -- and, in today's world, the good developer is not the one who understands complex code and algorithms, but the one who avoids or manages them. A sad, but near inevitable development. A is empty. Can't find T in certain places or certain sizes of A (even? odd? powers of 2?) Goes into an infinite loop sometimes. ( How do you test for this? ) Becomes a linear search sometimes ( Did you test for this? ) Tries to access off the end. Doesn't return "not found" sometimes when T isn't in A. T is less than the first or greater than the last element. Does (a+b)/2, which overflows with ints. ( Did anyone here find this one by testing? )* *The last is a problem if you have 2^31 one-byte elements to search (it could happen!). Or would be if you were searching a function or disk file rather than an array. Or if you used 32-bit ints (not size_t) to index