Well the docs finally said it, I need to take it easy on my wrist for a few months. Being that I'm a .NET Developer this could end my livelihood for a little while, something I'm not anxious to do. That said, are there any good handsfree options for developers? Anyone had success using any of the speech recognition software out there?
POSTSCRIPT: I've recovered my arm again to the point where two-handed programming isn't a problem. Dragon Naturally speaking worked well enough, but was slower, not like the keyboard where I was programming faster than I thought.
It's out there, and it works...
There are quite a few speech recognition programs out there, of which Dragon NaturallySpeaking is, I think, one of the most widely used ones. I've used it myself, and have been impressed with its quality. That being a couple of years ago, I guess things have improved even further by now.
...but it ain't easy...
Even though it works amazingly well, I won't say it's an easy solution. It takes time to train the program, and even then, it'll make mistakes. It's painstakingly slow compared to typing, so I had to keep saying to myself "Don't grab the keyboard, don't grab the keyboard, ..." (after which I'd grab the keyboard anyway). I myself tend to mumble a bit, which didn't make things much better, either ;-). Especially the first weeks can be frustrating. You can even get voice-related problems if you strain your voice too much.
...especially for programmers!
All in all, it's certainly a workable solution for people writing normal text/prose. As a programmer, you're in a completely different realm, for which there are no real solutions. Things might have changed by now, but I'd be surprised if they have.
What's the problem? Most SR software is built to recognize normal language. Programmers write very cryptic stuff, and it's hard, if not impossible, to find software that does the conversion between normal language and code. For example, how would you dictate:
if (somevar == 'a')
{
print('You pressed a!');
}
Using the commands in your average SR program, this is a huge pain: "if space left bracket equal sign equal sign apostrophe spell a apostrophe ...". And I'm not even talking about navigating your code. Ever noticed how much you're using the keyboard while programming, and how different that usage is from how a 'normal' user uses the keyboard?
How to make the best of it
Thus far, I've only worked with Dragon NaturallySpeaking (DNS), so I can only speak for that product. There are some interesting add-ons and websites targeted for people like programmers:
- Vocola is an unofficial plugin that allows you to easily add your own commands to DNS. I found it essential, basically. You'll also be able to find command sets written by other programmers, for e.g. navigating code. It's based on a software package written in Python, so there are also some more advanced and fancy packages around. Also check out Vocola's Resources page. (Warning: when I used it, there were some problems with installing Vocola; check out the newsgroup below for info!)
- SpeechComputing.com is a forum/newsgroup with lots of interesting discussions. A good place to start.
Closing remarks
It seems that the best solution to this problem is, really:
- Find ways around actual coding.
- Try to recover. I'm somewhat reluctant to recommend this book, but it seems to work amazingly well for people with RSI/carpal tunnel and other chronic pain issues: J.E. Sarno, Mindbody prescription. I'm working with it right now, and I think it's definitely worth reading.
I dictate VB.net and TSQL using Dragon NaturallySpeaking 10 Professional. VB.net is inherently closer to a "spoken" language, but I don't see any reason why it couldn't work for C# or others. I start with a completely empty vocabulary, and build it from scratch to suit my needs (which is why I use the professional version).
Here's the basic steps (this assumes you have already created and trained a user):
- Create a new vocabulary based on "Base General - Empty Dictation".
- Don't have it scan your documents or email.
- Add lists of keywords with pronunciation specific to your programming language (Dim, ByVal\by-val, etc.).
- Create a .txt document that contains all of your code minus comments.
- Harvest words from this document and add them with pronunciations.
- Use the document to train the vocabulary's language model.
I'll write up something with more detail when I get a chance if anyone is interested.
Edit:
Here's how to dictate SQL code. The word list created here can be included in other vocabularies if you are a database developer.
Check out Using Python to Code by Voice.
Another idea is to find another good developer to pair program with. It worked really well for me. I get to rest my hands without necessarily slowing down, end up producing better quality code - or at least not having to review as much of it.
For all Linux folks, I'd like to share some links.
Let's begin from Simon - open source speech recognition software:
- Simon listens - non-profit organization for research and apprenticeship
- simon: Open-Source Speech Recognition - related blog
- HTK speech recognition toolkit - engine used internally
- Open-Source Large Vocabulary CSR Engine Julius
- Not on shlashdot about Simon fetures
and some other:
- Gnome Voice Control
- https://wiki.ubuntu.com/SpeechRecognition
- http://en.wikipedia.org/wiki/Speech_recognition_in_Linux
- VoiceCode
and
I know I am little bit off-topic here, and know nothing about voice recognition software; however, you might find it useful to investigate changing your keyboard to the Dvorak layout, which I have heard is a lot kinder on the wrists.
I tried Dragon a couple of years ago and it was a nightmare of mish-mashed words and phrases - not recommended. I understand that it was the best thing going at that point in time so I'm not optimistic.
As a fellow sufferer, recommendations would be:
- Find a job that demands as little OT as possible
- Try a variety of keyboards. In my experience, working on a laptop full-time worked best.
- Start a program of low-moderate stress weight lifting.
As to the wrist issue, I learned using mouse with both hands some 10 years back.
It's surprisingly easy, and relieves the tension substantially. Currently, I'm using a laptop and pressing the touchpad button is straining my thumb.
Be careful. These problems can last way longer than one would think.
p.s. you might add a tag 'ergonomics' or something - the title can be seen to be about developing for voice recognition.
The gold standard for programming by voice is VoiceCode. If I remember correctly, they supports C++ and Python.
As mentioned above, Dragon Naturally Speaking is the best speech recognition software out there, however Microsoft Speech Recognition isn't far behind and comes bundled with Vista.
Vocola has recently been ported to MSR, and has a .Net integration feature.
A few tips
- Learning to dictate takes some time. Just because you can speak doesn't mean you know how to use speech recognition software
- Getting proficient with a mix of SR and keyboard/mouse is much easier than full hands-free operation.
- Use CodeRush or equivalent to type less.
I started using my left hand for the mouse, this not only help me a bit, but allowed me to use my right hand more freely, if you write a lot of stuff dwon while you code this helps you a lot.. you can scroll and write down at the same time...
When my problems began i put a water bag under my wrist, i loved it! the bag i had was perfect it was long and i put it before the keyboard so i could rest my wrists there.... until one day i step on it...
Dragon Naturally Speaking Preferred and Vocola. Autohotkey to automate as much as possible. Not easy to program though. I tried; almost impossible. Check out John Sarno's Healing Back Pain. It made me better. I'm back to programming all day!
Another bit off-topic here, I've found that splitted keboard into two parts and other special keyboards helps, just check-out kinesis. I collected info about such hardware at diigo:
- http://www.diigo.com/user/wierzowiecki/keyboard%20ergonomics
- http://www.diigo.com/user/wierzowiecki/keyboard%20rsi .
What about direct links:
- http://www.fentek-ind.com/ergo.htm - different stuff
- http://www.kinesis-ergo.com/contoured.htm - Kinesis Advantage Contoured Keyboards (Programmable!)
- http://www.kinesis-ergo.com/foot.htm some foot switches can be connected to keyboard (for example for window swiching)
- http://www.kinesis-ergo.com/freestyle.htm - So far, I've found that even using two normal keyboards is better than one, so I think that splitted freestyle might work as well
- http://www.typematrix.com/ - another solution
- http://www.maltron.com/ - sometimes when one hand suffers more than other typing with one hand
- http://www.keybowl.com/ - this looks interesting as well
- I believe there are many other interesting solutions
One more thing! Remember about breaks for exercises. Regular exercises (for example small exercise - every half and hour different one) make really really things better !
- http://www.workrave.org/ - this will remind you about breaks ;)
Scott Hanselman uses voice recognition quite a bit.
I used Dragon Dictate in 1996 for the same reason as you. It was slow going, but better than not working. I found it easier to write code by filling 4x8 white board with code and then getting someone else to type it in. Then I used DD to debug.
And while you're at it, you might look at Deborah Quilter's books about RSI. They're very informative.
I can't find a link to one (I did look) but there are keyboards with only 5 keys, allowing you to type with one hand, I assume that you only have one bad wrist.
If I find a link I'll try to message you.
来源:https://stackoverflow.com/questions/87999/voice-recognition-software-for-developers