In learning foreign languages, an effective strategy is to write down any unknown word or idiom in the language you are learning on one side of a card and the native-language equivalent on the other. Thus in French you might write tête on one side of the card and head on the other. As the stack of cards grew, you would shuffle them periodically to keep from learning the list and go through the stack to see if you could generate the reverse side of each card on cue. Reliably learned words could then be discarded from the stack.
A program to generate flash cards on computers should be easy, but I don't know of one.
Rather, when my tutees have asked me about a word in a given sense, I have attempted to create a definition of the word in English along with up to a half dozen examples of its use, ideally so that the word literally jumps into the memory. These flash card files are the results of my efforts so far.
They are repeated several times on a sheet so they could be handed out to students in half-sheet form.