Computer Science

The computer science program combines the analysis of computing systems with the art and science of creating computer software. The program emphasizes the development of software solutions and the study of the hardware and software systems that provide the execution environment for those solutions. We firmly believe that the development of software has two distinct components: creation of programs to solve problems and the subsequent translation of those programs into code using an appropriate language.

Students choosing computer science will receive education far beyond the ability to write functional programs. The program is designed to serve as a basis for obtaining employment in industry or as a foundation for graduate studies through required internships and undergraduate research opportunities.

Learning Outcomes

Students who graduate with a major in computer science will be able to:

  1. Create problem-solving algorithms for a variety of moderately complex problems;
  2. Implement algorithms in at least four modern programming languages;
  3. Explain the software development process;
  4. Demonstrate competence in the use of common tools for software development;
  5. Point to significant personal experience as a member of a team developing substantial programming projects;
  6. Understand appropriate ethical and normal business interactions.

Major in Computer Science

A minimum of 35 semester hours is required, including:
Choose either:
CSC 130: Fundamentals of Programming I
CSC 131: Fundamentals of Programming II
or
CSC 143: Programming Foundations

Also required:
CSC 214: Technology and Society
CSC 251: Data Structures
CSC 330: Computer Networking
CSC 344: Programming in C and Assembler Language
CSC 352: Programming Language Study I (Traditional Languages)
CSC 353: Programming Language Study II (Web Languages)

Choose one of the following:
CSC 351: Algorithms
CSC 360: Programming Paradigms

Choose one of the following (CSC 450 strongly preferred):
CSC 450: Internship
CSC 499: Independent Study

An additional nine semester hours of elective computer science coursework is required to complete the major, of which at least six semester hours must be upper-division coursework.

A minimum grade of “C” is required in each of the non-elective computer science courses. Computer science prerequisite courses must have a minimum grade of “C” to continue
to dependent coursework.

Notes:

  • CSC 352 and CSC 353 may each be taken twice and applied to the major requirements so long as each study represents a different programming language. At least one credit each of CSC 352 and CSC 353 are required for completion of the major.
  • No more than three semester hours of CSC 450 can be applied toward completion of the computer science major requirements, and a "pass/fail" grade will be awarded for CSC 450 after the first three semester hours.

Minor in Computer Science

A minimum of 20 semester hours is required, including:
Choose either:
CSC 130: Fundamentals of Programming I
CSC 131: Fundamentals of Programming II
or
CSC 143: Programming Foundations

Also required:
CSC 251: Data Structures

Choose two of the following:
CSC 344: Programming in C and Assembler Language
CSC 352: Programming Language Study I (Traditional Languages)
CSC 353: Programming Language Study II (Web Languages)

Six semester hours of upper-division computer science coursework are also required.

