******************************************************************************** Network Coding: Mixin' it up ============================ The information theoretic aspects of large networks with many terminals presents several interesting and non-intuitive phenomena. One such phenomenon was first explored in a detailed manner in excellent work by Ahlswede et al., who proved that for a large class of network problems, allowing internal nodes to perform non-trivial arithmetic operations on information on incoming links to generate information on outgoing links could substantially improve throughput, compared to the more traditional scenario where such nodes were restricted to only copying and forwarding incoming messages on outgoing links. Further work by various authors showed how to design codes (called network codes) to transmit under this new paradigm, and also demonstrated exciting new phenomena for such coding techniques such as robustness against network failures, distributed design, and increased security. We consider the low-complexity design and analysis of network codes, with a focus on codes for multicasting information. We examine both centralized and decentralized design of such codes, and also randomized versus deterministic design algorithms. We compare different notions of linearity and show the interplay between these notions in the design of linear network codes. We determine bounds on the complexity of network codes. We also consider the problem of error-correction and secrecy for network codes when a malicious adversary controls some subset of the network resources. ********************************************************************************