tl;dr

June 25, 2009

The Internet is Broken

Filed under: Issues,Software,Technology — dublindan @ 12:01 pm
Tags: , ,

After a discussion with Diarmuid about the state of computing, its become pretty clear to me that the Internet is broken. Not only that, but applications are broken, software frameworks are broken, operating systems are broken and hardware is broken too.

Sure, they all work, but they work in an I-need-to-sit-beside-my-toaster-with-duct-tape sense of work. A true appliance does not bother the user with so much low level detail, so much implementation detail and so much meaningless management. A real appliance just does its work without bothering the user about how. Computers are far from being an appliance, in this sense.

Mobile phones are a lot better here, but even they could be better still.

Ok, let me start from the beginning. Why is the Internet broken?

Come see The Dark Knight today at 7pm in Cineworld.

Every time I see a message like this, I’m reminded that the Internet is broken.Every time I’m shown old, outdated or plain irrelevant information, I know that the Internet is broken. Its 8pm! Theres no Cineworld near me. The Dark Night hasn’t been screened in a year! Yep, the Internet is definitely broken.

I have nothing against archived data. In fact, I think its a good thing, but the Internet (or rather, the applications and protocols used to implement the Internet) should be smart enough to know when I require archived information or up-to-date information. Alongside this, the Internet should be a lot less manual, I don’t care about web sites and URL’s and all those meaningless details. I just want to accomplish my task, get my information. We’re already heading this way – the average user (who really does not want to be bothered with low level details at all) already seems to use Google to find their websites instead of remembering the URL and typing it into the address bar. Does your girlfriend/grandparents/dog even know what an address bar is? Hell, 92% of people don’t know what an Internet browser is… (My apologies to the tech savvy girlfriends/grandparent/dogs out there)

I’d love to rant about the Internet longer (actually, I wouldn’t, which is why I’m promptly changing the subject), but I feel its time to take a step back and watch how this phenomenon affects the rest of the computing environment. In fact, this should really be evaluated and fixed before the Internet is tackled.

My biggest problem with computers is that the bother me with details which I just don’t care about. What do you mean I need to start an application to edit my presentation? Why should I have to care about that! Applications, programs, services, web sites, filesystems and all those other things which take up such a large portion of my computer time – why am I constantly being bothered about this? Surely the computer is in a better position to manage these boring, monotonous operations for me, transparently, in the background – letting me get on with my work so that I can leave the office sooner and enjoy some sunshine for once…

Lets say I want to calculate some tax returns, generate a pretty table and graph, put some information underneath, in bullet point format, email it to my boss and send a copy to some archive in the office. On a current system, the procedure to accomplish this task might be something like this:

  1. Start the spreadsheet application
  2. Enter the data and formulas
  3. Generate a graph
  4. Export data and graph as an image (Yeah, I’m aware that often I can actually embed the spreadsheet in other tools and this is certainly a step in the right direction, but it suffers severe interoperability issues currently…)
  5. Start the presentation application
  6. Add the text
  7. Import the image
  8. Save/export in some suitable format
  9. Open my email application or web browser to access my emails
  10. Write an email to the boss, attach the presentation, send email
  11. Mount shared drive/start FTP client/whatever I need to do
  12. Send file to archive

Thats 12 steps – without dealing with the issues of closing applications after I;m done with them… I also left out details such as where do I save/export these files to? and load them from again.. This is ridiculous. Thats too much management taking up my time. Obviously these things still need to happen, but they should be as transparent as possible. Maybe something like this:

  1. I browse to my new work item (more commonly known as a file, I am renaming it because I want to emphasise that its a higher level idea) widget (the meaning of browse depends on the user interface, of course)
  2. I begin entering spreadsheet data, as I enter, the system tries to detect what kind of data I’m entering and provides me with an unobtrusive menu, in case it guessed incorrectly
  3. From inside this environment, I should be able to perform all types of editing tasks. An unobtrusive panel or menu should allow me to switch between tasks. The system may start and stop applications behind the scenes to accommodate these tasks.
  4. When I’m done, I simply browse away from the work item. The system stores it for me, without my interaction, unless I tell it not to. There should also be some means of naming, tagging and categorizing work items.
  5. I tell the system, perhaps through some glorified terminal, to “email work_item_1 to boss” and it will try and predict who this is and provide a prompt of relevant choices.
  6. I tell the system, again, using my glorified terminal, or whatever the user interface would be, to “archive work_item_1

Actually, we can do better than that. Because we know that the user was working on that item, we can assume that this is the item they want to interact with, unless told otherwise. So a simple “email to boss” and “archive” (or “send to archive” or whatever) should be enough. Of course, theres no reason all of this cannot be done with some graphical interface for the typing-averse people out there.

The point is that the computer should worry about loading and saving my work for me (ie orthogonal persistence), starting and stopping programs, applications and services and determining what I want using some context sensitive heuristics.

The entire system stack should be built like this: from hardware, to operating system, to inter-application communication, to application framework, to application to internet. Everything should be context sensitive and should be tuned to my needs. Think Google search with its suggestions, only applied to everything. The computer should simply work.

