Tuesday, August 12, 2008

Future of Software

Continuing the trend-watching of Technology 2001, which discussed the technologies that could well define the computing and communications environment that lies ahead, The Future of Software assembles the observations of leading computer scientists, strategists, and planners in both business and academia, this time tackling software development.

Despite the extraordinary advances during the past few years in computing power, Derek Leebaert and the other contributors see as the biggest challenge for the future the development of software that can fully exploit the the computer's ever-increasing capabilities. Each author addresses the particular aspect of software that is his or her specialty, examining how various developments and applications will transform the way we think about and use comptuters as we enter the next millennium.

The topics include the history and evolution of software, the future of software and how it will change the way we live, software standardization, work group computing, computer supported collaboration, end-user programming, natural language and natural- intelligence capabilities and limitations, the Japanese software industry, software and the law, and the coordination of knowledge.

Software Visualization

In the past decade, high quality interfaces have become standard in a growing number of areas such as games and CD-ROM-based encyclopedias. Yet the overwhelming majority of programmers edit their code using a single font within a single window and view code execution via the hand insertion of print statements.

Software Visualization (SV) redresses this imbalance by using typography, graphics, and animation techniques to show program code, data, and control flow. This book describes the history of SV, techniques and frameworks for its construction, its use in education and program debugging, and recent attempts to evaluate its effectiveness. In making programming a multimedia experience, SV leaves programmers and computer science researchers free to explore more interesting issues and to tackle more challenging problems.

Software Abstractions

In Software Abstractions Daniel Jackson introduces a new approach to software design that draws on traditional formal methods but exploits automated tools to find flaws as early as possible. This approach--which Jackson calls "lightweight formal methods" or "agile modeling"--takes from formal specification the idea of a precise and expressive notation based on a tiny core of simple and robust concepts but replaces conventional analysis based on theorem proving with a fully automated analysis that gives designers immediate feedback. Jackson has developed Alloy, a language that captures the essence of software abstractions simply and succinctly, using a minimal toolkit of mathematical notions. The designer can use automated analysis not only to correct errors but also to make models that are more precise and elegant. This approach, Jackson says, can rescue designers from "the tarpit of implementation technologies" and return them to thinking deeply about underlying concepts.

Software Abstractions introduces the key elements of the approach: a logic, which provides the building blocks of the language; a language, which adds a small amount of syntax to the logic for structuring descriptions; and an analysis, a form of constraint solving that offers both simulation (generating sample states and executions) and checking (finding counterexamples to claimed properties). The book uses Alloy as a vehicle because of its simplicity and tool support, but the book's lessons are mostly language-independent, and could also be applied in the context of other modeling languages.

Mobile Software for internet

Speaking of mobile browsers, their small screens raise the issues of multimodal
user interfaces and personalization. With the General Packet Radio Service
or ‘‘GPRS,’’ rolled out across the world in late 2001, it became possible for
a mobile user to simultaneously speak and listen in a voice connection while
using text screens delivered via a Web connection. As an engineer, you’ll have
to decide when it makes sense to talk to the user, listen to the user, print out a
screen of options to the user, and ask the user to highlight and click to choose
from that screen of options. For example, when booking an airline flight it is
much more convenient to speak the departure and arrival cities than to choose
from a menu of thousands of airports worldwide. But if there are ten options
for making the connection you don’t want to wait for the computer to read
out those ten and you don’t want to have to hold all the facts about those ten
options in your mind. It would be more convenient for the travel service to
send you a Web page with the ten options printed and scrollable.

On the personalization front, consider the corporate ‘‘knowledge sharing’’ or
‘‘knowledge management’’ system. Initially, workers are happy simply to have
this kind of system in place. But after a few years, the system becomes so filled
with that it is dificult to find anything relevant. Given an organization in
which 1,000 documents are generated every day, wouldn’t it be nice to have a
computer system smart enough to figure out which three are likely to be most
interesting to you? And display the titles on the three lines of your phone’s
display?

A more interesting challenge is presented by asking the question, ‘‘Can a
computer help me be all that I can be?’’ Engineers often build things that are
easy to engineer. Fifty years after the development of television, we started
building high-definition television (HDTV). Could engineers build a higher
resolution standard? Absolutely. Did consumers care? So far it seems that not
too many do care.

software engineering for internet

A twelve-year-old can build a nice Web application using the tools that came
standard with any Linux or Windows machine. Thus it is worth asking ourselves,
‘‘What is challenging, interesting, and inspiring about Internet-based
applications?’’

There are some easy-to-identify technology-related challenges. For example,
in many situations it would be more convenient to interact with an information
system by talking and listening. You’re in the bathtub reading New Yorker.
You want to know whether there are any early morning appointments on
your calendar that would prevent you from staying in the tub and finishing
an interesting article. You’ve bought a new DVD player. You could read the
manual and master the remote control. But in a dark room, wouldn’t it be
easier if you could simply ask the house or the machine to ‘‘back up thirty
seconds’’? You’re driving in your car and curious to know the population of
Thailand and the country’s size relative to the state of California; voice is your
only option.

There are some easy-to-identify missing features in typical Web-based applications.
For example, shareable and portable sessions. You can use the Internet
to share your photos. You can use the Internet to share your music. You can
use the Internet to share your documents. The one thing that you can’t typically
share on the Internet is your experience of using the Internet. Suppose
that you’re surfing a travel site, planning a trip for yourself and three friends.
Wouldn’t it be nice if your companions could see what you’re looking at,
page-by-page, and speak comments into a shared voice-session?

If everyone has the same brand of computer and special software, this is easy enough. But
shareable sessions ought to be a built-in feature of sites that are usable from
any browser. The same infrastructure could be used to make sessions portable.
You could start browsing on a desktop computer with a big screen and finish
your session in a taxi on a mobile phone.