Skills and Abilities

Skills

Chemistry and Physics

My current research consists of a combination of analytical theory development, numerical method conceptualization, and computer programming. I have a good knowledge of statistical mechanics (e.g., random walks, partition functions, Monte Carlo simulations, Ising model, large deviation theory); stochastic dynamics (Brownian motion, Langevin dynamics, Monte Carlo methods); and numerical methods useful for nonequilibrium systems such as tensor networks, transition path theory, and stochastic thermodynamics. My knowledge in quantum mechanics includes the stationary Schrodinger equation (electronic structure, e.g., Hartree-Fock, DFT, CASSCF, variational methods); the 4-component Dirac equation; and some quantum dynamics (e.g., TD-DFT, Liouville equation, density matrices).

Computer and Technical Skills:

  • Proficient knowledge of operating systems (Windows, Linux, OSX), LaTeX
  • Use of Eclipse to compile, execute, and debug Java programs; JAR files
  • Use of Visual Studio to compile, execute, and debug C++ programs; On Linux system, g++ to compile, gdb to debug
  • Object-oriented Java and C/C++ programming, pointers, structs/classes, dynamic memory
  • C++ Standard Template Library (e.g., vector, priority queue, unordered map)
  • Several other programming languages, including Wolfram Mathematica, Python, Julia, bash
  • Relational databases; SQL, MongoDB
  • Web systems, dynamic web pages; PHP, Python Flask, Javascript, HTML, CSS
  • Algorithm types, including brute force, top-down, bottom-up, backtracking/branch and bound, dynamic programming
  • ARM assembly language, floating point arithmetic, assemblers/linkers, pipelined datapaths, caches, virtual memory
  • Hamming and Reed-Solomon Codes, Turing Machines, language decidability, P, NP, and NP-complete classes, satisfiability
  • Greedy algorithms, cryptology (one-time pad, Caesar cipher, Diffie-Helman, RSA), Fermat’s Little Theorem
  • Randomized algorithms, primality testing, Monte Carlo methods, Chernoff Bounds
  • Multi-threaded programming, concurrency/race conditions, monitors (mutex, condition variable), semaphores
  • Transactions, serializability, crash recovery, logging
  • GitHub, creating/cloning repositories, push/pull, branches/merging, fork, pull requests