How to dictate Python names without touching the underscore key
Python is snake_case almost everywhere, which makes one VoiceGem command cover most of a file. Saying “snake case max retry count” returns max_retry_count, replacing two Shift-hyphen presses with two ordinary spoken words and no modifier keys at all. Classes take pascal case and module constants take constant case.
A seven-word assignment with a four-word name costs about 8.1 seconds typed against about 2.6 seconds spoken. (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.)
default_connection_timeout = 30This tool runs entirely in your browser. Nothing you type is sent anywhere, stored, or logged.
Step by step
- 1
Say “snake case” for functions and variables
Speak the command then the words. Python's convention covers functions, variables, parameters, modules and attributes, so this single command handles most of a file.
- 2
Say “pascal case” for classes
Switch VoiceGem commands for a class name. Python is one of the few languages where the two conventions are cleanly separated by what kind of thing you are naming.
- 3
Prefix private names with “underscore”
Say the symbol before the casing command. The underscore attaches on both sides, so it binds to the identifier the casing command builds.
- 4
The keyboard route
Type the name with Shift-hyphen between words. A four-word name is three modifier presses mid-word, which is the friction this page exists to quantify.
Python gains more from VoiceGem's casing commands than any other language here
Underscore-separated names are the most modifier-heavy convention in common use. Every word boundary in a Python identifier is a Shift-hyphen press in the middle of a word, and Python asks for that in function names, variable names, parameter names, module names and attribute names.
One command removes all of it. A casing command in the Deterministic Pass consumes the whole run of plain words that follows and joins them, so a five-word Python name is five ordinary words spoken at conversational pace with no modifier keys involved at any point.
Where the manual path breaks
Two-word names are cheap and Python developers type them fluently. get_user is not a problem anyone has.
PEP 8 encourages descriptive names, and descriptive names in snake_case are expensive to type. The predictable result is abbreviation — cfg for configuration, res for result — which trades a moment of typing for a permanent loss of clarity. Dictating in VoiceGem removes the trade, because a long name costs no more to say than a short one.
Doing this somewhere else? our casing converter, dictating Python docstrings specifically, dictating Python functions, or naming things in Go by voice, step by step.
Common questions
Nearly. VoiceGem's snake case covers functions, variables, parameters, modules and attributes; classes need pascal case and module constants need constant case.
Say “underscore snake case” then the words. The underscore attaches on both sides and binds to the name the casing command builds.
No, and you should not. The casing command joins the whole run, so saying the symbol between each word is slower and produces the same result.
Paste a list of names and convert the whole set to snake case.
Open the tool