I’m planning to prepare for GATE. I’m doing full time job Mon to Friday 8am to 8pm. Any tip and advise you would like to give me. I’ve attended gate forum coaching earlier during my engineering but didn’t prepare and do well in my first attempt. I have all resources for studying. This time I’m planning to do just self study.

This is a common question many people ask.

Exam preparation is different from studying for knowledge. So, first of all, you should get the clarity on what is it that you want. Are you looking to enhance your knowledge and acquire new skills? Or, do you want to invest your time in getting a good GATE score? From the context of your question, I believe your objective is to do the latter.

Exam preparation requires you to acquire aptitude. Aptitude comes by investing time in thinking and practice. So, my first advice would be to value depth instead of breadth. Take few topics which are easy to score and do your best to solve as many problems as you can. You should be confident that if a question comes from this topic, you will certainly score it. Do not run behind covering syllabus.

My second advice would be to be conscious about the illusion of knowledge. Often, it seems that we understood a concept. Understanding a concept and solving a problem related to that concept are at different levels of aptitude. So, do not stop if you think you understood. Spend time in quality thinking and problem solving. One way to evaluate whether you have the aptitude is to solve past year problems on your own. So, mark few problems for testing and few problems for training.

My third and most important bit of advice is to hone your ability to recall. This sounds trivial. But, many people will agree that they knew it but had a black out during the exam. Their brain just could not recall anything. One way to do this is to practice recall. To be specific, everyday, spend 30 minutes recalling what you did before. Some call it revision. Do not look at the notes. Try to recall page by page what you wrote before. Recall the ideas. Recall some interesting problems.

CS is a vast subject. Too many topics and too many ideas to master. You may not get enough time to rock. Do not feel pressurized. Give importance to your job. If there is further time left, hopefully these tips will help you. Remember, if you are not having fun, you are not doing it the right way. This applies to learning and preparing for GATE too. Cheers and good luck!


CS or IT – Is there a difference?

This is a question that almost every CS or IT engineer gets at some time. He shrugs off quickly saying, why bother.

India has seen a boom in IT (not CS) jobs in the past 20 years. I still remember my BE 3rd year days (1999) when I was in the CSE stream and was very confident and happy because I was sure my stream would attract the best employment. In those days, IT was a rare. CS grads were hired for applied jobs like programming, systems, networking and so on. Hardly, any of my friends moved on to work on theoretical computer science. We never used automata to model anything. We never did model checking in our life. We never used formal languages. Designing new programming languages or improving the algorithms behind a data base system were things that we considered beyond our reach or imagination. Even though we called ourselves CS engineers, we were only applying our CS knowledge to practical use by building software. We were not extending the “science” behind computer science. Over a period of time, people saw that it is inappropriate to call what we do as CS. So, they started this branch “IT”. With so much jobs, they even found a need to establish new “Indian Institutes” for “Information Technology”. That led to the present day IIITs. The idea was to provide the same quality of education as IITs in every state focused on IT jobs.

So, in essence, if you are not so much interested in the science behind CS, IT is the best stream for you. Entry level jobs in the IT and ITES industries (software development) would not distinguish between CS and IT. Taking IT will infact be more appropriate for these jobs because it will cut down few theoretical subjects from your list which they argue that you will never need to know.

If you choose to turn to research, you will now find yourself at a slight disadvantage especially if you become allergic to theoretical computer science. So, if you have MS or PhD aspirations, think again. It does not preclose your opportunities. You just need to work much harder to enter few streams. That said, research in Information Security, Information Retrieval, and such fields are open for IT engineers.

At the end of the day, I have learned that, the way to survive in this complicated world is to be very neatly organized. You need to simplify every step in your life. BE (CS), MS (CS), PhD (CS) sounds much simpler compared to BE (IT) MS (CS) PhD (Mathematics). Believe, such people, exist too! So, choose a specialization based on your ability to marry it for life. Do not keep a plan B to change it. My profile looks like BE (CSE), MS (IT) and PhD (CSE). My PhD is in Information Retrieval. But, it is just that there are not many institutions giving PhD in IT. Also, my work is becoming more and more theoretical. So, I do not mind.

Sorry for a long answer again. But, in essence, it matters only if you are a Math lover (and also allergic to programming) and you are interested in theoretical side of computer science. If that is the case, go for CS. If not, IT is fine.

Am just not able to focus. What to do?

