chapel talk - 11/4 nehemiah 13 1-3, 23-31

This is the text from my chapel talk yesterday. The video (mostly of the top of my head) can be found on the Luther Portal. Make sure you go to the On Demand tab and look for me on November 4.

I’m going to begin today with a slightly different opening litany than we have become accustomed to: When my friend Ann Highum asked me to switch days with her I said “sure” after all one days reading can’t be that much harder than another. Then I got the email from Pastor David. It contained three very ominous words: “these troubling texts”. Not to mention that our reading today is from the book of Nehemiah. Lets begin with our reading:

On that day they read from the book of Moses in the hearing of the people; and in it was found written that no Ammonite or Moabite should ever enter the assembly of God, 2 because they did not meet the Israelites with bread and water, but hired Balaam against them to curse them—yet our God turned the curse into a blessing. 3 When the people heard the law, they separated from Israel all those of foreign descent.

OK, discrimination, xenophobia, that sounds troubling enough to get started. We’ll come back to versus 23-31 in a moment. This is not your typical sunday school reading. Who are the Ammonites or the Moabites? What did they do to deserve getting kicked out? I think we might need a bit of context.

Now it turns out that the book of Nehemiah is essentially a blog written by Nehemiah himself, who was the cupbearer for King Ataxerxes. So I thought as a public service I would try to give some context to todays reading by condensing Nehemiah’s blog posts into a series of tweets. A sort of Twitter translation of the bible with commentary from yours truly. Nehemiah himself goes by @cupbearer21 in case you want to follow him on Twitter later today.

Posts from the month of Chislev:

Brother Hanani came to Susa today, brought visitors from Judah

OMG the wall of Jeursalem is broken and the gates destroyed by fire! #JerusalemFire

I’ve been weeping, fasting, and praying for days. Still distraught over the fire in Jerusalem. #WoeIsMe

Next, we get some insight into the incredible guilt and potentially inflated sense of self importance that @cupbearer21 must feel:

Can’t help but feel that the #JerusalemFire is my fault! Me and my family must have offended @God.

Now we skip to the month of Nisan

AtaXerxes told me to buck up. I guess he can tell I’m still sad over #JerusalemFire

Just days later we get the following:

Holy career path! @ataxerxes granted my request to go to Judah and rebuild the walls of Jerusalem! #ClimbTheRoyalLadder

Now to be sure that he does not encounter opposition on the journey he tweets:

If anyone doubts me here’s a link to letters from @ataxerxes granting me safe passage and timber from the royal forest. #TheKingsGotMyBack

But Nehemiah’s glee is short lived, just days later we learn:

Curses! @TobiahtheAmmonite is not happy with me. He will try to foil my plans for rebuilding the wall!

Ahh, so we have a bit of dramatic foreshadowing on this deal with the Ammonites. Our story continues:

Snuck out tonight to inspect the walls on my own. #ThisPlaceIsAMess

Following the inspection, its time for the work on the walls to begin in earnest, but Nehemiah needs workers so he tweets out a plea for help:

Join me! we are going to rebuild the walls! The hand of my God is gracious!

 To which there are hundreds of replies of the form @cupbearer21 count me in!  @cupbearer21 tools ready to go, The hashtag #RebuildTheWalls was definitely trending that day.

But not everyone was on board with Nehemiah’s plans: @SanballatTheHoronite and @TobiahTheAmmonite and @GeshemTheArab who basically responded

@cupbearer21 WT——H

@cupbearer21 Who do you think you are? Are you rebelling against the King?

Nevertheless, Nehemiah we can tell work is proceeding by the status updates:

High priest @eliashib doing good work on the sheep gate

Sons of @hassenaah rebuilt the fish gate today

and so on with tweet after tweet of progress from around the city.

Of course in typical twitter flamewar fashion we see some retweets from our old friends @SanballatTheHoronite and @TobiahTheAmmonite

Ha! what are these feeble Jews doing? Do they think they can rebuild the wall in a day1?

And from Tobiah,

That stone wall they are building — any fox would break it down! #I’llHuffAndI’llPuff

To which Nehemiah replies

Oh @God, do not blot out the sins of @Tobiahtheammonite #FireyPitForYouDude

Some days later:

Big day today!! Walls back to half their original height!

But even with all of that progress those darn Ammonites stirring up trouble again.

Emergency! We need families NOW to guard the walls against @sanballat and his ilk. #NeedMoreSpears.

And although you might think I’m making this one up, Nehemiah has been so busy that he tweets:

