From charlesreid1

I Use This At Work

Who are you, at work, and what do you do?

I'm Charles Reid, and I'm a chemical engineering Ph.D. working at Siluria Technologies, a startup firm in San Francisco. My company is developing technologies to turn natural gas into commodity chemicals through the transformation of methane using catalysts. My role in the company is a research engineer: I create mathematical models for the catalytic reactor, and to write computer code that turns those mathematical models into predictions about what will happen when we scale up our reactor to a commercial scale. I also help formulate mathematical/computational models for other important phenomena, like autoignition. This puts me in an unusual position in the company: with the exception of my projects, the research efforts are entirely experimental.

What this translates into, as far as day-to-day activity, is:

  • Writing computer code (I use Python almost exclusively)
  • Developing proficiency with Python libraries like Cantera and Fipy
  • Analyzing and discussing data with experimentalists
  • Reading scientific journal articles and books about different modeling approaches
  • Writing reports detailing progress and results

Who taught you to do what you do?

My work requires two sets of skills, both of which have to be blended together.

The first set, chemical engineering, came from a university education. Getting an Bachelors degree and a Ph.D. in chemical engineering required unscrewing the top of my head and dumping in a bunch of knowledge. An undergraduate degree in chemical engineering gives you an introduction to the fundamentals of chemical reactions, thermodynamics, and material and energy transport; a Ph.D. requires you to pick one particular field, and apply all of that fundamental knowledge, to obtain a very deep and very nuanced knowledge of every facet of your extremely limited topic (in my case, coal combustion and gasification).

The second set, computer programming, was entirely self-taught. Though I learned my first programming language in 2004, I didn't actually use it much in my undergraduate engineering curriculum (one of the few complaints I had about the University of Arizona's undergraduate chemical engineering program, which was an excellent program). I began my graduate school experience by taking a class on computational fluid dynamics, which is a colossal mistake for anyone who doesn't have a solid grasp of programming, particularly anyone who doesn't have a solid grasp of whatever language is being used in the class, which in my case was Matlab. I had to do a lot of pulling myself up by the bootstraps. Once that semester was finally over, I kept digging. I set up and administered a web server for our group, I started building and running codes on supercomputers, and I even got my hands dirty helping to assemble a brand-new supercomputer.

In any engineering Ph.D. program, your level of programming experience and computational knowledge is entirely self-directed. There were people in our group who couldn't tell you what Emacs is. There were other people who taught me some way cool stuff, like how to run GDB through Emacs and step through source code one line at a time in a text editor. I quickly established myself as the computational whiz in the group. On supercomputers, I could identify and fix problems compiling code or diagnose MPI communication errors about as fast as the technical support could. I experimented with new C++ libraries and wrote Python scripts to manage supercomputer jobs. I set up my computers to dual-boot Linux, I swapped out hard drives and memory, and I even put together and ran a Scientific Computing Summer Workshop 2010. I also set the curve with software, discovering and sharing new things. I shared Doxygen, software that automatically generates documentation from source code, and started actively implementing it in the code base for our research combustion code. When I first discovered Evernote software for note-taking, I shared it with the group, and it became widely adopted.

This taught me the all-important lesson of patience. When I started out with *nix systems, I had no idea what I was doing. I needed a lot of hand-holding. The whole thing seemed extremely confusing and a lot more trouble than it was worth. But now, several years later, I'm the one doing the hand holding and scratching my head at questions that would be a lot less awkward and confusing if the author only knew the right place to look or the right words to interpret the documentation. Programming has really changed (for the better) the way I think and the way I see the world, and my experience makes me want to share that perception shift with others.

What hardware do you use at work?

My primary work computer is a 17" MacBook Pro (made in 2013, whatever that means). I have a regular-height desk, but I also use a cheapo stand-up desk.

For more computational firepower, I use a 32-core (each core is a 64-bit Intel Xeon 2.1 GHz) Ubuntu server with about a terabyte of space. This server can and does host repositories, project web pages, wikis, etc.

What software do you use at work?

Software Quality Assurance:

Reports:

  • LyX and Latex
  • Custom-written technical report class

Data visualization/analysis:

  • CSV files are king
  • JMP
  • Python
  • Avoid Excel like the plague

Python libraries

  • numpy/scipy
  • itertools
  • Cantera
  • Fipy
  • Pandas
  • JSON
  • MongoDB sometimes

Describe your dream working environment

I Use This At Home

Who are you, at home, and what do you do?

What hardware do you use at home?

  • Netbook
  • MacBook Pro
  • Microphone
  • Stand-up desk setup photo

What software do you use at home?

Unix:

  • vim
  • Macvim


  • Quicksilver
  • Latexit
  • Omnigraffle

Web:

  • PHP, MediaWiki, WordPress
  • GitHub pages Octopress

What is your dream setup?

I Photograph This

Who are you, in your photography, and what do you do?

What influenced you the most?

What photography hardware do you use?

What photography software do you use?

What is your dream photography setup?

I Read This

I keep a list of books I've read since about 2007, along with reading notes, over here: My Reading List

Who are you, and what do you do?

What books influenced you the most?

Fiction Books

Non-Fiction Books

What book would you like to write?

There are actually two books that I'd like to write:

An Instrumentalist Approach to Validation: A Philosophical Framework for Computer Simulations

My dissertation, which was about 400 pages and is available on my website, was the closest to writing a book that I've come so far. My dissertation created a philosophical framework for validation - that is, assessing how well a model represents reality - which I called "instrumentalism" (following Ernst Mach's philosophy of science of the same name), and delved into topics like epistemology (the theory of knowledge), and how we can (and can't) synthesize knowledge using computer simulations. I applied the validation framework to a coal gasification simulation code that was run on thousands of processors using the Hopper supercomputer at Lawrence Berkeley National Laboratory.

Cantera for Reaction Engineering

Cantera is a really useful library for chemical kinetics and thermodynamics calculations. I use it daily in my work. I would like to write a book that gives the reader an introduction to Cantera, shows how to apply it to the subject of reaction engineering, and covers the use of object-oriented, Pythonic programming patterns/techniques to get the most out of Cantera.

This one is underway, I've got some notes over at the Cantera Outline page and I recently created a cantera-book GitHub repository to host materials for the book.