One must have good tools in order to do a good job. - c. 479 BC – 221 BC, anon., Analects of Confucius (工欲善其事,必先利其器)

Below are tools and working style in my lab. However, I am not too stubborn to make change. For example, I use Micro$oft Word with medical doctors who have no experience on LaTeX.

Natural Language

English is currently the world language of science. So I write papers in English. My mother tongues are Nankinese and Shanghainese, dialects of Chinese. I also have a bad habit of mixing English with Chinese and German in my sentences. Recently, I picked up a little bit Dutch which I found interesting when compared with English and German.

Basic working styles I prefer

  • Always discuss before moving forward. Keep research transparent. This also includes asking me any questions if you don't understand me.
  • As a believer of Open Data, Open Source and Open Access, I want my research to enrich the public domain of human knowledge. "Human knowledge belongs to the world." - Antitrust

Operating Systems: I am a Linuxer.

I do not like Micro$oft Windows. 

"A player that makes the team greater is more valuable than a great player." Numerous scientific software applications, from bibliographic management to parallel computing, are widely used on Linux (or Mac OS X) seamlessly. Windows does not provide such a good environment. And Linux is fast.

I aggregate some Linux usage tips at my Linux page.

LaTeX for writing papers: I am a TeXnician

We are writing papers. So focus on the wording, rather than typesetting. IEEE, ACM, Springer, Elsevier, PLoS, etc., all provide LaTeX style for their publications. Change tracking (I use latexdiff) on LaTeX can be fancier than using WYSIWYG editors, e.g., LibreOfficer Writer or iWorks Pages. Recently, I noticed LyX as a good tool for latex writing. Check out these beautiful scientific illustrations generated by LaTeX at StackExcange.>/a>


Research-critical issues are discussed in Email as everyone can keep a track on it.

Skype, Google Talk, and Google+ Hangouts with extras are used for teleconferencing.

Scientific Computing and Programming

I prefer two programming languages, Python and MATLAB. And I prefer Python over MATLAB. I also use C or C++, if speed really matters.


I use Linux and Sun Grid Engine to build/employ Beowulf cluster. No other platform is better than Linux for building a cluster.

Python: I am a Pythonista

Python is an open-source programming language with tons of modules available for scientific computing now. It's syntax is super easy - you only need two nights to understand it. You can focus on implement your computing scripts rather than the language itself.

Another reason I use Python is its support for literate programming. If you follow the ReST syntax, you can use Sphinx, a automatic document generator developed by Python team, to generate fancy documents, into both PDF and HTML.

There are two PEPs related to Python and Docstring in Python. Please follow the specifications.


I don't want my collaborators to waste time on learning Python if they can do well in MATLAB and learning Python is too difficult for them. A great benefit of MATLAB lately is its parallel computing ability, on multi-core CPU's and clusters. Plus, MATLAB can automatically parallel many operations.

Using MATLAB at remote networking condition (e.g., no GUI):

Software Version Control

I use Git, which is really simple. It won't take you more than 1 minute to use it.