Achieving a high score on the Graduate Record Exam (GRE) is a base requirement for entering a graduate program in any major university, including the University of Florida. As an engineer, I found that getting a high score on the verbal portion of the test was more difficult than the analytical or math-based sections. Verbal exams, on both the GRE and SAT, tend to be a major hurdle for students because of the amount of vocabulary that needs to be memorized. Traditionally, the only technique to learn vocabulary words was by using Flash Cards repeatedly for several weeks prior to the test.
In my mind, creating and using Flash Cards was tedious and probably a less-than-optimal way to memorize vocabulary words because of the technology that’s available. I felt there had to be a faster, more efficient strategy. With that thought in mind, I set out to develop my own GRE vocabulary study application.
The result of using the application speaks for itself: I raised my GRE verbal score by over 10% with less than 15 hours of accumulated study time. That amounted to roughly 514 vocabulary words memorized in only 30 days.
Based on my successful use of the tool, I chose to make it publically available at GreatVocab.com and the site now has over 200 active users.
When it came to developing the application I had many options as an experienced computer programmer. I wanted something that was fast and could be easily expanded upon, including the seamless addition of future upgrades and feature-sets.
I chose Microsoft’s Model View Controller (MVC) Framework for these and other reasons.
Great Vocab explored the development process leveraging LINQ and MVC, along with the progressive releases of MVC, from Preview 2 all the way to the current Release Candidate 2. Early in the development cycle the MVC Framework was seen as a high risk foundation, but with time and attention I was able to produce a reliable application using the languages.
Great Vocab was designed to help students like myself to quickly learn SAT and GRE vocabulary words. This was accomplished using a training algorithm which was developed to guide the word selections of users.. To utilize the algorithm the application needs to rapidly pull from an unabridged dictionary with nearly 200,000 definitions while utilizing verbal, tensile, structural and synonym/antonym relationships in the query.
Adding to the technical challenges, I created an automated, in-context feature that gives a text citation relevant to each word as it’s being studied. This feature introduced a new requirement: rapid and frequent database queries to a full gigabyte of referential data.
The first challenge of the application’s development was gathering GRE and SAT vocabulary words and definitions for the database. Here, LINQ proved invaluable in saving development hours as well as some Regular Expression matching patterns.
The dynamic nature of LINQ with the use of a referential DataContext DBML made creating one off console applications extremely quick. That enabled rapid and custom data shaping from various sources into the database.
Using MVC for application development introduced a learning curve at the outset, but returned the investment with interest. Starting challenges included in-form state management, with its characteristic drop of the ViewState and ControlState. The challenges were lessened as the MVC Framework evolved and offered DataContracts which providd quick binding of the data to and from the forms.
In the later stages I found URL routing to be well advanced. With the MVC Futures it was easy to extend the relative URL routing to absolute routing. This enabled portions of the site to be declared secure, while all of the links would automatically resolve to a fully qualified URL when needing to move the user off or onto an SSL connection.
The meat of the application, layered out from MVC concerns, benefited from the dynamic nature provided by LINQ and its expression trees. Expressing the training algorithm within LINQ rather than Stored Procedures sped development greatly as the algorithm could be shaped at run time while delaying execution against the SQL server.
Another new Microsoft component was utilized to provide for visual interpretation of a user’s progress through the training program: .NET Charting. The charting controls were easily implemented on top of existing data with minimal shaping and rendered beautifully with little adjustment. Another benefit was that the controls allowed cached output, giving additional performance boosts.
The GreatVocab application tuning was performed using the SQL Server Tuning Advisor while running compiled LINQ Queries. This stressed the application with a load test via Microsoft’s Visual Studio Test Edition. The tuning yielded a quick 60% performance gain. Manual tuning and indexing of the queries provided further performance gains where needed.
Red Gate’s .NET Profiler was also used in detailing the performance of the application and refining the application. Remarkable performance was observed on the part of MVC, validating some claims to dramatic speed increases with MVC’s lighter request life cycle.
In sum, MVC and LINQ provided a strong framework upon which GreatVocab.com was developed. I look forward to its final release and potential adaptation into standards here on coming projects.