Internship begins this week. As Dr Shawn was not around, I was introduced to the work environment by my colleague Gabriel. First things first, I got into setting up my work environment and got into knowing how things run in the company with the help of Gabriel. After the introduction, I went into the tasks assigned by Dr Shawn for this week which were to understand how to use Git ( a version control system) and WT (or pronounced Witty) a C++ Web Framework.
What is Git ? Well, there are many various answers provided online to explain what Git is and I will try my best to explain it based on what I understand. Git is a version control system. What is a version control system? Basically, a version control system is a tool that allows a user to save different versions of the user’s file that the user wants to keep track of. This enables for example a software developer to have access to all versions of his or her code. Git is the most ‘popular’ version control system used by majority of the software developers today (due to its powerful and well maintained features).
So how does it work? Well, to save a version of the user’s file (or code) , users would have to use a function called ‘commit’. Commit is essentially asking Git to take a ‘snapshot’ of your file and store it in what is called a commit history. The commit history is a log that keeps track of all the versions stored by the user as well as comments that describe the particular version of code. This now becomes a very powerful tool as the user is now able to use any version of his or her code just by reading it (pulling) from the commit history. For the ones that understand, Git stores versions of your code like a directed acyclic graph where each node represents different versions and a pointer (known as a HEAD) that points to the node with the latest version.
But it gets better. I have just mentioned that git allows you to create and use a commit history. What if you could have multiple commit histories? That is where ‘branches’ come in. Branches are essentially different versions of commit histories of a file. With branching, you as a user are allowed to take a particular version of that file and create changes to it without affecting the original version! A good situation to use this is if you already have released a ‘game’ to the public but would want to add more features to it. You could use the working version of your game and add the feature straight into it and have two outcomes. If it works, then all is good. If your feature ‘breaks’ the game, then you are in trouble. To solve this, you could instead branch of from the current version of the game , apply the necessary features and allow you to work on it separately without affecting the working version. Once it works, you can then sync in your changes.
As you can see, this opens up a realm of possibles for ways to work on a project individually as well as in a group. With this, a ‘model’ was also created called ‘git flow’ to help organize workflow and collaboration using Git. The model uses different branches for different purposes and has rules in which branches it sync to.
Apart from Git, I have also spent time learning how to use WT . WT is a C++ web framework that allows users to create a web application (for both front and back ends). As C++ can be a tedious language to deal with, WT abstracts away the background work in working with the web and allows the user to just worry about the implementation of their application in C++. To be honest, l struggled in working with the documentation. The tutorials provided by them were also insufficient as it skipped steps while going through their explanations. I decided to try apply my WT knowledge in trying to build a simple web application that allows users to register into a database.
Overall, it has been an interesting week learning multiple tools within a short period of time. The week ended with Dr Shawn welcoming us interns with a welcome lunch and explained to us specific tasks that we will carry out for the project.