iList: An intelligent tutor for linked lists

November 20, 2009 at 6:25 pm 5 comments

Davide Fossati is working with me as a CIFellow.  He’s releasing his dissertation work for others to use:

iList is an Intelligent Tutoring System that can help you learn linked lists. It allows you to work on linked lists problems within an interactive, user friendly environment. However, iList is more than just a graphical environment: iList carefully monitors your progress and gives you helpful feedback while you are working towards a solution. The system does so by using sophisticated artificial intelligence technology. If you want to learn more about the science behind iList, you will find plenty of information in the papers referenced in the documentation section.

via – About iList.

Yes, this for me is the kind of educational material that I was thinking about in my last blog post — the kind of thing that we might offer to students needing extra help. This is something that goes beyond reading the book some more, spending more time interpreting error messages, or trying to randomly place semi-colons in your code until it compiles.

Entry filed under: Uncategorized. Tags: .

What would a CS School of One look like? Are You a Blue Collar or White Collar Developer? —

5 Comments Add your own

  • 1. Seth Reichelson  |  November 24, 2009 at 1:57 pm

    I enjoyed doing the problems and would like to try it with my 65 AP CS students. Are there more then 7 problems?

  • 2. Davide Fossati  |  November 24, 2009 at 2:54 pm

    Hi Seth,

    I’m happy you liked iList, and you are more than welcome to use it with your students.

    Currently iList has only 7 problems, but it’s very easy to add new ones. Right now the problems are coded in an XML file inside the system. Maybe in the future I will develop a “problem editor” to allow end-users to add their own problem.

    In the meantime, if you wish to author more problems, I can assist you with that. These are the components I need:

    1) Type of problem: “step-by-step” (like problems 1 through 5) or “block of code” (like problems 6 and 7).

    2) A textual description of the problem. This is the description that will be presented to the students.

    3) A sequence of operations that builds the initial scenario. In addition to the regular commands understood by iList, you can also use the special command “remove ” to eliminate the temporary variables you used to build the scenario, if you wish to do so.

    4) The (X, Y) coordinates of the nodes as you want them to be laid out in the initial scenario. This is to make sure that the initial scenario is aesthetically pleasing.

    5) A list of the “important” variables (e.g., “L1, L2” in problem 2). This information is used by iList to discriminate between important variables and temporary ones.

    6) A solution to the problem, described as a sequence of operations or block of code. Notice: “a” solution, not “the” solution – iList will automatically accept alternative solutions that lead to equivalent results.

    7) A keyword list of the concepts covered by the problem. Currently, iList does not use this information, but as the curriculum grows larger, we may want to (1) classify the problems and (2) enable iList to suggest a sequence of problems to be solved according to the particular concepts that individual students need to practice the most. If you send me an email (davide at fossati dot us), I can email you back with a document written by our collaborator Prof. Christopher Brown, which presents a useful taxonomy of sub-concepts in the domain of linked lists with which the problems can be annotated.

    Take care,

  • 3. Seth Reichelson  |  November 24, 2009 at 6:12 pm

    What my students will love about this is that you made the links visual.

    This is a very powerful tool that I will use to get my students over the hump.

    Is there a way to use other data structures like an array or arrayList? What I am thinking of is short problems similar to javabat except with your visual element. For example

    Given an array of ints length 3, “rotate left” the elements, so {1, 2, 3} becomes {2, 3, 1}. Return the changed array.

    rotateLeft3({1, 2, 3}) → {2, 3, 1}
    rotateLeft3({5, 11, 9}) → {11, 9, 5}
    rotateLeft3({7, 0, 0}) → {0, 0, 7}

  • 4. Davide Fossati  |  November 24, 2009 at 6:35 pm

    That would be cool, but currenty iList supports linked lists only. Adding other data structures is in our long term plans though, and it is part of a new grant proposal we recently submitted to the NSF. Hopefully, we’ll be able to do it in a future that is not too remote 🙂

    It would be really helpful if you can keep me posted with your experience using iList. The future development of the system will certainly benefit from the comments and suggestions of the people using it.


    • 5. Seth Reichelson  |  November 24, 2009 at 9:08 pm

      I will run it with the class on Tuesday and wed of next week.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 10,184 other followers


Recent Posts

Blog Stats

  • 2,039,336 hits
November 2009

CS Teaching Tips

%d bloggers like this: