Wednesday, December 31, 2014

Five things to remember during placement session




Most of the freshers consider package/C.T.C as the only parameter of selecting a job.I was one among them back in college. But as it is said that an intelligent person not only learns from its own mistake but also from the mistakes of other. The truth is that C.T.C should be the last parameter used to chose a job. In this post I am going to discuss 5 key elements which students or even professionals generally overlook or in fact don't even care about in their placement sessions.


1.) YOUR PROFILE 
I can not emphasize more on this point. In case of tech companies students usually assume that their are just three types of profiles software developer, software tester and User Interface designing.  But that is not it. There are a lot designation which you can join in as a fresher itself like deployment engineer, release/build engineer, data scientist(MongoDB/python/Hadoop are the prerequisite) etc but you need to be sure of these profiles and the job responsibilities which come along them.
Even if the company is not offering these profile in your college and if you feel that you can really can do better in some other profile then the offered ones, you can take a chance and talk to the H.R for the same - but this will be bold step. Be absolutely sure and know what you want to do. Just don't take this step to stand out from the crowd. 

Coming back to the three profiles which companies usually offer - developer, tester and User Interface/web programmer. Since these days companies have merged the two designations of developer and tester so most of the engineers are now Software Engineers rather than Software developer or Software tester. So be sure that for which profile are you getting interviewed for.

2.) DON'T TRY TO KILL TWO BIRDS WITH ONE STONE AT LAST MINUTE
Most of the students are not sure whether they wan't a carrier in tech industry or non-tech one, even till the day of placement or even if they are sure, the anxiety of placements has the potential to confuse even the most confident candidates.
Be absolutely sure which placement do you want to crack tech or non-tech. Even though if you are in doubts or have left the decision on destiny, do attend the pre-placement presentations of the companies which interest you because you get to learn a lot from them. But if you are absolutely sure that you want to make your carrier in a tech based company don't waste your time in preparing for GDs or  case studies and same goes for students interested in non-tech jobs don't even think of Codechef competitions at last minute.
If you still want to go for both such companies and go with the flow of time then you must start early. Prepare for GDs as well as participate in tech competition but give ample time to yourself so that you don't get apprehensive about your decision last minute.

3.) SHOW YOUR INTEREST-ASK QUESTIONS
No matter how upset you are with the placement session.Whenever you go for an interview or pre-placement session always spend a little time in understanding the domain of the company even if it is a company like Google. Know some terms/technologies mentioned on their site and if that seems to much then at least go through the Wikipedia page of that firm.
Most of the companies - established ones like Facebook, Google or even not so big companies offer APIs. If you can build something using those APIs nothing like that and make sure to highlight that point in your resume or try to form a question out of it and ask during the Pre-placement session. For ex ask something like 'I used Google's Youtube API to get info of a video but is there an API to get common info of the playlist  no matter which video of that playlist is buffering.' You can even use StackOverflow and tags to search latest questions.
Don't be afraid of asking questions.
When I appeared for my campus placement session somebody asked what does (inwards pointing) arrow in the logo of RBS means. Even the presenter of the PPT didn't know but their team was really impressed. If you don't get a chance to ask question in the PPT session do ask it during your interview. But don't ask just for the sake of asking make sure that you ask something relevant, sound inquisitive for the answer.

4.) DON'T  CHOOSE C.T.C NUMBER OVER YOUR DESIGNATION
In my opinion a candidate should just emphasise on designation and the roles and responsibilities with the company but not all fingers are of same length. Some student may have the pressure to repay the student loan etc. Even in that case never ever get carried away by the C.T.C numbers they are just Cost to Company for example if you company offers you cab facility or discounted lunch/buffet all these costs are included in the C.T.C. Another example could be that some companies give you gratuity that is amount you receive once you complete a certain defined years with the company. So say the gratuity agreement says that you will get Rs 3 lakh after you serve for 4 years in the company. So you CTC will also include these 3 lakh irrespective of the fact whether you serve them for 1 or 4 years.
Your basic salary of the CTC is what you get and that is taxable too.

5.) ALWAYS REMEMBER YOU JOIN A COMPANY BUT YOU LEAVE A BOSS
Companies are nothing but a cluster of numerous teams. Your association and the impression that the company has on you is merely based on your team. Therefore, never emphasise on just the name of the company, also take into consideration the team you are being interviewed for. Most of the times even if you ask the HR or your interviewer that for which team are you being interviewed for most likely they will not tell you. Because sometimes even they are not sure. But if they tell you the name of the team try to get in touch with seniors/alumni already working in that team about the feedback of manager. If you don't know anyone you can give a shot on Linkedin too since some people not only add their company name and designation but also add the team's name.
The following picture might help you make your decision.



Tuesday, December 30, 2014

How do software engineers work as a professional ? ! ! ?

The following image pretty much sums up my college life when I was in 3rd year.


Third year of college is the most important year in one's life because it is then when we have to decide whether we want to continue with the technical domain and wait for some computer giant companies to hire us or should we switch to some other domain and leave computers behind by giving a management exam like GMAT or CAT or should we go abroad to pursue M.S in computers and live the American dream.

NOTE :- I have intentionally written "we" because our seniors/alumni/classmates/batch mates are also a part of this decision.

THE ASSUMPTIONS ERA

I too faced the same dilemma back in college when more than one half of the class started preparing for GMAT/CAT ,  about 5% of my class started preparing for M.S and the rest started preparing for the campus placement session. I belonged to this third category There were the students who were also preparing for CAT/GMAT side by side and kept the option for tech/non-tech placement open for them.
I had no interest in MBA - by the way I figured this out after I joined a well known MBA classes in Delhi area. It had nothing to do with the teachers/coaching classes but lets say it was my inner voice. I didn't have the courage/money to pursue MS from U.S and leave everything behind. So, by following the method of elimination I figured out that the only option I had was to prepare for placement session and hope to get placed in a super amazing tech company. 
Browsing, through the websites like Geeksforgeeks or Cracking the Coding interview.I often used to wonder that how software engineers work in big tech giants like Google, Microsoft and Adobe. Another important question which used to linger in my head was how do sites like GeeksforGeeks and CareerCup help us become a better engineers once we get placed. So I assumed that all questions like reversal of link list, maximum sub-sequence problems are miniature of real life problems which software engineers face everyday. And I started solving algorithm/programming problems on daily basis and continued with my research based projects.  

REALITY
In my opinion when a fresher joins a company, the fresher is already afraid and the rest who are working on some projects will make sure that the freshers gets even more uncomfortable and they start throwing new words/technical Jargon/domain knowledge on you for the sake of "Ramp Up" session. Now there will be one person in the team who will be serving the notice period and will have all wrong things to say which a fresher does not want to listen. And the fresher will think I literally killed myself for this job and this guy is leaving this job seriously ? What is wrong with him ? The answer to this question or rather I should say truth of life is no wonder which company you get in from your campus placement there will be a hundreds of people leaving the company on your joining day and other hundred who will be preparing to become your colleagues in near future. So this outflow and inflow of employees is not big deal.

Now coming to the topic of today's post that how do the software engineers work. 
First of all you need to understand a general structure of a team.
A company is composed of a numerous teams. Your future with that company depends on that team and not on the company's name itself.
Now this team generally consists of  :-
1.)  Senior Manager  
Now this person does not code but is usually the most intelligent person in the team.This person knows all the domain/business knowledge and is the face of your team for the outside world.

2.)  Program Manager (PM)
If you have studied that topic of Requirement Engineering as a part of software engineering course in your undergrad then you have your answer. This person gathers all the requirements of what the product/API is supposed to do. Refer image below

3.)  People Manager
The person who makes sure that you are happy in the team. This person approves your holiday and reimbursement requests. If you have some permission issues or need a new laptop from the company or want to get an early cab he should be our contact person. They are also involved in making sure that you are assigned work as per your expertise/interests.

