New Instructor Dashboard

I’ve been working on a new instructor dashboard the last week using Plotly + Dash. Its taken a while to wrap my head around the declarative style, and to learn the ins and out of plotly. But I’m getting there. Let me know if you want a closer look and would like to give me feedback! In the meantime here is a preview.

Screenshot 2022 12 30 at 1 40 59 PM

Lifelong Luther

As this will be my final Ideas and Creations contribution I hope you will indulge me in a little look back over my relationship with Luther College and the teachers and professors that have made me who I am today.

The first person I want to mention is the man in the picture – Charlie Weinman, with the hairstyle and the vest you might guess this picture comes from the early 80’s. Mr. Weinman taught typing and shorthand at Luverne High School. The picture shows him in a typical pose, and I can hear his exasperated sigh at my inability to keep my eyes off the keyboard as I worked on my “perfect paragraphs.” Mr Weinman was the advisor to the annual staff as well, and his favorite saying, which I heard often, was “If you want something done right, ask a busy person” Somewhere along the way Mr. Weinman noticed that one of the reasons I was always so busy was because my friend and I spent an inordinate amount of time messing around on the Apple II computers our high school had just purchased. We were teaching ourselves to program and trading games on cassette tapes. He made it his mission to help and encourage us — with the programming part. On weekends he would drive us to programming contests all around Southwest Minnesota. He eventually created the first programming class at the high school. The deal was that my friends and I could take the class so we could get credit and have it on our transcript, but we were to sit in the back and keep quiet – unless he asked for our help.

As I look back on it Mr Weinman was modeling a key aspect of a Luther education — life long learning. He also demonstrated to us with great humor and humility that teachers don’t always have all the answers. This was a good lesson, as even today in my final semester I’m faced every day with the fact that I don’t have all the answers when teaching machine learning or internet programming. The world of computer science moves far to quickly for any of us to know it all, and we must be prepared to be lifelong learners if we are going to succeed in this field.

Walt Will

When I arrived at Luther in the fall of 1982 I became a Norseman. It was only year two for the Norsemen, but the foundations that were laid for this group in 1981 are still strong today. Norsemen may be the only connection I have to some classmates, but I would still consider them my brothers. It was probably my classmate, Tim Peter, who came walking down the hall of first floor Ylvi encouraging those of us who were clueless to come to tryouts for this relatively unknown group!

As a computer science major I was fortunate to take the majority of my classes from Dr. Walt Will. Walt was my professor, my advisor and a great role model. He had a wonderful dry humor and an endless supply of patience to answer my endless stream of questions in class or to just sit in his office and talk about computer science and life in general. In the spirit of life long learning we always knew that Walt was just ahead of us (if only by a few days) in our journey through this new field of computer science together.

Walt was such a huge influence that when people would ask me about my career goals I would say “I want to come back to Luther and take Walt Will’s job.” That sounds a little harsh to my older self, but I meant it as the highest possible compliment to Walt. I really felt that success in life would be to have the kind of impact on other students that Walt had on us. After 18 years in the computer science industry, it was ultimately Walt who paved the way for my return to Luther as a faculty member. I remember a phone call with Walt when he told me he would be only too happy to move back to the Math department to create a position in computer science in 2003. As I started my new career as a professor I was very lucky to have Walt down the hall to talk with and get advice. As I’ve grown professor I’ve learned that I have to be myself, I’ll never be Walt, I definitely don’t have his patience.

John Carlis

If you would have asked the 1990 version of Brad Miller what it was like to be a grad student at the University of Minnesota, it would not have been a positive conversation. Going from small-town Minnesota and Luther College to the U was a huge culture shock! Big classes, registration lines that stretched down the stairs and around the block, professors that closed the doors to their office, it was all very foreign. However, I would have told you about one professor that would be right at home at Luther and that was Dr. John Carlis. I was fortunate enough to take a class from John which changed everything and led to him becoming my masters advisor and friend. After a time or two of stopping by his office to ask questions about assignments he started making me coffee and we started talking about teaching and research and writing a one-draft thesis and singing and parenting.

John had a great sense of humor and was famous for his bad puns. He would take two dimes out of his pocket and put them in the palm of his hand and slowly move his hand back and forth. “Do you know what this is?” He would ask, “a pair-a-dime shift!” Although I switched advisors for my PhD project I never stopped having coffee and conversation with John. When I told him about coming to Luther to teach he encouraged me to write a textbook, embrace the liberal arts, and get to know people outside of CS. At his funeral a few weeks ago I heard my story over and over from lots of former students. John had this same kind of relationship with countless students over the years, always having the right story or the right word of encouragement at the right time. His office must have had some kind of magical time vortex because I’ll never know how he could spend this much time with so many different people. As I look back, I do not know whether I would have become a U of M graduate if had not been fortunate enough to know John Carlis.