I’m starting to smell, its been weeks since I put down my spear and changed my clothes!

After all that, Nehemiah shows that he is a guy who can get things done. After just 52 days he tweets

At last, the wall is done! #PartyAtMyHouse

With the wall rebuilt, Nehemiah gets an interesting assignment:

From @God: Hey! @cupbearer21, You should use your analytics and do a genealogical and demographic analysis of the people

At this point there are several chapters of names of Levites, and prophets and lineages of various families. Clearly could have saved a bunch of time.

So, rebuilding the wall is clearly the signature accomplishment of Nehemiah, But even with all of his success as governor, Nehemiah doesn’t take advantage of food and land allotments that were allowed him, because there was already such a great burden on the people. He also made the other nobles and officials forgive all outstanding debts and ordered them to return all land and money that had been taken as taxes so the people would be able to feed themselves and their families. To keep everyone happy he organizes covenant day which is summarized in the following tweet:

Covenant day! #TithingIsGood #OfferingsRock #FirstBornSonsToGod #FirstOfEverythingToGod

Which brings us again to Chapter 13 and these troubling tweets:

Much reform is needed @Elishib and @Tobiah have made a mess of things #NoMixedMarriages #KeepMarriagePure

Kicked out the foreigners #KeepTheIsreaelitesPure #PureJerusalem

And in what must have felt like the ultimate victory for old Nehemiah:

I chased @Jehoidia son-in-law of @SanballatTheHoronite away! He is gone from the city!

To which I now might imagine a response out of the future:

From @JCSofG, Wait, What!? No No No! #EatWithTaxCollectorsAndSinners! #BadNehemia

So, does our story for today all come down to Nehemiah getting his revenge on the Ammonites for trying to thwart his efforts to rebuild the walls of Jerusalem? It sure sounds like it. The sad thing is that In many ways this story seems all too familiar. Take out Nehemiah and Insert the name of your favorite ruler:

  • Humble beginnings

  • Great accomplishments and rise to power

  • Power goes to the head

  • Stupid policies

Whats maybe more interesting to me is why this particular verse is the verse for the day, with all of the good things Nehemiah did, why highlight this one idiotic policy? Maybe simply to remind us that tolerance is a good thing even when times are tough.

I’ve spent a lot of time this last week trying to answer the question, where’s the grace in this story? I think maybe for us and for Nehemiah it really does come down to his final tweet:

Remember me @God for the good I have done!

john riedl tribute

This is the short tribute speech I gave last Friday at the University of Minnesota.  Actually, I had to edit my speech to be shorter than this, so I thought I would just post this longer version, plus it contains some fun old images I dug up that I didn't get to show.

Hi, I'm Brad Miller.  For those of you who don't know me, I was one of John's PhD students, and a co-founder of Net Perceptions, but more importantly he was someone I admired, respected, and called my friend.  

Now, I  still use Instant Messaging quite a bit, and its a way that John and I connected over the years.  But,  its a bit disconcerting that when I look at my Buddy list today I still see John Riedl in my list.  The problem is, he's not  "Offline," or "Away," He's "Idle!"  So, somewhere out there, or UP there, he's still logged in and on IM. Of course its on his gtalk account so maybe maybe google is expanding their mission beyond "the world".  Anyway,  I have this irresistible urge to have a conversation with him.  I hope this imaginary conversation conveys the amazing sense of Humor he always had for whatever we were doing.

