The Pages of Kent D. Lee

Hello!

_images/kent800.jpg

I am an Emeritus Professor at Luther College. I now work for Cray HPE as a Software Engineer/Architect where I design and implement software for high performance computing (HPC) programming environments.

For items in need of attention related to Luther College and the Computer Science/Data Science departments, please contact the department chair, Roman Yasinovskyy (roman@luther.edu).

Kent D. Lee, PhD
Professor Emeritus
Computer Science
Luther College

Interested in Learning to Program?

It’s never too early to learn to program. My experience has shown me that students as early as elementary age enjoy creating really cool programs. And it’s not too late to start in college or even after college either!

If you are interested in attending Luther College, we offer a major and minor in Computer Science and a major and a minor in Data Science. You can view our requirements for both by going to http://cs.luther.edu. A graph of the requirements for both majors and both minors is provided here for your reference.

I have written several textbooks and other curricula for Computer Science. They are listed below along with links to supplementary files that go along with the texts.

Introduction to Programming

_images/introtext.jpg

My introductory text for computer programming focuses on Python programming. It introduces programming to people with no previous experience in programming. In support of this text I have produced lectures that are available for free on Youtube. These videos have been very popular with people learning to program. The last I checked there were a half million views of these lectures and over 3,300 subscribers to my channel. You can find the playlist for these videos by clicking here. You can access the supplementary materials for this textbook by clicking here.

_images/frogger.gif

I have also written a very concise (meaning dense and more intense) introduction to Python programming through the development of computer games - both 2D video games and board games. The online text focuses on learning to program first, followed by an introduction to programming 2D graphics video games using Turtle Graphics and PyGame. Then it moves on to Artificial Intelligence topics like building computer opponents for games of perfect information. Finally it concludes with an introduction to Machine Learning and the Alpha Go Zero algorithm for teaching a neural net to play a game of perfect information (like Go, Chess, Connect Four, Checkers, or Tic Tac Toe) without any expertise from a human and with no human interaction. Alpha Go Zero builds extremely strong computer opponents by playing games itself and teaching itself to play a game. You can find this free online textbook by clicking here.

There are two other resources that I have written for introductory programming. The site Sampling CS for Middle and High School Students contains some teaching materials that are appropriate, and fun, for teaching high school and middle school students.

I have also created a sequence of videos for building the game of Frogger. This playlist contains the full set of Python Programming by Example videos. The Frogger GitHub repository contains the code examples that go along with this series of lessons.

Data Structures and Algorithms

_images/datastructures.jpg

With Dr. Steve Hubbard, Professor Emeritus at Luther College, I have written a textbook on Data Structures and Algorithms with Python as the programming language. This text contains the traditional second course in Computer Science topics along with Advanced Data Structures topics that are appropriate for a third or fourth year Computer Science undergraduate course. The text focuses on many data structures including Stacks, Queues, Heaps, Priority Queues, Hashtables for sets and maps, and balanced search trees including AVL Trees, Splay Trees, and B-Trees. It also includes search and sorting algorithms and heuristic search algorithms. The text addresses computational complexity of algorithms throughout by teaching you how to recognize and analyze algorithms to determine the behavior as the size of the data grows in an application. You can access the supplementary materials for this text by clicking here.

Foundations of Programming Languages

_images/proglang.jpg

The implementation and specification of programming languages is an area that I really get excited about. I have written a textbook which focuses on the design and implementation of programming languages. The text contains some theory mixed with various pieces of a programming language implementation. In addition, the text introduces the reader to virtual machines, functional programming with Standard ML, and logic programming with Prolog.

You can get access to support material for the textbook at this website.

The first part of the text introduces a virtual machine, called JCoCo, which supports a low-level programming language and is based on the Python 3.2 virtual machine. In fact, JCoCo can execute disassembled Python 3.2 code. You can find JCoCo’s website here. There is a partial Java implementation provided to students at http://github.com/kentdlee/JCoCo. A full version of the JCoCo implementation is available to teachers.

The text also builds a compiler for a decent subset of Standard ML. The partial student version of this code is provided at http://github.com/kentdlee/MLComp. Again, a complete version is available for teachers. The MLComp project includes a compiler from Standard ML to CoCo assembly language and a type inference system written in Prolog. The complete version for teachers includes the full code for both the compiler and the type inference system.

Sample Projects

