This course is a continuation of CSCI E-10a, with an emphasis on object-oriented programming using Java, one of the world's most popular programming languages. We begin with the implementation of abstract data types using classes, focusing on encapsulation of procedures and data, inheritance hierarchies, and polymorphism across different object types. Other topics include string processing, multidimensional arrays, ArrayLists, Vectors, and linked lists; streams and file I/O; recursion; exception handling; threads and event-driven programming; and graphical user interface design using the Swing classes. The course concludes with an introduction to RISC machine architecture and aspects of compilers and operating systems. Programming exercises are conducted in a cloud-based Linux environment. Students can count two of the following three courses—CSCI E-10a, CSCI E-10b, and CSCI E-50—toward a degree. They cannot count all three toward a degree.