What Makes Modern Software Hard?

Forty years ago, software systems were so specialized that the notion of a mass-market for software did not exist.  Most software ran in batch-processing systems, interacting with nothing but the processor. Then computers became more interactive and more accessible.  By the 1980s, mass-market software had migrated to the desktop; software came of age when chain stores (like Egghead) came into existence merely to sell software.  Interaction increased, but largely with the user.  In the past decade, software has taken another significant leap, and is continuing to do so.

These improvements in interaction have brought developers new responsibilities.  Problems that simply did not exist just over a decade ago are commonplace now.  For example, in the early 1990s, most desktop machines had no networking access; today, network security concerns are everyday news.  (One measure for what has migrated from geekdom to the commonplace is whether it appears on primetime TV ads. By that metric, security sure has!)

We want you to think about what properties will characterize the new generation of mass-market applications.  Security is of course one such property, but there are many others.

You should begin by describing (in a few sentences each) a few contemporary and next-generation applications.  Use these to illustrate the remainder of your response.  Concrete examples are always clearer than abstract descriptions; they will also help jog your imagination.

You should then list challenges.  Each challenge must has two parts. The first part is a characteristic -- a brief, non-technical description of a property of modern software. Feel free to use buzzwords like "secure" or "real-time". The second part is a list of technical challenges which ensue from that characteristic. (Some challenges will no doubt appear against multiple characteristics.)  The description of each challenge should be short (at most a paragraph or two; sentences are fine) but entirely technical, and should relate explicitly to the characteristic (we shouldn't have to use our imagination to see the connection).  Draw freely on your examples of applications to make the descriptions more lively, e.g., by presenting scenarios from the examples.

This exercise has two objectives:

  1. To force you to think about the challenges you will face in the software market when you emerge from Brown.  These may be quite different from the challenges you faced in your courses!
  2. To make you build bridges between the buzzwords that will need to use with management and society at large, and the technical speech you will need to employ when conversing with fellow engineers.

This is not an exercise you should try to complete in one sitting.  It won't take you long, but it should be done over a long time.  Spend a few minutes thinking about it every day.  Each time you contemplate the question, more issues will become apparent, and existing ones will come into sharper focus.


Due on Wednesday, February 11, at 2am. We will discuss the assignment in that day's class.

You assignment should be turned in as a plain text or PDF document. To hand it in, run /course/cs190/bin/cs190_handin modernsoft <filename>