Computer Science Courses
A first course in programming for students majoring in computer science. Language concepts include primitives, variables, sequences, function, selection, iteration and recursion. Software engineering concepts include testing and debugging. System concepts include directories, paths, files, and text editing.
A second course in programming for students majoring in computer science. Using a high-level language, students use object-oriented practices to study fundamental data structures and algorithms. Issues such as computability, problem complexity and algorithm analysis, efficient searching and sorting, data structures, and the object-oriented programming paradigm are introduced and explained. Computing proficiency is required for a passing grade in this course.
Familiarization with Windows, fundamental and intermediate word processing commands, spreadsheet applications, and database management. Computing proficiency is required for a passing grade in this course.
An introductory course that overviews the core principles of computer science from a broad spectrum of topics. The course content is focused on computing and its relation to creativity, abstraction, algorithms, programming, Big Data, Internet/networking, and societal impact. Students will work on team-based projects that explore topics in Big Data, investigate the impact of the internet, and create their own games and/or smartphone applications. Students will use the graphical programming language Snap. Computing proficiency is required for a passing grade in this course.
This course covers the same material as CS 100 but in a depth appropriate for honors students. It is an honors version of the first course in programming for students majoring in computer science. Prior knowledge of programming is not required, but the course is appropriate for students with prior programming experience. Language concepts include primitives, variables, sequences, function, selection, iteration and recursion. Software engineering concepts include testing and debugging. System concepts include directories, paths, files, and text editing.
This course covers the same material as CS 101 but in a depth appropriate for honors students. It is an honors version of the second course in programming for students majoring in computer science. Using a high-level language, students use object-oriented practices to study fundamental data structures and algorithms. Issues such as computability, problem complexity and algorithm analysis, efficient searching and sorting, data structures, and the object-oriented programming paradigm are introduced and explained.
This course is designed to help the students acquire various competencies that will enable them to safely and effectively use and create digital technologies and Internet resources in personal, academic, and professional contexts. Students will demonstrate their learning by creating a digital literacy portfolio. Computing proficiency is required for a passing grade in this course.
An introduction to the discipline of computing designed for students who are considering a major in Computer Science, a major in Cyber Security, or a minor in Computer Science.
This course provides an introduction to cyber security. It covers fundamental concepts necessary to understand the threats to security as well as various defenses against those threats. The material includes an understanding of existing threats, planning for security, technology used to defend a computer system, and implementing security measures and technology.
Introduction to software engineering: the software crisis, program life cycle, software systems analysis techniques, software modeling, theory and practice of design, program testing methodologies, programmer team organization, and program verification and synthesis. Computing proficiency is required for a passing grade in this course.
Data structures including balanced search trees, heaps, hash tables, and graphs. Algorithm design techniques including divide-and-conquer, greedy method, and dynamic programming. Emphasis on problem solving, design, analysis, and reasoning about data structures and algorithms. Computing proficiency is required for a passing grade in this course.
Introduces the student to the fundamentals of the internet and web page design and development. Students will be shown how to use the internet, text editors, and build basic web pages using HTML coding. This will include, but not be limited to hyperlinks, tables, basic CSS styling, frames and forms. The student will also be given demonstrations and assignments using a WYSIWYG editor. Computing proficiency is required for a passing grade in this course.
Use of spreadsheets and other environments to build business and scientific applications. Course includes development of problem-solving skills and an introduction to the object-oriented paradigm. Computing proficiency is required for a passing grade in this course.
Constituent parts of database management (design, creation, and manipulation of databases), including the conceptual and relational data models, SQL, normalization and security. Writing proficiency is required for a passing grade in this course. A student who does not write with the skill normally required of an upper-division student will not earn a passing grade, no matter how well the student performs in other areas of the course.
An introduction to commercial database packages. Students will gain familiarity with both creating and using standard database software packages to solve real-world problems. Computing proficiency is required for a passing grade in this course.
This course is a follow-up course to CS 302 for non-majors wishing to learn more about the design and use of database systems. Now that the underpinnings of data, data representation, and data visualization are in place from CS 302, students will undertake an investigation into the uses of data and the construction of and understanding of databases design principles. Computing proficiency is required for a passing grade in this course.
A course designed to teach website design principles and implementation techniques. The course requires prior knowledge of the fundamentals of the internet and web page design and development. This class is not cross-listed as a graduate course. Computing proficiency is required for a passing grade in this course.
A course designed to build upon topics from the Introduction to Python Programming course and introduces advanced programming and problem-solving topics using the Python language. Computing proficiency is required for a passing grade in this course.
The study and application of common design patterns, frameworks, and best practice to the process of systematic web-based software development. Students build enterprise applications using industry-wide standardized tools and frameworks.
By way of case study, the course finds and frames issues related to legal and ethical issues in computing. Topics include privacy, free speech, intellectual property, security, and software reliability and liability issues. Computing proficiency is required for a passing grade in this course.
By way of case study and fact pattern analysis, we will find and frame advanced legal and ethical issues presented by past, contemporary and emerging technology. Cases and events will be examined. At the conclusion of the semester, students will be able to identify and discuss legal and ethical issues presented by technology. Students will create a seminal project showcasing their understanding of a chosen issue as well as the student's ability to use computing technology to communicate, share and display their work. Computing proficiency is required for a passing grade in this course.
We will analyze advanced legal and ethical issues confronting the usage of new technologies and how these issues impact society. We will examine past, contemporary and emerging cases that have a connection to computing technology. Human values and ethics will be at the forefront of our approach, and we will study the intersection of human values, law and professional ethics.
Design and construction of standard user interfaces using a visual programming environment. Course includes the prototyping of several standard user interface mechanisms. Computing proficiency is required for a passing grade in this course.
Special topics in computing.
Software development course designed to meet the needs of individual students. This course is specifically for students developing software for an enterprise, such as those at The Edge Incubator and Accelerator.
Formal study of programming language specification, analysis, implementation, and run-time support structures; organization of programming languages with emphasis on language constructs and mechanisms; and study of non-procedural programming paradigms.
Building upon the concepts from CS 104, students will explore in-depth how computer science education is presented in the secondary education setting. Students will get the opportunity to explore current computer science curriculum and develop resources for future teaching, with a specific emphasis on the College Board’s AP CS Principles (AP CSP) curriculum.
Basic concepts of human-computer interaction, including guidelines for interface design, evaluation of interface designs, virtual environments, menus, forms, natural language interactions, novel interaction devices, information search and information visualization.
An examination of computer security concepts, such as cryptographic tools, user authentication, access control, database security, intrusion detection, malicious software, denial of service, firewalls and intrusion prevention systems, trusted computing and multilevel security, buffer overflow, software security, physical and infrastructure security, human factors, and security auditing.
Fundamentals of interactive 3-D computer graphics, including modeling and transformations, viewing, lighting and shading, mapping methods, graphics pipeline, shading languages, and interaction techniques. Programming projects are required.
The study of the issues related to computer communications. Topics include physical topologies, switching, error detection and correction, routing, congestion control, and connection management for global networks (such as the Internet) and local area networks (such as Ethernet). In addition, network programming and applications will be considered.
This course will cover algorithms and concepts in cryptography and data security. We will undertake an examination of algorithms and concepts in cryptography and data security, such as symmetric ciphers, asymmetric ciphers, public-key cryptography, hash functions, message authentication codes, key management and distribution, etc.
Digital Forensics is an area of study that is rapidly growing in importance and visibility. It involves preserving, identifying, extracting, documenting and interpreting digital data. Though sometimes misunderstood, digital forensics is like other types of investigation. With the continuous rise of computer-related incidents and crimes, and the increased emphasis on homeland defense in this country, there is a growing need for computer science graduates with the skills to investigate these crimes. This course will introduce the topics of computer crime and digital forensics. Students will be required to learn different aspects of computer crime and ways in which to uncover, protect and exploit digital evidence.
This course is an introduction to software security principles and practices. Topics for this course will include but not be limited to security architectures, defensive programming, web security, secure information flow, and common software vulnerabilities.
Software Reverse Engineering is an area of study that is rapidly growing in importance and visibility. This course will reveal to students the challenges of monitoring and understanding software systems. During the course students will become familiar with the practice of software reverse engineering files by utilizing static and dynamic techniques, and methods in order to gain an understanding as to what impact a file may have on a computer system.
Concepts concerning network security, including an examination of network security concepts, algorithms, and protocols.
This course introduces fundamental concepts & techniques in data science as well as develops practical skills for data analysis in real-world applications. Given the multi-disciplinary nature of data science, the course will primarily focus on the advantages and disadvantages of various methods for different data characteristics, but will also provide some coverage on the statistical or mathematical foundations. Topics to cover include data preprocessing, data exploration, relationship mining, prediction, clustering, outlier detection, deep learning, spatial and spatiotemporal data analysis, text data analysis, and big data.
This course is an introduction to information retrieval principles and practices. The course will cover several aspects of Information Retrieval including; indexing, processing, querying, and classifying data. Also, retrieval models, algorithms, and implementations will be covered. Though the class will focus primarily on textual data, other media including images/videos, music/audio files, and geospatial information will be addressed. Topics for this course will include but not be limited to: text processing and classification, web search development techniques, and document clustering.
The world is experiencing rapid growth in the amount of published data which come from different sources, including Social Media platforms. The availability of programming interfaces to these platforms allows for near real-time processing of these data for various purposes. This course will reveal to students the inherent challenges of analyzing Social Media data and introduce tools and techniques that are available to address them.
This course involves the exploration of new forms of Human-Computer Interaction (HCI) based on passive measurement of neurophysiological states (cognitive and affective). These include the measurement of cognitive workload and affective engagement.
This course provides students with knowledge and fundamental concepts of high performance computing as well as hands-on experience of the core technology in the field. The objective of this class is to understand how to achieve high performance on a wide range of computational platforms. Topics include: optimizing the performance of sequential programs based on modern computer memory hierarchies, parallel algorithm design, developing parallel programs using MPI, analyzing the performance of parallel programs.
This course offers a comprehensive overview of machine learning, encompassing both theoretical foundations and practical algorithmic approaches from multiple perspectives. The curriculum includes foundational learning theory, supervised learning with a particular emphasis on modern deep learning techniques, unsupervised learning, and reinforcement learning.
This course covers fundamental principles, algorithms, and implementations of reinforcement learning, including the design of computational agents based on machine learning and control theory. The typical methods include reinforcement algorithms, dynamic programming, approximate functions, and temporal difference learning for policy evaluation and control problems. The course will involve the application of these concepts and methods in simulation or real-world problems as well as potentially in the context of psychology and neuroscience.
The CyberCorps© Scholarship for Service (SFS) Seminar is only for the students in the SFS@Bama program. This course will focus on important information necessary to be successful in a government cyber security career. The CyberCorps© SFS program prepares the next generation of cyber security employees to protect and defend the United States of America’s infrastructure from threats, attacks, and potential intrusions. The course will include briefings, presentations, job related tasks, job fairs, and guest speakers.
A culminating capstone project course that integrates the skills and abilities throughout the curriculum into a comprehensive design and development experience for computer science majors. Writing proficiency is required for a passing grade in this course. A student who does not write with the skill normally required of an upper-division student will not earn a passing grade, no matter how well the student performs in other areas of the course.