This course introduces basic concepts of computer systems, information networks and programming. The primary goal is for the student to develop the skills required for developing software using imperative and object-oriented languages. Another major goal is for the student to become familiar with basic ideas in object-oriented design and programming, including UML class diagrams. Another major goal is for the student to become fluent with the core features of the Java programming language and its standard libraries, including inheritance, exceptions, and recursion. This course helps you meet these goals by designing, implementing, and testing a number of small programs. Another major goal is for the student to be familiar with ethical problems that face computer scientists and software engineers and the codes of professional conduct that specify how to deal with these problems. This goal will be met primarily through discussion.
Several skills are needed to successfully write programs, including analytical thinking, systematic experimentation, persistence and patience, organization and time management, effective use of reference material (reading technical documentation, searching the web). As befits a university course, we focus on algorithmic thinking and problem-solving: Analyzing requirements, algorithm design, functions and procedural abstraction, pre- and post-conditions, loops and invariants. Top-down design, libraries and simple data structures (arrays and lists), inheritance and subclass polymorphism. Tools and techniques for designing, debugging and testing.
Along the way, we will touch upon topics that can be studied in depth in other courses, in particular these. Computer architecture: CPU, ALU, memory, cache, primary and secondary storage, data representation, fetch-decode-execute cycle, boolean logic, combinatorial circuits. Software architecture: encapsulation, parameterized classes, object-oriented design patterns. Networked systems: Computer networks, protocol layers, TCP/IP, applets and mobile code, security, confidentiality, and authentication.
To assess student progress we focus on key skills that can be demonstrated. By the end of the semester the student should be able to: