Computer Science
- Department Office: SM 178
- Phone Number: 507-537-6178
- Website: https://www.smsu.edu/academics/programs/computerscience/
The Computer Science Program is designed to meet the needs of students desiring careers in business, industry, and government as well as preparation for advanced studies at the graduate level. Students majoring in Computer Science may apply their technical strengths to second majors in many programs such as accounting, business administration, mathematics, science, and education. A graduate-level certificate program in Cybersecurity is also available. The faculty of the Computer Science Program have been selected to provide quality instruction in all branches of Computer Science.
All major and minor programs must have the approval of the student’s advisor and the department faculty. All courses counting towards the major or minor must be completed with a grade of “C–“ or better.
Note: Students must complete a minimum of 120 credits in order to graduate with a Bachelor's degree.
An overview of mainframe and personal computers. Topics include: application software, the Internet, hardware components and peripheral devices, and data processing.
A survey of current digital technology intended for students not majoring or minoring in Computer Science. Students will gain a better understanding of the digital systems they use every day and learn how to work more efficiently and effectively with computers and computer-based devices.
This course is designed for a student considering a career in a computing field but is accessible to any student wanting to learn more about computer technology. The skills developed in this course will be utilized throughout the computer science curriculum. Topics will include the binary number system, data representation, digital logic, algorithmic problem solving, and programming in both low-level and high-level programming languages. The required preparation is MATH 110 or three years of high school mathematics.
This course is designed for a student considering a career in a computing field but is accessible to any student wanting to learn more about computing technology. The skills developed in this course will be utilized throughout the computer science curriculum. Topics will include the binary number system, data representation, digital logic, algorithmic problem solving, and programming in both low-level and high-level programming languages. The required preparation is MATH 110 or three years of high school mathematics.
An introduction to the techniques of programming. Topics include problem solving methods, program design strategies, selection structures, iteration structures, subprograms, recursion, arrays and lists, sorting and searching, object-oriented design and classes. Students will use a popular high-level programming language to write, compile, debug, and document programs. Hands-on laboratory exercises will be integrated into the course. The required preparation is MATH 110 or three years of high school mathematics.
A continuation of COMP 164 with emphasis on the techniques of programming. Topics include problem solving methods, program design strategies, selection structures, iteration structures, subprograms, recursion, arrays and list, sorting and searching, object-oriented design and classes. Students will use a popular high-level programming language to write, compile, debug, and document programs. Hands-on laboratory exercises will be integrated into the course.
Continuation of COMP 165. Topics include: recursion, lists, dictionaries, sorting and searching, stacks, queues, binary trees, and graphs. Hands-on laboratory exercises will be integrated into the course. Students must enroll in both COMP 166 and COMP 166L.
Continuation of COMP 165. Topics include: recursion, lists, dictionaries, sorting and searching, stacks, queues, binary trees, and graphs. Hands-on laboratory exercises will be integrated into the course. Students must enroll in both COMP 166 and COMP 166L.
On-the-job, supervised experience and study dealing with the applications of computers.
Hands on training on Android programming intended for students NOT majoring in Computer Science. Topics include Android IDE installation and configuration, application structures and resources, XML basics, UI design, Java basics, Intent and event handling, Android design patterns, animation, and video streaming.
An overview of basic computer organization and architecture. Topics include: data presentation, digital logic, combinational and sequential circuit design and analysis, memory system organization, instruction and data path architecture, instruction set architecture and assembly language.
A study of computer science topics not ordinarily covered in established courses.
An introduction to program design using object-oriented methods. Topics include: abstraction, composition, inheritance, polymorphism, UML design, threads and sockets, graphic elements, user interface design, web-programming and event handling.
An introduction to C# programming using Microsoft .Net platform. Topics include: inheritance and polymorphism, delegates and events, streams, LINQ, XML, ADO.net and relational database, ASP.net and WPF application, threads and synchronization.
A study of algorithms. Topics include: analysis and verification techniques, divide and conquer, dynamic programming, greedy, backtracking, and problem complexity.
An introduction to areas of theoretical computer science. Topics include: finite state machines, regular languages, push down automata, context free languages, Turing machines and recursive languages.
An introduction to the principles of computer networking. Topics include: OSI and TCP/IP reference models, data link, network, transport, and application layers, and recent applications of network technology.
An introduction to the organization of programming languages and the run-time behavior of programs. Topics include: syntax and semantics, procedural block-structured languages, functional languages, object-oriented languages, logical languages, case studies of languages such as Pascal, Ada, FORTRAN, COBOL, Java, LISP, and Prolog.
An introduction to the storage and organization of information. Topics include: database management, data mining, intelligent systems, networked databases, and human-computer interaction.
An in depth look at programming on the UNIX/Linux platform. Topics include C/C++ programming, shell scripts, file management, memory management, process and thread management, server management, security, and networking.
An introduction to the major concepts in an operating system, data communication, and modern computer networks. Topics include: processes, concurrency, CPU scheduling, deadlocks and memory management, TCP/IP, ATM, OSI Model, frame relay, Ethernet, congestion control, link-level flow and error control.
An introduction to the major algorithms and techniques for computer graphics. Topics include: windowing, clipping, 3-D techniques, parametric curves and surfaces, hidden lines and surfaces, shading methods, ray casting and tracing.
Students will read, present, and discuss material pertaining to the social and professional issues of Computer Science and technology in general. Topics may include: social context of computing, professional and ethical responsibilities, risks and liabilities of computer-based systems, security issues and intellectual property. Students will also explore possible career opportunities.
A study of Android mobile application development. Topics include Android platform and development tools, application fundamentals, activity, intent, fragment, permission, services, thread & messages, graphics, multi-touch & gesture, networking
This course is designed to introduce the methods, techniques, and utilities for developing apps for iOS (Apple mobile devices).
A study of web programming, an in depth look at technologies that are fundamental to develop web-centric applications. Topics include HTML, Cascading Style Sheets (CSS), JavaScript, web servers, Document Object Model (DOM), JSON, XML, AJAX,PHP, and MySQL.
An introduction to the techniques of Software Engineering. Topics include: software processes, requirements elicitation and specification, analysis, design, development and implementation, validation, testing, and project management.
This courses covers a collection of machine learning models, algorithms, tools and techniques that can be applied to solve data driven decision making problems. Topics include supervised learning, regularization and model selection, neural networks, unsupervised learning and hands on machine learning applications.
An introduction to the basic concepts and technologies of artificial intelligence. Applications of these concepts and technologies are then discussed. Topics include: knowledge representation, search strategies, neural networks, and machine learning.
A study of computer science topics not ordinarily covered in the established courses. Prerequisite: consent of Computer Science Program faculty.
Students will work in teams to design, develop, and implement a significant software or hardware project. Two semester sequence.
Students will work in teams to design, develop, and implement a significant software or hardware project. Two semester sequence.
An independent study of a computer science topic not covered elsewhere.
On-the-job supervised experience and study dealing with applications of computer science.
Overview of principles and approaches to information security. Topics include software vulnerabilities, secure software design principles, trusted computing base, authentication and access control, malware, network threats and defenses, and cryptography applications. Prerequisites: B.S. in Computer Science OR BS in a closely related field and the ability to program in a high-level programming language OR CYBR 505.
This course will provide students with the fundamental knowledge of computer science that forms the technical foundation of the cybersecurity field with an essential focus on software development. The course will further develop coding and problem-solving skills and review critical concepts in algorithm development and computer architecture that are important in creating secure software and systems.
Information security vulnerabilities and risks; legal, cost, privacy, and technology constraints; derivation of strategies; technical and procedural means of achieving desired ends. Prerequisite: B.S. in Computer Science (or closely related field), or its equivalent.
Design principles of secure systems, authentication, access control and authorization, discretionary and mandatory security policies, secure kernel design, and secure databases.
Study of fundamental principles of Internet security, approaches and techniques used in network attacks and defending mechanisms. Topics include threats and vulnerabilities of TCP/IP, DNS, and BGP protocols, denial of service (DOS) attacks, firewalls, IPsec, TLS, and web security.
This course provides a comprehensive overview of risk management and its implications on IT infrastructures and compliance. It covers methodologies for risk assessment, security planning, mechanisms for protection against risks, responses to security incidents and maintaining acceptable risks and compliance requirements.
This course provides the student with network and system penetration testing methodologies to prepare businesses and developers to discover and mitigate security weaknesses. It covers the basic strategies and tools that prepare students to engage in proactive and aggressive cyber security activities, with a focus on penetration testing and ethical hacking.
This course provides students with the background and skills to manage information security incidents to minimize impact on systems and software. Topics include understanding cyber threats, incident handling steps and response to different types of security incidents. Students explore these topics by utilizing industry-standard processes and forensics tools for investigating information security incidents.
This course covers the design and implementation of secure software. Some of the topics covered are the characteristics of secure software, the role of security in the development lifecycle, designing secure software, and best security programming practices. Software security for web and mobile applications will be covered.
This course involves the planning, approval, implementation and completion of a capstone project. The capstone provides culmination of the cybersecurity program in a self-directed research or practical project that showcases students mastery of cybersecurity topics.