Screenshot 2013-08-25 17.07.27
Me:  Dude, time to chat?
John:  Just a sec, I'm trying to explain collaborative filtering to the big guy
Me:  I suppose I can wait.
John:  OK, I'm back…. for someone omnipotent, he's little slow on his basic probability and stats.  He had this cool idea that based on some sins that you had avoided in your past, we might recommend other sins to avoid.
Me:  Wow, we haven't had a negative rating problem like that since "Cleveland!"  But really rating sins? on a likert scale? do you think that will work?
John:  No, I think this would be a much better app to test out some of our hypotheses on implicit ratings.  Anyway,   What's up.
Me:  Just missing you.  Remember the first class I had from you? It was Fall 1993, CS8101 - Distributed Systems.  
John:  Wow, that was a long time ago.
Me:  Remember the project that Dave Truckenmiller and I did?  We designed a Distributed Version Control System, for SCoNes.   
John:  Scones?  
Me:   Devices on a Seldomly Connected Network.
John:  HA!  
Me: And remember our DRIP protocol  (Distributed Replicated Information Pile)
John:  Yeah, that was good project, and you got your A, but I think I should go back and revise your grade down.
Me:  Why?
John:  Well if you think about it,  in the end you guys got it wrong by requiring locking.   I think we had a long talk about merge versus lock.  Clearly the people in the merging camp like git and mercurial got it right in the end.
Me:  Ok, but they did come to the party almost 15 years later!
John:  Fair point, turns out its pretty hard to revise a grade after all these years anyway.
Me:  Do you remember the cease and desist letter we got from the Better Business bureau lawyers?
John:  That was great!  Maybe if someone hadn't photoshopped the BBB torch into some bizarre mashup of a  BNC connector with a computer on the top, and then put it on a website, this never would have happened!
Me:  I think it had more to do with our naming the server the Better Bit Bureau!  I thought I might be the first PhD student to flunk out of the U for copyright infringement.  Plus we only had like 10 users at the time, so really!! Who cared?
John:  You were worried!?  I didn't even have tenure yet!  I Remember that they told us we could use any one of their 'B' words, but not two of the three together.
Me:  Yeah, luckily choosing a new name was "just a simple matter of coding"
Me:  Remember the ultimate test newsgroup for the Grouplens Usenet trial?
John:  Ha,  how could I forget that?  I know you and Joe were a lot more partial to, but you can't beat
Me: Uh John,  You don't think they are, you know, monitoring your transmissions up there.
John:  Well, I haven't seen any guys from the NSA wandering around.  Plus, what are they going to do to me?
Me:  I worked so hard to get the emacs gnus reader working.   Hours of fun hacking in lisp.
John:  Yeah, I never could understand those people that used vi!  Emacs rules man!
Me:  We worked so hard on that trial, and I had so many hypotheses that were totally wrong.
John:  Yep, but remember I always told you that a negative result is still a result.  And there is nothing more cruel in the world than the murder of a theory by a cold, hard, ugly fact.
Me:  You said it.  I can't tell you how much comfort I got from that.
Me:  Hey, speaking of names do you remember that particularly long afternoon of trying to come up with a company and product name?
John:  How could I forget.  You were the worst!  "Villagent"  who would buy software from a bunch of Vigalantes!?
Me:  Yeah, that was not one of my finer ideas.  It was cool that GroupLens got to live on through a few product cycles at least.
John:  I think our  release code names were the best.  - Photuris was my favorite.  
Me:  Yeah the Firefly killer.  We showed those Media Lab guys a thing or two.  But I might have to go with Cleveland, just because it drove Steven crazy.
John:  Cleveland, I remember that!  We even had T-shirts made up for that one.


Me:  well, I'd like to chat more but they only gave me 3-5 minutes for this tribute.  Just one last question for you.  Why isn't your status Away?
John:  Thats easy, Brad.  I'm not.  I live on in your memories, I live on through Eric, Karen, and Kevin, and I live on through you and the rest of my students.  Don't worry, I'll always be with you in spirit.


runestone interactive announces new editions of interactive textbooks

Today I'm really pleased to announce that  have launched version 2.0 of our interactive computer science  textbooks:

We first launched these books on our website in May of 2012, after around a year of private testing in the classroom.  Since then we have had 1.3 million page views by a quarter of a million unique visitors.  Daily, we get around 2,000 unique visitors.  Not bad for a site with zero dollars for an advertising budget.

What Makes these Books Unique?

These books are unique because they are interactive.  We have developed a set of authoring tools that make it really easy to write an interactive textbook with many interactive features.  We call these the Runestone tools.  Some of the interactive features that are possible include:

  • Activecode:  Using a Javascript implementation of Python you can run and modify the examples in the textbook right in the book.  No server connection is required since it is based on javascript and runs right in the browser.
  • Codelens:  Using the amazing power of the  tools you can step through examples one line at a time, forward and backward.  While you are stepping through the code you can see variables and other data structures change values.
  • Parsons Problems:  For beginning programmers Parson's problems are like refrigerator magnet poetry.  You can provide your students with the statements needed to write a program, but they must put the statements in the correct order.
  • Inline Quizzes: Each section of the book contains some inline quizzes that allow students to check their understanding of the material.  The quizzes have different feedback for each correct or incorrect answer that try to point students in the right direction. 
  • Online Homework:   At the end of each chapter are programming assignments.  In this new edition we have provided the answers to the odd numbered questions, and discussion forums for students to exchange ideas or ask questions about the homework problems.  As an instructor, you can grade your students programs on one convenient page.
  • Highlighting  This is another much requested new feature.  Students can highlight text using the mouse and the highlights magically reappear on any supported browser.  In addition we will remember the students last location in the book and offer to return them to that position when they return.
  • There are many other features but the best way to understand what we are doing is to actually have a look at our overview page, which shows everything I have mentioned here and a lot more in action.