John’s advice also shaped my experience as a faculty member at Luther. Some of my favorite experiences as a faculty member come out of embracing the liberal arts: teaching Paideia 450s with my friend Jim Martin-Schramm, leading the Malta program, leading JTerm courses in Silicon Valley, helping to create the Data Science major are all experiences I will remember for the rest of my life. The process of writing two paper textbooks led to the vision that has become Runestone Interactive. My JTerm students will be happy to know that Runestone now has a mantra: “Democratizing textbooks for the 21st century.” As I leave Luther I am super excited that I can devote my full focus and energy to Runestone., which today serves 20,000 students a day at both high schools and colleges! I hope to make that 2 million students in the next few years.

In the face of declining enrollments, ratio imbalances, committee meetings and program reductions its easy to forget why we do what we do. I came to Luther 15 years ago because I felt called to share my experience and make a difference in the lives of students; just as Charlie Weinman, Walt Will, and John Carlis have made a difference in mine. I hope I have. My relationship with Luther is long and varied, I’m an alumni, a donor, a faculty member and a parent of an alum. If Luther calls sometime in the future to ask me to serve in some other capacity, I hope that I can. Soli Deo Gloria.

Remembering John Carlis

Everyone wants to belong, and for a young man from a small town in southwest Minnesota who went to a small liberal arts college as an undergrad, the U of M can be a pretty intimidating place – a real “pair a dime” shift if you will. I remember waiting in line OUTSIDE of Amundsen hall, and slowing working my way up several flights of stairs to try to get into courses that were still open once I got to the registration counter. I may not have the name of the building right, but as John would say “never let the facts get in the way of a good story.” I remember going to classes and rather than seeing a small number of students, most of whom were my friends, all I saw was a sea of unfamiliar faces.

Fortunately one of the courses that I did register for was Introduction to Database Systems, taught by John Carlis. Shortly after classes started and we were well into discussing herds of cows and various creatures and their skills and creating LDSs I found myself searching out his office to ask him some question about homework. Once in his office we started talking, and then he made me a cup of coffee. The conversation went well beyond drawing LDSs – we discovered that we both liked to sing – and he invited me to stop back again. Soon I was stopping in his office just to chat and get a cup of coffee. Research meetings and a TA position followed. John became my advisor and my friend and he gave me the gift of a sense of belonging. As I look back, I wonder if I would have stayed without the cups of coffee and conversation in John’s office.

When our first Child was born, he gave us a present. He had cut out and painted the letters to spell our daughters name in his shop. We talked about his own daughters and the challenges and joys of being a father.

Even years later, after I had shifted my focus to Grouplens, and started a company, he always welcomed me back. He was still on my PhD committee, a thing he liked to remind me of frequently, especially when he wanted me to review something. “Can you do this? I’m still on your committee right?” He would say with a grin.

I learned about building a fence around your thesis, and writing a one-draft draft thesis. When I decided that teaching at a small college was in my future he gave me a copy of Mager’s book and we talked about instructional objectives and how to become a good teacher.

Before I left for Luther College he gave me another piece of advice that I will never forget. “Write a text book,” he told me. At a small college that is a good way to publish and it will tie directly to your teaching. Two years into my time at Luther I asked my department head, “would you like to write a book with me?” He agreed and we found ourselves publishing the first data structures textbook using the Python programming language. After that we wrote an introductory book on programming with Python.

As I prepare to leave Luther and move into a new project of building a sustainable small business around the Runestone Interactive textbook project I can trace the evolution of this research and writing right back to John. The project now serves over 20,000 students a day around the world, and I frequently hear the echo of his advice in my head as I work on designing new chapters and writing new examples, and building new lessons.

Thank you John, for all the advice, the coffee, and the friendship! More students that you will ever know have benefitted from your wisdom and hospitality.

No Easy Solutions

No Easy Solutions

If you were king how would you end poverty? Not an easy question to answer, even if you were king with a magic wand its not an easy problem to solve. Neverthless it was a question that one of our intrepid students put to a Stanford professor one day. This became a common question that we asked almost everyone we met with, and it was a question that generated a lot of good group conversation. I would like to summarize a few of the answers we heard and add my own half-baked idea at the end.

