Dr. Mark C. Lewis

Department of Computer Science
Trinity University, San Antonio, TX

Simulator of planetary rings, Scala zealot, avid
roller skater, and general lover of programming and technology.

Introduction

Welcome to my personal web page. On this page you can find syllabi and schedules for all the courses I have taught at Trinity as well as information about me and my research. If you are interested, you can check out my CV. Follow links on the bottom left to see what I'm thinking about and interested in these days.

Courses

Spring 2024
CSCI2094 - CS Colloquium
CSCI2195 - Competitive Programming
CSCI2320 - Data Abstraction
CSCI3345 - Web Application Design
CSCI3394 - Next-Gen Programming Languages
PHED1146 - Roller Skating I

Fall 2023
CSCI2094 - CS Colloquium
CSCI2195 - Competitive Programming
CSCI2320 - Data Abstraction
CSCI3194 - Coding Interview
CSCI3345 - Web Application Design

Spring 2023
Leave with Amazon

Fall 2022
Leave with Amazon

Spring 2022
Sabbatical with Amazon

Fall 2021
Sabbatical with Amazon

Spring 2021
CSCI1321 - Principles of Computer Science II
CSCI2094 - CS Colloquium
CSCI2195 - Competitive Programming
CSCI3194 - Coding Interview
CSCI3345 - Web Application Design
CSCI4386 - Senior Software II

Fall 2020
CSCI1321 - Principles of Computer Science II
CSCI2094 - CS Colloquium
CSCI2195 - Competitive Programming
CSCI3194 - Coding Interview
CSCI3354 - Big Data and Machine Learning
CSCI4385 - Senior Software I

Spring 2020
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI3194 - Java Language Study
CSCI3345 - Web Application Design
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 2019
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI3194 - Coding Interview
CSCI3366 - Parallel and Distributed Computing (sub for Massingill)
CSCI3395 - Big Data and Machine Learning

Spring 2019
CSCI1321 - Principles of Computer Science II
CSCI2094 - CS Colloquium
CSCI2195 - Competitive Programming
CSCI3345 - Web Application Design
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 2018
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2094 - CS Colloquium
CSCI2195 - Competitive Programming
CSCI3194 - Coding Interview
CSCI3395 - Big Data and Machine Learning

Spring 2018
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI3345 - Web Application Design
CSCI3362 - Effective Programming Techniques
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 2017
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI3395 - Big Data Analytics

Spring 2017
CSCI1311 - Introduction to Programming Logic
CSCI1320 - Principles of Computer Science I
CSCI3194 - Coding Inteview
CSCI3345 - Web Application Design
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 2016
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming

Spring 2016
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI3345 - Web Application Design
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 2015
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI2320 - Data Abstraction
CSCI3194 - Coding Interviews

Spring 2015
CSCI1320 - Principles of Computer Science I
CSCI2195 - Competitive Programming
CSCI3322 - Principles of Algorithms
CSCI3345 - Web Application Design
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 2014
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI2320 - Data Abstraction

Spring 2014
CSCI1320 - Principles of Computer Science I
CSCI2195 - Competitive Programming
CSCI3322 - Principles of Algorithms
PHED1146 - Roller Skating I
PHED1147 - Roller Skating II

Fall 13
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2195 - Competitive Programming
CSCI2320 - Data Abstraction

Spring 13
CSCI1321 - Principles of Computer Science II
CSCI3322 - Advanced Algorithms
CSCI3194 - Competitive Programming
PHED1137 - Roller Skating

Fall 12
CSCI1320 - Principles of Computer Science I
CSCI1321 - Principles of Computer Science II
CSCI2322 - Principles of Functional Programming
CSCI3194 - Competitive Programming

Spring 12
CSCI1320 - Principles of Programming I
CSCI1321 - Principles of Programming II
CSCI3194 - Competitive Programming
PHED1137 - Roller Skating

Fall 11
CSCI1320 - Principles of Programming I
CSCI1321 - Principles of Programming II
CSCI3345 - Web App Design

Spring 11
CSCI1320 - Principles of Algorithm Design I
CSCI1321 - Principles of Algorithm Design II
CSCI3352 - Simulation Theory
PHED1137 - Roller Skating

Fall 10
CSCI1311 - Introduction to Programming Logic
CSCI1320 - Principles of Algorithm Design I
CSCI3190 - Programming Team
CSCI3394 - Next-Generation Programming Languages

Spring 10
CSCI1311 - Introduction to Programming Logic
CSCI1321 - Principles of Algorithm Design II
CSCI2323 - Scientific Computing
PHED1137 - Roller Skating