One possible user interface could be something like this

  • A zoomable desktop with a Google-like search bar at the bottom of the screen which doubles as a temrinal command input area.
  • When I finish editing a work item, a screenshot of it is placed on the desktop, where I was working on it. I can drag this screenshot to another place on the desktop, if I should want to.
  • I can pan around the desktop as well as zoom in and out, hence zoomable desktop.
  • When I zoom in on a work item screenshot, the application needed to edit this type of item is automagically started up (transparently, behind the scenes) and I can edit that item.
  • When I zoom out again or pan away, then an updated screenshot is generated and the application is stopped again,
  • I can tag these items with blog-like tags and categories to aid sorting and searching and add different metadata to it so that the system knows how to deal with it.
  • The search box at the bottom of the screen allows me to search for items by name, pattern, tag, metadata, category, general location on the desktop etc.
  • The search box can also be used to enter specific commands, ike you would in a temrinal now.
  • The search box would also allow you to enter context sensitive smart-commands, like “send to bob”, in which case the send command would send the last work item which you edited/viewed to bob. Bob would be looked up in my user profile list of destinations (email contacts, IM contacts, FTP server, whatever) to find where it should be sent to. An unobstrusive popup dialog would prompt me with the matching items, so I can correct it if it guessed incorrectly.

Theres obviously more to it than that, but it should be a good enough start to get everyone thinking about the problem and potenital solutions a bit. If you have any ideas, comments, queries or feedback, please comment! I’d love to hear other peoples ideas on this.

Of course, the real problem can be seen with a simple question, which will be asked when trying to transition users to a new, fixed and working system:

Thats all very well and good, but does it run Microsoft Word?

Which is completely in line with what I have already said.

June 3, 2009

Whats wrong with technology?

Filed under: Issues,Technology — dublindan @ 12:47 pm

Today I had an interesting discussion about the problems with techology. Put simply, I was observing how we had technologies five, ten, twenty, thirty years ago which, in some ways, were more advanced than what we use now. Sure, ideas eventually trickle into the mainstream and technology advances, but its at a much slower pace than it could be. Technology is always many years ahead of the mainstream. Great technologies often get overshadowed by the mediocre and does not resurface until many many years later. Examples of this happening include the Transputer T-9000, the Intel 432, the Burroughs Large System and AmigaOS’s interoperability functions.

AmigaOS’s interoperability is an interesting example as its something  I regularly wish I had. Put simply, it allowed one to automate GUI events so that you could create software by scripting multiple small tools and applications to work together towards some common function. This is exactly like unix utilities and shell scripts, except applied globally to all software, including GUI applications. This would not be too dificult to implement in current operating systems, yet it isn’t something I’ve really seen much, if anything, of on mainstream computers. In a way, AmigaOS, back in the eighties, was more advanced than the systems we have now – where interoperability between programs is concerned anyway.

There appears to be a trend where great technological ideas fade into obscurity only to have the concepts reappear in some form many many years later. This seems like a slow and inefficient way to progress technology. Why does this happen? I guess technology really can be too ahead  of its time.

The real reason this happens, however, in my opinion, is business interest. A large company pushes its, often inferior, software on the masses, knowing that they will buy whatever they are told is superior, rather than what is technologically superior. Most people don’t know the area well enough to really evaluate if a piece of software does caters for their need or not anyway. If they are told it does, they are happy enough. Ignorance is bliss – they have no reason to think otherwise, even though some forgotton technology may be much better suited. Its the same in all industries however and I know that I’m one of the sheep when it comes to other products which I buy. Software is not unique.

As a market become popular, business will try to exploit the opportunity to make money so they will push their own products. If the market gains enough poularity, more and more companies enter the market and inevitably cheaper and cheaper products get pushed as an attempt to undermine the competition. This sounds great for the consumer, though sometimes it backfires and overall quality drops to accomodate the low price. This way, the more interesting and useful technologies often get left behind in favour of the cheaper, more profitable technologies.

This happens everywhere, not just computers. A friend of mine said it best. Paraphrased slightly, he stated:

Same with cars,
Same with phones,
Same with TV,
Same with Music,
Same with Games,
Same with BBS,
Same with The internet,
Same with Email,
Same with Filesharing,
Same with Planes,
Same with Spaceships

Technology becomes popular, businesses see new markets to leverage, the market becomes saturated, the lowest common denominator becomes dominant, new technology is created to get away from the lowest common denominator and the cycle repeats

There definitely seems to be some truth in this.

Software Sucks!

Filed under: Issues — dublindan @ 12:44 pm
Tags: , ,

Yes, thats right. Software sucks. It sucks big time. Its probably always sucked. At the rate we’re going, its always going to suck.

How does it suck? Well, its…

  • unreliable. By this I mean its buggy, unstable, clunky.
  • insecure. There are so many exploits available, its just not funny anymore.
  • bloated. Too many large applications are giant monolithic messes.
  • hard to extend. Usually. Unix pipes are nice, but they don’t apply to GUI applications. Some programs provide mechanisms to be extended, but theres no standard way of doing this.
  • slow. Programmer time is more expensive than computer time, so programs tend to be written in less efficient ways that makes it easier for the programmer and the computer picks up the extra weight. This is fine, but with the shift towards multi-core, the computer can’t keep up as well anywmore because concurrent programming is hard.

Why does software suck though? Because…

  • Programming is difficult.
  • Interoperability sucks.
  • Code reuse is difficult.
  • Concurrent/multi-core programming is difficult.
  • As code gets larger, complexity (and therefore bugs) creep in.

But why do these things happen???

  • Programming implies sequential steps where ordering matters. Get the order wrong and the code misbehaves.
  • Code reuse is dificult because usually code is too specific to be easily reused. Mainstream languages don’t make writing generic reusable code terribly easy.
  • There are no easy to use, global means of interoperating between programs, so instead of using existing programs to implement functionality, we usually rewerite it.
  • Manually managing concurrency is hard! Compilers are not very good at automating concurrency.

In his paper, No Silver Bullet, Fred Brooks states:

there is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity

So, according to Brooks, software development will never significantly improve and software therefore will always suck.

I believe he is wrong. In this blog, I will try to explain why.

Theme: Rubric. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.