This is the unedited version of Ankit’s internship story at Josh for 2 months. We have posted it “as is”. We hope this helps others understand what internship at Josh is like, the culture and the values – @gautamrege
This is a list of activities carried out during 8 week full-time internship at the Josh Software. The document contains information about the organization and the work performed throughout the period between 19 November 2014 to 17 January 2015.
The first part of the report offers an overview of the organization. Following, it proceeds to describe in some detail the most relevant projects carried out and their respective analysis. Finally, the report wraps-up with a few closing remarks and conclusions from the experience.
How I got selected
Our 5th semester exams got finished on 15 November 2014 and I got news that Josh team is coming on 17 for winter internship programme. I didn’t have any time for preparation but was very excited and confident to face the interview.
In first written round there were total four question. We have to write two programs on paper and had to tell output of one programme and one was puzzle problem. I wrote all the programs but was not able to solve the puzzle problem. After four hours result came and five student were selected for next round and I was one of them.
Second round was at Josh office and we five reached there at 10 am next day. Then they called their first guy to interview and I was relieved that I was not that guy. That guy was there for one hour in interview room. Then he came out and after him another guy was called and again that was not me. Utilizing time properly and judicially I asked all questions asked to him and I was happy to hear that all were coding question related to linked list, pointer and C concepts. My confidence again rose to next level as I was very comfortable in these areas. Finally my chance came at last and I was asked to write a program to maintain details of stock market per day basis. I wrote it using structures and linked list and they were happy after seeing full page of code. Then they asked me some basic questions on C which I answered. At last they played a game with me made by one of software engineer at Josh who was also from my college and they observed how I was making moves in the game. Then my interview finished and I was very excited to hear the words from the interviewer “You come from tomorrow”. I was very happy. Then we came outside of interview room and I came to know that I was the only one got selected. Then they show us their office and work environment. We have our lunch their and then we returned.
My expectation and objectives
After coming home I was very happy and excited about the internship. Josh builds web application and I was a very bad in web development. Earlier I have done only algorithmic programming and was good in it. So this was the time to improve this part of mine. My objective for next two months was to become proficient in rails framework.
Two months internship
First day of internship I reached office and was very excited. Then I done some formalities there and I got my Josh email id. I was working directly under Gautam Rege CEO of Josh. What else you want. Then my internship kicked off
So before starting Rails my task was to learn ruby since rails is built in ruby. Till now I have only programmed in C, C++, Java, python so ruby was new to me. I was given task to learn ruby by writing a Sudoku game. Then I just gave a scan on ruby language and learnt basic syntaxes of language in half an hour and the game was ready in next hour. I was very happy with my performance and was ready to learn Rails. I showed my code to Gautam Sir and was waiting for reply. He scanned my code and asked me what I have done. I was shocked to hear that and politely said that I have made sudoku in ruby. He replied where is Ruby in your code. And Again I was shocked because definitely I have written ruby code. Then he gave me a lecture on what ruby is and what was the expectations. He meant that Ruby code should be like English, one should understand your code by just reading. He also shown me examples with some piece of code how Ruby is self expressive. But Wait main action was left. He asked me do you have another copy of sudoku. I said no. At next moment I saw him typing rm command and I was shocked for a moment. My code was deleted and I have to write again sudoku from scratch. I thought for a moment that I could have modified this one also. But No problem I was here to learn not to complete my assignment. Then I started taking ruby serious and studied Ruby for three days understanding its concept and wrote my sudoku again from scratch. But same happened with my code as previous My code was deleted three times and fourth one was as execpted. I knew after first deletion that It can happen again. But honestly I didn’t stored a copy of my code. I am very competive by nature and was ready to take challenge that let’s see how many times Gautam Sir deletes my code. So I wrote my Sudoku four times from scratch and finally it was as expected. I have finally written sudoku by ruby expressive nature and exception handling.
Then next step comes I was asked to test my game. I have done competitive programming earlier and was very good at testing manually covering boundary cases and noting program output after each input. I told Gautam Sir that I am going to test my game in this way. I was again shocked that this is not gonna do as I have done this from last 2 years. Then Gautam Sir tells me about minitest supported by ruby I was really surprised how clean way ruby gives to test it. I have never seen this kind of testing earlier. We can refactor our code without messing with our logic by using minitest.
So finally I did all that stuff but this was not end i was to asked to tell my code quality and then again i asked myself now what is this my code quality is 100%. Then Gautam Sir told me about CodeClimate which tell the quality of our code by examining function variables, length etc. Then I learnt that this way Clients of Company remain assured of code quality without reading code. CircleCI tells how much we have covered in our test cases. So I have integrated my code with codeclimate and then it analysed my code and give a score of 3.8 I was shocked what 3.8 out of 10. I just imagined 10. Then Gautam Sir told me that it was out of 4 and I became very happy. I also integrated with CircleCI and it was showing 80% test coverage. Now finally I finished my sudoku in ruby. Last I learned about bundler in ruby and used it in my program and finally made a gem of my sudoku. Bundler basically keeps record which version of gem our program needs and provide that.
Meanwhile making sudoku I also read about Ruby metaprogramming and was excited to see ruby true power. Then I read somewhere that Rails use metaprogramming a lot and my curiosity rises to learn Rails.
So finally It was time to start learning rails. I spend my first two weeks to just read about Rails all the things it provide to build web apps and the metaprogramming it uses. It might seem long days but this time I don’t want my code to be deleted. This time I was given a web app Quizmania to build. Now best thing in this was Gautam Sir acted like client and I as software engineer and my task was to take the idea of client and build the web app as client is imagining. I was free to ask any question to client. I did quite well in this but mistakes were done by me and I was not able to take the full idea of what client wants. This time Gautam Sir showed me the famous diagram which I think all Software Engineer knows.
I have seen this in my college lecture but realized now that how really difficult it is to take full and exact knowledge what client wants. I learnt here ways to ask question to client. Finally I made my database tables, relations and was ready to go. I started working on my project and it took almost one week to finish. I integrated it with CodeClimate, CircleCi and wrote test cases. This time my code quality was 3.7 and test coverage was 98%. I wrote test after finishing my project which is wrong way to do this we should write test cases before and should then code to pass our tests know as Test Driven Development. So I will definitely going to take care of this next time.
At last my web app was ready and this time Gautam Sir was very happy with my work and major achievement was “no code deletion this time”. I want to give special thanks to Sailesh, Sahil, Sweta and Anuja who helped me in Quizmania by finding major bugs and told me ways to correct it.
Here is link to my code on github
New skill and information gained
After two months I was happy that now web development is not my weak point. Here I saw how work is done in a company. How interaction happen between Clients and Company and how Git is used to complete a project. Earlier I have only read about git. But here I have used git in both of my program. So finally I have learned and mastered Ruby and Rails.
So summing up It was a very good two months experience, which I could never have got in college. I also learned to solve Rubik cube thanks to Anil Sir. Last but not the least, it was a great opportunity for developing my personality and making contacts which may prove of value in the near future and to work with a fantastic team of very hard-working people.