The representation of the following Course Requirements on a year-by-year basis is just a suggestion. Students are free to take these courses in any order they choose, provided they have mastered the course-specific prerequisites.
Software Engineering Concentration
INTRODUCTION TO COMPUTER SCIENCE I
An introduction to problem solving, algorithms and structured programming using a higher-level programming language. The course will focus on skills for developing algorithms, and for writing and debugging programs. Students will learn how and when to use loops, conditionals, and functional abstractions in the context of problems motivated by real world applications. PREREQUISITE(S): MAT 130 or Mathematics Diagnostic Test placement into MAT 140.
INTRODUCTION TO COMPUTER SCIENCE II
An intermediate course in problem solving, algorithms and programming. Programming skills are further strengthened through more complex and larger programming assignments. The assignments will also be used to introduce different Computer Science areas (e.g. a Client/Server application for the Distributed Systems area). Classes and object oriented programming are motivated and introduced. PREREQUISITE(S): CSC241
DISCRETE MATHEMATICS I
Combinatorics, graph theory, propositional logic, singly-quantified statements, operational knowledge of set theory, functions, number systems, methods of direct and indirect proof.
MAT 130 or above or equivalents or placement by test is a prerequisite for this class.
DISCRETE MATHEMATICS II
Methods of direct and indirect proof, set theoretic proofs, sequences, mathematical induction, recursion, multiply-quantified statements, relations and functions, complexity.
MAT 140 is a prerequisite for this class.
DATA STRUCTURES IN JAVA I
This is the first course in a two-course sequence on data structures using Java. The course introduces basic Java programming, reviews recursion, introduces asymptotic notations, and focuses mainly on linear data structures including arrays, linked lists and their variants, stacks and queues, and data structures supporting disjoint-set operations. The implementation of the basic operations on each data structure are discussed and analyzed in terms of their efficiency. The applications covered highlight and exploit the unique characteristics of the data structures, and emphasize problem solving and recursive thinking. Prerequisite(s): CSC 242 or CSC 243
(FORMERLY CSC 323) Application of statistical concepts and techniques to a variety of problems in IT areas and other disciplines, using a statistical package for simple data analysis. Course topics include descriptive statistics, elementary probability rules, sampling, distributions, confidence intervals, correlation, regression and hypothesis testing. PREREQUISITE(S): MAT 130 or placement
SOPHOMORE LAB IN APPLIED COMPUTING
In this course, students investigate a particular application of computing. Students learn tools, methodologies, and formalisms used in particular computing area, and apply them to develop working systems. Courses stress student initiative in investigating the application context, learning new tools (including languages and APIs), studying algorithms and code examples, and working on projects. Topics will vary by the faculty member's interest and perspective. PREREQUISITE(S): CSC 242 or CSC 243
DATA STRUCTURES IN JAVA II
This is the second course in a two-course sequence on data structures using Java. The course focuses mainly on the following data structures, their analysis, and their applications: trees (search trees, balanced search trees), heaps, associative arrays, hash tables, and data structures for representing graphs. The implementation of the basic operations on each data structure are discussed and analyzed in terms of their efficiency. The applications discussed highlight and exploit the unique characteristics of the different data structures, and emphasize problem solving and recursive thinking. Prerequisite(s): CSC 300
DESIGN AND ANALYSIS OF ALGORITHMS
Techniques for designing algorithms including: analyzing algorithms (big-O, recurrence relations) and divide-and-conquer (quicksort, mergesort). Additional topics chosen from: the greedy method, dynamic programming, backtracking, branch-and-bound and string matching. PREREQUISITE(S): (CSC 301 or CSC 383 or CSC 393) and MAT140. MAT141 Recommended.
COMPUTER SYSTEMS I
A course on computer systems topics, focusing on machine-level programming and architecture and their relevance for application programming. Information representations, assembly language, C programming, and debuggers, processor architecture. PREREQUISITE: (CSC 383 or CSC 393 or CSC 300) and Math 140
COMPUTER SYSTEMS II
A course on computer systems topics, focusing on operating systems components and their relevance for application programming. Caching, memory hierarchy, performance optimization, linking, processes, virtual memory, dynamic memory allocation, system level I/O. PREREQUISITE: CSC 373
In this course, students learn to communicate and interpret specialized information for readers' practical use. The course highlights the action-orientated goals of technical writing and the importance of accurately communicating information to users. The course provides an overview of key issues related to technical writing such as usability, audience analysis, designing pages and screens, effective collaboration with peers, interpreting and presenting data, and writing clearly and persuasively. Students learn to write, revise and present common technical writing genres such as instructions, tutorials, manuals, reports, product/process descriptions, proposals, and oral presentations.
An introduction to modern database systems; the course covers the traditional concepts and techniques of database systems including the relational model, SQL, indexes and normalization as well as a selection of advanced topics such as constraints and triggers, transactions, database programming, semi-structured data, and recursive SQL. PREREQUISITE(S): CSC 301 or CSC 383 or CSC 393
OBJECT-ORIENTED SOFTWARE DEVELOPMENT
Principles, techniques and tools of object-oriented modeling, design, implementation, and testing of large-scale software systems. Topics include design patterns, application frameworks, architectural design, and the applications in the software development process to improve the extensibility, maintainability, and reliability of software systems. PREREQUISITE(S): CSC 301 or CSC 383
Introduction to the skills required in a variety of public speaking settings. Includes units on delivery, language, defining speech purposes and content, finding supporting material, organization, and audience analysis. Students will be required to present speeches. Background in basic writing and library skills is necessary. (Formerly CMNS 220)
An introduction to distributed systems. Topics may include: architecture of distributed systems; networking; datagram-oriented and stream-oriented protocols; network programming (for example, the sockets API); remote procedure call and remote method invocation; processes and threads; code migration; software agents; naming of non-mobile and mobile entities; cryptography and security. PREREQUISITE(S): (CSC 301 or CSC 383 or CSC 393) and CSC 374.
INTRODUCTION TO COMPILER DESIGN
An overview of the design of a compiler for a general purpose programming language; tools for designing the components of the compiler; implementing the compiler; run time environments. PREREQUISITE(S): (CSC 301 or CSC 383 or CSC 393) and CSC 373
Students will be provided with experience in team design, implementation and testing of a large software project. PREREQUISTE(S): CSC 301 or CSC 383 or CSC 393 or IM 360
INTRODUCTION TO SOFTWARE ENGINEERING
This course introduces students to the activities performed at each stage of the development process so that they can understand the full lifecycle context of specific tasks such as coding and testing. Topics will include software development processes, domain modeling, requirements elicitation and specification, architectural design and analysis, product and process level metrics, configuration management, quality assurance activities including user acceptance testing and unit testing, project management skills such as risk analysis, effort estimation, project release planning, and software engineering ethics. PREREQUISITE(S): CSC 212 or CSC 224 or CSC 396 or CSC 242 or CSC 262 or IM 330 or CSC 243
USER INTERFACE ARCHITECTURE AND DEVELOPMENT
Fundamentals of design and implementation for graphical user interfaces (GUIs). Students design a GUI-based application following the user-centered design process and implement it using the Moderl-View-Controller architecture. Topics include usability engineering, event dispatching, multi-threaded programming, GUI widget toolkits, frameworks and customization. PREREQUISITE(S): SE 350