1) Learn how to write great code
2) Understand abstraction
3) Design efficient data structures and algorithms that use them
4) Learn Java and object-oriented programming
Fundamental dynamic data structures, including linear lists, queues, trees, and other linked structures; arrays, strings, and hash tables. Storage management. Elementary principles of software engineering. Abstract data types. Algorithms for sorting and searching. Introduction to the Java programming language.