Showing posts with label web applications. Show all posts
Showing posts with label web applications. Show all posts

Sunday, December 7, 2014

The convergence of web and mobile

It's easy to think of web applications and mobile applications as two distinct entities (or two distinct collections of entities). Web applications are hosted on web servers in data centers and they "run" in a browser. Mobile apps are installed on smartphones and tablets and run on those devices. Web applications are large, complex things and mobile apps are small and easy to use. Web applications are general, running on all major web browsers, and mobile apps are built for specific platforms (iOS, Android, etc.).

Yet the two are converging. Mobile apps are becoming more like web applications, and web applications are becoming more like mobile apps.

Let's start with mobile apps. The "standard model" for an app is a small, lightweight user interface that talks to services on back-end servers. In that sense, a mobile app is very much like a web application, which is a web page that sends requests to back-end servers.

The "standard model" for mobile apps is also that the app is installed once on your device and there it sits, ready for you to use. That's not really true, at least not with many of the apps I use.

The app does sit on my phone, but apps are upgraded frequently. The "good old days" of PC applications (or mainframe applications) saw upgrades to applications on an annual frequency, sometimes longer. Today's mobile apps are updates monthly, and sometimes more frequently. It seems that Twitter sends updates every week!

The upgrades are usually automatic and silent, requiring no intervention from the operator. One can tell when an app has been upgraded (sometimes), because when they display a small "what's new" dialog. A few apps are upgraded more often than I actually use them. I know this because I always see the "what's new" dialog when I run the app.

With upgrade frequencies weekly and approaching daily, perhaps it doesn't make sense to install the app on the phone. That is, perhaps it makes more sense to always download the app from the server. In this way, a mobile app is becoming more like a web page, which is always downloaded from the server. (I'm ignoring cached copies.)

Looking at web applications, we can see changes that make them more like mobile apps. The "standard model" for a web application is that it lives in the browser and has access to only the back-end servers, with no abilities to manipulate data or devices on the host computer. Yet this is no longer true: web apps can upload files, send e-mail (or tie in to local e-mail clients), and now manipulate the local camera and attached devices.

Web applications are becoming more like mobile apps. Mobile apps are becoming more like web applications. Perhaps we will meet in a convenient, happy middle ground that lets us get the best of both worlds.

Tuesday, April 22, 2014

We no longer think about operating systems

Windows XP remains popular, despite its age, its limitations, and its lack of support from Microsoft.

The desire to keep Windows XP shows that users want stable, reliable operating systems that they can install and then ignore. Well, perhaps not ignore, but at least not think about.

Things were not always this way. Early in the age of Windows, corporations, individuals, hobbyists, and programmers all looked forward to new versions of Microsoft's operating system. Windows 3.1 was desired for its networking capabilities; Windows 95 for its user interface (in contrast to Windows 8); and Windows NT for its security. Windows 2000 brought all of those features together, and was eagerly adopted.

I think that the lesson of Windows 8 (and Windows Vista, and Windows 7) is this: We no longer care about the operating system.

In the old days, operating systems were important -- much more than today. Certain applications would run on only certain operating systems; pick the wrong operating system and you could not run your application. Not running your application meant that you could not get your work done, or deliver for your client.

Today, most applications run on most operating systems. Yes, most Microsoft products run only on Windows, but other products run on Windows, MacOS, and Linux. Moreover, web apps run in browsers, and most web apps run in the popular browsers (Firefox, Chrome, IE, and Safari) and care nothing about the operating system.

Applications are not tied so closely to operating systems as they were.

The mobile world has made operating systems commodities, with equivalent apps available on iOS and Android. In the mobile world, very few people care about the operating system.

With less dependence on the operating system, we tend to think of other things. We still think of performance -- although modern processors are fast enough for most tasks and cloud computing can provide computing power for large tasks.

Today we tend to think of portability (an app for my phone) and network connectivity (coverage by mobile service provider).

The operating system, for most people, is a means to an end but it is not the end. We think of it as we think of electricity, or of sidewalks: there and ready for us to use, but nothing distinguishing about them. They are becoming part of "the infrastructure", that part of our world that we use without thinking about it.

