A taxonomy of Computer Science researchers

As a kid, you are told that scientists follow the scientific method. They come up with an hypothesis, and they try to falsify it. You also learn about engineers who solve practical problems using science. Later, you learn about induction and deduction. Some researchers collect evidence and derive general rules (induction); other researchers start from the laws of nature and compute models to explain specific phenomena (deduction). Both of these dichotomies (science/engineering, induction/deduction) fall short of classifying the researchers I know.

Apparently, I am not alone. According to Julian Togelius, Machine Learning is neither science nor engineering:

Most of what I do is pretty far from being useful or even reliable. Instead I think of myself as an inventor, practicing blue-sky invention of algorithms and toy applications without direct economic pressure. (Julian Togelius)

There are many research models and no satisfying taxonomy. Nevertheless, I made one up:

  • The specialist: he has invented or perfected one method.
  • The perfectionnist: he improves existing methods.
  • The practioner: he solves real problems.
  • The algorithm designer: he invents a new and better algorithm.
  • The system designer: he builds new prototypes.
  • The hardcore theoretician: he solves hard mathematical problems, for their own sake.
  • The practical theoretician: he picks up on what is found useful and analyzes it.
  • The advocate: he promotes a particular technology.
  • The politician: he networks.
  • The educator: he writes readable research papers.
  • The librarian: he writes reviews, citing 150 papers.

What do you think? Which researcher are you?

I am a practical theoretician. When I come up with a new algorithm, it is almost always by accident. I also do not care to solve problems for their own sake. I also hate to build systems for their own sake. I am not even interested in coming up with something new! But I am interested in understanding why things work. I build prototypes, I study them, try to find interesting and strange patterns.

Published by

Daniel Lemire

A computer science professor at the University of Quebec (TELUQ).

8 thoughts on “A taxonomy of Computer Science researchers”

  1. I’d classify myself as a System Designer. I’m very comfortable designing systems and implementing them, rather than working on algorithms/proofs.

    My advisor Prof. Marianne Winslett likes to say, “Solutions in search of problems” should be avoided, i.e. elegant solutions just for the sake of their own beauty, may not have an impact, unless we can relate to a real-life problem.

  2. Herbert Simon’s book The Sciences of the Artificial is very relevant to this discussion. His analysis of the historical interaction between the development of the steam engine and the development of the physics of thermodynamics is quite interesting. I think the computer is much like the steam engine and the theory of computational complexity is much like thermodynamics. I view myself as a person who tinkers with steam engines (James Watt) rather than a theoretician of thermodynamics (Sadi Carnot).

    I don’t think I fit comfortably in any of your categories. My goal is to make a useful contribution to research in AI. My method is test-based. I search for or create a test that I believe captures an interesting and important aspect of intelligence, and then I tinker with algorithms until I have something that performs reasonably well on the test.

  3. Good Taxonomy.

    I found that computer science researchers around me are of many of those attributes instead of having only one. I met some cs researchers that network AND advocate. I met some cs researchers that educate and do hardcore research. I guess usually researchers are not exactly in one category, instead, they do all different things.

    I know a professor, he is a librarian when writing proposal, he is a hardcore theoretician for conference A, a practical theoretician for journal B, and a politician for community C. I think he is the typical kind of CS professors I meet everyday.

    For me, I am an advocate for Linux, an algorithm designer for some problems comes from communities other than cs, an politician (such a notorious title) in good conferences.

  4. A good idea, and a good taxonomy, if we accept that most researchers would fall into more than one class.

    I’m an algorithm designer, but some of my best papers are more on system design (depending on how liberal your definition of an algorithm is); I also half-heartedly aspire to be a practitioner now and then. In terms of what I spend my time on, I’m to a not insignificant part a politician and maybe an educator.

    Actually, the only thing I’m sure that I’m not is a theoretician.

  5. If I understand this post correctly, you are using this taxonomy describe the underlying view a researcher has when approaching a new problem. Of course we are all librarians when it comes to writing grants, and we certainly strive to be educators when it comes time to write the papers.

    So then a researcher might try to design new algorithms motivated by new practical considerations and demands, but that person is still primarily an algorithm designer. Such would be the case for me.

  6. Daniel, I think you should call this a folksonomy :), not a taxonomy. Then we can just tag ourselves, and run tag clouds 🙂

  7. I think most people would have what in industry is called T-skill, very deep in one but knowledgeable in several. If one can be a very good practitioner and still be able to do some theory and design some algorithms, it would make for a well rounded person. Ofcourse, wellroundedness may not always be preferable (in research or in real life)

    I wonder what is a good distribution for an organization (either a university or an industrial research lab) to have ? It would be interesting to classify researchers in a university or industrial labs according to this taxonomy and study if there is a correlation between the distribution and the ranking of the university

Leave a Reply to Yisong Cancel reply

Your email address will not be published.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

You may subscribe to this blog by email.