Ravi Mohan's Blog

Thursday, April 19, 2007

A Rogue Researcher's Route Map

One of my resolutions for this year is to make the transition from coder to researcher. While the journey is still very much ongoing and the end point is very far away, I believe I have a sufficient number of bruises from falling into pits (and the callusses from digging myself out of them) to make a few notes that may help illuminate the first few miles for anyone attempting a similair journey.

One of the problems of "doing research" is that it is mostly undertaken in the context of somone undergoing a PhD or other academic program. There are really no guides for the non-academic researcher who wants to do research for the fun of it or as an adjunct to his day to day work. Most of the online 'guides for the perplexed' assume you have been admitted into a stellar PhD program. This advice is useless to someone who is not in academia.

What follows comes from my experience in trying to scale the walls of research. I believe that a formal academic program is the best way to acquire research skills. If you can manage an MIT PhD, go for it. But I also believe one can contribute to the sum of human knowledge without that background. I believe I can more or less do anything I want to. I am kinda stubborn that way. So take all my advice with a mountain of salt.

What follows is written for the non academic researcher, working part time. Those in a full time academic program have much better resources and don't need my ramblings.

With all those caveats in mind, here goes,

  1. Be sure you want to be a researcher. And why.

    The answer to "why" is intensely personal. You have to find your own answers.

    I want to be a researcher because I want my working life to be intellectually rich. Enterprise programming is too boring. Back when I was building the umpteenth banking/retailing/insurance/leasing app, I found I could coast too easily and work with maybe 10% of my ability and still keep up with some of the best programmers in that space (Most of them were working at 10% capacity too. This led to endless "losers club" sessions. Some of them sold out and became project managers. And got more frustrated. Others just got frustrated).

    The nature of the work (at least the variety that washes up on the shores of the Great Outsourcing Destination), is an endless repetition of a few mundane tasks. The complexities of enterprise software are in my opinion arbitrary. Too many snake oil methodologies, not enough deep thinking. Lucrative, yes. Stimulating, no. In a nutshell, I was bored stiff.

    I actually like programming. I enjoy reading technical books. I read technical (and these days mathematical) articles or books on a plane jouney or just before sleeping. I chose programming as a career because of the intellectual challenge inherent in it - that a good chunk of it ended up writing horribly boring enterprise software is a tragedy we won't delve into. At least in the future, I would like my working life to consist of wrestling with significant problems, not assembling api's like a jigsaw puzzle to create systems that I don't care about. (hey if you like enterprise software , good for you. I don't. Please don't fill my mailbox with whiney comments about how Banking apps are really uber cool).

    As Douglas Comer says in his article (after a lot of warnings about not getting into a pHd Program for a the wrong reasons),

    "If you have the capability and interest, a research career can bring rewards unequaled in any other profession. You will meet and work with some of the brightest people on the planet. You will reach for ideas beyond your grasp, and in so doing extend your intellectual capabilities. You will solve problems that have not been solved before. You will explore concepts that have not been explored. You will uncover principles that change the way people use computers."

    I want all of that. I'll probably go through a PhD sometime in the future but think a lot of what Dr Comer outlines is well within the grasp of a dedicated individual with good programming skills and access to the internet (well, perhaps not the "work with the brightest people on the planet" part, unless you consider collaboration over the internet "working with"). I can live with that.

  2. Do the groundwork.

    This is avery hard step for someone who is working in the industry vs in academia. There is almost always a substrate of very technical (and often highly mathematical) material you have to digest before you can comprehend (leave alone work in) research areas. My interests are (broadly) in Artificial Intelligence (more specifically Machine Learning) and Compilers and Programming Language Theory. The former calls for a good grounding in Calculus, Linear Algebra, Information Theory and Algorithmics. The latter needs a good grasp of things like the (typed) lambda calculus and Automata Theory.

    Theoretically if you've gone through an engineering or science Bachelors degree (BTech or Bsc, particularly in Comp Sci), you are supposed to know a good chunk of that. Anyone who has done a Bachelors in India (excluding the IITs and IIScs) knows that most people study this stuff 2 days before the exams (which are too often memory oriented) and forget everything two hours after the exams.

    For those who doubt this, I suggest the following experiment. First get a moderately tough problem in say Calculus or Probability. Find someone in your office who has graduated from an Indian university in Engineering or Science with a good GPA . Ask them to solve the problem. Enjoy the reaction. Contemplate the fact that an "engineer" (or "scientist") is ignorant about Calculus.

    Indian technical education very often consists of memorizing formulae without getting an intuition for the concepts behind the formulae. Un(?)fortunately ,to work in research one has to understand the underlying math or science.

    Working in Enterprise Software makes this situation worse. In spite of the Industry's endless thirst for Engineering and Science graduates the cold hard fact is that you very seldom use any science or engineering when you work on the typical Insurance or Banking web app. You end up endlessly churning APIs (ORMs, Rails, hibernate blah) and methodology artifacts (e.g uml diagrams or storycards) and (more often than not) fitting chunks of horrendous code together with spittle and prayer. Work on such systems long enough and you forget what little you retained from those years of education.

    It took me amost two and a half years (after leaving that "enterprise" job) to acquire the background skillset. It may take you less time. But it will take some time. And if this time is spent in adition to your 9 to 5 job, be aware that this part of the work is a very very lonely path.

    You've achieved the necessary skill when you can read a paper from a contemporary journal or conference in your field, like you'd read a news paper article or a requirements document. Another milestone is when you lose your fear for mathematical notation and proofs :-)

  3. Find interesting problems to work on

    This is the toughest step for a non academic. You literally have no starting point, no end point and no route connecting the two . As my friend Tejaswi (an MTech from IIT btw)confirmed in a private conversation, most Masters degree theses are suggested by the "guide" professors who oversee your work. Even for PhD students, who are expected to do a lot of unsupervised work and thinking, the input of these guides is a vital component of problem selection. Rightly so. You can save humungous amounts of time and effort if someone knowledgable points you in the right direction.

    But what do you do if you are not an academic but still want to do research? You have no "guides". Talented researchers have tonnes of work already and are too busy to respond to whiney emails from wannabe researchers, so how is a poor ex-enterprise coder to find significant problems?

    Here are some things that worked for me.

    1. (Once you've got a grip on the fundamentals) Work through the core textbooks in your chosen field with a particular focus on working through (and coding up) the end of chapter exercises. Every field has a set of "core books" written by the some of the best researchers in that field. Find a suitable undergrad text and get to work. (For AI, Artifical Intelligence , a Modern Approach is an excellent choice. For compiler theory something like TAPL or EOPL would be a good starting point).If you are diligent, you'll eventually go beyond these books and start working through graduate texts. Once you've got a couple of grad level texts under your belt, you are ready to find problems.
    2. Read contemporary papers.

      This is the KEY step to finding problems. Most (good) papers have a "work to be done" section which is a rich source of problems to attack. Most papers and conference proceedings are onlinethese days.All hail the Internet!

    3. Discuss your research with folks who are doing similair things. In a city like Bangalore, this is fairly tough, because most of the software "hackers" are doing cheap labor, not research, but maybe your uncle is a professor in one of the IITs or your cousin works in the ISRO (indian Space Research Organization, for those who don't know). Talk to these people. In my experience, they are glad to work with someone who is genuinely interested. If all else fails (shamelessly) tap your friends who are working on their Masters or Phd or post-doc degrees.
    4. Start a research notebook to record your thoughts and activities.

      I have found this practice VERY useful. As would a blog ( a private one is better imo) to record your daily progress(or lack of it). The habit of taking small steps daily (or biweekly or whatever) is very important.

    5. The essence of "finding a problem" is to ask a question that (a) hasn't been asked before and/or (b) has no answer yet. research is all about finding answers to these questions. Put like that, it doesn't sound *so* hard does it? (yeah well it DOES sound hard .. :-P )
    6. Be self directed.

      This is a KEY personality trait. In mosts corporate settings you always have someone telling you what to do, (by) when to do it and sometimes how to do it. This is similair to a Masters course. A PhD student has to be much more self directed , but he still has deadlines and guides and colleagues. Someone working alone, in his spare time has none of this. Unless you have iron discipline and can work steadily over long periods and tolerate boatloads of ambiguity, you might as well not start. Life is too short.

  4. Once you find a significant problem you need to solve it. And then publish the results. I don't have any advice to give on these steps because I am still working on my first research problem.

    However I am making steady progress. Some of the best people in the field have expressed interest in seeing how the results turn out. My research notebook is filling up nicely. I write code every day. So hopefully in about 3-6 months I'll have something to report. Watch this space.

Once you have some results you have to somehow publish them. I don't know how the academic publishing process works. I don't care. I am not trying for tenure. I just want to solve some problems and "advance the state of knowledge" . I guess I'll just publish my results on the web. I am not saying publishing and peer review are not important. I just don't know how a lone researcher can achieve this. No clue. Zip. Zilch. Nada.

So is it all doom and gloom for non academic folks who try to attack tough research problems? Not really. One weapon you have and most academics don't is your skill in programming. Most academic code sucks BIG TIME. Most of the code behind that brilliant thesis is an unmaintainable, horrible tangled mess (most academic papers don't have links to the underlying code for just this very reason). If you can use your computer as a power tool and write well designed, maintainable, tested, documented, industrial strength code, you will have an edge(a very very tiny one but an edge nonetheless) over folks who've never worked in the sofwtare industry. And if you have workd in a leadership osition in a commercial organization (think PM, Architect, Project Lead), your communication skills (both oral and written) are likely top notch. This should help tremendously.

And that's all I have. Hopefully some of that advice will help you to avoid some of the common pitfalls that beset the rogue researcher.

10 comments:

Vladimir Levin said...

Ravi,

Perhaps you've answered this question in your blog before, but if so I can't remember. While I am sure it is possible to learn about your field of interest in the way you've described, my big questions is "why?" If you get into an academic environment, you'll have a lot more time to dedicate to your chosen field. I'm sure there must be some decent programs in India and of course Europe and North America all must have some pretty good problems. Places like MIT Caltech, and various Ivy League schoos are well known for their famous engineering programs, but there are lots of other schools that may not be famous but which may occupy a niche in which you could do some cool research with some bright people. I thin you should redirect the energy you've been spending on doing research part time into finding an applying for suitable programs. My girlfriend recently received a grant to do her psychology PHD. She'll be getting tax-free about 36k in Canadian dollars a year for 3 years - and that's just for her basic living expenses! That a perfectly decent (albeit lowish) middle-class income here! As a foreign student, you may not have quite as easy a time, but I am sure something can be done if you put the time and energy into it. I'm sure there are professors out there who would go out of their way to bring someone in who is clearly as passionate as you have been and has demonstrated so much self-motivation rather than just coasting from one program to another.

Emperor said...

This comment is related to a previous post of yours. My apologies.

http://ravimohan.blogspot.com/2005/08/apprenticeship-pattern.html

You mention "Book chain" as the 1st pattern. Do you have others "patterns" for apprenticship?

Ravi said...

Vladimir,
I do plan to apply for a formal academic program later, but till then, this "rogue" approach gives me something to do. I don't see these (non acdemic vs academic research) as mutually exclusive but rather as different points ona temporoal continuum).

I am glad to hear that your girlfriend got a good admission. Way to go!

@emperor,
No.

Anup said...

Ravi,
Do you have any online resources that you use for research - other than google...Could you post them if you do as a blog post, if possible?

Thanks

Ravi said...

Anup, I've seen the word"research" used in two forms

1)"research X" == find info about X . Google still seems to be the best way of doing this. High school students in particular seem to use the word this way. Suppose I want to find some inf about (say) Marcus Aurelius, the Roman Emperor. Just type "Marcus Aurelius" into google.

