(Sorry for my english, feel free to correct me.)
There are skills that can be trained very fast via exploits. E.g. one can order lots of jobs and remove them once they validated. Or use danger rooms to train military skills.
Those skills, obviously, were not intended to be trainable that fast. Surely, it's possible to close all the exploits, but it will reqire a lot of various patches here and there. And those !!scientists!! will keep
discovering new exploits.
Here's a way to greatly reduce effectiveness of using the exploits for rapid training. It shall have almost no effect on gameplay or FPS. And it looks like it's easy to program.
There shall be limit to the rate of gaining experience. For example, no dwarf shall gain more then 1000 xp per month. The limit shall be just above the rate of normal xp gaining.
I think, it should be made like that: at 1st of every month game sets variable "dwarf.xpLimit" to 1000 (each dwarf has his own variable). Every time dwarf gains experience, number of xp gained is reduced from "dwarf.xpLimit". If "dwarf.xpLimit" is less than zero, dwarf gains no xp until 1st of the next month.
This rule does not apply to mood-related experience, of course.
There are many other ways to use the idea, but I don't have any reasons to pick one. Examples: limit xp gain for different duration (a season or a day); limit xp gain for every skill separately; dwarfs do gain xp after reaching the limit, but way slower.
I have quite reasonable explanation for the rule. In real life it's impossible to learn things faster than certain speed. For example you are learning a foreign language. It's quite easy to remember 3 new words a day. Not so easy to remember 10, and almost impossible to remember 100. Whatever you do, they just don't fit into your head. The same with any other skill. (Maybe we should make up some dwarven explanation. Something with !!kittens!!)
Criticism is welcome as long as it supports my point