Ever since I started programming, I have always wondered how challenging it is to guarantee
bug-free software. Little did I know that concurrency would take this challenge to a whole new
level. The uncontrollable non-determinism associated with concurrent programs piques my
interest in particular. Having been exposed to some of the problems and state of the art solutions
in related fields, I have streamlined my research interests in Software Reliability, Parallel
Computing, Operating Systems Security and Fault-tolerance in Distributed Systems.
I learnt the efficacy of static analysis in program verification, with a project aimed at detecting
deadlocks in C# and Java libraries. A deadlock can occur when the library APIs are used in a
particular order to compose concurrent software. I implemented a technique under the guidance
of Prof. Dinesha at IIITB, to find cycles in a method invocation graph in order to uncover
potential deadlocks. I found that adhering to certain coding standards can greatly reduce the
occurrence of concurrency bugs, especially deadlocks. A major challenge I faced was to get rid
of false positives; however, I found it to be an inherent limitation of static analysis in general.
These limitations motivated me to build a concurrency testing tool using dynamic analysis
techniques, as part of a course on Software Testing instructed by Prof. Chandrashekar
Ramanathan. I addressed two major issues: first, validation of specific execution schedules (a
sequence of thread interleaves) which could result in race conditions; and second, reproducibility
of Heisenbugs. I was inspired by Microsoft’s CHESS which systematically generates execution
schedules using model checking techniques. I found that a majority of races occur due to
incorrect enforcement of synchronization operations, or the lack of it. Since most of them
involve three or less threads, a close inspection of certain portions of the program could in fact
help identify potential race conditions. Therefore, I built a graphical interface to intuitively create
execution schedules between two threads; validate, save and replay those schedules. I
implemented a breadth first search technique to automatically generate execution schedules
which although is a naïve approach, helped me appreciate the scale of the problem. An
interesting idea in this direction could be to break down large programs such that a CrowdSourcing marketplace can be leveraged to identify erroneous schedules.
I found that reliability could be a daunting challenge even when a software is only being
modified to improve its performance; for example, optimizing for a multi-core processor. I was
faced with a similar challenge in a project aimed at exploiting data parallelism in SELinux using
a Cell Broadband Engine (CBE) processor. I implemented an SIMD (Single Instruction Multiple
Datasets) technique under the guidance of Prof. Shrisha Rao at IIITB, to optimize the decision
making logic of SELinux. I used a CBE powered Sony PS3 console to empirically measure the
performance of my approach under different conditions (e.g. number of cores, security policies,
etc.). I realized how problems can be quite inter-related; for instance, improving software
efficiency could compromise certain aspects of its security and reliability. Therefore, I believe a
holistic interdisciplinary approach be adopted to address these and other open problems.
I learnt the interdisciplinary nature of modern day research while working on my final
semester Master’s project. I worked with a senior research scientist, Mr. Praphul Chandra at
Hewlett-Packard Labs on the problem of influential detection in social networks. I devised an Page 2 of 2
efficient algorithm based on iteratively pruning the network and using the greedy approach for
maximizing sub-modular functions. I evaluated its performance on real world datasets, and
showed its potential to offer performance guarantees with a proof of sub-modularity of the
influence spread function. I also learnt the difficult obstacles of doing research when I had my
paper rejected in a conference. Nevertheless, I diligently reworked on my paper and received a
strong accept along with a nomination for the best paper award from an internationally
competitive conference.
Although I kept myself engaged in several projects, I also made sure to give equal importance
to exams and coursework. This is something I learnt from my undergrad experience, where I
ended up spending a lot of effort on projects and pursuing my interests in programming. It did
help me gain considerable hands-on and problem solving skills, but it also resulted in less than
ideal grades in few of my undergraduate courses. However, throughout my Master’s program I
was determined to excel in all aspects of academics, which is evident in my all-round
performance.
Since graduating from Masters in July 2011, I have been working as a Software Engineer for
Hewlett-Packard Company. Some of the areas I have worked on include: information
dissemination in social networks, prediction markets, referral mechanisms and result aggregation
in crowd-sourcing. I have learnt a key aspect of industrial research is to quickly build prototypes
to estimate the feasibility of new ideas before deciding to proceed further. In addition, I present
research papers to my team in order to expedite the process of literature survey in our projects.
My current roles at workplace have further reinforced my interest for a career in research.
In the long-term, I see myself leading industrial research projects, teaching, mentoring and
collaborating with research in academia. The Ph.D. program in Computer Science at the
Columbia University is a perfect match for my aspirations. I find the program well-structured to
accommodate five core courses and devote more than fifty percent time to research within the
first two years. I am also eager to acquire inter-personal and presentation skills through your
program’s exposure to community service and teaching. My biggest reason, however, is your
faculty and their highly practical approach to research.
I am particularly interested in the research carried out by Prof. Junfeng Yang, Prof. Roxana
Geambasu and Prof. Jason Nieh; and some of the projects at their Software Systems lab (SSL). I
had a brief email interaction with Prof. Junfeng Yang, expressing my interest to work with him. I
have read quite a bit about his work on Software Reliability and his projects on deterministic
multithreading systems (Tern, Peregrine) and detecting process races (RacePro). I am confident
I will be a good fit in his current research agenda. I am also quite fascinated by some of the novel
research projects on In Vivo Testing and Societal Computing being pursued by Prof. Gail Kaiser.
In addition, I am willing to explore some of the emerging areas in Social Networks with Prof.
Augustin Chaintreau. I believe my unique interdisciplinary background and solid research
experience will prove to be an asset to your department.
Thank you for your time. I look forward to a challenging research and academic experience
through your Ph.D. program.
2nd October, 2012