How many times have we experienced the “aaj mann ni lag raha h” (oh no, am not into it, today) feeling!? Well, I know I have to do it. But, somehow, the mind is not into it. We end up either wasting time forcing ourselves to do it where our productivity falls due to lack of concentration. Or, we just do something else. When I know I must do it, and I think that I am interested, why can’t I still concentrate on what I need to do?

The answer to this interesting question lies in the essence of execution. Your goal is clear. You have a plan. But, you are unable to execute. How to execute well? What do natural executors do?

I maintained an excel sheet where I used to put the topic and number of hours completed. I used to tell myself that my progress depends on the number of hours I see in that xls. If 100 hours is the goal, whenever I touch 25, I used to be very happy. I celebrated by sharing on social media and with my friends. I get to 50, I again share. This does two things: 1) It pushes me to achieve it because I like the feeling when I share it. 2) It brings a fear of shame that if I do not finish, what will my friends think of me. This worked like a charm. I consistently finished the planned hours. I never cheated. But, this may not work for everyone. It depends on your nature.

Another technique that usually works is to convert the goal of “studying DLD” to the task of “writing notes for DLD” task. This task shows progress. At least, you can see the number of filled pages increasing. When there is a sense of progress, our brain is more motivated to do the task. Just reading pages after pages, or solving problem after problem, we get bored. This is because, there is no way to visibly feel the progress, especially when you do not have the big picture.

If these principles based on pride, fear of shame, and sense of progress fail, you may try transcendental approach. This approach makes a commitment to almighty or your mother that, if you do not complete this, let that girl whom I love be married to someone else. Now, at any cost, I want to finish this because, I don’t want to leave that girl to chance. What if, just in case, God really exists and what if the loss of that girl was due to my breach of promise.

At the end, this post will be incomplete if I don’t tell you one important thing. Do not force yourself too much. Sometimes, your mind know what is right for you. If nothing works, just relax, take your time to find something that works for you. As they say it, “Successful people maintain a positive focus in life no matter what is going on around them”. Good luck.

How to write a good resume/CV?

I am back yet again with something which I believe is key to our success. Resume is different from CV. Yet, for this write-up, I am going to use the terms, resume and CV, in an interchangeable manner. If you are a fresher with not much industry experience, prefer to call it a CV.  If you are severely confused, name your document the way your recruiter wants it. I will not discuss the differences here. They are irrelevant and unimportant for CSE students.

In this busy world, the time to make decisions is shrinking. Recruitment decisions are time bound as well. In this context, your resume becomes a very important tool in making your first impression. Your resume is also circulated to your interviewer. Hence, it is important that you put some effort in designing your resume/CV.

Most of us use MS Word to write our resume. MS Word is a great tool. But, an even better tool is LaTeX. Create an account on sharelatex.com or overleaf.com. Go to templates. Look at some resume templates. Pick the one you like and modify it with your details. This is the simplest and most effective way of writing your resume. Some recruiters may accept only .doc format in which case, you must use MS Word. Nowadays, I do not maintain a .doc file at all. You can check my CV at vvtesh.co.in for a sample created through these sites. For more jazzy templates you may google.

When you use a template such as that in overleaf, you cannot go wrong with formatting. If you are using word, take care of alignment, uniformity of font, placement and length of lines. Some people have the bad habit of writing everything in small-case, and not leaving a space after period. Do not make grammatical errors. Get your resume reviewed by someone.

I do not include personal details such as Date of Birth, Religion, Marital Status, Language Spoken etc. These have become irrelevant to present day jobs. Write your resume keeping your employer in mind. Put only those details that he needs to know. This is not a testimony for your hard work. You don’t have to show off to anyone how many languages you know (for a typical IT job or a PhD admission).

A common confusion among freshers is that they run out of content. The ask, “How do I even fill two pages?”. A fresher is assessed based on his objective, education, certifications, skills, projects, performance in competitive exams, achievements, and any such relevant details. Ensure all these are there in your resume.  If it is still hard to fill, do not bother. One-page resume is just fine. Adding your small-size photo is welcome too. Resume is a live document. You should update it at least once every six months. It is a good way to check if you are doing something meaningful. Anything that goes to your resume is considered meaningful 😊.

When in doubt, just blindly follow a common template. Google for a student with similar background as you from places like MIT, Stanford or Berkeley. Usually, they have their resume reviewed by professional agencies. Just follow their template.

