The academic catalog is currently being updated for the 2019-20 year. View the Catalog Archive to access the 2018-19 catalog as well as catalogs from previous years.
Kent Lee (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.
Development Tools (DT) proficiency: A number of courses within the computer science curriculum require the student to first complete an online module to demonstrate proficiency in using certain software development tools. The online module introduces students to these tools and includes a test to demonstrate proficiency. Details for completing this prerequisite can be found at http://cs.luther.edu. In this proficiency module, students are introduced to tools for software development including shell programming, use of the Linux operating system, redirection of input and output, piping, file management, processes, and system security.
Required for a major: CS 130, 140, 150, 160, DT proficiency, 252, 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, DT proficiency, 252, 330.
Advanced Placement: Advanced placement within Computer Science must be approved by the department head. AP credit for CS 150 will be awarded for students completing AP Computer Science A with a score of 4 or 5 after having successfully completed CS 160, the next course in the sequence.
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.
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.
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 330, 352, 353, 360, 370, 430, 440, 450, DS 320, or 420. 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.
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)
Over the last 25 years, Central Europe became an important IT hub, hosting many startups and multinational corporations. Students in this course will travel to Germany, Czech Republic, Hungary, and Bulgaria to visit companies and universities to gain an understanding of the ingredients and environment in which this transformation is occurring. We will explore challenges and opportunities of doing business in a growing economy, study markets served by the successful companies, and compare Computer Science curriculum taught in the U.S. and at Luther to that taught in these European countries.
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.