Two weeks ago we visited Dr. David Grusky at the Stanford Center for Poverty and inequality. I took away a couple of key points from this meeting. One of their key tasks is to get better and more frequent data about poverty in the United States. Larry told us that the data we have today is collected too infrequently and by the time the data is published it is nine months out of date! Wow, thats crazy. The software development manager in me says, “you can’t fix what you can’t measure” If we are not measuring poverty how can we hope to make progress toward fixing it. Hint: We can’t.

In terms of a big solution Dr. Grusky expressed his idea quite eloquently. “We have to make everyone live together.” At first I rejected the idea as overly simple and impractical. But the more I thought about it the more I liked it. Making people of all income levels live next to each other would surely build community, where we would not see each other as “other” but rather as friends and neighbors. Who doesn’t want to help their neighbors? Who is my neighbor is a question that has been nagging us since the disciples first asked the question of Jesus a couple thousand years ago. The more we live in community the more we see each other as people.

To return to the theme of Decorah in the previous post, I think this really is one of the strengths of a small town. Rich people, middle income people, and poor people all live together. Maybe not next door, but definitely on the same block. Our kids go to the same schools and participate on the same teams and choirs and bands together. We meet parents over the common ground of our kids and their achievements. Over the years one of the most amazing aspects of the Decorah schools to me is that there is such a high level of mutual respect among students no matter what they do. The “jocks” are also in the choir, and if not they scertainly support the choir, and vice versa. Its this kind of integration that leads to great things. If you don’t believe me I’ll tell you that Decorah has won the Iowa Challenge cup so many times in the last ten years that people at the state just call it the “Decorah prize.”

Why is this so important? The more integrated we become, and the more we see each other as friends and peers the more we will help each other solve our problems. The more integrated we live the more our kids go to the same schools.

In broad terms the next set of solutions revolve around economic mobility, that is how do we get people to move up the economic ladder?

One answer to this question that came up several times was around education. Even our own president Carlson took a shot at this question at an alumni event we attended. Education leads to opportunity and or the ability to move up the economic ladder. Here’s a great story that illustrates Of course not everyone gets to go to Stanford and tap into the amazing group of VC’s and successful entrepreneurs that are part of the Stanford alumni network. But education opens many doors to higher paying jobs no matter where it comes from. The theme of education was also evident at the Creative Commons where we discussed open source licensing models and how organizations like Open MIT and others are making high quality courseware available on the web. This of course is not unlike what we are doing at Runestone.

Another really interesting discussion about economic mobility comes from Kiva . While Kiva has been making loans abroad for a few years, Kiva has started to make micro loans (up to \$10,000) right here in the United States. The Kiva story goes something like this. A micro loan is not going to vault you up the economic ladder, it may not even get you onto the first rung. But it will give you a foothold on the ladder where you might just be able to reach the first rung with a little time and experience. Without the microlending infrastructure in place, we wondered how Kiva decides who to loan to. The answer is simple, “If you can show us that you have convinced 25 people to loan you 25 dollars then we will put you on the site.” Between Kiva and the Miller Center for Social Entrepreneurship at Santa Clara University we have enough examples of these small scale loans in action to make it very believable that it is a path up the economic ladder.

Sixty Minutes of Inspiration

Sixty Minutes of Inspiration

Today was another one of those days that was thought-provoking, uplifting, and inspiring. This morning we had a new guide, who took us to his own village and showed us his own house. That experience will be a part of a post that has been brewing for a week or so. I’m going to do this one first as it is fresh in my mind.

We just got back from JWOC (yes, they pronounce it jay walk) which stands for Journeys Within Our Community. What a great experience! We didn’t really know a lot about what we were in for this afternoon, other than we were there to volunteer in a class, and it would involve speaking english. So far, so good.

Before I tell you about the class, and what we did, I want to give you a little background about JWOC and the educational system here in Cambodia. The latter is easy. Its pretty minimal. Students may go to school from ages six to fourteen. After that there is really not much for them. Students may go to a private school for further education, but they are pretty expensive for most people in Cambodia.

JWOC has programs in five key areas: Community Assistance, Clean Water, Microfinance, Free Classes, and Scholarships. The scholarship program is the heart of it all. Since 2005 JWOC has provided 120 scholarships for students to get a university education. However, these students must in turn give back by volunteering their time on another JWOC program. The instructor of the class we participated in this afternoon was one such student.