4.)  Software Architect
Decides technologies to used. Does software design, mentors you to manage the software and deployment process extra. Unlike college, where getting some output on console was considered more than enough, in professional world you should also know the response time of your service. In other words in college/placement sessions it is enough to know whether insertion in a link list will take O(1) – assuming you have tail pointer or will it take O(n) – you just have start pointer. But here you need to know response time of your service exactly. You need to work on scalability of the service/product etc. You need to work in coordination with testers to find how much time will the 99% of the requests take. One of such parameters is called TP99.

5.)  Software Development Engineer
This is where you come in picture. The one who rights the code from the requirements as given by the requirement set from Program Manager and the architecture/design as decided by the software architect.

6.)  DataBase Engineer
Writes stored procedures, manages DB be it on Sql or NoSql technology. Has the entire knowledge of database architecture. Will never give you the admin rights to insert or delete a column at your own free will. Writes queries for you which you didn’t even know exist in the world. Personal Experience – I didn’t know that I can search a database to get a list of table which contain a column name with something like “xyz”. The query can be easily be found at stack overflow - just in case you are wondering.

7.)  Software Test Engineer
Person who files bugs on your name in Jira or Trello as per your companies standard directions. Tests the application/service you made either manually or the technology stack which your company follows.

Having introduced you to various roles and responsibilities you can find in a team. Now let me touch upon the process of work getting assigned to you. Most companies these days have started following Agile Development

Though I have never heard of a company where Agile development is followed ideally but this is what companies aim to achieve. One of the component of Agile development is Excessive Preparation/Planning also known as Sprint planning.
Sprint in simplistic terms means a cycle. A company may follow a sprint of one week or a month. Two week period is assumed to be idealistic. So a PM sends engineers, architect/lead a meeting invite. PM opens a Jira/Trello/similar issue tracking software dashboard. So, for ex if you are supposed to design a restful Java API so that a user can insert a record. If you have completed insertion API without testing or performance number. So now backlog will contain to two stories 1.) Test the API
2.) Get performance number of API. As per the capacity or number of man hours available in the sprint stories will be picked.

NOTE :- Stories consists of tasks. Tasks is something doable like code/review request etc. After breaking a story into a task, these tasks get assigned to the software developer/tester/architect/database architect.
So next day onward of  the sprint planning meeting you have daily meeting of 15 min. Now this is where the actual work gets discussed. Engineers discuss what issues they are facing. Or if they need some kind of database permissions etc.


FINAL COMMENTS
That is how a software engineer gets allocated the work and finally they start writing the code/documentation/class diagram as required. A software engineer’s job is not necessarily all about just writing the code blindly in isolation without getting any acknowledgement. It involves understanding requirements and which of these requirements require immediate attention and which of them can be delayed to next sprint. It involves proper justification of why your method/approach is better.
Software engineers play table tennis, foosball, snake & ladder and sometimes chess too. Though we never meet the clients of our product directly but this does not means we live a life never seeing light of the day.

P.S – This lifestyle is more about a product based companies where a development is going on. Service based companies have a bit different lifestyle and Startup culture is totally different and is super fast. And if you are working in a team where even though you are a software engineer but your work involves mainly the maintenance of an engineer's life might be pretty different.

P.P.S – Special thanks to Google for the images.








Friday, December 26, 2014

How to keep track of your source code - Source control Mangaement System

