This course gives students an intensive introduction to programming, as well as experience working with (but not designing) larger systems. Concepts will be illustrated using the Java language. In addition to elaborating on all the concepts from Programming I, this course will introduce the object concept; using and declaring functions (methods); data types and variables including arrays; and the use of standard packages. Some techniques for searching and sorting arrays will be introduced. Basic software engineering concepts will also be introduced, such as the software life-cycle; characteristics of good software; documentation, testing; and coding practices which promote correctness and robustness. The course will include at least one team project.