If these pointers helped, please leave a comment. Your long comments make my day. Thanks!

Act like a Master!

Many of you have got your MTech admit and are ready to roll. Here’s a piece of mind to you.

Taking the journey of Masters is a rare privilege bestowed on selected minds that sparkle brilliance. You are chosen from a million by those who were chosen by the chosen ones! That is how important you are. Now, it is time that you act like what you really are.

So, what is it like to act like a true master?

The answer lies in the following insight. You are already good. But, you are on a journey to be great. The journey from good to great is characterized by two things: 1) Statistic Marvel, and 2) Aesthetic Delight. Alright, it is time to elaborate.

Sachin is a master! His statistics speaks for himself. Several centuries. Several days on the field. Several match winning innings. There are numbers behind each of his achievement. He was not born a master. He became one. Your story is no different. You have achieved a place in Masters program. That puts you in mind boggling circle of achievers. You beat the 2 Lakh graduates and came about top 1500 in them! You understand the “bits” that make up the computer (Number System). You know how to network them (Computer Networks). You can manage data on it (DBMS). You can design algorithms to make it do meaningful things (DS & Algo). You can model real world problems and automate several tasks (Programming). This list goes on. You have learned so much, so much that you yourself can be amazed. Irrespective of whether it is software, hardware or networking, you have studied key elements. This is what put you in the elite league of candidates who aspire to become Masters. There is statistics behind each of these elements. You scored 70+% in your BTech in most of these subjects, you scored 99+ percentile in GATE, you beat a better one in interview, you spent whopping *8.76 Lakh Minutes* (4 * 365 * 10 * 60) studying computer science. These are impressive statistics. This distinguishes you from the rest of the population. You are already statistically marvelous.

Now here is another opportunity for you to add more statistics to your resume. That is another 4.38 Lakh minutes ahead of you at a place which breathes computer science much more than what you experienced in BTech. These minutes are so much more valuable than the prior. As SRK says in Chak De India, these 4.38 lakh minutes are yours. It does not matter what happens after your MTech. Nobody can take these minutes from you. Just go and rock. Give your best. Learn from the best.

Statistics alone does not make you a true master. In fact, a true master does not care for his own stats. He cares for elegance. That second essential element is aesthetic delight. Coming back to Tendulkar, there is some beauty in the way he plays. You can just keep watching him. This feeling is what we refer to as aesthetic delight. As a master, your work should look like magic. It should inspire millions of others. You are not here to play cricket in your gully anymore. You must play in a field where there are millions of aspirants. Do not shy away from crowd. Show them some skills. Bring beauty and charm in your work. Improve your personality. Find a niche. Work on your strengths. When you are on the field, people should just want to see you, and listen to you. In short, you make your presence felt. You command respect. You are a *Master*.

The day when you exhibit statistic marvel and aesthetic delight, you would feel what it is to be a true master. This is a long journey. There is no time to rest. Unless you enjoy each minute, there is no way you will end up being successful and happy. Wake up with a goal to find a reason to smile. Go back to bed with the satisfaction of having given a true smile. Find that smile in computer science.

Good luck!

What courses should an aspiring software engineer take?

Unlike medical doctors and advocates in court, most of us end up becoming software engineer first and then do several software engineering courses. In this light, someone asking how to qualify as a software engineer makes me feel happy.

Engineering anything requires you to be good at principles, products and practices. Engineering software is no exception. The “Keep It Simple Stupid” (KISS) principle says that you should write code that is as simple as possible. The Parkinson’s Law says that “Work expands to time available”. So, if you tell your team that they have three days to finish a task, they will end up taking all three days to do that task. You need to be able to design software using Object Oriented Programming concepts, or design a DB using ER paradigm. Functional programming (Lambda Expressions) and Logic design (as in Prolog) are not that common as yet in the industry but still very different principles to learn. These principles are very interesting, and a must know for being a good engineer. Next, we need to know existing tools and technologies. I loosely categorized them as products here. There is C, Java, C++, HTML, Javascript, Full-Stack, Android, and so on. Finally, the practices matter too. How do you run the show? Agile methodology which comprises of Scrum, Reflection, etc., and various roles in it are interesting. Many young students think only of a “developer” when they talk about software engineering. In reality, there are several non-development roles such as requirements analyst, product manager, quality analyst and so on. To understand all these, I repeat, you need to know about the principles, practices and products.

