CIS 700 - Emerging Technologies

MW 6-9pm in Moore 100B, Summer II, 2010 - see the course wiki

In this course we explore "hot" topics which are rapidly gaining in popularity; some are new, and others are undergoing a resurgence of interest. Course goals include practice for a lifetime of quickly researching new technologies, plus exploring the ramifications of being out on the web (i.e., not anonymous).

Programming and concurrency

Dual-core and quad-core computers are now commonplace, and multi-core computers are just around the corner. For the past 50 years, most programming has been sequential; concurrency has been considered an "advanced" topic. That is rapidly changing.

Classes will include hands-on practice in conventional languages such as C# and/or Java for creating a multi-threaded application, and in using asynchronous calls to achieve an apparent improvement in software responsiveness. Plus, we'll spend about an hour of each class in learning Scala, a JVM-based programming language that showcases modern concurrency techniques. Scala is a dual-paradigm language--object-oriented in the style of Java, yet functional in the style of Haskell. Scala itself is a major contender as a replacement for Java; but even should some other language ascend, it will use most of the same techniques as Scala.

Mobile devices

Mobile devices, such as the iPhone and Android, are in the midst of a population explosion. With their small screens, limited memory, and slow processors, programming for them involves an unusual set of constraints. We will explore these constraints in the context of Android phones (though accommodations will be made for iPhone users).

Assessing a new technology

Students will collaborate in small groups to write an article on an "emerging technology" topic (to be pre-approved by the instructors). The article will reside permanently in Citizendium, an expert-led wiki similar to Wikipedia, but where authors and editors use their real names. Groups will present their results to the class at the end of the course. Training will be provided on using the Penn library, which includes "deep web" references such as academic journals, patent searches, and business surveys


Basic proficiency in Java is required, as much of the course will assume a Java background. You may take this course for credit even if you have previously taken, or are currently taking, another CIS 700 course.

Schedule (proposed)

week 1  1 W Jul 7 course intro; research project kick-off; Scala introduction; project 1 announced
    U Jul 11 project 1 due at midnight
week 2 2 M Jul 12 library training, Scala; project 2 announced
  3 W Jul 14 concurrency, Scala
    U Jul 18 Project 2 due at midnight
week 3 4 M Jul 19 concurrency, Scala); project 3 announced
  5 W Jul 21 concurrency, Scala
    U Jul 25 project 3 due at midnight
week 4 6 M Jul 26 Android, Scala; project 4 announced
  7 W Jul 28 Android, Scala
    U Aug 1 project 4 due at midnight
week 5 8 M Aug 2 concurrency, Scala; project 5 announced
  9 W Aug 4 concurrency, Scala
    U Aug 8 project 5 due at midnight
week 6 10 M Aug 9 groups presentations
  11 W Aug 11 final exam, group presentations


Grading will be on a curve determined by looking at raw class results at the end of the semester. Any significant gaps in scores will be used to set grade ranges. Any "extra credit" is added to your course grade after the class curve is set.

7% Sun. Jul. 11, midnight project 1 - research topic proposals, Scala programming (tba)
10% Sun. Jul. 18, midnight project 2 - Scala programming (tba)
10% Sun. Jul. 25, midnight project 3 - Scala programming (tba)
10% Sun. Aug. 1, midnight project 4 - Scala programming (tba)
10% Sun. Aug. 8, midnight project 5 - Scala programming (tba)
30% various due dates (see wiki) Research project
8% At start of classes 2-9 Eight 10-minute quizzes on assigned readings
15% Wed. Aug. 11, 6-7pm Final exam

You can see previous courses for 2008 and 2007; note, however, that the topics covered there differ substantially.

Last updated: 2/15/2010