In this talk, I will give a brief overview of agent-oriented software development followed by the presentation of (the syntax and semantics of) an agent-oriented programming language, called 2APL (A Practical Agent Programming Language). This programming language facilitates the implementation of multi-agent systems consisting of individual cognitive agents that are specified in terms of beliefs, goals, plans and reasoning rules. 2APL distinguishes itself from other agent-oriented programming languages by realising an effective integration of declarative and imperative style programming. The declarative style programming supports the implementation of the mental state of agents allowing them to reason about their mental states and update them accordingly. The imperative style programming supports the implementation of processes by providing programming constructs for implementing the flow of control as well as mechanisms such as procedure call, recursion, plan revision, event and exception handling mechanisms, and interface to existing imperative programming languages. The interpreter and the development environment of 2APL will be presented.