This document discusses natural language processing (NLP) from a developer's perspective. It provides an overview of common NLP tasks like spam detection, machine translation, question answering, and summarization. It then discusses challenges in NLP like ambiguity and new forms of written language. The document goes on to explain how probabilistic models are used in NLP to infer language properties and complete tasks like sentence completion and phrase rearrangement using concepts like language models. It also covers text processing techniques like tokenization and regular expressions. Finally, it discusses spelling correction in detail using techniques like noisy channel modeling and confusion matrices.