I remember a "Cub Scout" meeting from when I was a small child. I think it must have been the year 1992 or so and the topic of the day's discussion was, "What will life be like in the 21st century?" The scout leader spoke about how people were excited about the potential for technology to make our lives easier. She supposed that in the future, we might have a machine to which you could simply say, "Make me bacon and eggs for breakfast", and the machine would do it.
In the present day, we can see that 21st century technology has done no less than completely change the way we think about many aspects of our lives. However, I believe that few people think of their computer or phone as a servant that obeys commands at this point. Our thinking, even among programmers, tends to focus around the computer, not about the person who wants to use the computer to accomplish a task.
Yukihiro Matsumoto, the creator of the Ruby programming language, said that "In fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves."
This quotation really touches a nerve for me because I think of the computer as a tool that I program to do something for an associate. However, the goal of being able to think of computing this way seems quite far off when I find myself struggling to get the computer to do what I want, hoping that the computer will do what I want, anthropomorphizing the computer into an unreasonable brute who refuses to do what he's told to do, or worse!
Last weekend, I purchased some new hardware to upgrade my computer. I like to run a dual-boot setup with Ubuntu and Windows. For reference, I used Ubuntu 12.10 and Windows 8. I did notice that Microsoft finally programmed this new version of Windows to not wipe out the LINUX bootloader on my system; this is one of the few things that I really like about Windows 8. Ubuntu continues to be tricky to configure to properly use NVIDIA drivers (which really needs to change, especially with Valve now pushing Steam for LINUX).
I know that the new "Metro" interface for Windows 8 has been subject to much derision. I've heard people complain that it "dumbs down" the interface". Others just complain that they don't like learning a new interface. My impression is that it's like running a phone or tablet interface on a desktop computer. (By the way, my desktop computer does not have a touchscreen.) However, the worst feature of Windows 8 I've encountered so far is Windows Updates.
I had to wait for over an hour as the screen pictured to the left would appear and reappear on the screen. I am not going to give Microsoft a blanket condemnation for pushing Windows Updates because, after all, we do know that previous versions of Windows that did not update automatically we frequently not updated and had security vulnerabilities.
It would not be constructive of me to point out a problem and not give any analysis or suggest a solution, so here are my thoughts about how this could be better. I was going to start out by comparing Windows Updates "blocking" the computer with synchronous XHR "blocking" a web browser as described in Douglas Crockford's "Loopage" talk. However, when I think about it, I realize that when we talk about updating a computer's system software, this is one of the few cases where it actually makes sense to "lock" the whole computer.
Here's how I break down the problem.
First, like the programmers Matsumoto spoke about, the the people who designed Windows Updates were obviously thinking just about the computer updating itself; they were not thinking about a person using the computer to accomplish something. As a matter of fact, the first thing that I thought to myself when I saw this screen was, "It's a good thing that I don't need this computer to do anything important right now!" Everything here is all about the computer.
Second, Windows Updates takes control of the update process away from the user. In Windows 9X, there is an automatic scan of the hard drive that takes place when the computer boots up if it didn't cleanly shut down. This is not a bad idea, and the implementation is great! The scanning program begins and the user can press a key to abort the scan if he needs to do something important at the expense of the scan not happening right away. I like this approach; it takes into account the user's needs while providing a mechanism for the computer to maintain itself.
Contrast this with Windows Updates in Windows 8. On the log-in screen, there may be a message that says, "Windows will restart itself in two days to install updates." If I navigate to the power menu, the option will say "Update and Restart". There is no option to restart without updating. You could say that it is not allowed; it is prohibited. Suppose that I need to restart my computer but don't want to install Windows Updates at this time. It won't let me. It's like Microsoft is a government agency regulating how I operate my computer. I'm reminded of the old joke about Windows 95: "It says 'My Computer' because Bill Gates thinks that me putting Windows on it makes it his!" Sometimes, the computer must give us some guidance about how to accomplish a task, but this is the computer telling us what to do for its own purpose.
Third, I hate the language that they use in Windows Updates. The system takes away control of my computer from me, and then it tells me what to do. This may not seem like such a big deal, but think back to that Cub Scout meeting in the early 90s. We imagined that we would tell machines to do things for us. I'm waking up in the year 2013 to a machine telling me what to do. "Do not turn off your computer." I sometimes handle that situation by hitting the reset switch and booting Ubuntu. The designers of Windows Updates fashion themselves in a position of authority to tell me what to do with my property. Absurd!
In conclusion, I feel that this iteration of Windows Updates serves as a great example of how not to program the computer. To make software that people will want to use, we must make the software first and foremost about what the user wants to do. If we want to make them use it a certain way, they will find a way to use it their own way. We must write our software so that the user is in control and the user feels in control. I hope that Microsoft provides users with a much improves Windows Updates experience in the next version of Windows. Users deserve it.