Fall 09
CSCI1311 - Introduction to Programming Logic
CSCI3190 - Programming Team
CSCI3394 - Effective Object-Oriented Programming
PHYS1304 - Solar System Astronomy

Spring 09
CSCI1311 - Introduction to Programming Logic
CSCI1321 - Principles of Algorithm Design II
CSCI3352 - Simulation Theory
CSCI3394 - Game Design Seminar
PHED1137 - Roller Skating

Fall 08
Sabbatical

Spring 08
CSCI1311 - Introduction to Programming Logic
CSCI1321 - Principles of Algorithm Design II
CSCI2194 - Professional Ethics and Design Seminar
CSCI2323 - Scientific Computation
PHED1137 - Roller Skating

Fall 07
CSCI1311 - Introduction to Programming Logic
CSCI1320 - Principles of Algorithm Design I
CSCI3394 - Effective Object-Oriented Programming
CSCI3190 - Algorithmic Problem Solvingi

Spring 07
CSCI1321 - Principles of Algorithm Design II
CSCI2194 - Professional Ethics and Design Seminar
PHED1137 - Roller Skating

Fall 06
CSCI1320 - Principles of Algorithm Design I
CSCI2323 - Scientific Computation
CSCI3394 - Emergence, Thought, and Complexity

Spring 06
CSCI1321 - Principles of Algorithm Design II
CSCI3390 - Independent Study on Game Design
CSCI3394 - Advanced Algorithms

Fall 05
CSCI2323 - Scientific Computation
CSCI3394- Effective OO Programming
PHYS1304 - Solar System Astronomy

Spring 05
CSCI1321 - Principles of Algorithm Design II
CSCI2194 - Professional Ethics and Design Seminar
CSCI3352 - Simulation Theory

Fall 04
CSCI1321 - Principles of Algorithm Design II
CSCI2322 - Principles of Functional Programming
CSCI3368 - Principles of Programming Languages

Spring 04
CSCI1321 - Principles of Algorithm Design II
CSCI2194 - Professional Ethics and Design Seminar
CSCI3294 - Effective OO Programming

Fall 03
CSCI1320 - Principles of Algorithm Design I
CSCI2320 - Principles of Data Abstraction

Spring 03
CSCI1321 - Principles of Algorithm Design II
CSCI2321 - Principles of Computer Design
CSCI2194 - Professional Ethics and Design Seminar
CSCI3290 - Independent Study on Java

Fall 02
CSCI1320 - Principles of Algorithm Design I
CSCI1321 - Principles of Algorithm Design II

Spring 02
CSCI1321 - Principles of Algorithm Design II
CSCI2194 - Professional Ethics and Design Seminar

Fall 01
CSCI1320 - Principles of Algorithm Design I
CSCI3294 - Seminar on Program/Pointer Analysis

I've posted some of the student games from CS2 that you can play as well.

Textbooks

I have publilshed a few textbooks using the Scala programming language. The covers for these books were created using a ray tracing program that I wrote in Scala. The images below are the original ray tracings without the titles or other text from the covers.

Object-Orientation, Abstraction, and Data Structures Using Scala

The green theme of the CS2 book was created by taking out the ellipsoid from the CS1 book and adding in a fractal terrain in green. The terrain is created with a triangular midpoint displacement method. The triangles in the terrain have per-vertex normals and the ray tracer uses interpolated normals to smooth the appearance of the flat triangles.

Introduction to Programming and Problem-Solving Using Scala

To differentiate from the original cover, some geometry was added to this image. In addition to the sphere and the ellipsoid, the normal function for the bottom reflective surface, which impacts color and the direction of reflected rays, uses a sinusoidal function to give it a wavy appearance. It is actually a flat plane.

Introduction to the Art of Programming Using Scala

The first book cover. The Scala symbol is actually a cylinder with a texture map that is calcuated by a function that gives red or transparent, depending on location. The code is rectangles with texture maps of white or transparent for the text.

Research

I keep a page with information on my planetary rings research. This includes lots of images and movies of n-body simulations. Older research information, including old student research projects can be found here and here.

You can find a list of my publication on Google Scholar.

High School Programming Competitions

I organize an annual programming competition for High Schools in the state of Texas. We generally get many of the top teams from the state with many teams coming from outside of the San Antonio/Austin area. Below are links to old competition sites. Many of these include problem set information.

About Me

I graduated from Trinity University in Spring 1996 with Honors in physics and computer science. I went immediately to the University of Colorado at Boulder to work on a Ph.D. in astrophysics. Along the way I picked up Masters degrees in astrophysics and computer science. I did my dissertation work with Glen Stewart at CU on gravitational wakes in rings. I'm now a Professor in the Department of Computer Science back at Trinity.

I have also been known to roller skate on occasion. (Though not normally while juggling.)