Few universities package this information in a variety of courses such as Programming in C, DBMS, OOPS using Java, Algorithms, Data Structures and Software Engineering. There is no single list which is complete and correct. Coursera and such MOOC platforms provide interesting courses such as Agile Methodologies and Android development.

My perspective to programming and related courses changed when I joined a cloud computing group at Yahoo. Suddenly, distributed systems became the most relevant subject. Every algorithm we designed were distributed in nature. I go to Nokia and embedded systems and UI design are now relevant. I come to Microsoft, and find Information Retrieval, Machine Learning, Pattern Recognition, NLP as relevant subjects.

In short, finally, I concluded that, to be a good software engineer, you need to be good at all courses! But good news is, there is no hurry. You need to be a good thinker and need to know one language (say Java) to get a job. You can become good at rest on the job.

These courses alone cannot make you a good software engineer. Developing good software is equally an art as it is an engineering “discipline”. This is an interesting field where we are trying to fit an art form (as painting) into a step by step method (as in an engineering discipline). There will still be scope for creativity. So, just like teaching, you will succeed in software development only if you have the passion.

With India becoming a big exporter of software, the opportunities are plenty. The work is cool. Work environment is amazing with air-conditioned offices, latest gadgets, brilliant minds and amazing innovations. Add travel, money and monthly outings to this. What stops you from becoming a software engineer! Why not be excited!!

Things not going your way? Feeling depressed?

When the goals are shallow, depression is a typical consequence. Define success in such a way that it keeps you occupied for life. Do not keep a deadline for success.

Let me elaborate. Ask yourself, what is that you want to achieve in life. Look around. Understand the problem that attracts you. You come from financially deprived family. You perhaps want to eradicate poverty, or at least ensure that there are no more youth like you who is suffering for wrong reasons. Start thinking what you could do to solve this issue. It is a journey. It is not one step that you need to take. Commit your life for one such goal. In the meanwhile, you need to do a variety of things. You need to sustain yourself first. You need a job. You need a family. You need to keep your family safe and happy. You need good friends. For this to happen, you need to be mentally and physically strong. So, invest your time in all these things. You will quickly realize that getting a job is a small piece of a much bigger problem. The nature of the job only matters if it is somehow connected to the problem you want to solve.

Alright, having a goal for life and the pursuit to achieve it will keep us away from depression. It will keep us busy. It will bring joy and prosperity. But, this is not all. We need to deal with the intermediate small problems. The problem at hand is to find a job that helps you to stay healthy and reasonably wealthy. The mantra here is to be a good thinker, actor and producer.

Let me elaborate again. The common mistake we do when we look out for jobs is to see where the crowd is moving towards. Everyone is going to a call center does not mean that is the only place available for work. For example, consider teaching in a small school. It will pay you at least 20k and will help you lead a good life. It will force you to be a good communicator. It will keep you active by standing and walking for most parts of your day. There are many such jobs – administrative jobs in colleges and companies are another option. We have been trained to stop thinking from our early school days. For example, one of my teachers used to reprimand me for asking questions. She does not like anybody to ask question. So, gradually, students became 1) memorization machines and 2) follow-the-crowd ants. Get out of this mode. Find the right job. Do not spoil your life to get into one wrong job which is not working for you. Thinking deserves at least two more pages of writing. But, let us now move towards acting. I do not mean the cinama kind of acting. This is to “work”. Act. Put effort. Everyday, make a small plan on how you want to progress towards a goal. Execute that plan. Without thinking, acting will only waste your time in the wrong direction. This is what is happening with you in your UPSC and GATE preparations. You need counselling on how to prepare. Stop cramming all topics and memorizing formulae. Stop studing everything in the world. Other members here can give tips on how to study. Same applies to interviews. Write a great resume, apply to the right places and know how to ace interviews. With the commitment to work hard, there is nothing we cannot achieve. Finally, just thinking and acting is insufficient to a happy life. Start producing results. If you are not producing results, make smaller objectives (towards the same big or intermediate goal). Try to achieve them. If you still cannot, make it even smaller. If you cannot achieve anything, there is something wrong with you. Go back to the first step. Think.

We have one life. One opportunity to experience. Your situation is unique. Your experience will be unique. Make it useful, not only to yourself but to everyone around. Cheers and good luck.