To be sure, there are some folks who do care about operating systems. The system designers, to start. And I'm sure that Microsoft's product teams care about the features in Windows (as do Apple's product designers care about features in MacOS and iOS). Hobbyists and tinkerers enjoy exploring new versions of operating systems. Support teams for large organizations, security analysts, and the "black hat" hackers who look for vulnerabilities -- they all care about operating systems.

But walk down the street and ask individuals at random, and most will answer that they don't care. Some may not even know which operating system are used by their devices!

We've moved on to other things.

Sunday, November 17, 2013

The end of complex PC apps

Businesses are facing a problem with technology: PCs (and tablets, and smart phones) are changing. Specifically, they are changing faster than businesses would like.

Corporations have many programs that they use internally. Some corporations build their own software, others buy software "off the shelf". Many companies use a combination of both.

All of the companies with whom I have worked wanted stable platforms on which to build their systems and processes. Whether it was a complex program built in C++, a comprehensive model built in a spreadsheet, or an office suite (word processor, spreadsheet, and e-mail), companies want to invest their effort in their custom solutions. They did not want to spend money or time on upgrades and changes to the operating system or commercially available applications.

While they dislike change, corporations are willing to upgrade systems. Corporations want long upgrade cycles. They want gentle upgrade paths, with easy transitions from one version to the next. They were happy with the old Microsoft world: Windows NT, Windows 2000, and Windows XP were excellent examples of the long, gentle upgrades desired by corporations.

That is no longer the world of PCs. The new world sees fast update cycles for operating systems, major updates that require changes to applications. For companies with custom-made applications, they have to invest time and effort in updating their applications to match the new operating systems. (Consider Windows Vista and Windows 8.) For companies with off-the-shelf applications, they have to purchase new versions that run on the new operating systems.

What is a corporation to do?

My guess is that corporations will seek out other platforms and move their apps to those platforms. My guess is that corporations will recognize the cost of frequent change in the PC and mobile platforms, and look for other solutions with lower cost.

If they do, then PCs will lose their title to the development world. The PC platform will not be the primary target for applications.

What are the new platforms? I suspect the two "winning" platforms will be web apps (browsers and servers), and mobile/cloud (tablets and phones with virtualized servers). While the front ends for these systems undergo frequent changes, the back ends are relatively stable. The browsers for web apps are mostly stable and they buffer the app from changes to the operating system. Tablets and smart phones undergo frequent updates; this cost can be minimized with simple apps that can be updated easily.

The big trend is away from complex PC applications. These are too expensive to maintain in the new world of frequent updates to operating systems.

Thursday, May 2, 2013

Our fickleness on the important aspects of programs

Over time, we have changed our desire in program attributes. If we divide the IT age into four eras, we can see this change. Let's consider the four eras to be mainframe, PC, web, and mobile/cloud. These four eras used different technology and different languages, and praised different accomplishments.

In the mainframe era, we focussed on raw efficiency. We measured CPU usage, memory usage, and disk usage. We strove to have enough CPU, memory, and disk, with some to spare but not too much. Hardware was expensive, and too much spare capacity meant that you were paying for more than you needed.

In the PC era we focussed not on efficiency but on user-friendliness. We built applications with help screens and menus. We didn't care too much about efficiency -- many people left PCs powered on overnight, with no "jobs" running.

With web applications, we focussed on globalization, with efficiency as a sub-goal. The big effort was in the delivery of an application to a large quantity of users. This meant translation into multiple languages, the "internationalization" of an application, support for multiple browsers, and support for multiple time zones. But we didn't want to overload our servers, either, so early Perl CGI applications were quickly converted to C or other languages for performance.

With applications for mobile/cloud, we desire two aspects: For mobile apps (that is, the 'UI' portion), we want something easier than "user-friendly". The operation of an app must not merely be simple, it must be obvious. For cloud apps (that is, the server portion), we want scalability. An app must not be monolithic, but assembled from collaborative components.

The objectives for systems vary from era to era. Performance was a highly measured aspect in the mainframe era, and almost ignored in the PC era.

The shift from one era to another may be difficult for practitioners. Programmers in one era may be trained to "optimize" their code for the dominant aspect. (In the mainframe era, they would optimize for performance.) A succeeding era would demand other aspects in their systems, and programmers may not be aware of the change. Thus, a highly-praised mainframe programmer with excellent skills at algorithm design, when transferred to a PC project may find that his skills are not desired or recognized. His code may receive a poor review, since the expectation for PC systems is "user friendly" and his skills from mainframe programming do not provide that aspect.

Similarly, a skilled PC programmer may have difficulties when moving to web or mobile/cloud systems. The expectations for user interface, architecture, and efficiency are quite different.

Practitioners who start with a later era (for example, the 'young turks' starting with mobile/cloud) may find it difficult to comprehend the reasoning of programmers from an earlier era. Why do mainframe programmers care about the order of mathematical operations? Why do PC programmers care so much about in-memory data structures, to the point of writing their own?

The answers are that, at the time, these were important aspects of programs. They were pounded into the programmers of earlier eras, to a degree that those programmers design their code without thinking about these optimizations.

Experienced programmers must look at the new system designs and the context of those designs. Mobile/cloud needs scalability, and therefore needs collaborative components. The monolithic designs that optimized memory usage are unsuitable to the new environment. Experienced programmers must recognize their learned biases and discard those that are not useful in the new era. (Perhaps we can consider this a problem of cache invalidation.)

Younger programmers would benefit from a deeper understanding of the earlier eras. Art students learn study the conditions (and politics) of the old masters. Architects study the buildings of the Greeks, Romans, and medieval kingdoms. Programmers familiar with the latest era, and only the latest era, will have a difficult time communicating with programmers of earlier eras.

Each era has objectives and constraints. Learn about those objectives and constraints, and you will find a deeper appreciation of programs and a greater ability to communicate with other programmers.

Sunday, April 21, 2013

The post-PC era is about coolness or lack thereof

Some have pointed to the popularity of tablets as the indicator for the imminent demise of the PC. I look at the "post PC" era not as the death of the PC, but as something worse: PCs have become boring.

Looking back, we can see that PCs started with lots of excitement and enthusiasm, yet that excitement has diminished over time.

First, consider hardware:

  • Microcomputers were cool (even with just a front panel and a tape drive for storage)
  • ASCII terminals were clearly better than front panels
  • Storing data on floppy disks was clearly better than storing data on tape
  • Hard drives were better than floppy disks
  • Color monitors were better than monochrome displays
  • High resolution color monitors were better than low resolution color monitors
  • Flat panel monitors were better than CRT monitors

These were exciting improvements. These changes were *cool*. But the coolness factor has evaporated. Consider these new technologies:

  • LED monitors are better than LCD monitors, if you're tracking power consumption
  • Solid state drives are better than hard drives, if you look hard enough
  • Processors after the original Pentium are nice, but not excitingly nice

Consider operating systems:

  • CP/M was exciting (as anyone who ran it could tell you)
  • MS-DOS was clearly better than CP/M
  • Windows 3.1 on DOS was clearly better than plain MS-DOS
  • Windows 95 was clearly better than Windows 3.1
  • Windows NT (or 2000) was clearly better than Windows 95 (or 98, or ME)

But the coolness factor declined with Windows XP and its successors:

  • Windows XP was *nice* but not *cool*
  • Windows Vista was not clearly better than Windows XP -- and many have argued that it was worse
  • Windows 7 was better than Windows Vista, in that it fixed problems
  • Windows 8 is (for most people) not cool

The loss of coolness is not limited to Microsoft. A similar effect happened with Apple's operating systems.

  • DOS (Apple's DOS for Apple ][ computers) was cool
  • MacOS was clearly better than DOS
  • MacOS 9 was clearly better than MacOS 8
  • Mac OSX was clearly better than MacOS 9

But the Mac OSX versions have not been clearly better than their predecessors. They have some nice features, but the improvements are small, and a significant number of people might say that the latest OSX is not better than the prior version.

The problem for PCs (including Apple Macintosh PCs) is the loss of coolness. Tablets are cool; PCs are boring. The "arc of coolness" for PCs saw its greatest rise in the 1980s and 1990s, a moderate rise in the 2000s, and now sees decline.

This is the meaning of the "post PC era". It's not that we give up PCs. It's that PCs become dull and routine. PC applications become dull and routine.

It also means that there will be few new things developed for PCs. In a sense, this happened long ago, with the development of the web. Then, the Cool New Things were developed to run on servers and in browsers. Now, the Cool New Things will be developed for the mobile/cloud platform.

So don't expect PCs and existing PC applications to vanish. They will remain; it is too expensive to re-build them on the mobile/cloud platform.

But don't expect new PC applications.

Welcome to the post-PC era.

Saturday, May 12, 2012

Icon rot

A number of folks have observed that commonly used icons in applications are no longer sensible.

Their observations are true: pictures of floppy discs are lost on the latest generation of computer users. ("What's a floppy disc?")

The implicit assertion is that we need a new set of icons to represent common functions such as "save" and "search". I disagree with this.

Let me state that I do agree with the assertion that the icons no longer make sense. The notions of floppy discs, radio buttons, paper calendars, and cassette tapes are not relevant to an entire generation of computer owners.

I disagree with the notion that we need a replacement set of icons.

I think that we can get by without icons -- for certain functions. Most prominent are the "save" and "save as" functions.

Classic desktop applications needed the idea of "saving data". They were designed to load data into non-permanent memory, allow the user to modify it, and they allow the user to either save the changed version or abandon the changes and revert to the original version.

Web applications and phone apps are designed differently. We have moved away from the "modify and save" design. Web applications and phone apps save data by default. They don't offer the user of "save or do not save". Saving is automatic. (The better phone apps allow the user to revert to earlier versions.)

I see few icons in web applications, and very few in phone apps. The few icons I see are usually singletons, such as the "send tweet" icon in Twitter apps. Instead of icons, I see buttons (or tap areas) with words. The Facebook app has tap areas with the words "status", "photo", and "post". The Google Gmail app has a tap area with an envelope with a wavy arrow, but to be honest I would be more comfortable with the word "send".

Windows set a number of standards for application design and provided the commonly used icons for those operations. Web and phone apps do not follow those standards, and do not need those common icons.

Rather than a set of standard icons (and therefore a set of standard operations) for all apps, look for app-specific operations. Web apps and phone apps will provide the operations that they need, the operations that make sense. They will not attempt to mold an app into a standard model; they will let the app be itself.

With no common set of functions, there is no need for a common set of icons. Indeed, icons will cause more confusion than they save, since custom icons are not universally understood. Look for more words, and fewer icons.