At the JWOC center in Siem Reap they have students from age 4 all the way to 60. The classes are open to anyone in the community and range from english, to sewing, to gardening, to computers. The class we worked with was a hospitality class. You can think of it as an enrichment course for students who are interested in improving their english so they can work in the hospitality industry. One student wanted to be a hotel receptionist, another told us he wanted to be guide.

We started out the class with everyone introducing themselves. There was much smiling and laughing and clapping as we went around the room. Their enthusiasm was infectious. After the intros we moved on to some role play1. The instructor paired us up, and I played the role of a tourist who wanted to book a room, while my student played the role of someone at the front desk of hotel. I had a list of features that I wanted in my room and he had information about what they had available and the associated prices. He was into it! First he had to clarify several points with the instructor, and then we started out. After working our way through a fairly lengthy conversation, he said. “We need to do this again. We need to be the best so that we can perform for the class.” So we did it again.

When the teacher asked for volunteers to do their role play for the class I think he might have been a little disappointed that there was no choice based on merit, but he was undaunted and quickly volunteered us for the job. Here we are in the front of the classroom playing our roles:


Jane also had an excellent student, that I wish I could have talked with some more. He wants to be an engineer, and is enthusiastically studying math and physics.

After the role playing was done we had about 20 minutes for free conversation. They divided the class in two, and put each of us with one group. The instructor said that since I was a professor they could ask me about anything. No pressure. We were all grinning from ear to ear even though they were a bit shy about asking questions. They wanted to know about where I was from, and what kind of crops we had, which led to a little discussion about how cold it is in Iowa. One of them was wearing a Chelsea shirt so that led to some quick conversation about football. Then I asked about what I should see or things I should eat. I think they were all impressed when I said we had already tried Amok and Lak Lok.

One student had been holding back and I could tell he wanted to ask me something, but he said he was to embarrassed. With a bit of coaxing he finally asked me: “what good are computers?” Well, now that is a question. Nobody laughed at him for asking it. What good is something that I take for granted and use all day everyday? So we talked about how you could use computers to learn things, anything you wanted to know you could find out. Only one of the students in my group had heard of Google! We talked a little about their markets and how they bought everything they wanted at the local market. I tried to describe how I used the computer to do my shopping. I can buy anything I want on the computer and a truck brings it to my house in two days. I may just as well have sprouted a second head.

Our hour was over in no time. But we left with such respect for these students. They were so enthusiastic and supportive of each other. It was a class like nothing I’ve experienced before.

Afterward we had a chance to talk with the education coordinator here in Siem Reap. She is an American from Connecticut who has been here about five months and had some nice insights to share with us. It is true that these students value education in a very different way because it is so special. She told us about the collaborative nature of the Cambodian culture and how important that is to their educational experience. Something that I never would have really understood before spending time here. But I’m glad that I did.

Here is the class with all of us all together.


  1. Some great irony here as I’ve been known to skip out of faculty meetings where role playing is on the agenda.


how to think like a computer scientist interactive edition

After hosting the interactive edition of How to Think like a Computer Scientist on the Google app engine at for over a year, we finally made the switchover to a new domain.  As of today all requests to thinkcspy will be automatically redirected to

This new domain, is hosted by  They have very reasonable hosting rates, along with plenty of bandwidth and disk space.   I have more control over the development platform that I use, I get to keep my data in a real relational database (postgresql) where I can write queries and export my data as much as I want, and finally, if I ever need to move from Webfaction, I own the domain and can move it with me, and I won't need to go through this name change again.

For those of you who have used the thinkcspy site, you will notice a few upgrades to the content of the book have taken place.  In addition, we are now hosting another book along side thinkcspy.  So we now have coverage for both CS1 and CS2.

CS1 --  

CS2 --  

The CS2 book is based on our paperback book, Problem Solving with Algorithms and Data Structures using Python by Brad Miller and David Ranum.  Our forward thinking publisher has given us permission to convert the paper book into an interactive version and make it available online!

The other great thing about the move to is that you can now host your own course.  That is you can use one of our books online, but you are the instructor, so you can grade homework assignments, and look at activity reports for the students in your class.  So far we have 20 different institutions hosting one of the two books for a course currently,  or for the upcoming fall term.  The links to create your own course are right there on the home page, so if you are interested in using this site for a course go right ahead.