Over this past year we have discovered that we serve two different audiences with these books.

  • Instructors looking for a textbook to use in their own course
  • People who are interested in teaching themselves some computer science and have found our books through google search, the Python wiki, or some other word of mouth source.

Textbooks as a Service

When we launched the site last year we decided to not only provide the books free and open for anyone who wanted to read them, but also as a service for instructors who wanted to have their own custom copy of the book where they could track their students progress, review their answers to quizzes, and grade their students homework.   If you want to use our books in your class you are welcome to do so.  You have two options:

  1. You can use a copy of either book as is with the order of the chapters just as they are on the books linked to above.
  2. You can try our custom interface where you can mix and match chapters from both books to create your own custom textbook.

Once you have created your own course then you will be able to see the assignments your students have completed right in the textbook.  I find this to be very valuable as an instructor.  For example if I have assigned the students to read and do the quizzes for a particular section, I can simply go to the quiz question and click on the 'Compare Me' button.  As an instructor I will see a summary of the answers my students gave, as well as the details of the answers that each student tried.

Supporting the Independent Learner

Perhaps the biggest surprise of this project is the number of people that have found one of the books through google, and are simply teaching themselves to program.  We are hopeful that some of the new features we have added will help foster a  community of learners so that people just learning to program can talk to others in the same situation.  Some things we hope are particularly helpful include:

  • Answers to odd numbered questions.  This was probably the number one request I got through email all last year.  How do I know if I did it right?  We decided to risk it and provide the answers, but only to the odd numbered problems.  In addition a student must try to answer the problem at least once before the answer becomes "unlocked"
  • Discussion threads for homework problems.  Again this may seem like a risky move where students can just publish their answer and others can copy.  But, what we are hoping for is that students will see that there are many ways to get to the "right answer"  There are different approaches and programming styles that can be used to solve the same problem.
  • Compare Me  Although we aren't sure about the title on the button, the idea is that after answering one of the quiz questions a learner can check on their overall 'grade' for all quiz questions, and see how their answer compared to all the other learners.  We haven't gone so far as to give out badges, but we think this is a nice intermediate approach.

The Runestone Tools

The books above were built using our Runestone Interactive toolkit.  These tools are freely available on github.  If you want to write your own interactive book, or even just use the tools to create some interactive labs for your students you are welcome to do so.  You can write your materials in an easy to use markup language called restructuredText and add examples or quizzes using very simple tags.  Complete documentation for our extensions to restructuredText is provided on the website.  In addition to our own books, the team at Harvey Mudd College has published CS for All  another introductory textbook using our tools.  I know of at least two other books in progress!  

If you are interested in following our development or getting involved You can do so in several ways:


I am grateful to the many people who have provided us with feedback over the last year.  And I am especially grateful to the ACM SIGCSE social projects committee for providing me with a special projects grant that allowed me to work with a student (Isaac Dontje Lindell) this summer.  He did a ton of work and will be graduating next year.  You should hire him.  In addition this project relies on many open source components which I will mention and link to below.

  • The original text for How to Think Like a Computer Scientist comes from Allen Downey, Jeff Elkner and Chris Meyers.  We have modified it a lot, but without a starting point for us to experiment with our interactive ideas this project never would have taken off.
  • The Problem Solving with Algorithms and Data Structures text is published as a paper textbook by Franklin Beedle and Associates.  Without the forward thinking of Jim Leisy this book would be stuck.  Thankfully Jim freed us to use the text in an interactive form online.
  • Mark Guzdial, Barbara Ericson and the rest of the CSLearning4U research group at Georgia Tech have provided questions, assessments,  and many other features and ideas.
  • The Activecode examples are made possible by skulpt
  • The Codelens examples are made possible by Philip Guo and his
  • The look and feel of the book is based on the bootstrap templates
  • The system that builds the website from source is called Sphinx and is really the backbone of the system that allows us to write our interactive extensions.
  • Ville Karavirta wrote the original js-parsons library and Mike Hewner integrated it into the Runestone Tools.

making python3 my default

I'm finally there.  After a long time of writing books using Python 3, and teaching in Python 3 on a daily basis, I'm finally at the point where I'm changing my work environment to use Python 3 by default.

