I have discovered that the software I’m working on right now falls into a particularly interesting category.
Pre-emptive note: I mean no disrespect for blind people or people with visual problems.
There are software that are basically machine-machine. These software programs talk almost exclusively with other programs with nary a human interaction. Stock software, scheduled financial server programs, batch data upload programs.
Then there are software that’s basically made for human interaction. Facebook, Twitter, mobile map software, image/video editing software.
My software sits somewhere between them. I’m going to use Microsoft Excel as the example because that’s what my software is related to.
Microsoft Excel is essentially a visual software. Sure you can enter data into cells and the spreadsheet is basically rows and cells of data. But it’s geared for a human to understand that data, and to interact with that data. Excel merely exists to facilitate that interaction.
Short digression: I was reading up on Excel user manuals (yes, I do that) and it turns out that the earliest spreadsheet software were effectively command-line. We’ve come a long way since then, huh?
My software is a spreadsheet library/component. Basically it allows a program to create and manipulate spreadsheets without any user interaction. More specifically, without any visual interaction.
That monthly revenue report you need? Have the data uploaded first (probably the machine-machine type of software doing this). Then use a spreadsheet library to create that report, styling rows/columns/cells or add a chart.
And then the final product, the spreadsheet itself is handed over to a human.
I want you to think about this for a second. The spreadsheet library is working blind.
Teaching the blind to paint
Imagine teaching a blind person to paint a tree.
The blind person has no idea what green or brown looks like. He doesn’t even know what a tree looks like. But you tell the blind person that this container has green pigment and that container has brown pigment.
Then you teach the blind person to hold the paintbrush this way, and apply the green pigment like that, and to have the paintbrush come into contact with the canvas in this way. And with practice, leaves start to appear. Or some semblance of it. You do the same with the tree trunks and branches, using the brown pigment.
The blind person still has no idea what an actual tree looks like, so he doesn’t even know if what he painted is accurate. But he finishes his painting and hands that painting off to someone who can actually judge the painting.
That’s what I feel my software is doing. This is especially true when I have to design function interfaces that allow a developer to do visual things.
Like insert an image.
Oh I can let you insert an image. No problem. Give me a file name.
Where do I position it? Oh.
With respect to what on the screen? Oh yeah, what screen?
How do I know if it’s large enough? Oh yeah, can’t see the image.
Some things are simpler to understand. Like “I want that cell to have a purple background.” I’ll let you assign a System.Drawing.Color structure, or assign a hexadecimal value, or a theme colour.
Keep in mind that the software doesn’t care if you assign #00FFFF or #FFFF00.
So that’s my experience with my spreadsheet library. I’m working on a word processing library right now, which is even more insane.
While spreadsheets have styles, word processing documents live on styles. Word processing software like Microsoft Word or LibreOffice Writer will be useless if they don’t allow the user to bold this word or italicise that sentence or underline that heading.
Microsoft Office is about USD 300+, which is a visual software. The “blind libraries” commercial software cost about USD 999. And that’s the low end price.
Did you know that mine is open source and free? Check out SpreadsheetLight (there we go, self-promotion).