I have worked on so many projects over my time as a teacher that I thought I would share a few. Most of these are not complete projects, but meant to serve as an introduction to some area of programming or as a start of a project for students. But, in many cases a more complete version is available upon request from other teachers. Students might also get some ideas for themselves here of projects they may be interested in developing further.

  • The JCoCo Virtual Machine (VM) and its source code are one of my more recent projects. Much can be done to extend this virtual machine for parallel computation, GUI programming, or a myriad of other projects. Most recently I added some Turtle Graphics to the virtual machine.

  • The MLComp Project is a full-blown Standard ML compiler that compiles to the JCoCo VM and has a type checker written in Prolog. The project uses a Standard ML scanner and parser generator to produce an abstract syntax tree (AST) of a source program and then has a code generator that produces JCoCo VM code. This project could be extended to include even more of the Standard ML language, or it could be used as the basis for building an oCaML compiler. If you were interested in this project, a more complete version of the MLComp compiler is available upon request.

  • The AlphaZero Project is a clone of Surag Nair’s project. In this I took Surag’s Alpha Zero Neural Net for playing Tic Tac Toe and added a GUI front-end to it so it could be played against by a human. This could be taken further to add a GUI front-end to the Connect Four neural net but some work would be required to get all of this to work together. I have a GUI front-end that could communicate with the neural net backend in much the same way that the Tic Tac Toe project works (through a pipe and a well-defined architecture).

  • The GoBackN Project is an example of a project that I developed when teaching Computer Networking. The project includes several parts of the code. A full solution is available upon request. The project incorporates an implementation of a Socket class and implements TCP over UDP as a means of learning the difference between guaranteed, reliable end to end service with TCP and the un-guaranteed service of UDP.

  • The Theory of Computation site contains several projects that are based on building a bottom-up parser generator and a scanner generator. These projects involve building finite state machines from regular expressions and building a parser from a context-free grammar. These are projects I first worked on during the summer of 1984 (when I was a college student) and have lived on when I rewrote them in Python for use in my Computational Models course. All the code for these projects is complete and is available upon request. The complete project is a full blown compiler generator written in Python.

There have been other projects in the areas of Computer Graphics, Machine Learning, Artificial Intelligence, Database Systems, Operating Systems, Parallel Computation, Programming Languages, Data Structures and Algorithms, Graph Theory, and the Theory of Computation. I have taught all these courses at one time or another and I have developed projects for all of them.

Interested in a Job or Internship?

Read this guide on getting a job or an internship.

Publications

If you wish to contact me about any of these papers or texts, you can send me email at kentdlee@luther.edu.

  • A Framework for Teaching Programming Languages - Presented at SIGCSE 2015.

  • Foundations of Programming Languages - Published with Springer in 2015. Support materials for this text may be found at https://kentdlee.github.io/PL. This text incorporates a virtual machine implementation, compilation of a functional language, and type inference in a one semester course on Programming Languages.

  • Data Structures and Algorithms with Python - Written with Steve Hubbard and published with Springer in 2015. This text covers both introductory and advanced data structures and algorithms topics.

  • Python Programming Fundamentals - In 2015 I published a second edition with Springer Publishing of this successful introduction to programming. There are also accompanying video lectures available on YouTube.

  • Programming Languages: An Active Learning Approach - In 2008 I published this textbook with Springer. This text has since been replaced by the newer Foundations of Programming Languages.

  • Teaching Programming Languages through Language Implementation - In 2003 I presented this paper where I describe a series of projects that may be used to teach programming languages at the undergraduate level. This paper was presented at the Midwest Instructional and Computing Symposium at St. Scholastica in Duluth, MN.

  • A Formally Verified Register Allocation Framework - In April of 2003 I presented this paper at the Third Workshop on Language Descriptions, Tools and Applications (LDTA 2003). This was a continuation of work done in two earlier papers on register allocation. This paper pulls a lot of the work done in the earlier papers together and adds to it.

  • Postfix Transformations for Action Notation - In Peter D. Mosses and Hermano Perrelli de Moura, editors, AS 2000, Proc. Third International Workshop on Action Semantics, Amsterdam, Recife, Brazil, number NS-00-6 in Notes Series, BRICS, Dept. of Computer Science, Univ. of Aarhus, August 2000.

  • Formal Development of a Minimal Register Allocation Algorithm - Technical Report 99-07, University of Iowa, Department of Computer Science, Iowa City, IA, 1999.

  • Minimal Register Allocation - Technical Report 99-06, University of Iowa, Department of Computer Science, Iowa City, IA, 1999.

  • Tuple Sort Inference in Action Semantics - In Peter D. Mosses and David A. Watt, editors, AS’99, Proc. Second International Workshop on Action Semantics, Amsterdam, The Netherlands, number NS-99-3 in Notes Series, BRICS, Dept. of Computer Science, Univ. of Aarhus, May 1999.

  • Action Semantics-based Compiler Generation - Completed in 1999, my dissertation describes an Action Semantics-based compiler generator called Genesis. Genesis implements a richer subset of Action Semantics than had been previously attempted in AS compiler generators.