Many computer science students seek to continue developing their skillset, but lack the proper resources to do so. Mentor seeks to fill this gap by providing a companion tool which builds off of fundamental topics and eases developers into using new languages and unfamiliar environments.
As of 2018, over 80% of introductory computer science courses are taught using Python. Google's language Go, however, is not taught much in academia. We decided to leverage this fact in our development and provided new programmers with the ability to write Python code and view corresponding Go syntax. This speeds up the process of learning a new language.
Integration to use Mentor is seamless. A daemon running on your local machine will watch as you write your code and constantly keep the iPad companion app up-to-date. Our Atom plugin also provides visual feedback as you code. To activate mentor, simply wrap more familiar Python code in our special sequence of characters: "////". The iPad companion app will then show Go suggestions, using our custom translation algorithm. Mentor also provides direct access to Go's documentation, allowing developers to learn on the fly. By tapping a suggestion on the iPad, Mentor will automatically save the changes to the file! This results in a both agile and educational way to program.
Challenges we ran into and How we built it
There were three main problems we had to tackle in developing Mentor:
1 Translating Go to Python: We used Context-Free Grammars to map many of the common aspects of programming language such as control flow and variable assignment
2 Daemons - Build file: Our Daemon has its own thread watching for changes in the file system at all times. This allows for instant response to a developer typing code.
3 Real-time Persistence: Keeping all of our codebases in-sync with the same data was a huge struggle. We ended up redesigning our architecture using a circular data flow pattern in combination with locks on the file system.
What's next for Mentor
We hope to soon add support for multiple languages. We deliberately made the translation algorithm very generalized so we could easily add support for other languages.