The history of programming paradigms shows a progression from low-level machine-oriented constructs towards high-level application-oriented abstractions. Agent-Oriented Programming introduces an abstraction layer inspired by humans and human society, to ease the development of programs and systems featuring levels of concurrency, reactivity, decentralization, autonomy, flexibility. In this tutorial, leading researchers of the agent-oriented programming community will introduce and discuss the main concepts and features behind this paradigm, using state-of-art agent programming languages, platforms, technologies. The tutorial will include both live-coding, based on some simple programming examples that will be developed and run on the fly, and the discussion of more complex examples, taken from real-world applications and projects.