This is how I kept track of my project back in college :(


Yeah.
As clear from the pic I was working on a Computer Networking project and the tool I was using for this purpose was "Glomosim". And that is how I kept daily track of the work done.
I always used to wonder if there was a way to manage these version but never googled it, my bad :(

So today before we get into any kind of technical jargon like scripting/compile languages, python, Chrome extensions etc, it is very important to know that how can we keep version track of the code we are writing. Developers around the world have already thought of the solution to this problem and these particular tools are called Source Control Management or simply SCM Tools.
There  are a lot of such tool but most commonly used are SVN (subversion), GIT and perforce. GIT is an open source and widely used in the industry today.
Important thing to note is that these SCM tools can not only be used to keep track of only source code. You may even maintain version of your grocery list :)

I this post I will discuss/introduce Git. So, the most important thing to remember whenever you work with GIT is that GIT doesn't know state of one standalone file. Say you commit files A,B,C in a project and then later you change file B and C to B',C' respectively, later you realise that you made a mistake and project should have been of the type A,B,C' so you just can not right click on the B' file and say replace it with previous version. Because going back to previous version will mean going back to stage of A,B,C.
Another important thing is to note the difference between commit and push. Commit just means committing to your local environment it does not mean that your friends or colleague will be able to see the changes. "Push" can upload the changes on the remote repository.
In my previous job I used to work on SVN in which committing meant uploading the changes in repository unlike GIT. So it may be confusing to newbies so just a heads up.

OVERVIEW OF REPOSITORY, TRUNK, BRANCH and TAGS
Repository : Other name of project-name. So say you are working in a project named X and you will have a repository for project X either in SVN, GIT or perforce.

Trunk : Main line of code. In other words trunk was the first copy of code and the rest code is incrementally added to the trunk. Other name for the trunk is develop or dev branch.

Branches : Since there a number of developers working on a project. So each developer takes her own copy of the latest code as kept in trunk/dev branch, works in it and then merge back.
We will cover TAGS later but let us first discuss the term merge.
Consider the merge scenario shown below

Assumption: The project consists of 100 files and both the new features will be added in file 50. That is both dev engineers are working on File 50.
Here two coders are given the responsibility to implement two feature say F1 and F2 to developer 1 and developer 2. Both make two branches from TRUNK/DEV Branch say B1 and B2 respectively. Now Developer 2 completes her work and tries to push the changes in TRUNK/DEV Branch, since the trunk has not changed therefore the merge happens perfectly fine. Dev 2 pushes the merged branch of TRUNK and B1 on TRUNK itself so that others can now see the change. But say Dev 1 tries to push her code without taking the latest checkout of TRUNK so Dev 1 gets error. Because the TRUNK's state has changed. and hence Dev  1 gets merge errors for file 50. so Dev 1 manually removes the merge errors and then pushes the changes back in TRUNK.

TAGS : After every successful release a TAG i.e. copy of the code which was released is created with  that release version.

WORKING WITH GIT
Now I will cover just basic points or commands which you will need in order to work with GIT.
Just go to git-scm link for windows or Getting-Started-Installing-Git for other operating systems This will install Git-Bash on your computer. If you want to create your repo use GitHub. Public repo are free of cost. When you initialise the repo this will create "readme.md"or use git init command.
Next you will have to create SSH key so that git repo can recognise you. If you don't want to do that use set "git config http.sslVerify "false" "
To commit changes on your local system use git commit -m "My first commit [Your message]"
Since on github you might create numerous project each with a unique link so you have to set origin for that particular git project, using git remote add origin "http://[link of git repo.git]" Origin is another name of remote server/link where your project in present.
Do not confuse branch and an origin.
To take the latest of what is lying of TRUNK use git pull or git fetch.
To checkout your repository on other system use git checkout [branch name].

If you have done something on the local copy of the checkout code but you want to revert it to what you originally checkout out use git reset --hard.

Resources :-
1.) Git Documentation - Really good
2.) Webinar on Git- youtube video



Wednesday, December 24, 2014

IELTS Experience



I recently gave IELTS exam. Results haven't came out yet.But I would like to share my learnings and experience.
Though since it an English language exam, I didn't take it very seriously but I guess the money involved that is around Rs 10,000 kind of forced me to take it seriously

On The Exam day
Try and avoid reaching super early. I am a  really punctual person but this particular time I wished I was not that particular, because reaching around 1.5 or 2 hours before the exam just makes you sick of waiting - at least it did to me.
But do keep a margin of around 30 min. Just carry your passport and photostat of the same but make sure your face and signature are clearly visible. If still in doubt, carry a colored one. don't carry any pencil box or pouch because they won't allow to carry it inside so not point carrying the luggage.
First thing to do once you inside the exam center. Submit your belongings. get your photograph clicked, the invigilators will instruct you to form queues as per your Passport prefix like "H"xxxx95x. Next wait for exam to start. NOTE: Do eat any thing healthy/fried what ever you can your a hold of before entering the examination hall. 

