I don't know Mathematica, so I can't quite tell exactly what algorithm is being used in Patrick's code, but I do know that Markov chains are a useful way of generating similar names and are easy to program in common languages. (Patrick may be using Markov chaining - I see a RandomChoice from CharFreqs.)
Basically, analyze a word corpus and create frequencies for letter pairs, considering word start and end as letters for convenience. Then, starting with a word start, choose letters randomly based on the frequency of the pairs where the first letter in the pair is the last letter in your current word. Continue until a word end is chosen.
Building frequencies using letter triplets rather than letter pairs can get better results, where pairs may choose unlikely match-ups such as "cth", taking e.g. a"ct" as common, and "th"e as common. Longer tuples can be chosen but a slight adjustment of word start and end strategy is needed.
Basically, analyze a word corpus and create frequencies for letter pairs, considering word start and end as letters for convenience. Then, starting with a word start, choose letters randomly based on the frequency of the pairs where the first letter in the pair is the last letter in your current word. Continue until a word end is chosen.
Building frequencies using letter triplets rather than letter pairs can get better results, where pairs may choose unlikely match-ups such as "cth", taking e.g. a"ct" as common, and "th"e as common. Longer tuples can be chosen but a slight adjustment of word start and end strategy is needed.