Network coding is a technique where relay nodes mix packets using mathematical operations, which reduces the number of transmitted packets. Network coding was first proposed for wired networks to solve the bottleneck problem and to increase the throughput. However, the broadcast nature of wireless networks and the diversity of the links make network coding more attractive in wireless networks. Network coding can be classified as either inter or intra-session. Inter-session network coding allows the packets from different sessions (sources) to be mixed to solve the bottleneck problem. In contrast, intra-session network coding, which can be used to address the packet loss problem, uses the diversity of the wireless links and mixes packets from the same sessions. In this chapter, we survey the recent works on network coding in both general wireless networks and wireless sensor networks. We present various network coding techniques, their assumptions, applications, as well as an overview of the proposed methods.