Here are the signs that convinced me it was time:

  • The release of Pillow to provide PIL functionality!
  • Django 1.5
  • IPython and IPython notebook are fully supported  -- I Love IPython Notebook
  • matplotlib !!
  • Sphinx, Jinja, SQLAlchemy, and many others are supported.  See:

There are a couple of projects that I use a lot that are not yet on Python3 (web2py) but I'm not going to let that stop me.

It turns out to be pretty easy to get yourself up and running on all of this stuff with Python 3.  I'm on a Mac running 10.8.3.  The first and most important step is to get a working version of pip for Python3.  First you need to install distribute.

curl -O
sudo python3

This will install easy_install in your Python home, but go one more step and install pip.

curl -O
sudo python3

This will create a pip in your /Library/Frameworks/Python.framework/Versions/3.3/bin  directory.

From there you can begin pip installing pretty much everything you need!

From my history today as I was setting everything up:

10393* pip3 install ipython
10409* pip3 install numpy
10410* pip3 install matplotlib
10429* pip3 install tornado
10430* pip3 install pyzmq
10455  pip3 install Sphinx

If you are on a Mac you will need to use easy_install to install one thing, for IPython.  For some reason pip installing the readline library puts it too late in the load path to work with IPython, so you need to use easy_install-3.3 readline  to get the history in IPython working just right.

Finally, you will want to add the Python 3 bin directory to your PATH.  Edit your .bashrc or .zshenv file.  Note that the following puts the Python 3 bin directory at the front of your PATH, making it the default when you type pip, python, or ipython.  If you need to revert back to python2.7 for some task you will need to be explicit about it.

export PATH=/Library/Frameworks/Python.framework/Versions/3.3/bin:$PATH

Easy!  You were expecting this to be a long and arduous process fraught with hacks and silly edits to config files.  Nope, just a few basic commands.  I take this as the final sign that Python 3 is here and ready to be your day to day Python.

to infinity and beyond

We passed 3 million entries in our log data for which got me to wondering about how we are growing. The site has been live for 275 days. You can really see how the site took off after day 100, which makes sense because that was bout the time fall classes started around the country. The tiny plateau between day 225 and 250 corresponds to Christmas/winter break for most schools, and now that Spring semester is in full swing it looks like the slope has gotten steeper again.

The dotted line is the linear best fit line with a slope of 12,836.7. Even if our log database is not growing exponentially thats an impressively steep slope.

And just because this is all about Python and education, here's the Python code that created the graph. I love matplotlib, it is such a powerful tool for quickly looking at your data.

import matplotlib.pyplot as plt

from numpy import polyfit, arange

f = open('bydate','r')

days = f.readlines()

totals = [0]

for d in days:

    day,count = d.split('|')

    count = int(count)


x = arange(len(totals))

m,b = polyfit(x,totals,1)

print m

plt.plot(x,totals,x,m*x+b, '--k')


The data file is simple. One day per line with the date in one column and the number of actions in the other column. Here are the last few days:

 2013-02-14 | 24349

 2013-02-15 | 17396

 2013-02-16 | 12645

and now it can be told

Loyal readers will remember that last summer we cruised to Alaska, and some very secretive things were happening on that cruise that I could only refer to rather cryptically. Well, with the airing of last nights episode of Top Chef the story can now be told.

We were on the set for the filming of the Quickfire challenge onboard the ship! Although the filming took several hours, we got less than 1 second of screen time. But here we are! Brian and I happened to be in a pretty good spot as the camera flashes past us several times. The ladies we were talking to turned out to be from Wisconsin, in fact from right by our cabin! The two in the print shirts actually got an additional 2 seconds of screen time along with their comments on the food. IMG_0276 Jane, Brian, and I all made it on again towards the end of the challenge. Sadly there is no sign of Holly. IMG_0277

Of course since this was all way before the show started we had no idea who any of the chefs really were. I do remember really liking Sheldon's lettuce cups as well as Stefan's little potato soup cup. I could swear that I remember seeing Kristin on the ship, so maybe she got to come along since she would be competing in last chance kitchen in Juneau.

Right now I'm looking forward to the finale. I'm not sure who I want to win the most, with Stefan and Josie gone all the villains are off the show. I think it would be awesome if Kristin makes it through LCK and gets to compete against Sheldon or Josh in the Finale. Thats Josh, by the way, in the first photo.

the debary institute

Its been a great J-Term. A trip to Vail for some Skiing, and a trip to Florida to solve the worlds problems with great friends at the DeBary Institute. For those who do not know, the DeBary institute is a newly renowned think tank with roots in the Bone Lake Global Institute.

