Designing a Calculator

27 May 2009

If you follow me on Twitter (@hammerdr) or Facebook (hammerdr@rose-hulman.edu) then you may be aware that my summer goal is to become better at user interface design. In particular, I want to become better at Desktop Application GUIs. I believe that the best way to learn is through both study and application. So, Iím starting simple to get the hang of application development. Also, Iíll try different development languages, APIs and IDEs. The first application that I plan to develop is a calculator built in .NET (I think).

A few weeks ago, if someone had asked me if I should be focusing on application development and user interface design from that perspective, I would have said, ìNo.î The reason is that I believe web applications are the applications of the future. With Google Chrome able to download web applications to the desktop and web application frameworks become more and more powerful, the complex web application has become more a routine part of the computing experience. There are several benefits to web applications that I wonít explore, at the moment. So, naturally, I figured that focusing on HTML, CSS, Javascript, DOM, etc. were the future. Since Iím a forward-looking type of guy, I wanted to better myself in those areas. However, a friend and team member of mine, Chandler Kent, showed me the real future of application development recently.

In anticipation of our upcoming project next fall, Chandler showed me 280Slides.com and 280Atlas.com. These two applications are significantly progressing the design of web applications. 280 North is really breaking through the limitations of a web-based application and presenting an entirely new way to create a website. Instead, websites could now become true applications that look and act like a desktop application. This is significant and profound, especially for me. Now, Iíve realized that I need to practice UI design (Iím terrible at it) and desktop-style application development.

So, on to developing a calculator. Iím not going to try to reinvent the wheel, so to speak. This is a simple calculator application. People expect calculators to work in a certain way and the parameters for a calculator are fairly straight forward. However, there is a bit of user interface design that Iíd like to explore.

First, we have the Microsoft Calculator that comes bundled with Windows 7 RC1. This is the simple mode that the calculator starts up with, by default. This is how most people would expect a calculator to work and to look. There is the 3x4 grid of standard buttons that include the numbers 0-9 and the period. The buttons around the calculator indicate actions that manipulate the numbers. There are a few problems with this design. First, the top row of buttons do not indicate meaning. MC, MR, MS, M+, M- are all functions that appear throughout the application domain of calculators. However, despite being an engineer and using calculators extensively, Iíve never known their use. A better design with more descriptive buttons or even hover-descriptions would help tremendously. In terms of functionality, the Microsoft calculator meets the needs of 90% of applications and 90% of users. This is the functionality that I want to target. But, I want to explore some other calculator designs.

Google has a built-in calculator. This calculator is embedded into the Google search feature that the company provides worldwide. This is a very different user interface approach to calculations. It is a very expressive, command-line-esque calculator that provides more functionality than the Microsoft Calculator. I find this expression-based calculator to be easier to use. However, after asking a couple of non-computer people, Iíve found that they find the button interface to be useful. However, if they ever need to do complex calculations, they would rather pick up a Texas Instruments TI-89.

A TI-89 is a very powerful hand-held graphing calculator that can perform many functions that the Microsoft calculator and the Google calculator cannot. While the functionality is not entirely important in my design decisions, the fact that people prefer this is certain situations is interesting. People like it because of the graphing capabilities and because that it has both buttons and typing feedback (what you type shows up on the screen as you type it). Also, while the buttons are numerous, it seems to clearly indicate which buttons the user needs to press to accomplish a task.

So, I think that a calculator that combines all of these elementsóthe basic functionality of the Microsoft Calculator, the expressiveness of the Google Calculator and the typing feedback, expression-editing, clear buttons of the TI-89.

This project will, of course, be open source. I will be using Git as my source code repository. After I finish my development of the project, I will release the project itself for development (though I donít see why anyone would pick it up. If they do.. more power to them). As far as the language, I think that the built-in .NET widget library is going to be infinitely useful for this project. So, I think Iím going to use that unless I can find a sweet Ruby or Python GUI Toolkit (Pythonís looks pretty bad. Shoes for Ruby seems pretty cool, though).