About the SI Programming Requirement

School of Information
University of Michigan
this page maintained by: Professor Mark W. Newman (programming requirement coordinator)

General info and purpose of the programming requirement

Several MSI specializations within SI have an associated programming requirement. These specializations are HCI (2 semesters required), Social Computing (1 semester required), and IAR (1 semester required). These are specializations where, ultimately, a professional in the area should be conversant if not actually proficient with at least one programming language so that he or she can:
  1. Understand the work of and interact intelligently with programmers with whom they are working.
  2. Evaluate and occasionally modify working code examples that they come across in order to determine whether they provide needed capabilities for a given goal.
  3. Rapidly acquire new programming skills as required for later career development (learning a second language and/or improving ones skills with an already-known language is far easier than learning the first one).

Satisfying the requirement

There are three ways to satisfy the programming requirement.
  1. Take one or both of the designated SI programming courses. These are SI 543 (Programming I) and SI 539 (Design of Complex Websites).
  2. Produce a transcript showing that the required number of semesters of programming courses have been taken at the college level or beyond. In some cases a course description or syllabus must also be produced if it's not clear from the course title that programming was the focus of the class.
  3. Take and pass the programming competency exam that is given each year in January.

FAQ

General

  1. I haven't taken any courses, but I taught myself Perl/Python/Ruby/PHP/Java/C++/Fortran/Haskell/etc. and wrote code as part of my job for 2/8/20 years. Can I get a waiver?

    No. You need to pass the programming exam. In fact, the programming exam exists because of you.

Questions regarding coursework

  1. Are there other programming classes I can take around campus to satisfy the programming requirement?

    Yes and no. Most other basic programming courses around campus are undergraduate courses. They can be used to satisfy the programming requirement but the credits won't count towards your MSI degree. It's also possible to take programming classes elsewhere (e.g., Washtenaw Community College) to satisfy the requirements. If you decide to take a non-SI programming course during your time here you may want to check with Prof. Newman to make sure the course will count before putting in the effort.

    Of course, programming-oriented graduate courses in other departments could count towards your SI programming requirement, but since most of those have undergraduate prerequisites you would need to have already taken some programming courses to get into them, in which case you could use your transcripts to obtain an SI waiver. Many students take technical courses in other departments as cognates, but they typically do not need these to satisfy the programming requirement.

Questions regarding transcripts

  1. I have a transcript showing I've taken 2 semesters of programming (or 1 semester for SoCo and IAR students), what do I do?

    Prof. Newman needs to review your transcript and, if appropriate, course description or syllabus. Transcript-based waivers are only given during the first week of each semester and during advising weeks. Please do not request a waiver during other time periods. Transcript review can happen by email (preferred) or in person.

    By email (preferred): scan transcript(s) and supporting materials to PDF and email to Prof. Newman during the designated time periods along with a message indicating your specialization and the fact that you are requesting a waiver. The email subject must include the words "programming waiver" and must be received during one of the designated time window. The email body must contain the following: your name as it appears in U-M records, your U-M ID, the course number(s), name(s), and grade(s) received (translated into A-F if at all possible). This will make it easier for me to find the relevant courses in your transcript. If these guidelines aren't followed I can't promise the request won't be lost or somehow garbled.

    In person: first ask yourself "Why can't I do this by email?" If there's a good reason, set up a time with Prof. Newman and bring printouts of transcript(s), supporting materials, and the appropriate TAP sheet(s). If your transcript is official, the TAP sheet can be signed on the spot. If it's unofficial, Prof. Newman will retain a copy of your transcript and ask Student Services to verify the information on the official transcript before the waiver will become official. Please DO NOT show up at Prof. Newman's office unannounced. He's quite friendly, actually, but he does try to maintain some control over his schedule.

    In either case, Prof. Newman will ask Student Services to double check that the information on which the waiver is based corresponds to the information on your official transcript before the waiver approval will be final.

  2. I have a transcript showing 1 semester of programming but I'm an HCI student who needs two. What do I do?

    You can get 3 credits waived based on 1 semester of prior coursework. You'll still have to take the other 3 credits.

  3. Is there a minimum grade I need to have gotten in my previous coursework in order to satisfy the programming requirement?

    Yes. You need to have gotten a B- or better.

  4. My previous institution was on quarters rather than semesters. Does this matter?

    No. We'll accept a quarter-long course as if it were a semester-long course.

Questions regarding the programming exam

  1. How does it work?

    You will be given a set of programming problems by email. You will have one week to complete the problems and submit your solutions, though we expect it will only take 5-10 hours of work for someone who actually does know how to program. You can use reference materials (e.g., books, websites, etc.) to figure out how to solve the problems but you MAY NOT receive help directly from another person.

    After you have submitted your solutions, you must set up a meeting with a professor who will be designated based on your programming language of choice. The meeting must be held within a week after completing the exam and will last 30 minutes. During this meeting, the professor will ask you a number of questions about your code to make sure you understand your own code and have mastered basic programming concepts.

  2. What programming language(s) can I use?

    You can submit your answers to the programming problems in any of the following languages: Java, C#, Visual Basic, C, C++, PHP, or Perl. Requests for other languages will be handled on a case-by-case basis.

  3. What "basic programming concepts" will I need to know in order to pass the exam?

    Appropriate use of functions/subroutines, appropriate use of variable scope (local/global), appropriate use of simple data structures (arrays, lists, hashtables, etc.), file I/O, basic assessment of runtime efficiency (e.g., how many times will this code access each element of this array?). In addition, in order to pass the oral part of the exam, you will be asked how you would change the code to solve a slightly different version of the problem(s) and be expected to describe (not necessarily implement) the changes on the spot.

  4. How do I register for the exam?

    Send an email to Prof. Newman by the end of Fall semester indicating your intent to sit for the exam and what programming language you plan to use. The subject line of the email must contain the phrase "programming exam."

  5. When will the exam be given?

    Roughly during the second week of Winter semester. Exact times and dates TBD.