Roman Yasinovskyy (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.
View program learning goals for an explanation of learning outcomes in Computer Science.
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.
This course covers the three-tier architecture of Internet applications, including user interface, server-side logic, and data storage. Modern programming languages, libraries, frameworks, and application programming interfaces are used to develop and deploy web applications. Current development principles and practices are discussed and used in this project driven course.
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.
This course covers the fundamental concepts, principles, and best practices of information security with a holistic view and applied approach. Topics include: cryptography, cryptanalysis, authentication, authorization, security protocols, software vulnerabilities, and professional ethics.
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.
This semester-long course has the same requirements and expectations as a combination of CS 490 and CS 491. Students work at an accelerated pace from conceptualization and design through prototyping, implementation, and delivery of a software application or research project. Project ideas and teams must be pre-approved by CS faculty in the prior semester. Applications for this course must include a 5 page document outlining the project idea and technologies that will be used during the semester.