In this chapter we will discuss some of the basic concepts that we need to know to program in Mathematica using the Wolfram Language. We will also cover some useful notions for generating efficient code. In particular, we will learn how to code using pure functions, very important if you want to create compact programs that take full advantage of the power of Mathematica. We will also include examples of some of the most commonly used programming functions and describe the fundamental ideas behind package development, essential to build new applications that incorporate user-defined functionality. Finally, we will provide guidance on tools available for large projects or to develop programs that can be run from a browser.