Posts Tagged future

Programming in a keyboard-less world

Just the other day, my brand new Transformer Prime tablet arrived.  Aside from being a high quality tablet (quad core processor, one of the very first to offer Android 4.0), it is well known for having a docking station accessory, complete with a keyboard, that essentially transforms it from a tablet to a 10 inch net-book.  My phone, a HTC G2, also has a fold out keyboard, as did its predecessor, my old G1 phone.  So I think its safe to say, I am a fan of physical keyboards.  Sure, voice recognition can be good for some things, and Swype produces a nice on screen keyboard, but if I want to type anything of substance, I’m much more comfortable typing it on a nice hard QWERTY keyboard with actual buttons I can press.

Which makes the fact that I’m writing this post a bit ironic.

There was an interesting podcast last week from the IEEE about the keyboard going the way of the typewriter.  Of course I was rather dismayed by the thought.  Its not just that oncreen touch keyboards will replace them, but that new input devices, such a stylus with handwriting recognition or a microphone with voice recognition, will be the computer input of the future.

I would argue we are nowhere close to that with today’s technology, at least from where I stand.  Being that my Transformer keyboard hasn’t arrived, I originally tried to “write” this blog post with my tablet’s “voice keyboard”, and I couldn’t get through the first paragraph without getting frustrated and giving up.  I haven’t really tried using a stylus recently, but handwriting such as mine is typically so bad even I have trouble reading it, so I won’t begrudge any computer program which can’t read it (and before you try to say that’s just because I’m so used to keyboards I’ve lost the ability to write neatly, my grade school teachers would be quick to point out I never had that skill, even before I learned to type).  On the other hand, I can type at a reasonably fast pace with pretty good accuracy, so there is no debate on which method is more proficient for me.

But one argument made on the podcast was that kids today will likely grow up so used to voice recognition and handwriting recognition that they may view keyboards as obsolete.  That they may offer a technically superior method of writing fast will not matter to them.  After all, one could easily argue that command line interfaces can be much more productive that GUIs for many tasks, but outside of hard core hackers, the world has largely moved away from them.  Even software developers have largely embraced tools such as Eclipse as an alternative to hacking on the command line.

And I can’t deny that there are some areas which keyboards are not very good at.  For instance, look at writing math problems.  Math is typically full of Greek letters, superscript/subscripts, and other things which are just plain hard to type.  Sure, there are usually obscure keyboard shortcuts for them, and specialized software for it (such as Mathematica), but no real general purpose solution.  When I was trying to take notes for the Stanford Machine Learning class on Evernote last year, I can’t tell you how much time I wasted trying to come up with notations for random symbols that kept on coming up.

And of course more creative endeavors such as building “mind maps”, that is just hard to do without a more free flow input format.  That’s why many still argue that pen and paper is a superior note taking device.  Keyboards are great for writing lines of text using a small set of well known characters, but are rather limited beyond that.

So as keyboard-less input becomes more and more mainstream, how will that affect computer programming?  Today, programming is a perfect example of lines of text optimized for keyboard input.  Using voice recognition to write a Java program?  How insane would that be?  “For, begin paren, double, no capital ‘D’ double input colon input-capital-V-vals, end paren, open bracket” instead of just typing:

for (Double input: inputVals) {

Case sensitivity, the frequency of special characters and common symbols, terse variable names, camelCase, none of that will work with voice recognition input.  Computer programming is clearly not a place where you want creative, free form input, but you want to heavily restrict it to what are legal values.

Or is it?

Will computer languages evolve to utilize the advantages of newer input methods.  Will they start to incorporate more free-form writing rather than just plain text?  Will it even be possible to come up with languages like that?  Or will future freshman computer science students have to spend hours learning ancient typing techniques that have become obsolete outside of writing programs?

I suppose time will tell.

,

5 Comments

AI and the Future of Programming

I was listening the latest Java Posse roundup recording on the “Future of Software” in which the topic of AI came up, and couldn’t help but chime in on a few things.

The basic question being posed was, will computers eventually become smart enough to write their own software.  Some argued no, that there are fundamental limitations on how computers work that will prevent them from, say designing usable user interfaces.  Others argued yes, a sufficiently advanced computer could do anything a human being could do.  Still others argued that they already were writing their own software, at least relative to computer programming was fifty years ago.

My answer, yes, and no.

Yes, I would agree that barring a fundamentally dualistic nature of mind and matter, a computer can (theoretically at least) do anything a human can (Ray Kurzweil has plenty to say on that subject if you are interested).  So given sufficiently advanced technology, you could develop a computer that does everything we do.  Yes, that technology will likely have little in common with today’s computer chips, as the human nervous system has a fundamentally different architecture than modern day computers.  But that doesn’t mean its not possible to develop a computer system based on those architectures (though I suppose one could argue that then the term ‘computer’ wouldn’t be the best description of it, as arguably ‘computing’ isn’t what it would be doing).

However, just because we could do something doesn’t mean we would do it.  What exactly would be the point of designing a computer identical to a human being?  We’ve got too many real life human beings running around already.  What we would want would be a computer better than human beings.  We wouldn’t be designing them for the hell of it, we would be designing them to solve problems we have.  So certain aspects of human nature wouldn’t make sense to duplicate.  Hatred, as an obvious example.  Panicking in severe situations is another.  And most importantly, freedom of desire.

I’m not going to design a computer program or robot that is going to want to serve its own desires, at least not in the way humans do.  I am designing it to serve my desires.  Sure, given what is said in the previous paragraphs, it should be possible to design a real life Hedonism Bot.  But why on Earth would anyone want to?  To be useful, it would have to be designed to care about its maker’s (that’s us!) desires.  And that brings us to a part of the software engineering process that will have to continue to be owned by human beings; the creation of needs for which the software will be created for.

Even that isn’t as trivial as it sounds.  I don’t care if the automatic software generator is ten times as intelligent as human engineers, its still not going to be able to solve the problem of being given requirements that are too vague any more than its carbon based equivalents could.  In order for it to generate the software, the requirements for that software are going to have to be drawn out.  What is the desired flow?  How should it handle errors?  What special cases is it going to need to handle?  And developing these requirements is going to end up being the programming of the future.  Its probably going to be much more natural than what we write today, just as what we write today is much more natural than the programs written fifty years ago.  But there will remain a human element.

, , ,

Leave a comment