CSC 112 - Principles of Computing for Non-CS Majors
Semester: Spring
Semester hours: 3
Offered to non-computer science majors, this course provides a comprehensive introduction to computing for students seeking an overview of the discipline. Students acquire necessary concepts and skills to apply computing principles and resources effectively in their chosen profession. Topics include the history of computing, logical reasoning, problem solving, data representation, and the creation of "digital artifacts" including web pages and computer programs. The course also explores software development methodologies, software as part of a computing system, information technology careers, and ethical, legal, and contemporary social aspects of information technology.
Prerequisite: high school algebra
CSC 130 - Fundamentals of Programming I
Semester: Fall
Semester hours: 4
Students are introduced to the fundamental concepts of computer programming and the practical aspects of composing, testing, proving, and documenting computer programs. Topics covered include development of programmable processes, representation and manipulation of foundation data types, simple input/output processing, and elementary program control structures.
CSC 131 - Fundamentals of Programming II
Semester: Spring
Semester hours: 4
This course builds upon the foundation established in Fundamentals of Programming I with treatments of arrays, exception handling, event models, and elementary GUI frameworks. Students are introduced to basic object-oriented design patterns.
Prerequisite: CSC 130
CSC 143 - Programming Foundations
Semester: Fall
Semester hours: 5
This course, intended for students with significant prior programming experience, provides a foundation in object-oriented programming through an accelerated presentation, including the use of APIs, basic design patterns, and IDEs. Formal models for program development, including flowcharts, requirements models, and state models are introduced. Four hours of lecture and two hours of lab per week.
Prerequisite: permission of the department
CSC 214 - Technology and Society
Semester: Fall
Semester hours: 3
Accelerating development in technology (computer-centric technology, in particular) underlies enormous changes in the acquisition, application, and extension of knowledge and information, impacting virtually every aspect of modern life in ways that are often underappreciated by a generally unaware public. Even those involved in the development of technology are often inconsiderate of the social implications of the technologies they introduce. This course explores
technology development from several perspectives. Students consider several past and present visions of the near future as expressed in the writings of several notable (and less notable) futurists, particularly as related to computer-based technologies. Topics include consideration of why we're not living in the future predicted only several decades ago, what today's technology futurists are envisioning as our unavoidable future, and how accelerating technological change is impacting every facet of modern life, from the playground to the workplace and from home to school, while technological rifts open across semi-generations. Great potential benefits are balanced against equally impressive opportunities for abuse; society expects that those responsible for the creation and application of technology accept the role of faithful stewards. Therefore this course includes a concurrent exploration of the personal, organizational, and legal decisions encountered in the development and deployment of computer-based technology.
CSC 251 - Data Structures
Semester: Fall
Semester hours: 3
Data structures and their characteristic algorithms are studied, including analysis of performance predictions and "Big-O" characterizations inherent to the various data organizations. Lists, stacks, queues, trees, and elementary graphs are considered. Fundamental sorting algorithms are also treated.
Prerequisite: CSC 131 or CSC 143
CSC 256 - Discrete Structures and Computability
Semester: On Demand
Semester hours: 3
The mathematical and theoretical underpinnings of computer science will be explored. Students will be introduced to Boolean algebra and elementary logic and their application to computer implementation and algorithm development. This course explores the historical development of computer science from its roots in mathematical models, including early models of computation, such as Turing machines and other finite state machines.
CSC 258 - Topics in Computer Science
Semester: On Demand
Semester hours: 3
This occasional offering will study special areas of computer science not otherwise covered in the curriculum.
Prerequisite: permission of professor
CSC 299 - Independent Study
Semester: On Demand
Semester hours: 1-3
Under the guidance of a faculty sponsor, students may study facets of computer science not available for study through offered computer science courses. Independent study is an ideal vehicle for students wishing to explore interdisciplinary applications of computer-related technology. Students should be either a major or minor and have a cumulative GPA of 3.00 or greater.
CSC 309 - Computer Organization and Architecture
Semester: On Demand; Every third semester
Semester hours: 3
Modern computers represent a powerful synergy of hardware and software, represented in deeply nested abstraction layers. In this course, students study computer architecture and organization as influenced by hardware-software interfaces. The organization of processors to support the fundamental execution cycle is explored. Additional topics include computer arithmetic, pipelines, performance factors, and specialized architectures.
Prerequisite: CSC 344
CSC 313 - Designing User Interaction
Semester: Spring; Alternate years
Semester hours: 3
This course provides an introduction to designing and evaluating user interfaces for a variety of interactive systems, emphasizing the development of interfaces from the user (as opposed to a system-oriented) perspective. The course focuses on using real users to complete the specification, design, evaluation, and testing of a software interface. The course also presents human-computer interaction concepts and theory, which involves computer science, psychology, social behavior, and other human factors associated with computer use. Students will work in teams and participate in thoughtful group critique sessions, experiment design, and usability experiments. This course has significant research, writing, and presentation components.
Prerequisite: sophomore, junior, or senior standing in any major
CSC 320 - Numerical Methods
Semester: On Demand
Semester hours: 3
The study of numerical methods involves the design and use of algorithms for solving large mathematical problems with a computer. Topics include estimation of accuracy, the use of series and approximation, and numerical integration and differentiation.
Prerequisite: CSC 251 and MAT 176
CSC 326 - Graphics
Semester: On Demand; Every third semester
Semester hours: 3
The use of computer technology to create and display information in a visual manner is studied. Topics include display technology, graphic user interfaces (GUI), graphics algorithms, and computer-based imagery. Exercises will involve the use of current graphics software and systems.
Prerequisite: CSC 344
CSC 330 - Computer Networking
Semester: Fall
Semester hours: 3
The organization of computer systems into networks and the theory of computer communication across those networks will be studied. Communications protocols from design to implementation perspectives will be considered with a focus on current technology and software. Students will construct and test software implementations of the technologies as they are discussed.
Prerequisite: CSC 251; CSC 344 is recommended
CSC 333 - Network Programming
Semester: On Demand
Semester hours: 3
Network Programming picks up where CSC 330 leaves off. The goal of the course is to provide students with an in-depth look at network application programming and the techniques and tools that are used therein. The student is assumed to have a fundamental knowledge of the protocol-layering model of networking, as well as an understanding of the network, transport, and application layers of the Internet protocol stack. The material for the course focuses on Java's streams and IP-based protocols. The discussion is extended to include topics such as RMI, servlets, and other components from the Java API.
Prerequisite: CSC 330
CSC 335 - Database Systems
Semester: On Demand
Semester hours: 3
This course will introduce the student to the fundamental concepts and implementation of modern database systems, including relational and object-oriented databases. Topics include entity relationship models, transaction processing, concurrency, and query processing.
Prerequisite: CSC 251
CSC 344 - Programming in C and Assembler Language
Semester: Spring
Semester hours: 4
This course introduces two of the most fundamental languages for computer programming: assembler language, the language most closely related to the hardware of the computer, and C, the language most commonly used for operating systems and whose syntax has influenced most modern programming languages. Students will study the representation of data and programs in the processor and memory of modern computers and be led to understand how the basic operations in high-level languages are implemented. Topics will include data structure definition and reference mechanisms and using libraries for I/O and operating system interfaces. This course has a substantial programming component.
Prerequisite: CSC 131 or CSC 143
CSC 345 - Advanced Algorithms and Parallel Processing
Semester: On Demand
Semester hours: 3
Most programming problems encountered by undergraduate computer science students are solvable using straightforward approaches. There are a number of important and challenging problems whose efficient solutions demand more sophisticated techniques. This course presents an organized study of major algorithmic strategies (divide and conquer, dynamic programming, backtracking, greedy, branch and bound) and introduces students to advanced topics including computability, fixed-point algorithms, and NP-complete problems. Algorithms for parallel processing are explored through the use of a Beowulf processor cluster as a target platform for programming exercises.
Prerequisite: CSC 251, CSC 344, and senior standing
CSC 351 - Algorithms
Semester: On Demand
Semester hours: 3
This course of study extends the study of algorithms that began in CSC 251, focusing on algorithmic paradigms (backtracking, greedy, dynamic programming, branch and bound, etc.) and patterns that have general application in both theoretical and practical computer science. Solutions for classical optimization problems, P and NP characterization, and shortest path algorithms will be considered.
Prerequisite: MAT 110 and CSC 251
CSC 352 - Programming Language Study I (Traditional Languages)
Semester: Fall
Semester hours: 1
This course provides instruction and experience using modern computer programming languages. Students are required to implement basic and intermediate programming tasks in order to explore the syntax, semantics, and dominant paradigm of the topic language. Students cannot apply more than two semester hours of CSC 352 toward completion of the computer science major requirements.
Prerequisite: CSC 131 or CSC 143
CSC 353 - Programming Language Study II (Web Languages)
Semester: Spring
Semester hours: 1
This course provides instruction and experience using modern computer programming languages. Students are required to implement basic and intermediate programming tasks in order to explore the syntax, semantics, and dominant paradigm of the topic language. Students cannot apply more than two semester hours of CSC 353 toward completion of the computer science major requirements.
Prerequisite: CSC 131 or CSC 143
CSC 360 - Programming Paradigms
Semester: Fall
Semester hours: 3
The history, development, and evolution of programming languages are studied in this course, which deals with the programming paradigms utilized by modern languages. Experience with alternative paradigms is gained through programming exercises. Related topics covered in this course include regular expressions, interpreters and compilers, and tools for language processing.
Prerequisite: CSC 131, CSC 143, or CSC 251
CSC 376 - Object-Oriented Analysis and Design
Semester: On Demand
Semester hours: 3
This course will introduce the student to techniques for performing requirements analysis and design using object-oriented approaches. Topics include the role of modeling, creation of use cases, risk analysis, the "unified software development process," and iterative design.
Prerequisite: permission of the professor
CSC 410 - Operating Systems
Semester: On Demand
Semester hours: 3
This course will introduce the student to the principles, mechanisms, and algorithms underlying modern operating systems. Topics will include management of memory, I/O and processor resources, elementary queuing theory, and inter-process communication.
Prerequisite: CSC 344
CSC 430 - Advanced Networking and Security
Semester: On Demand
Semester hours: 3
Participants will explore the techniques and study issues relevant to maintaining and securing computers in a modern networked environment. The course will focus on techniques and methods used to compromise networked computer systems and the methods that are used to counter these attacks. Topics covered will include human and automated intrusion, viruses, and social engineering.
Prerequisite: CSC 330
CSC 433 - Compiler Construction
Semester: On Demand
Semester hours: 4
This course considers algorithms and data structures used in translation of high-level languages to executable machine language. Topics include general organization, lexicographic analysis, management of name spaces and storage, error detection and recovery, code generation, and optimization. This course requires significant programming. Evaluation is heavily dependent upon the successful development of substantial portions of a compiler. Students should expect to spend a minimum of 10 hours weekly on this course.
Prerequisite: CSC 344, CSC 360; senior standing is recommended
CSC 450 - Internship
Semester: Fall, Spring, and Summer
Semester hours: 1-12
This course is a guided work experience in an already established place of business. The student must arrange the internship in agreement with the instructor and the Office of Career Services. The internship should relate to the student's major or minor area of study. A maximum of three semester hours will be counted toward a computer science major, and a "pass/fail" grade will be awarded for CSC 450 after the first three semester hours. Contract is required.
Prerequisite: junior or senior standing or permission of the department
CSC 490 - Computer Science Research Seminar
Semester: On Demand
Semester hours: 1-3
Students participate in ongoing research and development projects. Areas of focus vary as projects are undertaken and evolve. Participants are expected to be active contributors to research and development teams operating under the guidance of faculty sponsors, and students are required to make both formal and informal presentations based on team progress and participate in critical project reviews. Students should expect to contribute at least nine hours each week toward team efforts.
Prerequisite: junior standing. (Note: CSC 490 is required to fulfill the requirements of the major in computer science; CSC 490 may be taken a second time to fulfill an upper-division elective in the major.)
CSC 499 - Independent Study
Semester: On Demand
Semester hours: 1-3
Under the guidance of a faculty sponsor, students may study facets of computer science not available for study through offered computer science courses. Independent study is an ideal vehicle for students wishing to explore interdisciplinary applications of computer-related technology. Students should be either a major or minor and have a cumulative GPA of 3.00 or greater.
Prerequisite: junior or senior standing
omniupdate