Just an outline of the exam :-

Listening - the sample test which I had given were very straight forward but 3rd and 4th listening question are not that straight forward. But since the speed is pretty slow, it should not be a problem.

How to prepare - Listen to BBC documentaries. Download "Clip Grab". Select a video from youtube and copy paste the URL on "Clip Grab", select the pixels and sit back and enjoy. You may download the subtitles for the same to get a good hold on the pronunciation. One time I saw a BBC documentary on Indian army and I felt like joining the army :)

Reading - The second passage was a piece of cake based on memory of adults and aged people. The first passage was about some sea animal's jaws. The third passage was about the economy of developing countries and technology. I got True/false/Not Given type question in all three passages.
The length of passage is generally longer than the once given in the sample booklet you get once you register for the exam.

How to prepare - Give special on the kind of question you feel you are weak. Like I felt that my True/false/Not Given type question were usually wrong even in the practice tests. So at least aim to solve 12 passages, with varying difficulty or all average difficulty type.

Writing - Depends on your luck :)
Task 1 - I got a line chart to interpret (easy).
Task 2 - Should government spend money on project to look for life on other planets or use that money for the welfare of its own citizen.
How to prepare - Practice , a little cramming of pretty catchy lines and more practice.

Speaking - Try to short and crisp in your answers.
The interviewers are really intelligent. They try to know you and your domain first and then align the general questions with respect to your domain.Just stay confident. They are not going to ask you something out of the world. Just don't stop. Speak rubbish but keep talking anything staying on the track.

How to prepare - Make mirror your friend. Give your introduction and pick any topic like festivals, your first mobile phone, some meeting incident, flowers.


int main() { return "Introduction"; }


Hi
This main function will return my first post.
In this post I am going to talk about who am I ? Why have I decided to start this blog ? Who is the target audience and other relevant points.

Who am I ?
My name is Deepika. I graduated from NSIT, Delhi. I am currently working in Expedia as a software developer.
My quite a few achievements till date: I was among 10 girls selected from all over India to be part of Google Women TechMakers program. We all were given training at Google's Bangalore office. I am also core member of GBG-Delhi. I recently participated in an International Women Hackathon organised by HackerEarth and won Rank 9 for a chrome extension for LinkedIn. Profiles like software developer and data scientist interest my equally. Though my job demands me to be a part time build engineer too.

Why you should follow this blog ?
Do you know that around a half million computer science students graduate every year in India itself? Any guesses how many of these computer/I.T. graduates from Indian engineering colleges are actually employable ? Only 10-25% .Is it that difficult to become a software engineer ?
I believe that becoming just another software developer is the easiest job in the world.  But it becomes all the more difficult when you want to be really good at it and you have no godfather to guide you. No doubt Google will provide you with all the relevant results but you need to know the right questions and more important then that when to ask those right questions?
Coming across an amazing document/article/guidance which has the potential to influence your career will be of a little or no use if you have already chosen a road more traveled.
And I have been through that. I know how much it hurts when you know that you want to give your best in programming or other computer related fields but all you need is that little guidance or some one to assure you that you are going just right on the right path. I want to make your life a little easy. And that is why here it is Code Shiksha for you.
Apart from the above mentioned goal I also plan to add articles totally out of context/miscellaneous which may not be directly related to programming but related to student life or your life as a technologist but I assure you that these points are certainly going to help you at some point of your life.
And last but certainly not the least the objective of this blog is to encourage female budding technologists to explore the tech/STEM field.

Who is the target audience ?
Any one
1.) Who wants to become a software engineer but needs that little help/tips and tricks to ask right questions.
2.) Who is not sure whether to go for an MBA or technical job. Code Shiksha aims to bring to you a glimpse of (technical) industry level work to you this early. So that you know what all technology professionals use.
3.) If you are a fem-engineer, this blog is specially to help you, just post a comment or drop me a mail at codeshikshachannel@blogspot.com I shall try my best to help you.

Life changing one line mantra/advice :-
Stop Cramming, Start Programming