I've been working with the Rabbit 2000 TCP/IP Kit from Rabbit Semiconductor. This neat little web-server development system is centered around an 8-bit processor with a 20-bit address space. Surrounding it are peripheral chips and related hardware, including an Ethernet connection. Plus, the board fits right in the palm of your hand.
Because I was a hardware designer and programmer in the past, I find this little single-board computer to be simple. It's something that I'm able to easily program, and I understand the entire system from checking out the documentation and development applications. I suspect that most design engineers and programmers with at least a year of experience, or even a college degree and exposure to hardware, will find the system equally simple.
The same didn't hold true, though, when I showed it to my teenage daughter who is only used to a PC and Visual Basic. She's in the beginning stages of a science project in robotics, so dealing with computer and mechanical hardware will be part of her learning experience.
For her, using the Rabbit 2000 TCP/IP Kit won't be simple, at least not initially, because the tools and documentation are geared to a more experienced developer. But she has been quick to pick up ideas in the kit when the information was presented in a less complicated fashion.
One of the first things that she inquired about was the location of the screen and keyboard. After an explanation about the serial connection between the board and PC, and how eventually the system would be connected to any PC via the Ethernet port, she understood how it could be used to control a robot. This complex board, its schematics, and user's manual had moved from being a mystery to something simple.
Simplicity popped up again as we moved from hardware to software. The kit comes with Rabbit's Dynamic C. Moving from Visual Basic to C is a minor feat in itself. But the chore was simplified because the system essentially does away with the complexities of a real-time operating system and presents multitasking services as part of the language extensions.
Dynamic C adds the costate statement to the language. Bracket a block of statements using costate, and a separate thread is created with its own stack. It's a simple and elegant solution for a system that doesn't require the complexities of an operating system.
Of course, there's an operating system hiding under the code, but my daughter and most programmers don't care. It's simpler to deal with a single multithreaded application.
My daughter and I represent the extremes in terms of understanding this system. Luckily, the creators of the kit were able to deliver a product that was simple at more than one level in order to accommodate people with very different backgrounds. Granted, the documentation could use some improvement for novice users, but they weren't the original target of the product. Still, it shows that keeping things simple at various levels can be very desirable. It's important to provide views of a product that are simple for different audiences, especially as the level of complexity in the underlying product increases. This is key as SoC designs become more common.
The benefits of simple presentation are numerous. They range from permitting a greater number of users to easily understand and make use of a product to allowing experts the quick utilization of advanced functionality. A key aspect to multiple levels of understanding is documentation. In this case, I provided the missing piece. But that wouldn't have been possible if the original design weren't simple at various levels.
I would be interested in hearing from those who have tried to keep overall simplicity as a key aspect in their design at various levels. Send me your stories.