How to Title Case?

Most conferences, especially the ACM conferences which I write to, suggest that we use title case for titles and headings.

There seems to be no agreement on what is right way to title case. Turns out that there are several styles such as the APA, Chicago, AP, MLA and so on.

The best way seems to be go with the site. Check the APA and Chicago style for your title. Use a title where both these styles agree. For instance, I wanted to title “Code Variants and their Retrieval using Knowledge Discover based Approaches”. I figured out that the APA and Chicago version after title casing this statement is, “Code Variants and Their Retrieval Using Knowledge Discover Based Approaches”. So, I went with it.


Correctness, Precision, Accuracy – What is the difference?

Correctness and completeness are typically used to evaluate software quality. The idea can be extended to just about any task. Correctness usually reflects if the program works as expected for all test inputs. Completeness refers to the availability of all features requested as per the requirement. In software testing parlance, a program is required to be correct and complete to the best extent possible.

This terminology sounds strikingly similar to precision and recall. In the Information Retrieval community, precision is defined as the fraction of relevant results retrieved over all the retrieved results. Recall refers to the fraction of relevant results retrieved over all relevant results found in the system.

In our research work of ANNE, we tag code snippets with natural language phrases. For example, “[ ]” is tagged as “array”. In this context, instead of the information retrieval terminology of precision, we chose to use “correctness” for the tagging task. It was more intuitive since we are not searching for anything here. Similarly, completeness refers to the fact if all entities are discovered and tagged. It makes more sense over recall.

Machine Learning community, especially the classifier builders use “Accuracy” which is not exactly the same as a combination of precision and recall, say “f-score”. Let us say that you are developing a binary classifier to predict if a tumor is malignant or benign. You would calculate accuracy as the fraction of the number of correct classification over the entire set that was classified. This sounds exactly like precision. The only difference is we do not have a restricted set of results. For instance, there is no Accuracy@10 like we do with precision@10.

I believe, the ideas as similar. Terminology is different. Depending on the task at hand, we apply our best judgment to select the most appropriate measure.

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!

Fibonacci Numbers

Many times, we get an illusion that we understood something. Fibonacci series is a classic example. Almost everyone who looks at the series 0,1,1,2,3,5,… would consider this way too simple enough and assume that he understood it. Real learning is in asking deeper questions. If it is that simple, why are we learning it? Now that I know, how to use this knowledge? What kind of problems can we solve? Does this connect to something else? Here’s an attempt to answer all these questions. Look at learning as a problem solving exercise. With every new knowledge you gain, you become a little more valuable.


Now we have the tool to answer a wide variety of questions. What if there were three type of bricks (say, short, long and double :-)) or, what if we had 20 slots? Enjoy Computer Science.

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.

The Devil Named Masters Thesis

Masters Thesis introduces you to serious research. The purpose is to expose you to the tasks associated with research. It is a training to help you appreciate the steps like finding a problem, scoping the work, conducting a literature survey, studying related work, conducting experiments, devising algorithms, implementing your ideas, conducting comparative evaluation and finally being able to convey all this well to both novice and expert audience.

The specific field or the problem you choose to solve is not very important from the perspective of this training. The focus througout should be to get trained for the above. The problem should not be of your great worry.

But that said, it is important to choose a problem that would set you up for success. Since you are likely to continue on similar ideas later for a PhD, you want to take up something that interests you. Even if not research, you would be asked to explain your thesis at hundreds of job interviews. So, you should be good in the related field. Many of us at this stage do not have a favorite subject. That is sad. Even if we do, it is a favorite subject mostly because we understood everything and see no problems! The way we study is such that we look for solutions, not for problems. You ask a GATE topper. He will tell you, give me any problem in ToC, I can solve it! This thinking is not suitable for research. Instead, you will now need to develop the skill to find a problem with every solution. Let us take an FSM (Finite State Machine). A very simple model, right? There seems to be nothing wrong with it. There seems to be nothing missing in it!? Think again. What if you want to add the notion of time to FSM? That led to timed automata or temporal models. Welcome to the first step of research. Finding problems in the most elegant solutions which you understand thoroughly.

Even if you have a favorite subject, and you throughly understand a part of it, and let us say, you can see possible extensions or fundamental issues with such solution for which there seems to be no alternative. The next thing is to understand if this is a problem you can solve within roughly 6 to 12 months. Given there is so much uncertaintly and lack of skills in the forthcoming steps, your estimate is going to be wrong. You are very likely to come up with overambitious problem which you will not end up solving. This is the top reason why most Masters thesis fail or get delayed.

Let us assume you managed to find a problem whose scope is very reasonable. You may be surprised to see that the solution takes you to a field which you are not comfortable with. My work on finding similarities between code snippets is now taking me to Category Theory! I had identified myself as a systems researcher so long and now, it is impossible to skip theory.

Being able to learn quickly and turn good results is something you young guys specialize in. You can live without sleep, food and easily without bathing for several days. Although I do not recommond these, the point is that your stamina and strength will take you to the solution.

If you defy all these odds and still think you are doing a good job, your Indian English with a Whatsapp accent will kill all your chances of a publication. Inspirational and Scientific writing needs a lot of practice. Most of you hesitate to write. Even after pleading and begging for comments, all I get is one or two lines from a very small subset of students here. Good luck to the rest! You will learn the hard way.

Another issue with publishing your work is related to how many people are solving similar problems. Crowded areas are competitive. Stay out of the crowd wherever possible. There are fields like Programming Language Design, Computer Architectures, Transport Layer Problems which have very few researchers in the country. Areas such as AI, ML and Data Science are flooded. Do not enter crowded areas unless you know what you are doing. One plausible reason could be that you want a job in AI. In that case AI is worth the struggle.

All these make Masters thesis “The perfect devil to beat”. At the end, you get that feeling of having learned useful skills. Yesterday, as I was listening to a Kasparov (Former Chess Champion), he said, “I like the masters of the past because they bring something new to the game”. I believe, our masters thesis is no different. We bring something new to our field. We should do such things for which we are respected.

So, let me now come to the short answer to your question. For the reasons of complexity involved, you need a good guide to steer you to success. So, in the broad areas of your interest, find the best people and get associated with them. Rest will fall in place automatically.

Am sorry for such a disappointing answer to a lovely question. But that is the best I could give with my limited knowledge. Good luck.

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.