2)"research in X" - were x- AI etc. This is wher eone is trying to solve problems/ come up with new things etc.


I am not sure what you mean by "other than google" (or even "google") for this meaning.


I have no special search engines or strategies if that is what you are asking.

Anonymous said...

Click, Click..

Hello again, my wise friend..

This article caught my attention, and I soon realized that Ive been here before...

I like your thoughts on research.

I believe research can be done in two ways.
One - Just to let others know that your into research.
and the Other, To really "RESEARCH" into something :), having no other motive but curiosity...

Forget the former, those are "mostly" losers. The later form the true creative gems this world has produced..

Go for it my friend...

So long ... Click, Click..

Bosky said...

brilliant post !

i'd like to see myself contributing to academic research someday . and i would like to make shift as natural and gradual as possible.and thats one of the reasons why ive joined a startup.

The point about having some level of minimal theoritical knoledge on how to read a paper and go 'ah!' cannot be highlighted enough .

The good news is that i feel i am progressing in the right direction 8 )... hows your notebook,and research going btw ?

Keep Clicking,
Bhasker

Anup said...

Ravi, I meant it in a sense of something that helps you with research on a particular subject in terms or either content or discussion forums of such. Or do you stick to books and maybe personal contacts?

Ravi said...

@Anup
no there is no special online resource strictly pertaining to research if that's what you are asking.

Mridul said...

One of the BEST blogs I have read! Excellent.