VoiceGem

How to dictate long Java identifiers without the shift key

Java convention favours long explicit identifiers, which makes it the language where dictating names saves the most keystrokes. Saying “camel case find active users by department” returns findActiveUsersByDepartment, replacing five internal capitals with five ordinary spoken words and no shift presses at any point in the identifier.

An eight-word method declaration costs about 9.2 seconds on the keyboard against about 2.9 seconds aloud. (sources: Dhakal, Feit, Kristensson & Oulasvirta, “Observations on Typing from 136 Million Keystrokes”, CHI 2018, 168,000 participants, 136 million keystrokes; Yuan, Liberman & Cieri, “Towards an Integrated Understanding of Speaking Rate in Conversation”, Interspeech 2006, 2,438 American English telephone conversations (Switchboard corpus). The speech figure is conversational rate, not a measured dictation rate — no such measurement exists.)

What lands in your editor
public void findActiveUsersByDepartment()

This tool runs entirely in your browser. Nothing you type is sent anywhere, stored, or logged.

Step by step

  1. 1

    Say the modifiers first

    Speak “public”, “static” or “final” directly. Java keywords are not in VoiceGem's lookup table, so they pass through untouched.

  2. 2

    Say “camel case” for a method or field

    Speak the command then the words. The run consumes every plain word until a symbol arrives, so a six-word method name is one command.

  3. 3

    Say “pascal case” for a class or type

    Switch commands for a type name. Java's convention separates the two cleanly by what kind of thing you are naming.

  4. 4

    By hand

    Type the name with shift on every internal capital. A six-word method name is five shift presses mid-word, which is the cost Java's own style guide creates.

Java's style guide creates the exact cost VoiceGem's casing commands remove

Explicit naming is Java house style, and it is a good style: findActiveUsersByDepartment tells a reader what the method does without a comment. Producing it by hand means five shift presses in the middle of a single word, and doing that hundreds of times a day is the specific fatigue this whole product category exists around.

One casing command replaces all five. The Deterministic Pass consumes the run of plain words after the command and applies the capitalisation, so the six-word name costs six spoken words and no modifier keys — which makes the explicit name as cheap as the abbreviated one.

Where the manual way breaks

IntelliJ IDEA generates getters, setters, constructors and overrides complete with names, and nothing said aloud competes with that. Generation is the right tool for generated code.

New domain names are where generation has nothing to work from. The first time a service, a coordinator or a strategy class is named, there is no source to generate from and the name is long by convention. Dictating it in VoiceGem turns five shift presses into five words.

Doing this somewhere else? casing converter, on your own input, dictating Javadoc comments specifically, the same thing for dictating Java methods, or naming things in Go by voice specifically.

Common questions

Around three words. Below that the shift presses are cheap; above it each additional word is another modifier press mid-word that dictating through VoiceGem avoids entirely.

Yes, and it is faster for getters, setters and overrides. Use generation for generated code and dictation for new domain names.

Constant case. It uppercases each word and joins with underscores, which is Java's convention for static final fields.

Convert a long Java method name and see the shift presses it replaces.

Open the tool