(Background: I have a chronic pain condition, and it is extremely painful for me to do any sort of repetitive fine motor activity, including writing and typing. I earned an undergraduate degree in math with quite little handwriting, and I'm currently a graduate student.)
Unfortunately, I've never been able to find any one solution or approach to replace the work that many people do with pencil and paper, but there are lots of partial solutions that work for different situations and types of mathematics. Here are some of the ones that I use and which, based on your description, might be applicable.
Getting really proficient at mental math. I think you've already done a lot of this, so all I'm going to say is that I can do a lot more math in my head than I would've believed was possible pre-disability. It just takes a lot of practice. Of course, it doesn't work for everything; some calculations just require remembering too many things at once.
Speech-to-text. If you have clear speech, then a speech-to-text system is potentially very helpful. (I use Dragon NaturallySpeaking.) Maybe you already use one for general writing and computer use. If so, then you have almost certainly noticed that they are not designed for mathematics (or, for that matter, computer science), so some additional software is necessary in order to do math. I use a system based on NatLaTeX to dictate all of my formal mathematics, including anything in that I'm going to turn in for my coursework. Basically, NatLaTeX defines a speakable form of many common LaTeX commands, including everything you need for most mathematical expressions. Using a custom vocabulary in Dragon, I can dictate a plain text file containing this NatLaTeX source. I then use in scripts from the NatLaTeX project to transform my dictated text into actual LaTeX source, which I can then compile into nicely typeset mathematics using a standard LaTeX compiler. (Actually, I use a batch file to automate the process.) Just as a note, I have made several modifications to NatLaTeX in order to optimize it for mathematics (the original author was a physicist) and to adjust for changes in LaTeX. Feel free to contact me if you want a copy of the modified scripts. I do eventually intend to post them somewhere online, but I need to spend some time updating the documentation first (and that's really hard to justify spending time on it while I'm preparing for comprehensive exams!).
The big advantage to a dictation system like this is that you get to go through the process of formally presenting your work, which is really helpful for checking understanding and practicing proof writing. Disadvantages include a steep learning curve and not being able to see your work (typeset, at least) in real time. You also have very limited choices in text editors because Dragon will only "play nice" with a couple of them.
Programming languages and computer algebra systems. When you actually need to do calculations, plot functions, etc., it is hard to beat a good computer algebra system. There are lots of choices out there, and I think the choice of which one to use ultimately comes down to personal preference and perhaps compatibility with whatever assistive technology you use. Of course, you still face the problem of how to handle getting input to that computer algebra system. Typing with one finger on an on-screen keyboard sounds rather slow and tedious. Here are a few alternatives you might want to look into.
If you have head and neck movement, a head pointer is one option. I sometimes use one that actually marketed as a gaming device called TrackIR. (Gaming peripherals are much less expensive than assistive technology peripherals!) You can use this to type on an on-screen keyboard or to interact with the input panels found in many computer algebra systems. For mouse click, you could use a switch with your finger or a dwell/hover click.
Eye tracking is a technology that has recently become much more affordable due to relatively new consumer-level devices marketed for gaming applications. Just a couple months ago, I got an Tobii EyeX eye tracker, and it has been great! I use it with a simple mouse emulation script and Dasher to write code in Sage. Dasher is really cool, by the way, and quite good for text entry with low-precision input devices like eye trackers. It's also much faster than most on-screen keyboards. Just as a warning, the EyeX is not intended as an assistive device so you do have to do a some software configuration in order to make it do what you want it to do. But you're studying computer science, so I don't think that should be a problem for you. (FreePIE
, OptiKey
, and Dasher
are all good pieces of free software to look up and consider for use with the EyeX
.)
The big advantage to computer algebra systems is that you can do all of the numerical calculations and tedious symbolic manipulations without needing to ever write down a single number. The disadvantage is that hiding all of the details can sometimes hinder your conceptual understanding.
Those are the main strategies I use. I hope something here can help you out, too.
EDIT:
There has been a request for some examples of what NatLaTex can do, so here are a couple of different examples pulled files on my hard drive.
Discrete Math Example:
NatLaTeX Input (dictated with Dragon)
Given a poset "(P, precedes)", a collection of linear extensions "{calligraphy R } equals left curly brace precedes sub one, precedes sub two, low dots, precedes sub k right curly brace" is called a ``realizer'' of "P" if "precedes equals intersection of sub {i equals one } to the k precedes sub k", where each relation "precedes sub i" is interpreted as a set of ordered pairs and "intersection of" is set intersection. Equivalently, "{calligraphy R }" is a realizer of "P" if, for all "p, q in P", "p precedes q" if and only if "p precedes sub i q" for all "one less than or equal to i less than or equal to k".
LaTeX Output
Given a poset \( ( P , \prec )\), a collection of linear extensions \(
{ \mathcal R } = \{ \prec_1 , \prec_2 , \ldots , \prec_k \}\) is called
a ``realizer'' of \( P\) if \( \prec = \bigcap_{ i = 1 }^k \prec_k\),
where each relation \( \prec_i\) is interpreted as a set of ordered
pairs and \( \bigcap\) is set intersection. Equivalently, \( { \mathcal
R }\) is a realizer of \( P\) if, for all \( p , q \in P\), \( p \prec
q\) if and only if \( p \prec_i q\) for all \( 1 \leq i \leq k\).
Analysis Example:
NatLaTeX Input (dictated with Dragon)
begin theorem [Monotone Convergence Theorem]
Let "left curly brace f sub n right curly brace sub {n equals one } to the infinity" be a sequence of nonnegative measurable functions with "f sub one less than or equal to f sub two less than or equal to low dots less than or equal to f sub n less than or equal to f sub {n +1 } less than or equal to low dots" and "limit of sub n f sub n equals f" (pointwise). Then, "f" is measurable and
@begin{equation}
limit of sub {n right arrow infinity } integral f sub n d Greek mu equals integral limit of sub {n right arrow infinity } f sub n d Greek mu equals integral f d Greek mu
@end{equation}
end theorem
LaTeX Output
\begin{theorem}[Monotone Convergence Theorem]
Let \( \{ f_n \}_{ n = 1 }^\infty\) be a sequence of nonnegative
measurable functions with \( f_1 \leq f_2 \leq \ldots \leq f_n \leq f_{ n
+ 1 } \leq \ldots\) and \( \lim_n f_n = f \) (pointwise). Then, \( f \) is
measurable and
\begin{equation}
\lim_{ n \rightarrow \infty } \int f_n d \mu = \int \lim_{ n
\rightarrow \infty } f_n d \mu = \int f d \mu
\end{equation}
\end{theorem}