1. A method for generating questions, comprising: providing a user interface or a text editor on a client device for a user to compose a dynamic question template in a first representation of a human readable language; receiving from the client device by a system running on one or more server machines the dynamic question template in the first representation, the dynamic question template having a question, question variables, and question constraints, with or without a correct answer; the system checking the dynamic question template in the first representation for syntax errors according to a query specification language and enabling correction of any syntax error found by the system; the system compiling the dynamic question template from the first representation into a second representation of a first machine readable language supported by a symbolic math engine; the system generating a dynamic question template object of a second machine readable language supported by an object library of the system based at least on the compiled dynamic question template in the first machine readable language, the dynamic question template object including one or more predefined objects from the object library, the generating including: determining whether the question constraints are sufficient to produce a plurality of unique question variants; suggesting at least one change or enhancement to the question; or a combination thereof; the system running one or more simulations of the question; and the system generating a plurality of unique question variants using the dynamic question template object and output from the one or more simulations without further input from the user to thereby improve computer based question generation technologies, wherein each of the plurality of unique question variants comprises a unique variation of the question text incorporating a unique combination of values for the question variables as constrained by the question constraints.