The one downside to this move is that I did not migrate any of the data from the old thinkcspy site.  So if you have saved programs there you will need to recreate them at the new site.  I gave people plenty of notice about the move, so I'm hoping this won't turn into a big issue.  If it is, let me know, and I'll try to pull your code out of the google datastore for you.

The second issue with the move is that I don't use google accounts  anymore.  If you want to save your programs you will need to create an account on the site.

If you have a link to on any pages you control, please make the change to point to the new domain and location.  Thanks!

If you are interested in contributing to the project, have a book you would like to host, or are just interested in how we are doing this, you can check out the code on github:  [](   If you don't want to go that far, but have assignments, or assessment questions you would like to contribute, please contact me!


runestone interactive

What a week its been!   So much has happened in the last week that I just have to take some time out to organize my thoughts and get some of this information out there where others can read it.

What is Runestone Interactive?

Runestone Interactive is primarily a home for both the content and the technologies that go into publishing interactive textbooks.  At the moment interactive textbooks for Computer Science, but who knows how far this could go.  Probably the best way to see this is to actually visit our site and play around.  But in the meantime here is a short video to give you an introduction.


  1. Home to our open source publishing tools.  My goal as that these tools become the LaTeX of interactive publishing. There is lots of work to do before we can claim success here, but I think we have a good vision and a decent start.
  2. A model for a new online only publishing house. At some point, I think it is important for content to go through an editorial process, not just for copy editing quality, but for coherence, and quality of approach. Right now the number of content creators using our system is pretty small, but I can already see that starting to grow. We have lots of thinking to do about this.
  3. A home for hosting online courses or textbooks.

Who is your audience?

At the moment, I think we serve three distinct groups of people.

  1. The  teacher out there who wants a good quality textbook, but is not interested in forcing their students to pay $100+ and is interesting in trying an interactive book, all for free.   So to serve this audience we have You can select one of our pre-defined books and set up a course where you are the instructor and have access to grading etc. Or you can use the drag-and-drop interface to put together a book by selecting from the library of modules. Maybe some of these teachers have an exercise or two they would like to contribute, but mostly they are just looking for good materials to help them with their course.
  2. Authors who would like to contribute significant chunks of content – chapters or section sized – or videos. For example I’m working with an entrepreneur who wants to add content and a graphics package that looks more like Nodebox. He’s very interested in putting together materials for middle school kids.  Others, including other Computer Science researchers, are more interested in algorithm visualization and working together on building in more visualization tools to the tool box.  Others have their own CS course materials that they would like to get into an interactive form and make available to the world.
  3. People who are interested in learning CS on their own.  We get a ton of people coming to the site just to learn on their own. I had the most heartfelt letter from a guy the other day who found our site as he is trying to retool after being laid off for a couple of years. He said this is the first thing he’s come across that really worked for him and helped him learn a bit of CS.  How does this compare with Udacity and Coursera?  Both of those companies are primarily video oriented, and both of those companies are running courses that are in some sense synchronous.  You have to move through the course on their schedule to get the full benefit.  Our books/courses can be done at your own pace, on your own time.

I would like to use this for my own class how do I get started?

Its easy, just follow these steps:

  1. Go to and register yourself as a user.
  2. Click on Create a Custom Course link in the right sidebar.
  3. Select a short name for your course that uniquely identifies it among all the other courses.
  4. Type in a short description for your course
  5. Now you get to choose.  Do you want to use one of our standard configurations, either How to Think Like a Computer Scientist: Interactive Edition, or Problem Solving with Algorithms and Data Structures using Python  or do you want to build a custom book by choosing modules from both of the above?
  6. Click on the build button.  Wait a few minutes and you will have a page with a link to your new course.
Now you can send your students to and simply tell them to register for your course.  


Why would you choose to build your own course when you could just use one of the open books?  When you create your own course you become the instructor and admin for that course.  You can grade your students assignments right online, and even access their homework in progress if they have questions.  You can also get a sense for the different activities they are choosing to use in the textbook.

How can I get involved?

There are lots of ways you can get involved:

  • We need readers who are willing to be critical and report bugs on everything from typos to activecode blocks that don't work exactly right.
  • We need web developers who are willing to work on the back end, developing reports for instructors and making sure our infrastructure is sound.
  • We need web developers who are interested in developing user facing features, everything from algorithm visualizations to interactive assessment tools like the multiple choice and fill in the blank questions you see already.
  • We need compiler geeks who can help fix bugs in our Javascript implementation of Python.
  • We need authors who want to add new and interesting content, either entire courses, or new modules that could be combined with the modules already there.