This paper describes a senior level course in concurrent programming using Ada . Unlike other similar courses in the subject area, it is not part of a n operating systems course, nor is it tied to a particular hardware architecture. The course is software oriente d and it discusses in depth a concurrent programmin g language, Ada, so that students are able to actuall y develop effective concurrent programs to solve problems in a wide range of applications . Ada is selected becaus e of its popularity, superb portability, numerous hardwar e platforms, and rich concurrent constructs . Classical issues in concurrent programming are presented in th e context of Ada . General issues in designing concurren t programming languages are elaborated using Ada , together with other concurrent programming language s such as CSP, Occam, and Linda . Finally, genera l principles of designing parallel programs are als o discussed . Therefore, the course provides both th e depth in a concurrent programming language fo r program development and the breadth in concurren t programming theory for insight . Using Ada throughou t the course strengthens student's expertise in Ada an d provides an useful reference point for understandin g concurrent programming theory. The course is heavily based on handouts, examples, homework an d programming assignments . A rich set of instructiona l materials are available from the author .