We arrived on Friday and spent a wonderful late afternoon enjoying the hospitality and home of our host, Tim Peter.


On Saturday we toured Stetson University in the morning.


Later we repaired to Smyrna Beach, it was a bit windy but we enjoyed it all the same.


The culinary highlight of our trip was dinner at the Swamp House Grill and Tiki Bar. We enjoyed some lovely alligator bites as appetizers:

IMG_0236 (Yes, as the famous frog said, they do taste like chicken)

After dinner we sat around enjoying the music of Mark Moore.

Sunday was Football (European and American) and then Golf day.


Dinner was provided by Gregory and Brad who made a charming seafood alfredo.

Monday morning we left the house at 5:50AM. The temperature was 62 degrees. Five hours later we arrived in Cedar Rapids where the temperature was -2. Thats a big swing for a monday morning.

Already looking forward to next year!

everyday python - new blog

I've decided that it will be best to keep my personal blog separate from the new Everyday Python blog project. All of the infrastructure to make the posts interactive just work so much better when I have control of the server and everything else. So You can head over to Everyday Python and click on the Everyday Python link there, or if you want to subscribe to the RSS feed for that project you can use this link.

vail 2013

I just got back from four awesome days of skiing in Vail and Beaver Creek.

Vail 2013

The Colorado resorts have a really cool new way of handling the ski passes, instead of clipping a tag on your jacket you now get a credit card with an RFID chip in it. Talk about a ski pass that appeals to the Geek in me! But whats even better is that every time you go on a lift, there is an RFID reader that grabs your ID and logs that lift ride. So now at the end of the day you can go on to a website and see how many vertical feet you skiied that day. Very cool. Over our four days of skiing we did just over 95,000 vertical feet! If we'd only known how close to 100k we would get we surely would have had a shorter lunch break on day one!

Since snow started late and has been a bit sparse since Christmas there was a lot of snow making going on. The mounds of snow created by the snow machines remind you of a Dr. Seuss drawing: Vail 2013

I'm pleased to say that my skiing has really improved thanks to my Solomon BBR 8.9 skis. I've started to call them my magic skis because I can even do the moguls! Here's a picture I took of craig at the top of one particularly narrow and moguly run. Note that I got down first with enough time to turn around and snap some pictures. Vail 2013

Here's another shot of Craig just before he jumped off the cliff. Note once again who went first to take the picture: :-) Vail 2013

All in all it was a great four days of skiing with the guys. Can't wait until next year.

introducing everyday python

Everyday Python

It is always risky to make your New Years resolutions public, but this is one I’ve been thinking about for a while now, and so I’m going to go ahead and impose a measure of accountability on myself by proclaiming this publicly. This week, I’m starting a series of educational blog posts here, and as a part of my Runestone Interactive publishing project.

My idea is to publish a series of Python programming projects, aimed at solving everyday problems, or puzzles. Hopefully these little projects will be interesting and will give learners motivation to dig into the details of the solutions. I will provide links to the relevant Python programming constructs and data types in either of the two interactive books (How to think like a computer scientist: Interactive Edition , or Problem Solving with Algorithms and Data Structures using Python) This will let me focus on the problems, and not the minutia of the language. Lets face it, reading about all the different possible string methods is not that exciting, but seeing them in action, and then wondering about what else you might be able to do with strings is OK.

The great thing about Python is that if you write things in a straightforward manner its pretty easy to follow even if you don’t know all the details. So, that is my intention. Write a solution and do it in straightforward Python that beginners can understand. Each project will appear over several days, and will likely include some homework related to the project. I’ll provide the solution in a followup post. In addition, I may refine the solution over the course of several days introducing more and interesting solutions or more advanced features of the Python language.

In the back of my mind I am drawing inspiration from the old Communications of the ACM column by John Bently called Programming Pearls In John’s columns he would feature a particular problem or algorithm, and present it in a straight forward way, but then he would refine that solution again and again polishing it until he had an incredibly elegant solution. It was beautiful because even a novice programmer could understand what was going on at the start of the article, but would get sucked in to the beautiful solution and would learn more than they thought possible. While advanced programmers might chuckle at the initial solutions, even they would have to admit that they learned something by the end of each column.

I already have a few ideas in mind for the first few projects. I’m going to try to start fairly easy with some string and list kind of projects, and work my way up to more complex problems and algorithms, again this is meant to be educational so that in theory a beginner might read through these posts more or less chronologically, and learn some computer science along the way.

Click the title to leave a comment.