Brad Miller (department head)
The computer science major at Luther is designed to provide each student with the academic base needed to keep abreast of the changing world of computing. Both theory and practice are taught to allow students to successfully join computer professionals already working in the field.
The major contains a set of core courses in which computer science students learn concepts common to all areas of the discipline. Students then select from a wide range of computer science electives. Since computer science relates to so many different disciplines, students are encouraged to select additional supporting courses from a broad range of academic areas.
In addition, all majors at Luther require a writing component. In computer science, this is fulfilled by taking CS 296 in conjunction with a companion course. See the CS 296 course description for a list of acceptable companion courses. The research will be graded and must be completed with a grade of C or above in order to fulfill the writing and presentation requirement in the major.
Required for a major: CS 130, 140, 150, 160, 165; one from CS 252 or 253; CS 260, 296, 330, 360, 370; two from DS 420, CS 430, 440, 450. The year-long senior project (CS 490 and CS 491) is also required.
Computer science majors are strongly encouraged to take PAID 450: Ethics and Technology, as their Paideia capstone course. Students considering graduate school are strongly encouraged to take MATH 220 as well.
Required for a minor: CS 130, 140, 150, 160, 165; one from CS 252 or 253; CS 330.
Advanced Placement Credit: Advanced placement credit is dependent on successful completion of CS 160 or one of the other computer science courses required for the major. CS 160 is the lowest numbered course for which advanced placement credit will be considered.
The course focuses on constructing relational models of data, the relational algebra, querying relational databases using SQL. Students will become familiar with a popular open source data management system such as MySQL or Postgresql.
An introduction to computer science emphasizing problem solving. Problems are selected from a variety of interesting areas such as graphics, image processing, cryptography, data analysis, astronomy, video games, and environmental stimulation. Topics include algorithm design and object oriented programming.
A continuation of the ideas presented in CS 150 with particular emphasis on data structures, algorithms, and analysis. Implementation of abstract data types such as stacks, queues, trees, and graphs as well as important recursive and non-recursive algorithms. Analysis of sorting and searching algorithms.
Students are introduced to tools for automation including shell programming, use of the Linux operating system including redirection of input and output, piping, file management, and system security.
Introduction to Java and development in an object-oriented programming language. Topics include project setup and organization, packages, classes, object creation, inheritance, interfaces, polymorphism and the use of built-in types and the Java class library. Considerable time is dedicated to learning incremental programming, debugging strategies, testing strategies, interface documentation, preconditions, postconditions, boundary case testing, unit testing of individual functions, test stubs and test harnesses.
Introduction to C and C++ and development in an object-oriented programming language. Topics include C++ organization of classes and function prototypes, header files, class declaration and implementation. Other topics include inheritance, polymorphism, the use of copy constructors, destructors, streams, and operator overloading. Considerable time is dedicated to learning incremental programming, debugging strategies, testing strategies, interface documentation, preconditions, postconditions, boundary case testing, unit testing of individual functions, test stubs and test harnesses.
In this course we examine mathematical structures that are relevant to understanding both theoretical as well as practical ideas in computer science. Topics include: logic, sets, graph theory, regular languages, deterministic and nondeterministic finite automata, regular grammars, regular expressions, induction and recursion, pushdown automata, turing machines, and computability.
A companion to any of CS 320, 330, 352, 353, 360, 370, 420, 430, 440, or 450. Students wishing to delve deeper into a subject in one of the companion courses may register for this lab with consent of instructor. A student taking this lab will be required to write a technical paper in the style typical of a computer science journal or conference proceedings, on a topic agreed to by the companion course instructor. Feedback will be provided on writing style and content with the paper going through multiple revisions. Students receiving a C or better on their paper will fulfill the writing in the major requirement. Students may register for this as a seven week lab anytime prior to the middle of the semester in which the companion course is taught. Requires consent of instructor.
A tool based approach to data manipulation, modeling, machine learning, and visualization using one or more packages such as matplotilb, pandas, d3.js, scikit-learn. Topics include data extraction, discovery, cleaning, machine learning algorithms, training procedures, prediction, and visualization. Specific application to real data sets in native formats from actual data sources.
In this course we examine three-tier Internet application architectures. Applications developed for the internet typically have a database back end, an application server in the middle and a web server on the front end. We will examine application programming frameworks from CGI to Servlets, and other modern application programming frameworks such as Ruby on Rails. Other topics include XML-based architectures such as RSS and web services, data transformation using XSL and XSLT. The course is largely project driven, students will implement a complete web based application. HCI is addressed.
Study Android development with attention to HCI. Taught alternating years.
Study iOS development with attention to HCI. Taught alternating years.
Development of advanced data structures, parallel algorithms, and advanced analysis of algorithms. Included topics are B-trees, Tries, B+ and B* trees, hashing algorithms and other structures for dealing with large data sets. Algorithms for data set manipulation including parallel algorithms for processing data sets.
A comparison of the structure, design, and applications of various programming languages. Topics include history, language definition, formal models of syntax and semantics, data types and structures, data abstraction, control structures, data flow, and runtime considerations. Languages will be discussed in a logical organization based upon the major paradigms including imperative, logic, functional, and object oriented. Examples from classic and contemporary languages.
Internet technology has fundamentally changed marketing, communications and the operations of every business in our society. Silicon Valley is home to the people, places and power sources that drive this machine. Students in this J-Term trip will gain both theoretical and tactical understanding of business strategies utilized in the Valley and also have the opportunity to speak with industry leaders and the companies they represent. We will visit companies and key people including entrepreneurs, venture capitalists, engineers and marketing professionals. (Same as MGT 385)
This course looks at the implementation of many of the algorithms and techniques introduced in the CS 320 course, including simple neural networks, support vector machines, and clustering techniques. Taught alternating years.
Concepts, principles, protocols, and applications of computer networks with a focus on the Internet, including application layer protocols such as http, smtp; socket programming and peer-to-peer networks; transport-layer protocols such as TCP, UDP and congestion control; network layer algorithms for routing and broadcast, and multicast; link-level protocols for local area networks such as Ethernet and WIFI; and issues in network privacy and security.
This course takes a bottom-up approach to understanding a complex software system. The course examines the implementation of a database management system. Topics include disk and file management, transaction processing, meta-data management, query planning and implementation, parsing queries, indexing, query optimization, and B-trees.
A study of computer architecture and operating systems structures and algorithms emphasizing multiple-user systems. Topics include binary number systems, digital logic circuits, machine architecture and assembly language, process management, CPU scheduling, concurrency and multi-tasking computing concepts including communication and synchronization issues, storage management, and protection and security.
Senior computer science majors participate in a substantial, yearlong software development project; CS 490 in the fall, CS 491 in the spring. Students work from conceptualization and design through to implementation and delivery of a real software application.
A continuation of CS 490.