The BCS Curriculum
Auburn University’s online Bachelor of Computer Science (BCS) degree completer program requires students to complete 20 courses, broken down into 18 core courses and 2 electives, for a total of 60 credit hours of computer science course work at graduation.
Below are the courses students will complete throughout the online BCS program. Each course is worth 3 credit hours unless otherwise indicated. After reviewing the courses, you can learn more about the faculty here.
Required Courses (18 courses, 54 credit hours)
Introduces the fundamental concepts of object-oriented programming. By the end of this course, the student will be able to:
- Design and implement simple programs based on problem specifications
- Implement classes and methods when provided the informal specification
- Implement programs that use simple data structures and collections such as arrays and lists
Continues the development of programming from an object-oriented perspective. Emphasizes sound software engineering principles and best practices. By the end of this course, the student will be able to:
- Design, implement and test programs based on sound object-oriented design
- Design, implement and test class inheritance hierarchies based on informal specifications
- Implement and test class methods using polymorphism based on informal specifications
- Implement and test programs that require and use exception handling
CPSC 1213 is a prerequisite for CPSC 1223.
Developing programs that use data structures and collections to efficiently store data. Emphasis will be placed on the interplay between effective data structures and efficient algorithms. By the end of this course, the student will be able to:
- Design and implement programs that use implementations of common data structures and collections
- Understand the design and implementation decisions on which common data structures and collections are based
- Understand the effect that the choice of data structure and collection has on the efficiency and scalability of algorithms
CPSC 1223 is a prerequisite for CPSC 1233.
Development of a graphical event-driven desktop/laptop computer application using an object-oriented language and SDK, testing, systematic debugging documentation and maintenance programming. By the end of this course, the student will be able to:
- Understand a modern software development life cycle
- Be able to use modern integrated development environments to develop a graphical application for a current operating system
- Be able to design, implement and test a complete application of significant size
CPSC 1233 is a prerequisite for CPSC 2713.
Basics of set theory, propositional and predicate logic as used to describe algorithms and recurrence relations. Proving correctness and estimating running time for algorithms will be covered, as will mathematical and structural induction. By the end of this course, the student will:
- Acquire basic knowledge of Discrete Mathematics
- Be able to produce rigorous proofs, including inductive proofs
- Be able to apply notions and results of Discrete Mathematics to computer science
- Be able to apply combinatorial reasoning to proofs of correctness for algorithms
Introduction to algorithms as tools for computational problem solving, language of algorithms, understanding algorithms, approximately analyzing correctness and efficiency of algorithms, algorithms that solve fundamental computational problems, basic algorithm design techniques, and steps of computational problem solving. By the end of this course, the student will:
- Be able to read, write and understand algorithms
- Be able to estimate the correctness and efficiency of an algorithm
- Be able to implement and measure the efficiency of an algorithm
- Learn algorithm design/modify/reuse techniques
CPSC 1233 and 3243 are prerequisites for CPSC 3273.
Advanced complexity analysis techniques, notions of computational complexity, polynomial time hierarchy, computability, algorithms that solve advanced computational problems, advanced algorithm design techniques and computational problem solving. By the end of this course, the student will:
- Be able to determine correctness and efficiency of an algorithm using mathematical/logical tools
- Learn about algorithmic solutions to computational problems
- Learn the steps of computational problem solving
- Learn about levels of computational complexity
CPSC 3273 is a prerequisite for CPSC 3283.
Stored program computers, hardware and software components, data representations, instruction sets, addressing modes, assembly language programming, loaders, linkers and operating systems. By the end of this course, the student will be able to:
- Understand basic concepts in computer organization and fundamental computer architecture
- Understand data representation techniques, addressing modes, instruction sets, interfaces and interrupts
- Be able to apply basic knowledge of digital logic circuits to computer organization
CPSC 3243 is a prerequisite for CPSC 3303.
Structure and functions of operating systems; processes and process scheduling; synchronization and mutual exclusion; memory management; auxiliary storage management; resource allocation and deadlock; security, privacy and ethical concerns; design tradeoffs. By the end of this course, the student will:
- Understand major components of operating systems
- Understand design tradeoffs associated with operating systems
- Understand system resource sharing among users
- Understand security and reliability mechanisms
CPSC 3303 and 1233 are prerequisites for CPSC 3333.
Fundamentals of computer networks, TCP/IP layered model: application layer, transport layer, network layer, link layer, with examples of each layer, and explanation of design issues. IPv6. By the end of this course, the student will be able to:
- Understand fundamental concepts and principles of computer communication networks
- Understand computer networks from the perspective of the TCP/IP Internet framework
- Understand network protocol design decisions
CPSC 3333 is a prerequisite for CPSC 3353.
Current processes, methods and tools related to modeling and designing software systems. By the end of this course, the student will be able to:
- Understand life cycle activities used to develop software
- Employ testing techniques to clarify requirements, design and development
- Develop software in an iterative fashion using a test framework
- Refactor ill-structured code
- Understand iteration planning and tracking
- Understand tools common to industry: configuration management, bug reporting
- Select software metrics suitable for a specific development effort
- Develop a personal software development portfolio
CPSC 2713 is a prerequisite for CPSC 3703.
Application of ethical principles to computing-related topics, including privacy, property rights, autonomy, access and diversity. By the end of this course, the student will:
- Be capable of analyzing ethical problems in computing situations and making a decision
- Understand professional codes of ethics such as those of the Association for Computing Machinery and the Institute for Electrical and Electronic Engineers
- Be aware of existing U.S. legislation relating to ethical topics in computing
- Be able to advocate an ethical position in written format
The design and implementation of database applications, with a focus on relational database management systems. By the end of this course, the student will be able to:
- Design and implement relational database schemas
- Design and implement database applications
- Understand and apply fundamental elements of relational database design
CPSC 3703 is a prerequisite for CPSC 5123.
Theory, design and implementation of database systems. By the end of this course, the student will be able to:
- Understand the theoretical underpinnings of the relational model
- Understand and apply relational design theory
- Understand implementation issues and strategies for relational database systems and query languages
- Design and implement non-relational databases and applications
CPSC 5123 is a prerequisite for CPSC 5133.
Comprehensive introduction to web development, working with extensible markup languages and databases, event-driven programming, implementing communication and web services. By the end of this course, the student will be able to:
- Demonstrate knowledge of fundamentals of web development
- Work with XML and databases
- Develop event-driven web applications
- Develop communication (e.g. news feeds and RSS) and web services applications (e.g. SOAP)
CPSC 3703 is a prerequisite for CPSC 5203.
Advanced course in web development and web server software development. By the end of this course, the student will be able to:
- Develop robust, advanced web software
- Work with a variety of modern web development languages
- Apply development principles in creating solutions in real-world web applications
CPSC 5203 is a prerequisite for CPSC 5213.
Software development for wireless applications: specification, process, testing and performance evaluation. Design and development of wireless application layer software, including current protocols. By the end of this course the student will be able to:
- Understand how to incorporate modern smartphone hardware into applications, including cameras, GPSes and accelerometers
- Understand the software libraries available on modern smartphones for database, graphics rendering, sound and video
- Understand cross-platform development tools and processes
- To be able to design and develop a complex solution for a mobile device
CPSC 3703 is a prerequisite for CPSC 5333.
Course builds mastery of mobile application development and the skills necessary to stay current in this fast-moving field throughout one’s career by introducing a new programming language and application programmer interface and requiring the student to master those. By the end of this course, the student will be able to:
- Independently learn a mobile software development platform
- Develop mobile software using a modern mobile operating system, including user interface design, persistent storage and network connections
- Conceive, design and implement a production-quality mobile device application
CPSC 5333 is a prerequisite for CPSC 5343.
Electives (2 courses, at least 6 credit hours)
Fundamental concepts of programming language design, interpretation and compilation. By the end of this course, the student will be able to:
- Understand the imperative, functional and object-oriented paradigms
- Understand fundamental issues in language design (scoping, typing, polymorphism, etc.)
- Build a simple compiler (lexer, parser, type checker and syntax-directed translator), using a functional programming language
CPSC 1223 is a prerequisite for CPSC 3223.
Design of Computer Systems, emphasizing the relationship between computer hardware and software. Includes processor control and data path organization, memory subsystem design, instruction set design, processor simulation and quantitative analysis of computer performance. By the end of this course, the student will:
- Be proficient in the design of modern computer systems at the architectural level
- Be able to quantitatively analyze the impact of design trade-offs on system performance
- Be able to develop software that utilizes the underlying architecture efficiently
CPSC 3303 is a prerequisite for CPSC 3323.
Overview of hardware and software issues in parallel systems: fundamental parallel architectures, programming languages, tools and algorithms, and parallel applications. By the end of this course, the student will:
- Be able to systematically partition a program for parallel computing
- Be able to match the problem at hand to a parallel computing environment
- Be able to program in a parallel programming language
- Be able to analyze issues in the design of a distributed system
CPSC 3333 is a prerequisite for CPSC 3343.
Computer network design, including multiplexing, switching, routing, internetworking, transport protocols, congestion control and performance evaluation. By the end of this course, the student will:
- Gain deeper and more detailed understanding of computer networking topics covered in CPSC 3353
- Be able to apply network performance analysis techniques
- Gain understanding of switching, packet scheduling and queue management
CPSC 3353 is a prerequisite for CPSC 3363.
- Develop advanced network protocol development skills
- Gain an understanding of performance issues in advanced wireless and mobile networks
- Gain an understanding of issues related to supporting mobile distributed applications
Current processes, methods and tools related to modeling and designing software systems. By the end of this course, the student will be able to:
- Elicit, analyze and specify functional and nonfunctional requirements
- Develop, analyze and document software architectures and designs
- Prioritize and select features based on project risk
- Understand project-level schedule estimation and monitoring
- Know common development processes used in the industry
- Re-pattern solutions where appropriate to meet nonfunctional requirements
- Understand how to incorporate nonfunctional requirements (specifically, security) into the development life cycle
- Understand the role of configuration management in the development process
- Develop a personal software full-life cycle development portfolio
CPSC 3703 is a prerequisite for CPSC 3713.
Basics of system administration for Windows and Unix machines, including configuration of web, email, file systems, web services and database servers. Virtualization. Clustering. Performance measurement and enhancement. By the end of this course, the student will be able to:
- Administer modern computer systems and networks
- Develop software solutions to solve systems administration problems
- Use modern tools for system administration and configuration
CPSC 3333 is a prerequisite for CPSC 4003.
Fundamentals of formal languages, including mathematical models of regular sets, context-free languages and Turing machines; deterministic and non-deterministic models. Basics of interpretation and compilation. By the end of this course, the student will:
- Have proficiency with mathematical tools and formal methods in Computer Science
- Understand different classes of abstract languages, their boundaries, their corresponding computation machine models and their significance in computation
CPSC 3243 and 3273 are prerequisites for CPSC 4203.