My First Tech Intern
(wrote when I was in my 4th year of college)
I am a fourth year Computer Science and Engineering student at IIITDM Jabalpur and I just have finished my 6 months Software Development internship at NeuroSystems, a New Delhi-India based start up. I have been thinking about starting my blog and my internship experience finally gave me the opporunity that I have been waiting to write about.
I along with 6 other students from my college applied for this position through Angel.co and the technical coding round consisted of Spring and JUnit related questions. However, since none of us were familiar with these technologies, we were provided Core Java and multi-threading related questions and our task was to solve the question and properly document and unit test them. Question provided to us were:
Write a program, that can calculates the SUM of an Arithmetic Progression, in multi threaded mode (1…100 can be done as 1..10 + 11..20 + … so on in multiple buckets and merged)
Write a program that can tell if 2 lines represented in Cartesian coordinated will intersect.
Second Round was an interview round which was taken by their technical head and consisted of questions varying from OOPs concept to software development questions and also discussion on approach taken by us to solve the coding problems.
Four of us cracked the Coding interview and were asked to join by 15th MAY,2017.
I joined Neurosys on 15th May,2017 and that marked my first step into the world of Software Development.
Self learning phase lasted for about 40 days and during that period I learned about some of these technologies and later on worked on an assignment to test the knowledge gained.
This marked end of the training phase and next was some live project level tasks.
After this, I got an opportunity to work on a live project : FHF. The task was to develop a web based application that can reflect all the requirements of the client and handle huge amounts of data provided through excel sheet. It also required designing a mechanism to perform manipulations to this data, effectively search the database and view the data in a hierarchical manner consisting of data categorized on the basis of similar properties. Also a proper ETL and reverse ETL process was to be implemented to be performed on this data.
This project also provided me with an opportunity of working on a web-framework called Stumps, solely developed by our tech lead to which I contributed in the form of documentation and by developing some java based transformers.
This marked end of first assigned project and than started R&D task for one of our upcoming project.
For my next task I was assigned research and development work for our upcoming web application project : Skippo. The project was to have a forum section where people would give their feedbacks and comments for the services offered. Storing such data in Tabular-based databases seemed in-efficient and thus it was decided that we would store this data as documents using Orientdb.
- OrientDB is a multi-model database which provides a mechanism for storing and retrieving NON-relational data (data other than tabular data such as document data or graph data).
- OrientDB provides 2 API that we were interested in : Object API and Document API.
My first sub-task was to compare both the APIs and to select one which was best suited for the development. Taking care of every aspect of both Document and Object model was essential since my feedback was a huge factor in what our company will be implementing.
- In case of Document API, I had to write a sample code to carry out all the basic CRUD operations from the database along with Junit test cases. Whereas in case of Object API, I had to write code to carry out basic CRUD operations from the database through Native OrientDB route as well as JPA route.
- Other than this I was assigned task of finding out simple solution to convert data from Object API to Document API and vice versa. Orientdb natively supports conversion of data from Object to Document form. In case of Document to Object conversion, Document data can be extracted in JSON format which than can be converted to required Object using GSON.
Important thing to note about orientdb is that irrespective of API used, final record getting stored in database is of a document.
After this, as another POC task, I was assigned R&D of implementing Lucene Spatial Indexing with Orientdb to find solution for Geo-Location, which was to be used in one of our upcoming project. While working on this I found out that Lucene creates certain problems while using Object API which could have highly effected our development of project.
This marked end of first R&D task on OrientDB and next was another R&D task on SMS Service providers.
For our Skippo project, we required a notification feature which would send notifications on customers registered mobile phones. This Notification tasks UI and backend development task was assigned to me but before that I needed to research for a SMS Service provider.
Process of selection of service provider was a bit tricky for us since we had zero experience in it and with the help of our management team we came up with a solution and MSG91 came up with the perfect solution.
A good messaging partner will care for your recipients as much as you do. The following can be the parameters to choose the best Bulk SMS Service provider and MSG91 was best suited for it:
- Easy APIs: Bulk SMSs can be really handy for big enterprises and also for new startups willing to keep their customers engaged. Hence, our choice of service provider should be such that implementation of their APIs should be simple.
- Assured SMS delivery: Service provider should assure delivery of SMSs. This becomes really important when we are sending Transactional SMSs to our customers.
- International SMSs Delivery: Some of the most successful SMS Service providers provides their clients with international SMS delivery feature.
- Delivery Report Tracking: It becomes highly important to have a feature by which one could track the SMS delivery. It is not only important to track the status of successfully delivered SMSs but also track ones which failed so that they can be resend or their error cause can be tracked.
After completing my research on it, I found an issue with their service which has been informed by me to the concerned authorities and this led to some unmet requirements which made us research for other SMS Service provider on which one of my colleague was working on.
With this all the R&D related tasks and all the work and findings was then reviewed by my tech lead submitted to him in the form of POC work which consisted of code level docs and md format documentation files and also separate project modules showing all the findings in form of java-code and JUnit test cases.
This marked end of R&D task and also some dev-ops tasks related to Samba sharing and a overlay task to automize code updation on servers. After this, next came the opportunity of working on Skippo, a step towards solving a real life problem.
Next task assigned to me was of using knowledge gained during R&D tasks to create java based modules for Skippo, which included tasks of creating several Orientdb and SMS integration releated APIs. Since this project is not yet launched, I wont be sharing any project related information.
By the time tasks related to Skippo was finished, my internship period almost came to end and last couple of weeks were dedicated to reviewing all the work done by me and my peers and completing small unfinished tasks.
Programming language and technical stuffs are something that nowadays we can easily learned from online teaching platforms. What these kinds of internships give you is a lot more than just some technological experience. It gives you an experience that a beginner in this field needs to understand the world out there. It teaches you about handling pressure of completing your tasks efficiently. One thing that was really positive at this start-up was that work was not imposed on you and ample amount of time was given to finish the tasks assigned. However, this also meant that one had to perform his tasks at fullest of his potential.
Throughout my six month experience, I was continously pushed by my instructor into becoming a better version of my-self. We had a tradition of sitting and eating lunch together everyday and again at the end of the day we used to have a SCRUM meeting where we used to discuss about our work progress and help each other overcome the problems that they faced. Our tech lead sometimes used talk to us about what he aimed at achieving in his near future and seeing a guy this motivated in his late 30s used to pump me and other co-workers up into working harder and smarter.
It was a blissful experience and all the shouting (yeah, a lot of that was there) and motivational lectures along with pressure of completing of tasks effectively molded me into a mature software developer and I do believe that this experience and all the hard work will pay off handsomely in the future.
Its been quite some time since I first thought of starting my tech-blog and I hope that you all like my first blog. Please do leave a comment about what you think after reading it, to help me improve for the future blogs.