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).
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, 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).
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.
|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