Abstract: Agent-oriented programming (AOP) represents a novel programming paradigm that adopts concepts and technologies of multi-agent system to implement software. It has gained great attentions of researchers and practitioners from both artificial intelligence field and software engineering field. Dozens of AOP languages have been proposed in the past two decades. However the acceptance and adoption of AOP in software engineering community remain limited and the current practices of applying AOP do not convince such paradigm has extensively exploited its technical advantages and potentials. The experiences and practices of programming language researches in software engineering field can give us some inspirations to get out of the dilemma. The paper aims at providing a survey of AOP from software engineering perspectives, including its research history and the state-of-the-art of researches on agent-oriented programming concepts and models, languages, CASE tools and running manners. We investigate how current AOP studies satisfy design principles of programming language like simplicity, regularity, maintainability, expressiveness, reliability and efficiency, discuss several challenges of AOP researches and practices, and point out some directions for future studies.