Write programs whose complexity reaches a few hundred lines
Use the rudiments of the environment and the resources available to help them program (editors, basic computer architecture, compilers, libraries, reference manuals, on-line help).
Develop programs from an English description.
Write programs on their own, independent of "hand holding" by a TA or an instructor (typically a dozen or so).
Understand and use the basic programming constructs: types (built in types, basic provided types including arrays and strings, type construction), values (constants,variables, assignment statements, and expressions), control structures (sequential flow, conditional statements, and loops), and I/O (basic output to the screen and input from the keyboard, and file I/O).
Understand and use objects (value representation, applicable operations, hidden implementations).
Implement basic recursive algorithms.
Describe and use the basic ideas of some of the more advanced programming constructs,including exceptions, inheritance, and polymorphism.
Understand the importance of the following concepts
Abstraction
Debugging and Assurance of Correctness
Program Development (analysis, specification, design, implementation, testing)